From 32a1b7c3794e76da456fc144fbc172e8a82d2af2 Mon Sep 17 00:00:00 2001 From: ildyria Date: Sat, 23 Dec 2023 16:44:52 +0100 Subject: [PATCH 01/25] squash --- .env.example | 4 + .github/workflows/CICD.yml | 41 + .gitignore | 1 + .prettierrc.json | 3 + .../Diagnostics/Pipes/Infos/SystemInfo.php | 10 + app/Actions/Search/PhotoSearch.php | 25 +- app/Assets/Helpers.php | 48 + app/Contracts/Livewire/Openable.php | 32 + app/Contracts/Livewire/Params.php | 17 + app/Contracts/Livewire/Reloadable.php | 8 + app/Enum/AlbumDecorationOrientation.php | 16 + app/Enum/AlbumDecorationType.php | 17 + app/Enum/AlbumLayoutType.php | 15 - app/Enum/ImageOverlayType.php | 16 + app/Enum/Livewire/FileStatus.php | 13 + app/Enum/Livewire/NotificationType.php | 11 + app/Enum/PhotoLayoutType.php | 34 + app/Enum/Traits/WireableEnumTrait.php | 35 + app/Exceptions/Handler.php | 61 +- .../Handlers/ViteManifestNotFoundHandler.php | 42 + .../PhotoCollectionEmptyException.php | 21 + app/Facades/Helpers.php | 1 + app/Http/Controllers/RedirectController.php | 7 + app/Http/Kernel.php | 1 + app/Http/Middleware/AcceptContentType.php | 36 + app/Http/Middleware/DisableCSP.php | 28 + .../Settings/SetLayoutSettingRequest.php | 6 +- app/Http/Requests/User/U2FRequest.php | 2 +- .../WebAuthn/DeleteCredentialRequest.php | 2 +- .../WebAuthn/ListCredentialsRequest.php | 6 +- .../Collections/AlbumCollectionResource.php | 19 + app/Http/Resources/ConfigurationResource.php | 4 +- app/Http/Resources/Models/AlbumResource.php | 3 +- app/Http/Resources/Models/PhotoResource.php | 75 +- .../Resources/Models/SizeVariantResource.php | 2 +- .../Resources/Rights/UserRightsResource.php | 1 - app/Http/RuleSets/AddAlbumRuleSet.php | 19 + app/Http/RuleSets/ChangeLoginRuleSet.php | 20 + app/Http/RuleSets/LoginRuleSet.php | 19 + .../RuleSets/Users/SetUserSettingsRuleSet.php | 2 +- app/Image/Files/NativeLocalFile.php | 35 + app/Livewire/Components/Base/ContextMenu.php | 78 + app/Livewire/Components/Base/Modal.php | 88 + .../Components/Forms/Add/ImportFromServer.php | 90 + .../Components/Forms/Add/ImportFromUrl.php | 107 + app/Livewire/Components/Forms/Add/Upload.php | 169 + .../Components/Forms/Album/Create.php | 104 + .../Components/Forms/Album/CreateTag.php | 103 + .../Components/Forms/Album/Delete.php | 97 + .../Components/Forms/Album/DeletePanel.php | 89 + app/Livewire/Components/Forms/Album/Merge.php | 134 + app/Livewire/Components/Forms/Album/Move.php | 127 + .../Components/Forms/Album/MovePanel.php | 111 + .../Components/Forms/Album/Properties.php | 137 + .../Components/Forms/Album/Rename.php | 93 + .../Components/Forms/Album/SearchAlbum.php | 182 + .../Components/Forms/Album/ShareWith.php | 155 + .../Components/Forms/Album/ShareWithLine.php | 83 + .../Components/Forms/Album/Transfer.php | 121 + .../Components/Forms/Album/UnlockAlbum.php | 76 + .../Components/Forms/Album/Visibility.php | 147 + .../Components/Forms/Confirms/SaveAll.php | 47 + .../Components/Forms/Photo/CopyTo.php | 124 + .../Components/Forms/Photo/Delete.php | 95 + .../Components/Forms/Photo/Download.php | 69 + app/Livewire/Components/Forms/Photo/Move.php | 118 + .../Components/Forms/Photo/Rename.php | 83 + app/Livewire/Components/Forms/Photo/Tag.php | 94 + .../Components/Forms/Profile/GetApiToken.php | 111 + .../Forms/Profile/ManageSecondFactor.php | 89 + .../Components/Forms/Profile/SecondFactor.php | 65 + .../Components/Forms/Profile/SetEmail.php | 67 + .../Components/Forms/Profile/SetLogin.php | 92 + .../Base/BaseConfigDoubleDropDown.php | 95 + .../Settings/Base/BaseConfigDropDown.php | 69 + .../Forms/Settings/Base/BooleanSetting.php | 77 + .../Forms/Settings/Base/StringSetting.php | 76 + .../SetAlbumDecorationOrientationSetting.php | 34 + .../Settings/SetAlbumDecorationSetting.php | 34 + .../Forms/Settings/SetAlbumSortingSetting.php | 56 + .../Forms/Settings/SetLangSetting.php | 35 + .../Forms/Settings/SetLayoutSetting.php | 34 + .../Settings/SetLicenseDefaultSetting.php | 34 + .../Forms/Settings/SetMapProviderSetting.php | 39 + .../Forms/Settings/SetPhotoOverlaySetting.php | 34 + .../Forms/Settings/SetPhotoSortingSetting.php | 56 + app/Livewire/Components/Menus/AlbumAdd.php | 69 + .../Components/Menus/AlbumDropdown.php | 61 + .../Components/Menus/AlbumsDropdown.php | 61 + app/Livewire/Components/Menus/LeftMenu.php | 137 + .../Components/Menus/PhotoDropdown.php | 118 + .../Components/Menus/PhotosDropdown.php | 102 + app/Livewire/Components/Modals/About.php | 56 + app/Livewire/Components/Modals/Login.php | 95 + .../Diagnostics/AbstractPreSection.php | 41 + .../Modules/Diagnostics/Configurations.php | 18 + .../Components/Modules/Diagnostics/Errors.php | 63 + .../Components/Modules/Diagnostics/Infos.php | 18 + .../Modules/Diagnostics/Optimize.php | 54 + .../Components/Modules/Diagnostics/Space.php | 51 + .../Components/Modules/Users/UserLine.php | 106 + app/Livewire/Components/Pages/AllSettings.php | 75 + app/Livewire/Components/Pages/Diagnostics.php | 34 + app/Livewire/Components/Pages/Frame.php | 113 + .../Components/Pages/Gallery/Album.php | 217 + .../Components/Pages/Gallery/Albums.php | 93 + .../Pages/Gallery/BaseAlbumComponent.php | 155 + .../Components/Pages/Gallery/Search.php | 168 + .../Pages/Gallery/SensitiveWarning.php | 60 + app/Livewire/Components/Pages/Jobs.php | 59 + app/Livewire/Components/Pages/Landing.php | 43 + app/Livewire/Components/Pages/Map.php | 91 + app/Livewire/Components/Pages/Profile.php | 58 + app/Livewire/Components/Pages/Settings.php | 97 + app/Livewire/Components/Pages/Sharing.php | 76 + app/Livewire/Components/Pages/Users.php | 121 + app/Livewire/DTO/AlbumFlags.php | 21 + app/Livewire/DTO/AlbumFormatted.php | 43 + app/Livewire/DTO/AlbumRights.php | 41 + app/Livewire/DTO/AlbumsFlags.php | 34 + app/Livewire/DTO/Layouts.php | 30 + app/Livewire/DTO/PhotoFlags.php | 18 + app/Livewire/DTO/SessionFlags.php | 34 + app/Livewire/Forms/AllConfigsForms.php | 76 + app/Livewire/Forms/ImportFromServerForm.php | 126 + app/Livewire/Forms/ImportFromUrlForm.php | 77 + app/Livewire/Forms/PhotoUpdateForm.php | 103 + app/Livewire/Synth/AlbumFlagsSynth.php | 80 + app/Livewire/Synth/AlbumSynth.php | 42 + app/Livewire/Synth/PhotoSynth.php | 38 + app/Livewire/Synth/SessionFlagsSynth.php | 81 + .../Traits/AlbumsPhotosContextMenus.php | 75 + .../Traits/InteractWithContextMenu.php | 18 + app/Livewire/Traits/InteractWithModal.php | 45 + app/Livewire/Traits/Notify.php | 24 + app/Livewire/Traits/SilentUpdate.php | 23 + app/Livewire/Traits/UseOpenable.php | 51 + app/Livewire/Traits/UsePhotoViewActions.php | 143 + app/Livewire/Traits/UseValidator.php | 37 + app/Livewire/Traits/UseWireable.php | 47 + app/Models/Album.php | 2 + app/Models/BaseAlbumImpl.php | 5 + app/Models/Extensions/BaseConfigMigration.php | 31 + .../ToArrayThrowsNotImplemented.php | 13 +- app/Models/Photo.php | 12 + app/Models/SizeVariant.php | 30 + app/Models/SymLink.php | 5 + app/Models/TagAlbum.php | 16 + app/Models/User.php | 7 + app/Policies/AlbumPolicy.php | 41 +- app/Policies/UserPolicy.php | 17 - app/Providers/AppServiceProvider.php | 17 + app/Providers/RouteServiceProvider.php | 3 + app/SmartAlbums/BaseSmartAlbum.php | 31 + app/View/Components/Footer.php | 74 + .../Components/Gallery/Album/SharingLinks.php | 31 + .../Components/Gallery/Album/Thumbs/Album.php | 73 + .../Gallery/Album/Thumbs/AlbumThumb.php | 48 + .../Components/Gallery/Album/Thumbs/Photo.php | 170 + .../Components/Gallery/Photo/Download.php | 61 + app/View/Components/Meta.php | 75 + composer.json | 5 +- composer.lock | 286 +- config/app.php | 23 + config/filesystems.php | 10 +- config/livewire.php | 158 + database/factories/AlbumFactory.php | 65 + database/factories/PhotoFactory.php | 136 + database/factories/SizeVariantFactory.php | 57 + database/factories/Traits/OwnedBy.php | 26 + database/factories/UserFactory.php | 59 +- ...odified_date_when_no_exit_date_setting.php | 42 +- ...110932_add_date_display_configurations.php | 70 + ..._223901_add_config_livewire_chunk_size.php | 22 + ...4_233717_refactor_type_layout_livewire.php | 36 + .../2023_09_25_123925_config_blur_nsfw.php | 22 + ..._232500_config_pagination_search_limit.php | 23 + ...3_12_19_115547_search_characters_limit.php | 23 + ...12_19_122408_add_positive_requirements.php | 2 + ...80854_add_setting_height_width_gallery.php | 58 + lang/cz/lychee.php | 9 + lang/de/lychee.php | 9 + lang/el/lychee.php | 9 + lang/en/lychee.php | 11 +- lang/es/lychee.php | 9 + lang/fr/lychee.php | 9 + lang/hu/lychee.php | 9 + lang/it/lychee.php | 9 + lang/nl/lychee.php | 9 + lang/no/lychee.php | 9 + lang/pl/lychee.php | 9 + lang/pt/lychee.php | 9 + lang/ru/lychee.php | 9 + lang/sk/lychee.php | 9 + lang/sv/lychee.php | 9 + lang/vi/lychee.php | 9 + lang/zh_CN/lychee.php | 9 + lang/zh_TW/lychee.php | 9 + package-lock.json | 3528 +++++++++++++++++ package.json | 44 + phpstan.neon | 50 +- phpstan/stubs/Wireable.stub | 22 + phpunit.xml | 4 + postcss.config.js | 6 + public/vendor/log-viewer/app.css | 2 +- public/vendor/log-viewer/app.js | 2 +- public/vendor/log-viewer/app.js.LICENSE.txt | 2 + public/vendor/log-viewer/mix-manifest.json | 4 +- resources/css/app.css | 123 + resources/css/fonts.css | 68 + resources/css/photoDescription.css | 36 + resources/fonts/roboto-v29-300.woff2 | Bin 0 -> 50084 bytes resources/fonts/roboto-v29-400.woff2 | Bin 0 -> 50240 bytes resources/fonts/roboto-v29-700.woff2 | Bin 0 -> 50196 bytes resources/fonts/socials.eot | Bin 0 -> 2424 bytes resources/fonts/socials.svg | 15 + resources/fonts/socials.ttf | Bin 0 -> 2260 bytes resources/fonts/socials.woff | Bin 0 -> 2336 bytes resources/img/noise.png | Bin 0 -> 65982 bytes resources/js/app.ts | 20 + resources/js/data/panel/index.ts | 14 + resources/js/data/panel/photoFormPanel.ts | 68 + resources/js/data/panel/photoListingPanel.ts | 26 + resources/js/data/panel/photoSidebarPanel.ts | 41 + resources/js/data/panel/searchPanel.ts | 41 + resources/js/data/qrcode/qrBuilder.ts | 23 + resources/js/data/views/albumView.ts | 327 ++ resources/js/data/views/index.ts | 14 + resources/js/data/views/map.types.d.ts | 38 + resources/js/data/views/mapView.ts | 187 + resources/js/data/views/photoView.ts | 141 + resources/js/data/views/types.d.ts | 162 + resources/js/data/views/uploadView.ts | 101 + resources/js/data/webauthn/index.ts | 10 + resources/js/data/webauthn/loginWebAuthn.ts | 52 + .../js/data/webauthn/registerWebAuthn.ts | 47 + resources/js/global.d.ts | 10 + .../js/lycheeOrg/actions/albumActions.ts | 66 + resources/js/lycheeOrg/actions/keybindings.ts | 237 ++ resources/js/lycheeOrg/actions/selection.ts | 247 ++ resources/js/lycheeOrg/actions/sidebarMap.ts | 64 + resources/js/lycheeOrg/backend.d.ts | 457 +++ resources/js/lycheeOrg/flags/albumFlags.ts | 13 + resources/js/lycheeOrg/flags/photoFlags.ts | 36 + resources/js/lycheeOrg/layouts/PhotoLayout.ts | 48 + resources/js/lycheeOrg/layouts/types.d.ts | 9 + resources/js/lycheeOrg/layouts/useGrid.ts | 61 + resources/js/lycheeOrg/layouts/useJustify.ts | 40 + resources/js/lycheeOrg/layouts/useMasonry.ts | 71 + resources/js/lycheeOrg/layouts/useSquare.ts | 52 + resources/js/vendor/webauthn/webauthn.ts | 338 ++ .../components/context-menu/item.blade.php | 8 + .../context-menu/separator.blade.php | 1 + .../views/components/footer-landing.blade.php | 25 + resources/views/components/footer.blade.php | 40 + .../components/forms/buttons/action.blade.php | 7 + .../components/forms/buttons/cancel.blade.php | 7 + .../components/forms/buttons/create.blade.php | 7 + .../components/forms/buttons/danger.blade.php | 7 + .../components/forms/defaulttickbox.blade.php | 7 + .../views/components/forms/dropdown.blade.php | 12 + .../components/forms/error-message.blade.php | 4 + .../components/forms/inputs/date.blade.php | 6 + .../forms/inputs/important.blade.php | 7 + .../forms/inputs/password.blade.php | 15 + .../components/forms/inputs/text.blade.php | 7 + .../views/components/forms/textarea.blade.php | 3 + .../views/components/forms/tickbox.blade.php | 9 + .../views/components/forms/toggle.blade.php | 6 + .../gallery/album/details.blade.php | 42 + .../components/gallery/album/hero.blade.php | 15 + .../gallery/album/login-dialog.blade.php | 10 + .../gallery/album/menu/danger.blade.php | 8 + .../gallery/album/menu/item.blade.php | 10 + .../gallery/album/menu/menu.blade.php | 38 + .../gallery/album/sharing-links.blade.php | 35 + .../album/thumbs/album-thumb.blade.php | 16 + .../gallery/album/thumbs/album.blade.php | 97 + .../gallery/album/thumbs/photo.blade.php | 47 + .../views/components/gallery/badge.blade.php | 8 + .../components/gallery/divider.blade.php | 4 + .../components/gallery/photo/button.blade.php | 4 + .../gallery/photo/downloads.blade.php | 20 + .../components/gallery/photo/line.blade.php | 7 + .../gallery/photo/next-previous.blade.php | 19 + .../gallery/photo/overlay.blade.php | 20 + .../gallery/photo/properties.blade.php | 45 + .../gallery/photo/sidebar.blade.php | 119 + .../gallery/view/photo-listing.blade.php | 25 + .../components/gallery/view/photo.blade.php | 126 + .../components/header/actions-menus.blade.php | 34 + .../views/components/header/back.blade.php | 3 + .../views/components/header/bar.blade.php | 7 + .../views/components/header/button.blade.php | 4 + .../views/components/header/title.blade.php | 5 + .../views/components/help/cell.blade.php | 2 + .../views/components/help/head.blade.php | 1 + resources/views/components/help/kbd.blade.php | 1 + .../views/components/help/table.blade.php | 3 + .../views/components/icons/iconic.blade.php | 2 + .../views/components/layouts/app.blade.php | 29 + .../components/leftbar/leftbar-item.blade.php | 11 + resources/views/components/meta.blade.php | 24 + .../views/components/notifications.blade.php | 71 + .../views/components/shortcuts.blade.php | 116 + .../views/components/update-status.blade.php | 3 + .../views/components/webauthn/login.blade.php | 30 + resources/views/includes/svg.blade.php | 256 +- .../components/context-menu.blade.php | 16 + .../livewire/components/left-menu.blade.php | 67 + .../views/livewire/components/modal.blade.php | 22 + .../context-menus/album-add.blade.php | 16 + .../context-menus/album-dropdown.blade.php | 10 + .../context-menus/albums-dropdown.blade.php | 7 + .../context-menus/photo-dropdown.blade.php | 15 + .../context-menus/photos-add.blade.php | 15 + .../context-menus/photos-dropdown.blade.php | 14 + .../livewire/forms/add/create-tag.blade.php | 23 + .../views/livewire/forms/add/create.blade.php | 19 + .../forms/add/import-from-server.blade.php | 15 + .../add/import-from-server.old.blade.php | 47 + .../forms/add/import-from-url.blade.php | 16 + .../views/livewire/forms/add/upload.blade.php | 94 + .../forms/album/delete-panel.blade.php | 6 + .../livewire/forms/album/delete.blade.php | 22 + .../livewire/forms/album/merge.blade.php | 37 + .../livewire/forms/album/move-panel.blade.php | 15 + .../views/livewire/forms/album/move.blade.php | 37 + .../livewire/forms/album/properties.blade.php | 26 + .../livewire/forms/album/rename.blade.php | 21 + .../forms/album/search-album.blade.php | 49 + .../forms/album/share-with-line.blade.php | 20 + .../livewire/forms/album/share-with.blade.php | 114 + .../livewire/forms/album/transfer.blade.php | 11 + .../forms/album/unlock-album.blade.php | 36 + .../livewire/forms/album/visibility.blade.php | 48 + .../forms/confirms/save-all.blade.php | 11 + .../views/livewire/forms/default.blade.php | 29 + .../livewire/forms/photo/copyTo.blade.php | 16 + .../livewire/forms/photo/delete.blade.php | 21 + .../livewire/forms/photo/download.blade.php | 9 + .../views/livewire/forms/photo/move.blade.php | 16 + .../livewire/forms/photo/rename.blade.php | 23 + .../views/livewire/forms/photo/tag.blade.php | 29 + .../forms/profile/get-api-token.blade.php | 22 + .../profile/manage-second-factor.blade.php | 4 + .../forms/profile/set-login.blade.php | 27 + .../forms/settings/double-drop-down.blade.php | 9 + .../forms/settings/drop-down.blade.php | 6 + .../livewire/forms/settings/input.blade.php | 9 + .../livewire/forms/settings/toggle.blade.php | 11 + .../views/livewire/modals/about.blade.php | 27 + .../views/livewire/modals/login.blade.php | 34 + .../modules/diagnostics/pre-colored.blade.php | 9 + .../modules/diagnostics/pre.blade.php | 9 + .../diagnostics/with-action-call.blade.php | 16 + .../gallery/sensitive-warning.blade.php | 14 + .../modules/profile/second-factor.blade.php | 31 + .../modules/users/user-line.blade.php | 15 + .../livewire/pages/all-settings.blade.php | 52 + .../livewire/pages/diagnostics.blade.php | 15 + .../livewire/pages/gallery/album.blade.php | 65 + .../livewire/pages/gallery/albums.blade.php | 79 + .../livewire/pages/gallery/frame.blade.php | 40 + .../livewire/pages/gallery/map.blade.php | 22 + .../livewire/pages/gallery/search.blade.php | 85 + resources/views/livewire/pages/jobs.blade.php | 24 + .../views/livewire/pages/landing.blade.php | 51 + .../views/livewire/pages/profile.blade.php | 20 + .../views/livewire/pages/settings.blade.php | 70 + .../views/livewire/pages/sharing.blade.php | 58 + .../views/livewire/pages/users.blade.php | 55 + .../vendor/livewire/simple-tailwind.blade.php | 45 + .../views/vendor/livewire/tailwind.blade.php | 171 + .../vendor/pagination/tailwind.blade.php | 148 + routes/web-livewire.php | 50 + routes/web.php | 13 +- scripts/post-merge | 9 + scripts/pre-commit | 15 + tailwind.config.js | 183 + tests/AbstractTestCase.php | 13 + tests/Feature/BasePhotosAddHandler.php | 2 +- tests/Feature/CommandFixPermissionsTest.php | 4 +- tests/Feature/CommandGenerateThumbsTest.php | 4 +- tests/Feature/CommandGhostbusterTest.php | 30 +- tests/Feature/CommandTakeDateTest.php | 2 +- tests/Feature/CommandVideoDataTest.php | 4 +- tests/Feature/PhotosAddMethodsTest.php | 20 +- tests/Feature/PhotosOperationsTest.php | 4 +- tests/Feature/Traits/RequiresEmptyUsers.php | 4 +- tests/Livewire/Base/BaseLivewireTest.php | 94 + tests/Livewire/Forms/Album/CreateTagTest.php | 49 + tests/Livewire/Forms/Album/CreateTest.php | 60 + .../Livewire/Forms/Album/DeletePanelTest.php | 52 + tests/Livewire/Forms/Album/DeleteTest.php | 58 + tests/Livewire/Forms/Album/MergeMoveTest.php | 132 + tests/Livewire/Forms/Album/MovePanelTest.php | 66 + tests/Livewire/Forms/Album/PropertiesTest.php | 43 + tests/Livewire/Forms/Album/RenameTest.php | 61 + .../Livewire/Forms/Album/SearchAlbumTest.php | 137 + tests/Livewire/Forms/Album/ShareWithTest.php | 105 + tests/Livewire/Forms/Album/TransferTest.php | 70 + tests/Livewire/Forms/Album/VisibilityTest.php | 123 + tests/Livewire/Forms/ConfirmTest.php | 42 + tests/Livewire/Forms/FormsProfileTest.php | 198 + tests/Livewire/Forms/ImportFromServerTest.php | 90 + tests/Livewire/Forms/ImportFromUrlTest.php | 57 + tests/Livewire/Forms/Photo/CopyToTest.php | 68 + tests/Livewire/Forms/Photo/DeleteTest.php | 58 + tests/Livewire/Forms/Photo/DownloadTest.php | 53 + tests/Livewire/Forms/Photo/MoveTest.php | 68 + tests/Livewire/Forms/Photo/RenameTest.php | 61 + tests/Livewire/Forms/Photo/TagTest.php | 70 + tests/Livewire/Forms/SettingsTest.php | 89 + tests/Livewire/Forms/UploadTest.php | 90 + tests/Livewire/Menus/AlbumAddTest.php | 67 + tests/Livewire/Menus/AlbumDropdownTest.php | 85 + tests/Livewire/Menus/AlbumsDropdownTest.php | 86 + tests/Livewire/Menus/ContextMenuTest.php | 43 + tests/Livewire/Menus/LeftMenuTest.php | 37 + tests/Livewire/Menus/PhotoDropdownTest.php | 136 + tests/Livewire/Menus/PhotosDropdownTest.php | 119 + tests/Livewire/Modals/AboutTest.php | 30 + tests/Livewire/Modals/LoginTest.php | 39 + tests/Livewire/Modals/ModalTest.php | 46 + tests/Livewire/Modules/ErrorsTest.php | 47 + tests/Livewire/Modules/SpaceTest.php | 51 + tests/Livewire/Modules/UserLineTest.php | 69 + tests/Livewire/Pages/AlbumTest.php | 134 + tests/Livewire/Pages/AllSettingsTest.php | 59 + tests/Livewire/Pages/DiagnosticsTest.php | 56 + tests/Livewire/Pages/FrameTest.php | 104 + tests/Livewire/Pages/GalleryTest.php | 34 + tests/Livewire/Pages/IndexTest.php | 69 + tests/Livewire/Pages/JobsTest.php | 39 + tests/Livewire/Pages/LandingTest.php | 48 + tests/Livewire/Pages/MapTest.php | 85 + tests/Livewire/Pages/ProfileTest.php | 45 + tests/Livewire/Pages/SettingsTest.php | 48 + tests/Livewire/Pages/SharingTest.php | 56 + tests/Livewire/Pages/UsersTest.php | 94 + tests/Livewire/WireableTest.php | 45 + tsconfig.json | 112 + vite.config.js | 33 + 444 files changed, 25394 insertions(+), 212 deletions(-) create mode 100644 .prettierrc.json create mode 100644 app/Contracts/Livewire/Openable.php create mode 100644 app/Contracts/Livewire/Params.php create mode 100644 app/Contracts/Livewire/Reloadable.php delete mode 100644 app/Enum/AlbumLayoutType.php create mode 100644 app/Enum/Livewire/FileStatus.php create mode 100644 app/Enum/Livewire/NotificationType.php create mode 100644 app/Enum/PhotoLayoutType.php create mode 100644 app/Enum/Traits/WireableEnumTrait.php create mode 100644 app/Exceptions/Handlers/ViteManifestNotFoundHandler.php create mode 100644 app/Exceptions/PhotoCollectionEmptyException.php create mode 100644 app/Http/Resources/Collections/AlbumCollectionResource.php create mode 100644 app/Http/RuleSets/AddAlbumRuleSet.php create mode 100644 app/Http/RuleSets/ChangeLoginRuleSet.php create mode 100644 app/Http/RuleSets/LoginRuleSet.php create mode 100644 app/Livewire/Components/Base/ContextMenu.php create mode 100644 app/Livewire/Components/Base/Modal.php create mode 100644 app/Livewire/Components/Forms/Add/ImportFromServer.php create mode 100644 app/Livewire/Components/Forms/Add/ImportFromUrl.php create mode 100644 app/Livewire/Components/Forms/Add/Upload.php create mode 100644 app/Livewire/Components/Forms/Album/Create.php create mode 100644 app/Livewire/Components/Forms/Album/CreateTag.php create mode 100644 app/Livewire/Components/Forms/Album/Delete.php create mode 100644 app/Livewire/Components/Forms/Album/DeletePanel.php create mode 100644 app/Livewire/Components/Forms/Album/Merge.php create mode 100644 app/Livewire/Components/Forms/Album/Move.php create mode 100644 app/Livewire/Components/Forms/Album/MovePanel.php create mode 100644 app/Livewire/Components/Forms/Album/Properties.php create mode 100644 app/Livewire/Components/Forms/Album/Rename.php create mode 100644 app/Livewire/Components/Forms/Album/SearchAlbum.php create mode 100644 app/Livewire/Components/Forms/Album/ShareWith.php create mode 100644 app/Livewire/Components/Forms/Album/ShareWithLine.php create mode 100644 app/Livewire/Components/Forms/Album/Transfer.php create mode 100644 app/Livewire/Components/Forms/Album/UnlockAlbum.php create mode 100644 app/Livewire/Components/Forms/Album/Visibility.php create mode 100644 app/Livewire/Components/Forms/Confirms/SaveAll.php create mode 100644 app/Livewire/Components/Forms/Photo/CopyTo.php create mode 100644 app/Livewire/Components/Forms/Photo/Delete.php create mode 100644 app/Livewire/Components/Forms/Photo/Download.php create mode 100644 app/Livewire/Components/Forms/Photo/Move.php create mode 100644 app/Livewire/Components/Forms/Photo/Rename.php create mode 100644 app/Livewire/Components/Forms/Photo/Tag.php create mode 100644 app/Livewire/Components/Forms/Profile/GetApiToken.php create mode 100644 app/Livewire/Components/Forms/Profile/ManageSecondFactor.php create mode 100644 app/Livewire/Components/Forms/Profile/SecondFactor.php create mode 100644 app/Livewire/Components/Forms/Profile/SetEmail.php create mode 100644 app/Livewire/Components/Forms/Profile/SetLogin.php create mode 100644 app/Livewire/Components/Forms/Settings/Base/BaseConfigDoubleDropDown.php create mode 100644 app/Livewire/Components/Forms/Settings/Base/BaseConfigDropDown.php create mode 100644 app/Livewire/Components/Forms/Settings/Base/BooleanSetting.php create mode 100644 app/Livewire/Components/Forms/Settings/Base/StringSetting.php create mode 100644 app/Livewire/Components/Forms/Settings/SetAlbumDecorationOrientationSetting.php create mode 100644 app/Livewire/Components/Forms/Settings/SetAlbumDecorationSetting.php create mode 100644 app/Livewire/Components/Forms/Settings/SetAlbumSortingSetting.php create mode 100644 app/Livewire/Components/Forms/Settings/SetLangSetting.php create mode 100644 app/Livewire/Components/Forms/Settings/SetLayoutSetting.php create mode 100644 app/Livewire/Components/Forms/Settings/SetLicenseDefaultSetting.php create mode 100644 app/Livewire/Components/Forms/Settings/SetMapProviderSetting.php create mode 100644 app/Livewire/Components/Forms/Settings/SetPhotoOverlaySetting.php create mode 100644 app/Livewire/Components/Forms/Settings/SetPhotoSortingSetting.php create mode 100644 app/Livewire/Components/Menus/AlbumAdd.php create mode 100644 app/Livewire/Components/Menus/AlbumDropdown.php create mode 100644 app/Livewire/Components/Menus/AlbumsDropdown.php create mode 100644 app/Livewire/Components/Menus/LeftMenu.php create mode 100644 app/Livewire/Components/Menus/PhotoDropdown.php create mode 100644 app/Livewire/Components/Menus/PhotosDropdown.php create mode 100644 app/Livewire/Components/Modals/About.php create mode 100644 app/Livewire/Components/Modals/Login.php create mode 100644 app/Livewire/Components/Modules/Diagnostics/AbstractPreSection.php create mode 100644 app/Livewire/Components/Modules/Diagnostics/Configurations.php create mode 100644 app/Livewire/Components/Modules/Diagnostics/Errors.php create mode 100644 app/Livewire/Components/Modules/Diagnostics/Infos.php create mode 100644 app/Livewire/Components/Modules/Diagnostics/Optimize.php create mode 100644 app/Livewire/Components/Modules/Diagnostics/Space.php create mode 100644 app/Livewire/Components/Modules/Users/UserLine.php create mode 100644 app/Livewire/Components/Pages/AllSettings.php create mode 100644 app/Livewire/Components/Pages/Diagnostics.php create mode 100644 app/Livewire/Components/Pages/Frame.php create mode 100644 app/Livewire/Components/Pages/Gallery/Album.php create mode 100644 app/Livewire/Components/Pages/Gallery/Albums.php create mode 100644 app/Livewire/Components/Pages/Gallery/BaseAlbumComponent.php create mode 100644 app/Livewire/Components/Pages/Gallery/Search.php create mode 100644 app/Livewire/Components/Pages/Gallery/SensitiveWarning.php create mode 100644 app/Livewire/Components/Pages/Jobs.php create mode 100644 app/Livewire/Components/Pages/Landing.php create mode 100644 app/Livewire/Components/Pages/Map.php create mode 100644 app/Livewire/Components/Pages/Profile.php create mode 100644 app/Livewire/Components/Pages/Settings.php create mode 100644 app/Livewire/Components/Pages/Sharing.php create mode 100644 app/Livewire/Components/Pages/Users.php create mode 100644 app/Livewire/DTO/AlbumFlags.php create mode 100644 app/Livewire/DTO/AlbumFormatted.php create mode 100644 app/Livewire/DTO/AlbumRights.php create mode 100644 app/Livewire/DTO/AlbumsFlags.php create mode 100644 app/Livewire/DTO/Layouts.php create mode 100644 app/Livewire/DTO/PhotoFlags.php create mode 100644 app/Livewire/DTO/SessionFlags.php create mode 100644 app/Livewire/Forms/AllConfigsForms.php create mode 100644 app/Livewire/Forms/ImportFromServerForm.php create mode 100644 app/Livewire/Forms/ImportFromUrlForm.php create mode 100644 app/Livewire/Forms/PhotoUpdateForm.php create mode 100644 app/Livewire/Synth/AlbumFlagsSynth.php create mode 100644 app/Livewire/Synth/AlbumSynth.php create mode 100644 app/Livewire/Synth/PhotoSynth.php create mode 100644 app/Livewire/Synth/SessionFlagsSynth.php create mode 100644 app/Livewire/Traits/AlbumsPhotosContextMenus.php create mode 100644 app/Livewire/Traits/InteractWithContextMenu.php create mode 100644 app/Livewire/Traits/InteractWithModal.php create mode 100644 app/Livewire/Traits/Notify.php create mode 100644 app/Livewire/Traits/SilentUpdate.php create mode 100644 app/Livewire/Traits/UseOpenable.php create mode 100644 app/Livewire/Traits/UsePhotoViewActions.php create mode 100644 app/Livewire/Traits/UseValidator.php create mode 100644 app/Livewire/Traits/UseWireable.php create mode 100644 app/Models/Extensions/BaseConfigMigration.php create mode 100644 app/View/Components/Footer.php create mode 100644 app/View/Components/Gallery/Album/SharingLinks.php create mode 100644 app/View/Components/Gallery/Album/Thumbs/Album.php create mode 100644 app/View/Components/Gallery/Album/Thumbs/AlbumThumb.php create mode 100644 app/View/Components/Gallery/Album/Thumbs/Photo.php create mode 100644 app/View/Components/Gallery/Photo/Download.php create mode 100644 app/View/Components/Meta.php create mode 100644 config/livewire.php create mode 100644 database/factories/AlbumFactory.php create mode 100644 database/factories/PhotoFactory.php create mode 100644 database/factories/SizeVariantFactory.php create mode 100644 database/factories/Traits/OwnedBy.php create mode 100644 database/migrations/2023_09_24_110932_add_date_display_configurations.php create mode 100644 database/migrations/2023_09_24_223901_add_config_livewire_chunk_size.php create mode 100644 database/migrations/2023_09_24_233717_refactor_type_layout_livewire.php create mode 100644 database/migrations/2023_09_25_123925_config_blur_nsfw.php create mode 100644 database/migrations/2023_12_18_232500_config_pagination_search_limit.php create mode 100644 database/migrations/2023_12_19_115547_search_characters_limit.php create mode 100644 database/migrations/2023_12_20_180854_add_setting_height_width_gallery.php create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 phpstan/stubs/Wireable.stub create mode 100644 postcss.config.js create mode 100644 resources/css/app.css create mode 100644 resources/css/fonts.css create mode 100644 resources/css/photoDescription.css create mode 100644 resources/fonts/roboto-v29-300.woff2 create mode 100644 resources/fonts/roboto-v29-400.woff2 create mode 100644 resources/fonts/roboto-v29-700.woff2 create mode 100644 resources/fonts/socials.eot create mode 100644 resources/fonts/socials.svg create mode 100644 resources/fonts/socials.ttf create mode 100644 resources/fonts/socials.woff create mode 100644 resources/img/noise.png create mode 100644 resources/js/app.ts create mode 100644 resources/js/data/panel/index.ts create mode 100644 resources/js/data/panel/photoFormPanel.ts create mode 100644 resources/js/data/panel/photoListingPanel.ts create mode 100644 resources/js/data/panel/photoSidebarPanel.ts create mode 100644 resources/js/data/panel/searchPanel.ts create mode 100644 resources/js/data/qrcode/qrBuilder.ts create mode 100644 resources/js/data/views/albumView.ts create mode 100644 resources/js/data/views/index.ts create mode 100644 resources/js/data/views/map.types.d.ts create mode 100644 resources/js/data/views/mapView.ts create mode 100644 resources/js/data/views/photoView.ts create mode 100644 resources/js/data/views/types.d.ts create mode 100644 resources/js/data/views/uploadView.ts create mode 100644 resources/js/data/webauthn/index.ts create mode 100644 resources/js/data/webauthn/loginWebAuthn.ts create mode 100644 resources/js/data/webauthn/registerWebAuthn.ts create mode 100644 resources/js/global.d.ts create mode 100644 resources/js/lycheeOrg/actions/albumActions.ts create mode 100644 resources/js/lycheeOrg/actions/keybindings.ts create mode 100644 resources/js/lycheeOrg/actions/selection.ts create mode 100644 resources/js/lycheeOrg/actions/sidebarMap.ts create mode 100644 resources/js/lycheeOrg/backend.d.ts create mode 100644 resources/js/lycheeOrg/flags/albumFlags.ts create mode 100644 resources/js/lycheeOrg/flags/photoFlags.ts create mode 100644 resources/js/lycheeOrg/layouts/PhotoLayout.ts create mode 100644 resources/js/lycheeOrg/layouts/types.d.ts create mode 100644 resources/js/lycheeOrg/layouts/useGrid.ts create mode 100644 resources/js/lycheeOrg/layouts/useJustify.ts create mode 100644 resources/js/lycheeOrg/layouts/useMasonry.ts create mode 100644 resources/js/lycheeOrg/layouts/useSquare.ts create mode 100644 resources/js/vendor/webauthn/webauthn.ts create mode 100644 resources/views/components/context-menu/item.blade.php create mode 100644 resources/views/components/context-menu/separator.blade.php create mode 100644 resources/views/components/footer-landing.blade.php create mode 100644 resources/views/components/footer.blade.php create mode 100644 resources/views/components/forms/buttons/action.blade.php create mode 100644 resources/views/components/forms/buttons/cancel.blade.php create mode 100644 resources/views/components/forms/buttons/create.blade.php create mode 100644 resources/views/components/forms/buttons/danger.blade.php create mode 100644 resources/views/components/forms/defaulttickbox.blade.php create mode 100644 resources/views/components/forms/dropdown.blade.php create mode 100644 resources/views/components/forms/error-message.blade.php create mode 100644 resources/views/components/forms/inputs/date.blade.php create mode 100644 resources/views/components/forms/inputs/important.blade.php create mode 100644 resources/views/components/forms/inputs/password.blade.php create mode 100644 resources/views/components/forms/inputs/text.blade.php create mode 100644 resources/views/components/forms/textarea.blade.php create mode 100644 resources/views/components/forms/tickbox.blade.php create mode 100644 resources/views/components/forms/toggle.blade.php create mode 100644 resources/views/components/gallery/album/details.blade.php create mode 100644 resources/views/components/gallery/album/hero.blade.php create mode 100644 resources/views/components/gallery/album/login-dialog.blade.php create mode 100644 resources/views/components/gallery/album/menu/danger.blade.php create mode 100644 resources/views/components/gallery/album/menu/item.blade.php create mode 100644 resources/views/components/gallery/album/menu/menu.blade.php create mode 100644 resources/views/components/gallery/album/sharing-links.blade.php create mode 100644 resources/views/components/gallery/album/thumbs/album-thumb.blade.php create mode 100644 resources/views/components/gallery/album/thumbs/album.blade.php create mode 100644 resources/views/components/gallery/album/thumbs/photo.blade.php create mode 100644 resources/views/components/gallery/badge.blade.php create mode 100644 resources/views/components/gallery/divider.blade.php create mode 100644 resources/views/components/gallery/photo/button.blade.php create mode 100644 resources/views/components/gallery/photo/downloads.blade.php create mode 100644 resources/views/components/gallery/photo/line.blade.php create mode 100644 resources/views/components/gallery/photo/next-previous.blade.php create mode 100644 resources/views/components/gallery/photo/overlay.blade.php create mode 100644 resources/views/components/gallery/photo/properties.blade.php create mode 100644 resources/views/components/gallery/photo/sidebar.blade.php create mode 100644 resources/views/components/gallery/view/photo-listing.blade.php create mode 100644 resources/views/components/gallery/view/photo.blade.php create mode 100644 resources/views/components/header/actions-menus.blade.php create mode 100644 resources/views/components/header/back.blade.php create mode 100644 resources/views/components/header/bar.blade.php create mode 100644 resources/views/components/header/button.blade.php create mode 100644 resources/views/components/header/title.blade.php create mode 100644 resources/views/components/help/cell.blade.php create mode 100644 resources/views/components/help/head.blade.php create mode 100644 resources/views/components/help/kbd.blade.php create mode 100644 resources/views/components/help/table.blade.php create mode 100644 resources/views/components/icons/iconic.blade.php create mode 100644 resources/views/components/layouts/app.blade.php create mode 100644 resources/views/components/leftbar/leftbar-item.blade.php create mode 100644 resources/views/components/meta.blade.php create mode 100644 resources/views/components/notifications.blade.php create mode 100644 resources/views/components/shortcuts.blade.php create mode 100644 resources/views/components/update-status.blade.php create mode 100644 resources/views/components/webauthn/login.blade.php create mode 100644 resources/views/livewire/components/context-menu.blade.php create mode 100644 resources/views/livewire/components/left-menu.blade.php create mode 100644 resources/views/livewire/components/modal.blade.php create mode 100644 resources/views/livewire/context-menus/album-add.blade.php create mode 100644 resources/views/livewire/context-menus/album-dropdown.blade.php create mode 100644 resources/views/livewire/context-menus/albums-dropdown.blade.php create mode 100644 resources/views/livewire/context-menus/photo-dropdown.blade.php create mode 100644 resources/views/livewire/context-menus/photos-add.blade.php create mode 100644 resources/views/livewire/context-menus/photos-dropdown.blade.php create mode 100644 resources/views/livewire/forms/add/create-tag.blade.php create mode 100644 resources/views/livewire/forms/add/create.blade.php create mode 100644 resources/views/livewire/forms/add/import-from-server.blade.php create mode 100644 resources/views/livewire/forms/add/import-from-server.old.blade.php create mode 100644 resources/views/livewire/forms/add/import-from-url.blade.php create mode 100644 resources/views/livewire/forms/add/upload.blade.php create mode 100644 resources/views/livewire/forms/album/delete-panel.blade.php create mode 100644 resources/views/livewire/forms/album/delete.blade.php create mode 100644 resources/views/livewire/forms/album/merge.blade.php create mode 100644 resources/views/livewire/forms/album/move-panel.blade.php create mode 100644 resources/views/livewire/forms/album/move.blade.php create mode 100644 resources/views/livewire/forms/album/properties.blade.php create mode 100644 resources/views/livewire/forms/album/rename.blade.php create mode 100644 resources/views/livewire/forms/album/search-album.blade.php create mode 100644 resources/views/livewire/forms/album/share-with-line.blade.php create mode 100644 resources/views/livewire/forms/album/share-with.blade.php create mode 100644 resources/views/livewire/forms/album/transfer.blade.php create mode 100644 resources/views/livewire/forms/album/unlock-album.blade.php create mode 100644 resources/views/livewire/forms/album/visibility.blade.php create mode 100644 resources/views/livewire/forms/confirms/save-all.blade.php create mode 100644 resources/views/livewire/forms/default.blade.php create mode 100644 resources/views/livewire/forms/photo/copyTo.blade.php create mode 100644 resources/views/livewire/forms/photo/delete.blade.php create mode 100644 resources/views/livewire/forms/photo/download.blade.php create mode 100644 resources/views/livewire/forms/photo/move.blade.php create mode 100644 resources/views/livewire/forms/photo/rename.blade.php create mode 100644 resources/views/livewire/forms/photo/tag.blade.php create mode 100644 resources/views/livewire/forms/profile/get-api-token.blade.php create mode 100644 resources/views/livewire/forms/profile/manage-second-factor.blade.php create mode 100644 resources/views/livewire/forms/profile/set-login.blade.php create mode 100644 resources/views/livewire/forms/settings/double-drop-down.blade.php create mode 100644 resources/views/livewire/forms/settings/drop-down.blade.php create mode 100644 resources/views/livewire/forms/settings/input.blade.php create mode 100644 resources/views/livewire/forms/settings/toggle.blade.php create mode 100644 resources/views/livewire/modals/about.blade.php create mode 100644 resources/views/livewire/modals/login.blade.php create mode 100644 resources/views/livewire/modules/diagnostics/pre-colored.blade.php create mode 100644 resources/views/livewire/modules/diagnostics/pre.blade.php create mode 100644 resources/views/livewire/modules/diagnostics/with-action-call.blade.php create mode 100644 resources/views/livewire/modules/gallery/sensitive-warning.blade.php create mode 100644 resources/views/livewire/modules/profile/second-factor.blade.php create mode 100644 resources/views/livewire/modules/users/user-line.blade.php create mode 100644 resources/views/livewire/pages/all-settings.blade.php create mode 100644 resources/views/livewire/pages/diagnostics.blade.php create mode 100644 resources/views/livewire/pages/gallery/album.blade.php create mode 100644 resources/views/livewire/pages/gallery/albums.blade.php create mode 100644 resources/views/livewire/pages/gallery/frame.blade.php create mode 100644 resources/views/livewire/pages/gallery/map.blade.php create mode 100644 resources/views/livewire/pages/gallery/search.blade.php create mode 100644 resources/views/livewire/pages/jobs.blade.php create mode 100644 resources/views/livewire/pages/landing.blade.php create mode 100644 resources/views/livewire/pages/profile.blade.php create mode 100644 resources/views/livewire/pages/settings.blade.php create mode 100644 resources/views/livewire/pages/sharing.blade.php create mode 100644 resources/views/livewire/pages/users.blade.php create mode 100644 resources/views/vendor/livewire/simple-tailwind.blade.php create mode 100644 resources/views/vendor/livewire/tailwind.blade.php create mode 100644 resources/views/vendor/pagination/tailwind.blade.php create mode 100644 routes/web-livewire.php create mode 100644 tailwind.config.js create mode 100644 tests/Livewire/Base/BaseLivewireTest.php create mode 100644 tests/Livewire/Forms/Album/CreateTagTest.php create mode 100644 tests/Livewire/Forms/Album/CreateTest.php create mode 100644 tests/Livewire/Forms/Album/DeletePanelTest.php create mode 100644 tests/Livewire/Forms/Album/DeleteTest.php create mode 100644 tests/Livewire/Forms/Album/MergeMoveTest.php create mode 100644 tests/Livewire/Forms/Album/MovePanelTest.php create mode 100644 tests/Livewire/Forms/Album/PropertiesTest.php create mode 100644 tests/Livewire/Forms/Album/RenameTest.php create mode 100644 tests/Livewire/Forms/Album/SearchAlbumTest.php create mode 100644 tests/Livewire/Forms/Album/ShareWithTest.php create mode 100644 tests/Livewire/Forms/Album/TransferTest.php create mode 100644 tests/Livewire/Forms/Album/VisibilityTest.php create mode 100644 tests/Livewire/Forms/ConfirmTest.php create mode 100644 tests/Livewire/Forms/FormsProfileTest.php create mode 100644 tests/Livewire/Forms/ImportFromServerTest.php create mode 100644 tests/Livewire/Forms/ImportFromUrlTest.php create mode 100644 tests/Livewire/Forms/Photo/CopyToTest.php create mode 100644 tests/Livewire/Forms/Photo/DeleteTest.php create mode 100644 tests/Livewire/Forms/Photo/DownloadTest.php create mode 100644 tests/Livewire/Forms/Photo/MoveTest.php create mode 100644 tests/Livewire/Forms/Photo/RenameTest.php create mode 100644 tests/Livewire/Forms/Photo/TagTest.php create mode 100644 tests/Livewire/Forms/SettingsTest.php create mode 100644 tests/Livewire/Forms/UploadTest.php create mode 100644 tests/Livewire/Menus/AlbumAddTest.php create mode 100644 tests/Livewire/Menus/AlbumDropdownTest.php create mode 100644 tests/Livewire/Menus/AlbumsDropdownTest.php create mode 100644 tests/Livewire/Menus/ContextMenuTest.php create mode 100644 tests/Livewire/Menus/LeftMenuTest.php create mode 100644 tests/Livewire/Menus/PhotoDropdownTest.php create mode 100644 tests/Livewire/Menus/PhotosDropdownTest.php create mode 100644 tests/Livewire/Modals/AboutTest.php create mode 100644 tests/Livewire/Modals/LoginTest.php create mode 100644 tests/Livewire/Modals/ModalTest.php create mode 100644 tests/Livewire/Modules/ErrorsTest.php create mode 100644 tests/Livewire/Modules/SpaceTest.php create mode 100644 tests/Livewire/Modules/UserLineTest.php create mode 100644 tests/Livewire/Pages/AlbumTest.php create mode 100644 tests/Livewire/Pages/AllSettingsTest.php create mode 100644 tests/Livewire/Pages/DiagnosticsTest.php create mode 100644 tests/Livewire/Pages/FrameTest.php create mode 100644 tests/Livewire/Pages/GalleryTest.php create mode 100644 tests/Livewire/Pages/IndexTest.php create mode 100644 tests/Livewire/Pages/JobsTest.php create mode 100644 tests/Livewire/Pages/LandingTest.php create mode 100644 tests/Livewire/Pages/MapTest.php create mode 100644 tests/Livewire/Pages/ProfileTest.php create mode 100644 tests/Livewire/Pages/SettingsTest.php create mode 100644 tests/Livewire/Pages/SharingTest.php create mode 100644 tests/Livewire/Pages/UsersTest.php create mode 100644 tests/Livewire/WireableTest.php create mode 100644 tsconfig.json create mode 100644 vite.config.js diff --git a/.env.example b/.env.example index dc65064bdb..9622b2e537 100644 --- a/.env.example +++ b/.env.example @@ -8,6 +8,7 @@ APP_FORCE_HTTPS=false # enable or disable debug bar. By default it is disabled. # Do note that this disable CSP!! DEBUGBAR_ENABLED=false +LIVEWIRE_ENABLED=false # enable or disable log viewer. By default it is enabled. LOG_VIEWER_ENABLED=true @@ -101,3 +102,6 @@ TRUSTED_PROXIES=null # Comma-separated list of class names of diagnostics checks that should be skipped. #SKIP_DIAGNOSTICS_CHECKS= + +VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" \ No newline at end of file diff --git a/.github/workflows/CICD.yml b/.github/workflows/CICD.yml index 3b914d1ab1..69f1e3b84e 100644 --- a/.github/workflows/CICD.yml +++ b/.github/workflows/CICD.yml @@ -69,6 +69,35 @@ jobs: - name: Check source code for code style errors run: PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php --verbose --diff --dry-run + check_js: + name: 2️⃣ JS Node ${{ matrix.node-version }} - Code Style errors & Compilation + runs-on: ubuntu-latest + needs: + - php_syntax_errors + strategy: + matrix: + node-version: [16, 18, 20] + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + + - name: Install + run: npm install -D + + - name: Check Style + run: npm run check-formatting + + - name: Check TypeScript + run: npm run check + + - name: Compile Front-end + run: npm run build + phpstan: name: 2️⃣ PHP 8.2 - PHPStan runs-on: ubuntu-latest @@ -106,6 +135,7 @@ jobs: - sqlite test-suite: - Feature + - Livewire # Service containers to run with `container-job` services: # Label used to access the service container @@ -282,6 +312,17 @@ jobs: with: composer-options: --no-dev + - name: Use Node.js 20 + uses: actions/setup-node@v3 + with: + node-version: 20 + + - name: Install + run: npm install + + - name: Compile Front-end + run: npm run build + - name: Build Dist run: | make clean dist diff --git a/.gitignore b/.gitignore index e380c9e2f3..74e4d4c574 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ public/dist/custom.js # Pictures we do not commit public/uploads/** +public/uploads-*/** # Storage stuff: useless /storage/*.key diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000000..8760090e21 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,3 @@ +{ + "printWidth": 150 +} diff --git a/app/Actions/Diagnostics/Pipes/Infos/SystemInfo.php b/app/Actions/Diagnostics/Pipes/Infos/SystemInfo.php index ac35ab4d37..34e8ccf5fb 100644 --- a/app/Actions/Diagnostics/Pipes/Infos/SystemInfo.php +++ b/app/Actions/Diagnostics/Pipes/Infos/SystemInfo.php @@ -4,6 +4,8 @@ use App\Actions\Diagnostics\Diagnostics; use App\Contracts\DiagnosticPipe; +use App\Facades\Helpers; +use App\Livewire\Components\Forms\Add\Upload; use Carbon\CarbonTimeZone; use Illuminate\Database\QueryException; use Illuminate\Support\Facades\DB; @@ -53,10 +55,18 @@ public function handle(array &$data, \Closure $next): array $data[] = Diagnostics::line('Timezone:', ($timeZone !== false ? $timeZone : null)?->getName()); $data[] = Diagnostics::line('Max uploaded file size:', ini_get('upload_max_filesize')); $data[] = Diagnostics::line('Max post size:', ini_get('post_max_size')); + $this->getUploadLimit($data); $data[] = Diagnostics::line('Max execution time: ', ini_get('max_execution_time')); $data[] = Diagnostics::line($dbtype . ' Version:', $dbver); $data[] = ''; return $next($data); } + + private function getUploadLimit(array &$data): void + { + $size = Upload::getUploadLimit(); + + $data[] = Diagnostics::line('Livewire chunk size:', Helpers::getSymbolByQuantity($size)); + } } diff --git a/app/Actions/Search/PhotoSearch.php b/app/Actions/Search/PhotoSearch.php index f11a11bbc0..10f7b61070 100644 --- a/app/Actions/Search/PhotoSearch.php +++ b/app/Actions/Search/PhotoSearch.php @@ -8,6 +8,7 @@ use App\Models\Extensions\SortingDecorator; use App\Models\Photo; use App\Policies\PhotoQueryPolicy; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; class PhotoSearch @@ -20,9 +21,27 @@ public function __construct(PhotoQueryPolicy $photoQueryPolicy) } /** + * Apply search directly. + * * @throws InternalLycheeException */ public function query(array $terms): Collection + { + $query = $this->sqlQuery($terms); + $sorting = PhotoSortingCriterion::createDefault(); + + return (new SortingDecorator($query)) + ->orderBy($sorting->column, $sorting->order)->get(); + } + + /** + * Create the query manually. + * + * @param array $terms + * + * @return Builder + */ + public function sqlQuery(array $terms): Builder { $query = $this->photoQueryPolicy->applySearchabilityFilter( Photo::query()->with(['album', 'size_variants', 'size_variants.sym_links']) @@ -40,10 +59,6 @@ public function query(array $terms): Collection ); } - $sorting = PhotoSortingCriterion::createDefault(); - - return (new SortingDecorator($query)) - ->orderBy($sorting->column, $sorting->order) - ->get(); + return $query; } } diff --git a/app/Assets/Helpers.php b/app/Assets/Helpers.php index fbea1f9f34..c0281d67db 100644 --- a/app/Assets/Helpers.php +++ b/app/Assets/Helpers.php @@ -217,4 +217,52 @@ public function convertSize(string $size): int return $size; } + + /** + * Converts a decimal degree into integer degree, minutes and seconds. + * + * @param float|null $decimal + * @param bool $type - indicates if the passed decimal indicates a + * latitude (`true`) or a longitude (`false`) + * + * @returns string + */ + public function decimalToDegreeMinutesSeconds(float|null $decimal, bool $type): null|string + { + if ($decimal === null) { + return null; + } + + $d = abs($decimal); + + // absolute value of decimal must be smaller than 180; + if ($d > 180) { + return ''; + } + + // set direction; north assumed + if ($type && $decimal < 0) { + $direction = 'S'; + } elseif (!$type && $decimal < 0) { + $direction = 'W'; + } elseif (!$type) { + $direction = 'E'; + } else { + $direction = 'N'; + } + + // get degrees + $degrees = floor($d); + + // get seconds + $seconds = ($d - $degrees) * 3600; + + // get minutes + $minutes = floor($seconds / 60); + + // reset seconds + $seconds = floor($seconds - $minutes * 60); + + return $degrees . '° ' . $minutes . "' " . $seconds . '" ' . $direction; + } } diff --git a/app/Contracts/Livewire/Openable.php b/app/Contracts/Livewire/Openable.php new file mode 100644 index 0000000000..1fb10b4eb5 --- /dev/null +++ b/app/Contracts/Livewire/Openable.php @@ -0,0 +1,32 @@ + + */ + public static function localized(): array + { + return [ + self::ROW->value => __('lychee.ALBUM_DECORATION_ORIENTATION_ROW'), + self::ROW_REVERSE->value => __('lychee.ALBUM_DECORATION_ORIENTATION_ROW_REVERSE'), + self::COLUMN->value => __('lychee.ALBUM_DECORATION_ORIENTATION_COLUMN'), + self::COLUMN_REVERSE->value => __('lychee.ALBUM_DECORATION_ORIENTATION_COLUMN_REVERSE'), + ]; + } } diff --git a/app/Enum/AlbumDecorationType.php b/app/Enum/AlbumDecorationType.php index 46543a73f1..f6a59e6dda 100644 --- a/app/Enum/AlbumDecorationType.php +++ b/app/Enum/AlbumDecorationType.php @@ -14,4 +14,21 @@ enum AlbumDecorationType: string case ALBUM = 'album'; case PHOTO = 'photo'; case ALL = 'all'; + + /** + * Convert the enum into it's translated format. + * Note that it is missing owner. + * + * @return array + */ + public static function localized(): array + { + return [ + self::NONE->value => __('lychee.ALBUM_DECORATION_NONE'), + self::LAYERS->value => __('lychee.ALBUM_DECORATION_ORIGINAL'), + self::ALBUM->value => __('lychee.ALBUM_DECORATION_ALBUM'), + self::PHOTO->value => __('lychee.ALBUM_DECORATION_PHOTO'), + self::ALL->value => __('lychee.ALBUM_DECORATION_ALL'), + ]; + } } diff --git a/app/Enum/AlbumLayoutType.php b/app/Enum/AlbumLayoutType.php deleted file mode 100644 index cfe890ee81..0000000000 --- a/app/Enum/AlbumLayoutType.php +++ /dev/null @@ -1,15 +0,0 @@ - + */ + public static function localized(): array + { + return [ + self::EXIF->value => __('lychee.OVERLAY_EXIF'), + self::DESC->value => __('lychee.OVERLAY_DESCRIPTION'), + self::DATE->value => __('lychee.OVERLAY_DATE'), + self::NONE->value => __('lychee.OVERLAY_NONE'), + ]; + } } diff --git a/app/Enum/Livewire/FileStatus.php b/app/Enum/Livewire/FileStatus.php new file mode 100644 index 0000000000..e9ca3b3a38 --- /dev/null +++ b/app/Enum/Livewire/FileStatus.php @@ -0,0 +1,13 @@ + + */ + public static function localized(): array + { + // yes, the UNJUSTIFIED is dropped. + return [ + self::SQUARE->value => __('lychee.LAYOUT_SQUARES'), + self::JUSTIFIED->value => __('lychee.LAYOUT_JUSTIFIED'), + self::MASONRY->value => __('lychee.LAYOUT_MASONRY'), + self::GRID->value => __('lychee.LAYOUT_GRID'), + ]; + } +} diff --git a/app/Enum/Traits/WireableEnumTrait.php b/app/Enum/Traits/WireableEnumTrait.php new file mode 100644 index 0000000000..edf5a49801 --- /dev/null +++ b/app/Enum/Traits/WireableEnumTrait.php @@ -0,0 +1,35 @@ +value; + } + + public static function fromLivewire(mixed $value): self + { + if (!is_string($value) && !is_int($value)) { + throw new LycheeLogicException('Enum could not be instanciated from ' . strval($value), null); + } + + return self::from($value); + } + + /** + * @return string[]|int[]|\Closure + * + * @psalm-return array | Closure(string):(int|string) + */ + protected static function values() + { + return function (string $name): string { + return mb_strtolower($name); + }; + } +} \ No newline at end of file diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 7faff50ac3..b2487d0fe3 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -10,10 +10,12 @@ use App\Exceptions\Handlers\InstallationHandler; use App\Exceptions\Handlers\MigrationHandler; use App\Exceptions\Handlers\NoEncryptionKey; +use App\Exceptions\Handlers\ViteManifestNotFoundHandler; use Illuminate\Auth\AuthenticationException; use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Contracts\Container\Container; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; +use Illuminate\Foundation\ViteManifestNotFoundException; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; @@ -95,6 +97,22 @@ class Handler extends ExceptionHandler TokenMismatchException::class, SessionExpiredException::class, NoWriteAccessOnLogsExceptions::class, + ViteManifestNotFoundException::class, + ]; + + /** @var array> */ + protected $exception_checks = [ + NoEncryptionKey::class, + AccessDBDenied::class, + InstallationHandler::class, + AdminSetterHandler::class, + MigrationHandler::class, + ViteManifestNotFoundHandler::class, + ]; + + /** @var array> */ + protected $force_exception_to_http = [ + ViteManifestNotFoundException::class, ]; /** @@ -226,18 +244,41 @@ protected function mapException(\Throwable $e): \Throwable */ protected function prepareResponse($request, \Throwable $e): RedirectResponse|Response { - if (!$this->isHttpException($e) && config('app.debug') === true) { - return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e); - } - if (!$this->isHttpException($e)) { - $e = new HttpException(500, $e->getMessage(), $e); + if ($this->mustForceToHttpException($e) || config('app.debug') !== true) { + $e = new HttpException(500, $e->getMessage(), $e); + } else { + return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e); + } } /** @var HttpExceptionInterface $e */ return $this->toIlluminateResponse($this->renderHttpException($e), $e); } + /** + * Check if the exception must be converted to HttpException. + * + * @param \Throwable $e to check + * + * @return bool true if conversion is required + */ + protected function mustForceToHttpException(\Throwable $e): bool + { + // This loop order is more efficient: + // We take the first layer of the exception, check if match any of the forced conversion + // then the next layer etc... + do { + foreach ($this->force_exception_to_http as $exception) { + if ($e instanceof $exception) { + return true; + } + } + } while ($e = $e->getPrevious()); + + return false; + } + /** * Renders the given HttpException into HTML. * @@ -280,13 +321,9 @@ protected function renderHttpException(HttpExceptionInterface $e): SymfonyRespon // We check, if any of our special handlers wants to do something. /** @var HttpExceptionHandler[] $checks */ - $checks = [ - new NoEncryptionKey(), - new AccessDBDenied(), - new InstallationHandler(), - new AdminSetterHandler(), - new MigrationHandler(), - ]; + $checks = collect($this->exception_checks) + ->map(fn ($c) => new $c()) + ->toArray(); foreach ($checks as $check) { if ($check->check($e)) { diff --git a/app/Exceptions/Handlers/ViteManifestNotFoundHandler.php b/app/Exceptions/Handlers/ViteManifestNotFoundHandler.php new file mode 100644 index 0000000000..93f6e316bb --- /dev/null +++ b/app/Exceptions/Handlers/ViteManifestNotFoundHandler.php @@ -0,0 +1,42 @@ +getPrevious()); + + return false; + } + + /** + * {@inheritDoc} + */ + public function renderHttpException(SymfonyResponse $defaultResponse, HttpException $e): SymfonyResponse + { + return response()->view('error.error', [ + 'code' => $e->getStatusCode(), + 'type' => class_basename($e), + 'message' => 'Vite manifest not found, please execute `npm run dev`', + ], $e->getStatusCode(), $e->getHeaders()); + } +} diff --git a/app/Exceptions/PhotoCollectionEmptyException.php b/app/Exceptions/PhotoCollectionEmptyException.php new file mode 100644 index 0000000000..7ed4510267 --- /dev/null +++ b/app/Exceptions/PhotoCollectionEmptyException.php @@ -0,0 +1,21 @@ +unlock->do($album, $request['password']); } + // If we are using livewire by default, we redirect to Livewire url intead. + if (config('app.livewire') === true) { + return $photoID === null ? + redirect(route('livewire-gallery-album', ['albumId' => $albumID])) : + redirect(route('livewire-gallery-photo', ['albumId' => $albumID, 'photoId' => $photoID])); + } + return $photoID === null ? redirect('gallery#' . $albumID) : redirect('gallery#' . $albumID . '/' . $photoID); diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index cd7300f5d3..a562195e0a 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -92,5 +92,6 @@ class Kernel extends HttpKernel 'content_type' => \App\Http\Middleware\ContentType::class, 'accept_content_type' => \App\Http\Middleware\AcceptContentType::class, 'redirect-legacy-id' => \App\Http\Middleware\RedirectLegacyPhotoID::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, ]; } diff --git a/app/Http/Middleware/AcceptContentType.php b/app/Http/Middleware/AcceptContentType.php index e31d3c5379..c696f33798 100644 --- a/app/Http/Middleware/AcceptContentType.php +++ b/app/Http/Middleware/AcceptContentType.php @@ -19,6 +19,15 @@ class AcceptContentType public const JSON = 'json'; public const HTML = 'html'; + /** + * The URIs that should be excluded from CSRF verification. + * + * @var array + */ + protected $except = [ + 'livewire/upload-file', + ]; + /** * Handles the incoming request. * @@ -36,6 +45,11 @@ class AcceptContentType */ public function handle(Request $request, \Closure $next, string $contentType): mixed { + // Skip $except + if ($this->inExceptArray($request)) { + return $next($request); + } + if ($contentType === self::JSON) { if (!$request->expectsJson()) { throw new UnexpectedContentType(self::JSON); @@ -60,4 +74,26 @@ public function handle(Request $request, \Closure $next, string $contentType): m return $next($request); } + + /** + * Determine if the request has a URI that should pass through CSRF verification. + * + * @param \Illuminate\Http\Request $request + * + * @return bool + */ + protected function inExceptArray($request) + { + foreach ($this->except as $except) { + if ($except !== '/') { + $except = trim($except, '/'); + } + + if ($request->fullUrlIs($except) || $request->is($except)) { + return true; + } + } + + return false; + } } diff --git a/app/Http/Middleware/DisableCSP.php b/app/Http/Middleware/DisableCSP.php index 43763e2ac4..d747858bcc 100644 --- a/app/Http/Middleware/DisableCSP.php +++ b/app/Http/Middleware/DisableCSP.php @@ -3,7 +3,10 @@ namespace App\Http\Middleware; use App\Contracts\Exceptions\LycheeException; +use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Http\Request; +use Illuminate\Support\Facades\File; +use Illuminate\Support\Str; /** * Class DisableCSP. @@ -44,6 +47,31 @@ public function handle(Request $request, \Closure $next): mixed config(['secure-headers.csp.script-src.hashes.sha256' => []]); } + // disable unsafe-eval if we are on a Livewire page + if (config('app.livewire', false) === true || Str::startsWith($request->getRequestUri(), '/livewire/')) { + $this->handleLivewire(); + } + return $next($request); } + + /** + * Disabling rules because of poor decision from the designer of Livewire. + * + * @return void + * + * @throws BindingResolutionException + */ + private function handleLivewire() + { + // We have to disable unsafe-eval because Livewire requires it... + // So stupid.... + config(['secure-headers.csp.script-src.unsafe-eval' => true]); + + // if the public/hot file exists, it means that we need to disable CSP completely + // As we will be reloading on the fly the page and Vite has poor CSP support. + if (File::exists(public_path('hot'))) { + config(['secure-headers.csp.enable' => false]); + } + } } diff --git a/app/Http/Requests/Settings/SetLayoutSettingRequest.php b/app/Http/Requests/Settings/SetLayoutSettingRequest.php index c75354b105..931ce3ca6d 100644 --- a/app/Http/Requests/Settings/SetLayoutSettingRequest.php +++ b/app/Http/Requests/Settings/SetLayoutSettingRequest.php @@ -2,7 +2,7 @@ namespace App\Http\Requests\Settings; -use App\Enum\AlbumLayoutType; +use App\Enum\PhotoLayoutType; use Illuminate\Validation\Rules\Enum; class SetLayoutSettingRequest extends AbstractSettingRequest @@ -12,13 +12,13 @@ class SetLayoutSettingRequest extends AbstractSettingRequest public function rules(): array { return [ - self::ATTRIBUTE => ['required', new Enum(AlbumLayoutType::class)], + self::ATTRIBUTE => ['required', new Enum(PhotoLayoutType::class)], ]; } protected function processValidatedValues(array $values, array $files): void { $this->name = self::ATTRIBUTE; - $this->value = AlbumLayoutType::from($values[self::ATTRIBUTE]); + $this->value = PhotoLayoutType::from($values[self::ATTRIBUTE]); } } diff --git a/app/Http/Requests/User/U2FRequest.php b/app/Http/Requests/User/U2FRequest.php index 61611f71c4..8ec64a3520 100644 --- a/app/Http/Requests/User/U2FRequest.php +++ b/app/Http/Requests/User/U2FRequest.php @@ -18,6 +18,6 @@ class U2FRequest extends AbstractEmptyRequest */ public function authorize(): bool { - return Gate::check(UserPolicy::CAN_USE_2FA, [User::class]); + return Gate::check(UserPolicy::CAN_EDIT, [User::class]); } } diff --git a/app/Http/Requests/WebAuthn/DeleteCredentialRequest.php b/app/Http/Requests/WebAuthn/DeleteCredentialRequest.php index 58ca94ea38..51b39e371d 100644 --- a/app/Http/Requests/WebAuthn/DeleteCredentialRequest.php +++ b/app/Http/Requests/WebAuthn/DeleteCredentialRequest.php @@ -18,7 +18,7 @@ class DeleteCredentialRequest extends BaseApiRequest */ public function authorize(): bool { - return Gate::check(UserPolicy::CAN_USE_2FA, [User::class]); + return Gate::check(UserPolicy::CAN_EDIT, [User::class]); } public function rules(): array diff --git a/app/Http/Requests/WebAuthn/ListCredentialsRequest.php b/app/Http/Requests/WebAuthn/ListCredentialsRequest.php index 0667cb6f6e..b38a1c2137 100644 --- a/app/Http/Requests/WebAuthn/ListCredentialsRequest.php +++ b/app/Http/Requests/WebAuthn/ListCredentialsRequest.php @@ -3,9 +3,7 @@ namespace App\Http\Requests\WebAuthn; use App\Http\Requests\AbstractEmptyRequest; -use App\Models\User; -use App\Policies\UserPolicy; -use Illuminate\Support\Facades\Gate; +use Illuminate\Support\Facades\Auth; class ListCredentialsRequest extends AbstractEmptyRequest { @@ -14,6 +12,6 @@ class ListCredentialsRequest extends AbstractEmptyRequest */ public function authorize(): bool { - return Gate::check(UserPolicy::CAN_USE_2FA, [User::class]); + return Auth::check(); } } diff --git a/app/Http/Resources/Collections/AlbumCollectionResource.php b/app/Http/Resources/Collections/AlbumCollectionResource.php new file mode 100644 index 0000000000..99326aa7e4 --- /dev/null +++ b/app/Http/Resources/Collections/AlbumCollectionResource.php @@ -0,0 +1,19 @@ + Configs::getValueAsEnum('image_overlay_type', ImageOverlayType::class), 'landing_page_enable' => Configs::getValueAsBool('landing_page_enable'), 'lang' => Configs::getValueAsString('lang'), - 'layout' => Configs::getValueAsEnum('layout', AlbumLayoutType::class), + 'layout' => Configs::getValueAsEnum('layout', PhotoLayoutType::class), 'legacy_id_redirection' => Configs::getValueAsBool('legacy_id_redirection'), 'location_decoding' => Configs::getValueAsBool('location_decoding'), 'location_decoding_timeout' => Configs::getValueAsInt('location_decoding_timeout'), diff --git a/app/Http/Resources/Models/AlbumResource.php b/app/Http/Resources/Models/AlbumResource.php index b5a03fec7a..c93938cd4a 100644 --- a/app/Http/Resources/Models/AlbumResource.php +++ b/app/Http/Resources/Models/AlbumResource.php @@ -3,6 +3,7 @@ namespace App\Http\Resources\Models; use App\DTO\AlbumProtectionPolicy; +use App\Http\Resources\Collections\AlbumCollectionResource; use App\Http\Resources\Collections\PhotoCollectionResource; use App\Http\Resources\Rights\AlbumRightsResource; use App\Http\Resources\Traits\WithStatus; @@ -46,7 +47,7 @@ public function toArray($request) // children 'parent_id' => $this->resource->parent_id, 'has_albums' => !$this->resource->isLeaf(), - 'albums' => AlbumResource::collection($this->whenLoaded('children')), + 'albums' => AlbumCollectionResource::make($this->whenLoaded('children')), 'photos' => PhotoCollectionResource::make($this->whenLoaded('photos')), 'num_subalbums' => $this->resource->num_children, 'num_photos' => $this->resource->num_photos, diff --git a/app/Http/Resources/Models/PhotoResource.php b/app/Http/Resources/Models/PhotoResource.php index 54302d645e..6cb4340855 100644 --- a/app/Http/Resources/Models/PhotoResource.php +++ b/app/Http/Resources/Models/PhotoResource.php @@ -2,12 +2,17 @@ namespace App\Http\Resources\Models; +use App\Enum\LicenseType; use App\Enum\SizeVariantType; +use App\Facades\Helpers; use App\Http\Resources\Rights\PhotoRightsResource; use App\Http\Resources\Traits\WithStatus; +use App\Models\Configs; use App\Models\Extensions\SizeVariants; use App\Models\Photo; +use App\Models\SizeVariant; use App\Policies\PhotoPolicy; +use GrahamCampbell\Markdown\Facades\Markdown; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; @@ -65,12 +70,12 @@ public function toArray($request) 'description' => $this->resource->description, 'focal' => $this->resource->focal, 'img_direction' => null, - 'is_public' => $this->resource->is_public, + 'is_public' => $this->resource->is_public, // TO BE REMOVED LATER 'is_starred' => $this->resource->is_starred, 'iso' => $this->resource->iso, 'latitude' => $this->resource->latitude, 'lens' => $this->resource->lens, - 'license' => $this->resource->license->localization(), + 'license' => $this->resource->license, 'live_photo_checksum' => $this->resource->live_photo_checksum, 'live_photo_content_id' => $this->resource->live_photo_content_id, 'live_photo_url' => $this->resource->live_photo_url, @@ -83,7 +88,7 @@ public function toArray($request) 'size_variants' => [ 'medium' => $medium === null ? null : SizeVariantResource::make($medium)->toArray($request), 'medium2x' => $medium2x === null ? null : SizeVariantResource::make($medium2x)->toArray($request), - 'original' => $original === null ? null : SizeVariantResource::make($original)->noUrl($downgrade)->toArray($request), + 'original' => $original === null ? null : SizeVariantResource::make($original)->setNoUrl($downgrade)->toArray($request), 'small' => $small === null ? null : SizeVariantResource::make($small)->toArray($request), 'small2x' => $small2x === null ? null : SizeVariantResource::make($small2x)->toArray($request), 'thumb' => $thumb === null ? null : SizeVariantResource::make($thumb)->toArray($request), @@ -98,6 +103,70 @@ public function toArray($request) 'rights' => PhotoRightsResource::make($this->resource)->toArray($request), 'next_photo_id' => null, 'previous_photo_id' => null, + 'preformatted' => $this->preformatted($original), + 'precomputed' => $this->precomputed(), ]; } + + private function preformatted(?SizeVariant $original): array + { + $overlay_date_format = Configs::getValueAsString('date_format_photo_overlay'); + $date_format_uploaded = Configs::getValueAsString('date_format_sidebar_uploaded'); + $date_format_taken_at = Configs::getValueAsString('date_format_sidebar_taken_at'); + + return [ + 'created_at' => $this->resource->created_at->format($date_format_uploaded), + 'taken_at' => $this->resource->taken_at?->format($date_format_taken_at), + 'date_overlay' => ($this->resource->taken_at ?? $this->resource->created_at)->format($overlay_date_format) ?? '', + + 'shutter' => str_replace('s', 'sec', $this->resource->shutter ?? ''), + 'aperture' => str_replace('f/', '', $this->resource->aperture ?? ''), + 'iso' => sprintf(__('lychee.PHOTO_ISO'), $this->resource->iso), + 'lens' => ($this->resource->lens === '' || $this->resource->lens === null) ? '' : sprintf('(%s)', $this->resource->lens), + + 'duration' => Helpers::secondsToHMS(intval($this->resource->aperture)), + 'fps' => $this->resource->focal === null ? $this->resource->focal . ' fps' : '', + + 'filesize' => Helpers::getSymbolByQuantity($original?->filesize ?? 0), + 'resolution' => $original?->width . ' x ' . $original?->height, + 'latitude' => Helpers::decimalToDegreeMinutesSeconds($this->resource->latitude, true), + 'longitude' => Helpers::decimalToDegreeMinutesSeconds($this->resource->longitude, false), + 'altitude' => round($this->resource->altitude, 1) . 'm', + 'license' => $this->resource->license !== LicenseType::NONE ? $this->resource->license->localization() : '', + 'description' => ($this->resource->description ?? '') === '' ? '' : Markdown::convert($this->resource->description)->getContent(), + ]; + } + + private function precomputed(): array + { + return [ + 'is_video' => $this->resource->isVideo(), + 'is_raw' => $this->resource->isRaw(), + 'is_livephoto' => $this->resource->live_photo_url !== null, + 'is_camera_date' => $this->resource->taken_at !== null, + 'has_exif' => $this->genExifHash() !== '', + 'has_location' => $this->has_location(), + ]; + } + + private function has_location(): bool + { + return $this->resource->longitude !== null && + $this->resource->latitude !== null && + $this->resource->altitude !== null; + } + + private function genExifHash(): string + { + $exifHash = $this->resource->make; + $exifHash .= $this->resource->model; + $exifHash .= $this->resource->shutter; + if (!$this->resource->isVideo()) { + $exifHash .= $this->resource->aperture; + $exifHash .= $this->resource->focal; + } + $exifHash .= $this->resource->iso; + + return $exifHash; + } } diff --git a/app/Http/Resources/Models/SizeVariantResource.php b/app/Http/Resources/Models/SizeVariantResource.php index 4aa7efcfb7..382c75d08f 100644 --- a/app/Http/Resources/Models/SizeVariantResource.php +++ b/app/Http/Resources/Models/SizeVariantResource.php @@ -25,7 +25,7 @@ public function __construct(SizeVariant $sizeVariant) * * @return SizeVariantResource */ - public function noUrl(bool $noUrl): self + public function setNoUrl(bool $noUrl): self { $this->noUrl = $noUrl; diff --git a/app/Http/Resources/Rights/UserRightsResource.php b/app/Http/Resources/Rights/UserRightsResource.php index a697472850..2129ced9e6 100644 --- a/app/Http/Resources/Rights/UserRightsResource.php +++ b/app/Http/Resources/Rights/UserRightsResource.php @@ -29,7 +29,6 @@ public function toArray($request) { return [ 'can_edit' => Gate::check(UserPolicy::CAN_EDIT, [User::class]), - 'can_use_2fa' => Gate::check(UserPolicy::CAN_USE_2FA, [User::class]), ]; } } diff --git a/app/Http/RuleSets/AddAlbumRuleSet.php b/app/Http/RuleSets/AddAlbumRuleSet.php new file mode 100644 index 0000000000..ea199a81ae --- /dev/null +++ b/app/Http/RuleSets/AddAlbumRuleSet.php @@ -0,0 +1,19 @@ + ['present', new RandomIDRule(true)], + RequestAttribute::TITLE_ATTRIBUTE => ['required', new TitleRule()], + ]; + } +} diff --git a/app/Http/RuleSets/ChangeLoginRuleSet.php b/app/Http/RuleSets/ChangeLoginRuleSet.php new file mode 100644 index 0000000000..c26dc678f6 --- /dev/null +++ b/app/Http/RuleSets/ChangeLoginRuleSet.php @@ -0,0 +1,20 @@ + ['sometimes', new UsernameRule(true)], + RequestAttribute::PASSWORD_ATTRIBUTE => ['required', 'confirmed', new PasswordRule(false)], + RequestAttribute::OLD_PASSWORD_ATTRIBUTE => ['required', new PasswordRule(false)], + ]; + } +} diff --git a/app/Http/RuleSets/LoginRuleSet.php b/app/Http/RuleSets/LoginRuleSet.php new file mode 100644 index 0000000000..e8feffcc82 --- /dev/null +++ b/app/Http/RuleSets/LoginRuleSet.php @@ -0,0 +1,19 @@ + ['required', new UsernameRule()], + RequestAttribute::PASSWORD_ATTRIBUTE => ['required', new PasswordRule(false)], + ]; + } +} diff --git a/app/Http/RuleSets/Users/SetUserSettingsRuleSet.php b/app/Http/RuleSets/Users/SetUserSettingsRuleSet.php index 0be59d2221..61e5ae1ee2 100644 --- a/app/Http/RuleSets/Users/SetUserSettingsRuleSet.php +++ b/app/Http/RuleSets/Users/SetUserSettingsRuleSet.php @@ -17,7 +17,7 @@ public static function rules(): array { return [ RequestAttribute::ID_ATTRIBUTE => ['required', new IntegerIDRule(false)], - RequestAttribute::USERNAME_ATTRIBUTE => ['required', new UsernameRule()], + RequestAttribute::USERNAME_ATTRIBUTE => ['required', new UsernameRule(), 'min:1'], RequestAttribute::PASSWORD_ATTRIBUTE => ['sometimes', new PasswordRule(false)], RequestAttribute::MAY_UPLOAD_ATTRIBUTE => 'present|boolean', RequestAttribute::MAY_EDIT_OWN_SETTINGS_ATTRIBUTE => 'present|boolean', diff --git a/app/Image/Files/NativeLocalFile.php b/app/Image/Files/NativeLocalFile.php index 37fd483c1c..39df280681 100644 --- a/app/Image/Files/NativeLocalFile.php +++ b/app/Image/Files/NativeLocalFile.php @@ -95,6 +95,41 @@ public function write($stream, bool $collectStatistics = false, ?string $mimeTyp } } + /** + * If new content is written to the file, the internally cached mime + * type is cleared. + * The mime type will be re-determined again upon the next invocation of + * {@link NativeLocalFile::getMimeType()}. + * This can be avoided by passing the MIME type of the stream. + * + * @param resource $stream the input stream which provides the input to write + * @param string|null $mimeType the mime type of `$stream` + * + * @returns void + */ + public function append($stream, bool $collectStatistics = false, ?string $mimeType = null): ?StreamStat + { + try { + $streamStat = $collectStatistics ? static::appendStatFilter($stream) : null; + + if (!is_resource($this->stream)) { + $this->stream = fopen($this->getPath(), 'a+b'); + } + $this->cachedMimeType = null; + stream_copy_to_stream($stream, $this->stream); + $this->cachedMimeType = $mimeType; + // File statistics info (filesize, access mode, etc.) are cached + // by PHP to avoid costly I/O calls. + // If cache is not cleared, an old size may be reported after + // write. + clearstatcache(true, $this->getPath()); + + return $streamStat; + } catch (\ErrorException $e) { + throw new MediaFileOperationException($e->getMessage(), $e); + } + } + /** * {@inheritDoc} */ diff --git a/app/Livewire/Components/Base/ContextMenu.php b/app/Livewire/Components/Base/ContextMenu.php new file mode 100644 index 0000000000..f443978c48 --- /dev/null +++ b/app/Livewire/Components/Base/ContextMenu.php @@ -0,0 +1,78 @@ +type = $type; + $this->params = $params; + $this->style = $style; + $this->open(); + } + + /** + * Close the ContextMenu component. + * + * @return void + */ + #[On('closeContextMenu')] + public function closeContextMenu(): void + { + $this->close(); + } + + /** + * Rendering of the Component. + * + * @return View + */ + public function render(): View + { + return view('livewire.components.context-menu'); + } +} diff --git a/app/Livewire/Components/Base/Modal.php b/app/Livewire/Components/Base/Modal.php new file mode 100644 index 0000000000..231b79de9d --- /dev/null +++ b/app/Livewire/Components/Base/Modal.php @@ -0,0 +1,88 @@ + no close button + * any other string correspond to the LANG text. + * + * @var string + */ + public string $close_text = ''; + + /** + * @var array defines the arguments to be passed to the + * Livewire component loaded inside the Modal + */ + public array $params = []; + + /** + * Css properties for the modal. + * + * @var string + */ + public string $modalSize = 'md:max-w-xl'; + + /** + * Open a Modal. + * + * @param string $type defines the Component loaded inside the modal + * @param string $close_text text to put if we use a close button + * @param array $params Arguments to pass to the modal + * + * @return void + */ + #[On('openModal')] + public function openModal(string $type, string $close_text = '', array $params = []): void + { + $this->open(); + $this->type = $type; + $this->close_text = $close_text; + $this->params = $params; + } + + /** + * Close the Modal component. + * + * @return void + */ + #[On('closeModal')] + public function closeModal(): void + { + $this->close(); + } + + /** + * Rendering of the Component. + * + * @return View + */ + public function render(): View + { + return view('livewire.components.modal'); + } +} diff --git a/app/Livewire/Components/Forms/Add/ImportFromServer.php b/app/Livewire/Components/Forms/Add/ImportFromServer.php new file mode 100644 index 0000000000..ef67252571 --- /dev/null +++ b/app/Livewire/Components/Forms/Add/ImportFromServer.php @@ -0,0 +1,90 @@ +fromServer = resolve(FromServer::class); + } + + /** + * We load the parameters. + * + * @param array{parentID:?string} $params set of parameters of the form + * + * @return void + */ + public function mount(array $params = ['parentID' => null]): void + { + Gate::authorize(AlbumPolicy::CAN_IMPORT_FROM_SERVER, AbstractAlbum::class); + + $this->form->init($params[Params::PARENT_ID] ?? null); + } + + /** + * Call the parametrized rendering. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.add.import-from-server'); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } + + /** + * Hook the submit button. + * + * @return StreamedResponse + */ + public function submit(): StreamedResponse + { + Gate::authorize(AlbumPolicy::CAN_IMPORT_FROM_SERVER, AbstractAlbum::class); + + // Empty error bag + $this->resetErrorBag(); + + $this->form->prepare(); + $this->form->validate(); + + /** @var int $userId */ + $userId = Auth::id(); + + // Validate + return $this->fromServer->do($this->form->paths, $this->form->getAlbum(), $this->form->getImportMode(), $userId); + } +} diff --git a/app/Livewire/Components/Forms/Add/ImportFromUrl.php b/app/Livewire/Components/Forms/Add/ImportFromUrl.php new file mode 100644 index 0000000000..ec292b4708 --- /dev/null +++ b/app/Livewire/Components/Forms/Add/ImportFromUrl.php @@ -0,0 +1,107 @@ +fromUrl = resolve(FromUrl::class); + } + + public ImportFromUrlForm $form; + + /** + * We load the parameters. + * + * @param array{parentID:?string} $params set of parameters of the form + * + * @return void + */ + public function mount(array $params = ['parentID' => null]): void + { + $albumId = $params[Params::PARENT_ID] ?? null; + + /** @var Album $album */ + $album = $albumId === null ? null : Album::query()->findOrFail($albumId); + + Gate::authorize(AlbumPolicy::CAN_UPLOAD, [AbstractAlbum::class, $album]); + + $this->form->init($albumId); + } + + /** + * Call the parametrized rendering. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.add.import-from-url'); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } + + /** + * A form has a Submit method. + * + * @return void + */ + public function submit(): void + { + // Reset error bag + $this->resetErrorBag(); + + $this->form->prepare(); + $this->form->validate(); + + Gate::authorize(AlbumPolicy::CAN_UPLOAD, [AbstractAlbum::class, $this->form->getAlbum()]); + + /** @var int $userId */ + $userId = Auth::id(); + + try { + $this->fromUrl->do($this->form->urls, $this->form->getAlbum(), $userId); + $this->notify(__('lychee.UPLOAD_IMPORT_COMPLETE')); + } catch (MassImportException $e) { + $this->notify($e->getMessage()); + } + // Do we want refresh or direcly open newly created Album ? + $this->dispatch('reloadPage')->to(PageGalleryAlbum::class); + $this->close(); + } +} diff --git a/app/Livewire/Components/Forms/Add/Upload.php b/app/Livewire/Components/Forms/Add/Upload.php new file mode 100644 index 0000000000..55834adc01 --- /dev/null +++ b/app/Livewire/Components/Forms/Add/Upload.php @@ -0,0 +1,169 @@ + */ + public array $uploads = []; + + public int $chunkSize; + public int $parallelism; + + /** + * Mount the component. + * + * @param array{parentID:?string} $params + * + * @return void + */ + public function mount(array $params = ['parentID' => null]): void + { + $this->albumId = $params[Params::PARENT_ID] ?? null; + $album = $this->albumId === null ? null : Album::findOrFail($this->albumId); + Gate::authorize(AlbumPolicy::CAN_UPLOAD, [AbstractAlbum::class, $album]); + + $this->chunkSize = self::getUploadLimit(); + $this->parallelism = Configs::getValueAsInt('upload_processing_limit'); + } + + public function render(): View + { + return view('livewire.forms.add.upload'); + } + + /** + * @param TemporaryUploadedFile $value + * @param string $key + * + * @return void + */ + public function updatedUploads($value, string $key): void + { + $keys = explode('.', $key); + $index = intval($keys[0]); + $attribute = $keys[1] ?? null; + + $fileDetails = $this->uploads[$index]; + // Initialize data if not existing. + $fileDetails['extension'] ??= '.' . pathinfo($fileDetails['fileName'], PATHINFO_EXTENSION); + $fileDetails['uuidName'] ??= strtr(base64_encode(random_bytes(12)), '+/', '-_') . $fileDetails['extension']; + + // Ensure data are set + $this->uploads[$index]['extension'] = $fileDetails['extension']; + $this->uploads[$index]['uuidName'] = $fileDetails['uuidName']; + $this->uploads[$index]['stage'] = $fileDetails['stage'] ?? FileStatus::UPLOADING->value; + $this->uploads[$index]['progress'] = $fileDetails['progress'] ?? 0; + + if ($attribute === 'fileChunk') { + $fileDetails = $this->uploads[$index]; + /** @var TemporaryUploadedFile $chunkFile */ + $chunkFile = $fileDetails['fileChunk']; + $final = new NativeLocalFile(Storage::path('/livewire-tmp/' . $fileDetails['uuidName'])); + $final->append($chunkFile->readStream()); + $chunkFile->delete(); + + $curSize = $final->getFilesize(); + + $this->uploads[$index]['progress'] = intval($curSize / $fileDetails['fileSize'] * 100); + if ($this->uploads[$index]['progress'] === 100) { + $this->uploads[$index]['stage'] = FileStatus::READY->value; + } + } + + $this->triggerProcessing(); + } + + public function triggerProcessing(): void + { + foreach ($this->uploads as $idx => $fileData) { + if ($fileData['stage'] === FileStatus::READY->value) { + $uploadedFile = new NativeLocalFile(Storage::path('/livewire-tmp/' . $fileData['uuidName'])); + $processableFile = new ProcessableJobFile( + $fileData['extension'], + $fileData['fileName'] + ); + $processableFile->write($uploadedFile->read()); + $uploadedFile->close(); + $uploadedFile->delete(); + $processableFile->close(); + // End of work-around + + try { + $this->uploads[$idx]['stage'] = FileStatus::PROCESSING->value; + + if (Configs::getValueAsBool('use_job_queues')) { + ProcessImageJob::dispatch($processableFile, $this->albumId, $fileData['lastModified']); + } else { + ProcessImageJob::dispatchSync($processableFile, $this->albumId, $fileData['lastModified']); + } + $this->uploads[$idx]['stage'] = FileStatus::DONE->value; + } catch (PhotoSkippedException $e) { + $this->uploads[$idx]['stage'] = FileStatus::SKIPPED->value; + } + } + } + } + + public static function getUploadLimit(): int + { + $size = Configs::getValueAsInt('upload_chunk_size'); + if ($size === 0) { + $size = (int) min( + Helpers::convertSize(ini_get('upload_max_filesize')), + Helpers::convertSize(ini_get('post_max_size')), + Helpers::convertSize(ini_get('memory_limit')) / 10 + ); + } + + /** @var array $rules */ + $rules = FileUploadConfiguration::rules(); + $sizeRule = collect($rules)->first(fn ($rule) => Str::startsWith($rule, 'max:'), 'max:12288'); + $LivewireSizeLimit = intval(Str::substr($sizeRule, 4)) * 1024; + + return min($size, $LivewireSizeLimit); + } + + /** + * Close the modal containing the Upload panel. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Album/Create.php b/app/Livewire/Components/Forms/Album/Create.php new file mode 100644 index 0000000000..f41674e34d --- /dev/null +++ b/app/Livewire/Components/Forms/Album/Create.php @@ -0,0 +1,104 @@ +parent_id = $params[Params::PARENT_ID]; + Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, [$this->parent_id]]); + } + + /** + * Call the parametrized rendering. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.add.create'); + } + + /** + * A form has a Submit method. + * + * @return void + */ + public function submit(): void + { + // Reset error bag + $this->resetErrorBag(); + + // Validate + $this->validate(); + + /** @var Album|null $parentAlbum */ + $parentAlbum = $this->parent_id === null ? null : Album::query()->findOrFail($this->parent_id); + + // Authorize + Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $parentAlbum]); + + /** @var int $ownerId */ + $ownerId = Auth::id() ?? throw new UnauthenticatedException(); + $create = new AlbumCreate($ownerId); + $new_album = $create->create($this->title, $parentAlbum); + + // Do we want refresh or direcly open newly created Album ? + $this->close(); + $this->redirect(route('livewire-gallery-album', ['albumId' => $new_album->id]), true); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Album/CreateTag.php b/app/Livewire/Components/Forms/Album/CreateTag.php new file mode 100644 index 0000000000..c280045ec7 --- /dev/null +++ b/app/Livewire/Components/Forms/Album/CreateTag.php @@ -0,0 +1,103 @@ +create = resolve(CreateTagAlbum::class); + } + + /** + * This defines the set of validation rules to be applied on the input. + * It would be a good idea to unify (namely reuse) the rules from the JSON api. + * + * @return array + */ + protected function rules(): array + { + return AddTagAlbumRuleSet::rules(); + } + + /** + * Mount the component. + * + * @param array $params + * + * @return void + */ + public function mount(array $params = []): void + { + Gate::authorize(AlbumPolicy::CAN_UPLOAD, [AbstractAlbum::class, null]); + } + + /** + * Call the parametrized rendering. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.add.create-tag'); + } + + /** + * A form has a Submit method. + * + * @return void + */ + public function submit(): void + { + // Reset error bag + $this->resetErrorBag(); + + $this->tags = explode(',', $this->tag); + + // Validate + $this->validate(); + + // Authorize + Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, null]); + + // Create + $new_album = $this->create->create($this->title, $this->tags); + + // Do we want refresh or direcly open newly created Album ? + $this->close(); + $this->redirect(route('livewire-gallery-album', ['albumId' => $new_album->id]), true); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Album/Delete.php b/app/Livewire/Components/Forms/Album/Delete.php new file mode 100644 index 0000000000..8581e4e6e5 --- /dev/null +++ b/app/Livewire/Components/Forms/Album/Delete.php @@ -0,0 +1,97 @@ + */ + #[Locked] public array $albumIDs; + #[Locked] public string $parent_id; + #[Locked] public string $title = ''; + #[Locked] public int $num; + private AlbumFactory $albumFactory; + private DeleteAction $deleteAction; + + public function boot(): void + { + $this->albumFactory = resolve(AlbumFactory::class); + $this->deleteAction = resolve(DeleteAction::class); + } + + /** + * This is the equivalent of the constructor for Livewire Components. + * + * @param array{albumID?:string,albumIDs?:array,parentID:?string} $params to delete + * + * @return void + */ + public function mount(array $params = ['parentID' => null]): void + { + $id = $params[Params::ALBUM_ID] ?? null; + $this->albumIDs = $id !== null ? [$id] : $params[Params::ALBUM_IDS] ?? []; + $this->num = count($this->albumIDs); + + if ($this->num === 1) { + $this->title = $this->albumFactory->findBaseAlbumOrFail($this->albumIDs[0])->title; + } + + Gate::authorize(AlbumPolicy::CAN_DELETE_ID, [AbstractAlbum::class, $this->albumIDs]); + $this->parent_id = $params[Params::PARENT_ID] ?? SmartAlbumType::UNSORTED->value; + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.album.delete'); + } + + /** + * Execute deletion. + * + * @return void + */ + public function delete(): void + { + $this->validate(DeleteAlbumsRuleSet::rules()); + + Gate::authorize(AlbumPolicy::CAN_DELETE_ID, [AbstractAlbum::class, $this->albumIDs]); + + $fileDeleter = $this->deleteAction->do($this->albumIDs); + App::terminating(fn () => $fileDeleter->do()); + + $this->redirect(route('livewire-gallery-album', ['albumId' => $this->parent_id]), true); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Album/DeletePanel.php b/app/Livewire/Components/Forms/Album/DeletePanel.php new file mode 100644 index 0000000000..073e99eaa8 --- /dev/null +++ b/app/Livewire/Components/Forms/Album/DeletePanel.php @@ -0,0 +1,89 @@ + */ + #[Locked] public array $albumIDs; + #[Locked] public string $title; + private AlbumFactory $albumFactory; + private DeleteAction $deleteAction; + + public function boot(): void + { + $this->albumFactory = resolve(AlbumFactory::class); + $this->deleteAction = resolve(DeleteAction::class); + } + + /** + * This is the equivalent of the constructor for Livewire Components. + * + * @param BaseAlbum $album to update the attributes of + * + * @return void + */ + public function mount(BaseAlbum $album): void + { + Gate::authorize(AlbumPolicy::CAN_DELETE, [AbstractAlbum::class, $album]); + + $this->albumIDs = [$album->id]; + $this->title = $album->title; + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.album.delete-panel'); + } + + /** + * Execute deletion. + * + * @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse + */ + public function delete(): \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse + { + $this->validate(DeleteAlbumsRuleSet::rules()); + + $baseAlbum = $this->albumFactory->findBaseAlbumOrFail($this->albumIDs[0], false); + + Gate::authorize(AlbumPolicy::CAN_DELETE, $baseAlbum); + + $parent_id = ($baseAlbum instanceof Album) ? $baseAlbum->parent_id : null; + + $fileDeleter = $this->deleteAction->do([$baseAlbum->id]); + App::terminating(fn () => $fileDeleter->do()); + + if ($parent_id !== null) { + return redirect()->to(route('livewire-gallery-album', ['albumId' => $parent_id])); + } + + return redirect()->to(route('livewire-gallery')); + } +} diff --git a/app/Livewire/Components/Forms/Album/Merge.php b/app/Livewire/Components/Forms/Album/Merge.php new file mode 100644 index 0000000000..e9654f24c5 --- /dev/null +++ b/app/Livewire/Components/Forms/Album/Merge.php @@ -0,0 +1,134 @@ + */ + #[Locked] public array $albumIDs; + #[Locked] public string $titleMoved = ''; + #[Locked] public int $num; + // Destination + #[Locked] public ?string $albumID = null; + #[Locked] public ?string $title = null; + #[Locked] public ?int $lft = null; + #[Locked] public ?int $rgt = null; + private AlbumFactory $albumFactory; + private AlbumMerge $mergeAlbums; + + public function boot(): void + { + $this->albumFactory = resolve(AlbumFactory::class); + $this->mergeAlbums = resolve(AlbumMerge::class); + } + + /** + * This is the equivalent of the constructor for Livewire Components. + * + * @param array{albumID?:string,albumIDs?:array,parentID:?string} $params to move + * + * @return void + */ + public function mount(array $params = ['parentID' => null]): void + { + $id = $params[Params::ALBUM_ID] ?? null; + $this->albumIDs = $id !== null ? [$id] : $params[Params::ALBUM_IDS] ?? []; + $this->num = count($this->albumIDs); + + if ($this->num === 1) { + /** @var Album $album */ + $album = $this->albumFactory->findBaseAlbumOrFail($this->albumIDs[0], false); + $this->lft = $album->_lft; + $this->rgt = $album->_rgt; + } elseif ($this->num > 1) { + $this->albumID = array_shift($this->albumIDs); + $this->title = $this->albumFactory->findBaseAlbumOrFail($this->albumID, false)->title; + } + + if (count($this->albumIDs) === 1) { + $this->titleMoved = $this->albumFactory->findBaseAlbumOrFail($this->albumIDs[0], false)->title; + } + + Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]); + $this->parent_id = $params[Params::PARENT_ID] ?? null; + } + + /** + * Prepare confirmation step. + * + * @param string $id + * @param string $title + * + * @return void + */ + public function setAlbum(string $id, string $title): void + { + $this->albumID = $id; + $this->title = $title; + } + + public function submit(): void + { + $this->albumID = $this->albumID === '' ? null : $this->albumID; + + $this->validate(MergeAlbumsRuleSet::rules()); + Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]); + + /** @var ?Album $album */ + $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID); + Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $album]); + + // `findOrFail` returns a union type, but we know that it returns the + // correct collection in this case + /** @var Collection $albums */ + $albums = Album::query()->findOrFail($this->albumIDs); + + $this->mergeAlbums->do($album, $albums); + + if ($this->parent_id !== null) { + $this->redirect(route('livewire-gallery-album', ['albumId' => $this->parent_id]), true); + } else { + $this->redirect(route('livewire-gallery'), true); + } + $this->close(); + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.album.merge'); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Album/Move.php b/app/Livewire/Components/Forms/Album/Move.php new file mode 100644 index 0000000000..24ddcd49e3 --- /dev/null +++ b/app/Livewire/Components/Forms/Album/Move.php @@ -0,0 +1,127 @@ + */ + #[Locked] public array $albumIDs; + #[Locked] public string $titleMoved = ''; + #[Locked] public int $num; + // Destination + #[Locked] public ?string $albumID = null; + #[Locked] public ?string $title = null; + #[Locked] public int $lft; + #[Locked] public int $rgt; + private AlbumFactory $albumFactory; + private AlbumMove $moveAlbums; + + public function boot(): void + { + $this->albumFactory = resolve(AlbumFactory::class); + $this->moveAlbums = resolve(AlbumMove::class); + } + + /** + * This is the equivalent of the constructor for Livewire Components. + * + * @param array{albumID?:string,albumIDs?:array,parentID:?string} $params to move + * + * @return void + */ + public function mount(array $params = ['parentID' => null]): void + { + $id = $params[Params::ALBUM_ID] ?? null; + $this->albumIDs = $id !== null ? [$id] : $params[Params::ALBUM_IDS] ?? []; + $this->num = count($this->albumIDs); + + if ($this->num === 1) { + /** @var Album $album */ + $album = $this->albumFactory->findBaseAlbumOrFail($this->albumIDs[0], false); + $this->titleMoved = $album->title; + $this->lft = $album->_lft; + $this->rgt = $album->_rgt; + } + + Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]); + $this->parent_id = $params[Params::PARENT_ID] ?? null; + } + + /** + * Prepare confirmation step. + * + * @param string $id + * @param string $title + * + * @return void + */ + public function setAlbum(string $id, string $title): void + { + $this->albumID = $id; + $this->title = $title; + } + + public function submit(): void + { + $this->albumID = $this->albumID === '' ? null : $this->albumID; + + $this->validate(MoveAlbumsRuleSet::rules()); + Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]); + + /** @var ?Album $album */ + $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID); + Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $album]); + + // `findOrFail` returns a union type, but we know that it returns the + // correct collection in this case + /** @var Collection $albums */ + $albums = Album::query()->findOrFail($this->albumIDs); + $this->moveAlbums->do($album, $albums); + + if ($this->parent_id !== null) { + $this->redirect(route('livewire-gallery-album', ['albumId' => $this->parent_id]), true); + } else { + $this->redirect(route('livewire-gallery'), true); + } + $this->close(); + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.album.move'); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Album/MovePanel.php b/app/Livewire/Components/Forms/Album/MovePanel.php new file mode 100644 index 0000000000..38041ca154 --- /dev/null +++ b/app/Livewire/Components/Forms/Album/MovePanel.php @@ -0,0 +1,111 @@ + */ + #[Locked] public array $albumIDs; + #[Locked] public ?string $titleMoved; + // Destination + #[Locked] public ?string $albumID = null; + #[Locked] public ?string $title = null; + #[Locked] public ?string $parent_id = null; + #[Locked] public int $lft; + #[Locked] public int $rgt; + private AlbumMove $moveAlbums; + + public function boot(): void + { + $this->moveAlbums = resolve(AlbumMove::class); + } + + /** + * This is the equivalent of the constructor for Livewire Components. + * + * @param Album $album to update the attributes of + * + * @return void + */ + public function mount(Album $album): void + { + Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $album]); + + $this->albumIDs = [$album->id]; + $this->titleMoved = $album->title; + $this->lft = $album->_lft; + $this->rgt = $album->_rgt; + $this->parent_id = $album->parent_id; + } + + /** + * Prepare confirmation step. + * + * @param string $id + * @param string $title + * + * @return void + */ + public function setAlbum(string $id, string $title) + { + $this->albumID = $id; + $this->title = $title; + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.album.move-panel'); + } + + /** + * Execute transfer of ownership. + */ + public function move(): void + { + $this->areValid(MoveAlbumsRuleSet::rules()); + + // set default for root. + $this->albumID = $this->albumID === '' ? null : $this->albumID; + Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]); + + /** @var ?Album $album */ + $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID); + Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $album]); + + // `findOrFail` returns a union type, but we know that it returns the + // correct collection in this case + /** @var Collection $albums */ + $albums = Album::query()->findOrFail($this->albumIDs); + $this->moveAlbums->do($album, $albums); + + if ($this->parent_id !== null) { + $this->redirect(route('livewire-gallery-album', ['albumId' => $this->parent_id]), true); + } else { + $this->redirect(route('livewire-gallery'), true); + } + } +} diff --git a/app/Livewire/Components/Forms/Album/Properties.php b/app/Livewire/Components/Forms/Album/Properties.php new file mode 100644 index 0000000000..108544ea0d --- /dev/null +++ b/app/Livewire/Components/Forms/Album/Properties.php @@ -0,0 +1,137 @@ +albumID = $album->id; + $this->title = $album->title; + $this->description = $album->description ?? ''; + $this->sorting_column = $album->sorting?->column->value ?? ''; + $this->sorting_order = $album->sorting?->order->value ?? ''; + if ($album instanceof ModelsAlbum) { + $this->license = $album->license->value; + } + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.album.properties'); + } + + /** + * Update Username & Password of current user. + */ + public function submit(AlbumFactory $albumFactory): void + { + $rules = [ + RequestAttribute::TITLE_ATTRIBUTE => ['required', new TitleRule()], + RequestAttribute::LICENSE_ATTRIBUTE => ['required', new Enum(LicenseType::class)], + ...SetAlbumDescriptionRuleSet::rules(), + ...SetAlbumSortingRuleSet::rules(), + ]; + + if (!$this->areValid($rules)) { + return; + } + + $baseAlbum = $albumFactory->findBaseAlbumOrFail($this->albumID, false); + Gate::authorize(AlbumPolicy::CAN_EDIT, $baseAlbum); + + $baseAlbum->title = $this->title; + $baseAlbum->description = $this->description; + + // Not super pretty but whatever. + $column = ColumnSortingPhotoType::tryFrom($this->sorting_column); + $order = OrderSortingType::tryFrom($this->sorting_order); + $sortingCriterion = $column === null ? null : new PhotoSortingCriterion($column->toColumnSortingType(), $order); + + $baseAlbum->sorting = $sortingCriterion; + + if ($baseAlbum instanceof ModelsAlbum) { + $baseAlbum->license = LicenseType::from($this->license); + } + + $this->notify(__('lychee.CHANGE_SUCCESS')); + $baseAlbum->save(); + } + + /** + * Return computed property so that it does not stay in memory. + * + * @return array column sorting + */ + final public function getPhotoSortingColumnsProperty(): array + { + // ? Dark magic: The ... will expand the array. + return ['' => '-', ...ColumnSortingPhotoType::localized()]; + } + + /** + * Return computed property so that it does not stay in memory. + * + * @return array order + */ + final public function getSortingOrdersProperty(): array + { + // ? Dark magic: The ... will expand the array. + return ['' => '-', ...OrderSortingType::localized()]; + } + + final public function getLicensesProperty(): array + { + return LicenseType::localized(); + } +} diff --git a/app/Livewire/Components/Forms/Album/Rename.php b/app/Livewire/Components/Forms/Album/Rename.php new file mode 100644 index 0000000000..b830776f26 --- /dev/null +++ b/app/Livewire/Components/Forms/Album/Rename.php @@ -0,0 +1,93 @@ + */ + #[Locked] public array $albumIDs; + #[Locked] public int $num; + public string $title = ''; + + private AlbumFactory $albumFactory; + + public function boot(): void + { + $this->albumFactory = resolve(AlbumFactory::class); + } + + /** + * This is the equivalent of the constructor for Livewire Components. + * + * @param array{albumID?:string,albumIDs?:array,parentID:?string} $params to move + * + * @return void + */ + public function mount(array $params = ['parentID' => null]): void + { + $id = $params[Params::ALBUM_ID] ?? null; + $this->albumIDs = $id !== null ? [$id] : $params[Params::ALBUM_IDS] ?? []; + $this->num = count($this->albumIDs); + + if ($this->num === 1) { + $this->title = $this->albumFactory->findBaseAlbumOrFail($this->albumIDs[0], false)->title; + } + + Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]); + $this->parent_id = $params[Params::PARENT_ID] ?? SmartAlbumType::UNSORTED->value; + } + + /** + * Rename. + * + * @return void + */ + public function submit(): void + { + $this->validate(SetAlbumsTitleRuleSet::rules()); + Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]); + BaseAlbumImpl::query()->whereIn('id', $this->albumIDs)->update(['title' => $this->title]); + + $this->close(); + $this->dispatch('reloadPage')->to(GalleryAlbum::class); + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.album.rename'); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Album/SearchAlbum.php b/app/Livewire/Components/Forms/Album/SearchAlbum.php new file mode 100644 index 0000000000..2a71f53579 --- /dev/null +++ b/app/Livewire/Components/Forms/Album/SearchAlbum.php @@ -0,0 +1,182 @@ +albumListSaved = $this->getAlbumsListWithPath($lft, $rgt, $parent_id); + } + + /** + * Give the tree of albums owned by the user. + * + * @return Collection + */ + public function getAlbumListProperty(): Collection + { + $filtered = collect($this->albumListSaved); + if ($this->search !== null && trim($this->search) !== '') { + return $filtered->filter(function (array $album) { + return Str::contains($album['title'], ltrim($this->search), true); + }); + } + + return $filtered; + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.album.search-album'); + } + + private function getAlbumsListWithPath(?int $lft, ?int $rgt, ?string $parent_id): array + { + $albumQueryPolicy = resolve(AlbumQueryPolicy::class); + $unfiltered = $albumQueryPolicy->applyReachabilityFilter( + // We remove all sub albums + // Otherwise it would create cyclic dependency + Album::query() + ->when($lft !== null, + fn ($q) => $q->where('_lft', '<', $lft)->orWhere('_rgt', '>', $rgt)) + ); + $sorting = AlbumSortingCriterion::createDefault(); + $query = (new SortingDecorator($unfiltered)) + ->orderBy($sorting->column, $sorting->order); + + /** @var NsCollection $albums */ + $albums = $query->get(); + $tree = $albums->toTree(null); + + $flat_tree = $this->flatten($tree); + + // Prepend with the possibility to move to root if parent is not already root. + if ($parent_id !== null) { + array_unshift( + $flat_tree, + [ + 'id' => null, + 'title' => __('lychee.ROOT'), + 'original' => __('lychee.ROOT'), + 'short_title' => __('lychee.ROOT'), + 'thumb' => 'img/no_images.svg', + ] + ); + } + + return $flat_tree; + } + + /** + * Flatten the tree and create bread crumb paths. + * + * @param mixed $collection + * @param string $prefix + * + * @return array + */ + private function flatten($collection, $prefix = ''): array + { + $flatArray = []; + foreach ($collection as $node) { + $title = $prefix . ($prefix !== '' ? '/' : '') . $node->title; + $short_title = $this->shorten($title); + $flatArray[] = [ + 'id' => $node->id, + 'title' => $title, + 'original' => $node->title, + 'short_title' => $short_title, + 'thumb' => $node->thumb?->thumbUrl ?? 'img/no_images.svg', + ]; + if ($node->children !== null) { + $flatArray = array_merge($flatArray, $this->flatten($node->children, $title)); + unset($node->children); + } + } + + return $flatArray; + } + + /** + * shorten the title to reach a targetted length. + * + * @param string $title to shorten + * + * @return string short version with elipsis + */ + private function shorten(string $title): string + { + $len = strlen($title); + + if ($len < self::SHORTEN_BY) { + return $title; + } + /** @var Collection $title_split */ + $title_split = collect(explode('/', $title)); + $last_elem = $title_split->last(); + $len_last_elem = strlen($last_elem); + + $num_chunks = $title_split->count() - 1; + + if ($num_chunks === 0) { + return Str::limit($last_elem, self::SHORTEN_BY, '…'); + } + + $title_split = $title_split->take($num_chunks); + /** @var Collection $title_lengths */ + $title_lengths = $title_split->map(fn ($v) => strlen($v)); + + // find best target length. + + $len_to_reduce = self::SHORTEN_BY - $len_last_elem - 2 * $num_chunks; + $unit_target_len = (int) ceil($len_to_reduce / $num_chunks); + + do { + $unit_target_len--; + $title_lengths = $title_lengths->map(fn ($v) => $v <= $unit_target_len ? $v : $unit_target_len + 1); + $resulting_len = $title_lengths->sum(); + } while ($len_to_reduce < $resulting_len); + + $title_split = $title_split->map(fn ($v) => Str::limit($v, $unit_target_len, '…')); + + return implode('/', $title_split->all()) . '/' . $last_elem; + } + + public function placeholder(): string + { + return "
Loading album list...
"; + } +} diff --git a/app/Livewire/Components/Forms/Album/ShareWith.php b/app/Livewire/Components/Forms/Album/ShareWith.php new file mode 100644 index 0000000000..f853041c19 --- /dev/null +++ b/app/Livewire/Components/Forms/Album/ShareWith.php @@ -0,0 +1,155 @@ +album = $album; + Gate::authorize(AlbumPolicy::CAN_SHARE_WITH_USERS, [AbstractAlbum::class, $this->album]); + $this->resetData(); + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.album.share-with'); + } + + /** + * Return the list of users to share with. + * This is basically: + * - Not the current user. + * - Not the owner of the album (just to be sure) + * - Not the admins (they already have all access) + * - Not users which have already been shared. + * + * @return array + * + * @throws UnauthorizedException + * @throws QueryBuilderException + */ + public function getUserListProperty(): array + { + $alreadySelected = collect($this->perms) + ->map(fn (AccessPermission $perm) => $perm->user_id) + ->all(); + + $id = Auth::id() ?? throw new UnauthorizedException(); + $filtered = User::query() + ->where('id', '<>', $id) + ->where('id', '<>', $this->album->owner_id) + ->where('may_administrate', '<>', true) + ->whereNotIn('id', $alreadySelected) + ->orderBy('username', 'ASC') + ->get() + ->map(fn (User $usr) => ['id' => $usr->id, 'username' => $usr->username]); + + if ($this->search !== null && trim($this->search) !== '') { + return $filtered->filter(function (array $album) { + return Str::contains($album['username'], ltrim($this->search), true); + })->all(); + } + + return $filtered->all(); + } + + public function add(): void + { + Gate::authorize(AlbumPolicy::CAN_SHARE_WITH_USERS, [AbstractAlbum::class, $this->album]); + + $perm = new AccessPermission(); + $perm->user_id = $this->userID; + $perm->base_album_id = $this->album->id; + $perm->grants_full_photo_access = $this->grants_full_photo_access; + $perm->grants_download = $this->grants_download; + $perm->grants_upload = $this->grants_upload; + $perm->grants_edit = $this->grants_edit; + $perm->grants_delete = $this->grants_delete; + $perm->save(); + + $this->resetData(); + } + + public function select(int $userID, string $username): void + { + $this->userID = $userID; + $this->username = $username; + } + + public function clearUsername(): void + { + $this->userID = null; + $this->username = null; + } + + private function resetData(): void + { + $this->perms = $this->album->access_permissions()->with(['user', 'album'])->whereNotNull('user_id')->get()->all(); + $this->grants_download = Configs::getValueAsBool('grants_download'); + $this->grants_full_photo_access = Configs::getValueAsBool('grants_full_photo_access'); + $this->grants_upload = false; + $this->grants_edit = false; + $this->grants_delete = false; + $this->search = null; + $this->userID = null; + $this->username = null; + } + + public function delete(int $id): void + { + $perm = AccessPermission::with('album')->findOrFail($id); + Gate::authorize(AlbumPolicy::CAN_SHARE_WITH_USERS, [AbstractAlbum::class, $perm->album]); + + AccessPermission::query()->where('id', '=', $id)->delete(); + $this->resetData(); + } +} diff --git a/app/Livewire/Components/Forms/Album/ShareWithLine.php b/app/Livewire/Components/Forms/Album/ShareWithLine.php new file mode 100644 index 0000000000..e42d1483d6 --- /dev/null +++ b/app/Livewire/Components/Forms/Album/ShareWithLine.php @@ -0,0 +1,83 @@ +album]); + + $this->album_title = $album_title; + $this->perm = $perm; + $this->username = $perm->user->username; + $this->grants_full_photo_access = $perm->grants_full_photo_access; + $this->grants_download = $perm->grants_download; + $this->grants_upload = $perm->grants_upload; + $this->grants_edit = $perm->grants_edit; + $this->grants_delete = $perm->grants_delete; + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.album.share-with-line'); + } + + /** + * This runs after a wired property is updated. + * + * @param mixed $field + * @param mixed $value + * + * @return void + */ + public function updated($field, $value): void + { + Gate::authorize(AlbumPolicy::CAN_SHARE_WITH_USERS, [AbstractAlbum::class, $this->perm->album]); + + $this->perm->grants_full_photo_access = $this->grants_full_photo_access; + $this->perm->grants_download = $this->grants_download; + $this->perm->grants_upload = $this->grants_upload; + $this->perm->grants_edit = $this->grants_edit; + $this->perm->grants_delete = $this->grants_delete; + $this->perm->save(); + $this->notify(__('lychee.CHANGE_SUCCESS')); + } +} diff --git a/app/Livewire/Components/Forms/Album/Transfer.php b/app/Livewire/Components/Forms/Album/Transfer.php new file mode 100644 index 0000000000..1c6e0aa785 --- /dev/null +++ b/app/Livewire/Components/Forms/Album/Transfer.php @@ -0,0 +1,121 @@ +albumID = $album->id; + $this->title = $album->title; + $this->current_owner = $album->owner_id; + $this->username = $this->getUsersProperty()[0]; + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.album.transfer'); + } + + /** + * Return a table with the user_id and associated username. + * + * @return array list of usernames + */ + public function getUsersProperty(): array + { + return User::query() + ->select('username') + ->where('id', '<>', $this->current_owner) + ->orderBy('id', 'ASC') + ->pluck('username') + ->all(); + } + + /** + * Execute transfer of ownership. + * + * @param AlbumFactory $albumFactory + * + * @return RedirectResponse|View + */ + public function transfer(AlbumFactory $albumFactory) + { + $this->areValid([ + 'albumID' => ['required', new AlbumIDRule(false)], + 'username' => ['required', new UsernameRule()], + ]); + + $baseAlbum = $albumFactory->findBaseAlbumOrFail($this->albumID, false); + + // We use CAN DELETE because it is pretty much the same. Only the owner and admin can transfer ownership + Gate::authorize(AlbumPolicy::CAN_DELETE, $baseAlbum); + + $userId = User::query() + ->select(['id']) + ->where('username', '=', $this->username) + ->firstOrFail(['id'])->id; + + $baseAlbum->owner_id = $userId; + $baseAlbum->save(); + + // If this is an Album, we also need to fix the children and photos ownership + if ($baseAlbum instanceof Album) { + $baseAlbum->makeRoot(); + $baseAlbum->save(); + $baseAlbum->fixOwnershipOfChildren(); + } + + // If we are not an administrator, this mean we no longer have access. + if (Auth::user()->may_administrate !== true) { + return redirect()->to(route('livewire-gallery')); + } + + // Remount the component and re-render. + $this->mount($baseAlbum); + $this->notify('Transfer successful!'); + + return $this->render(); + } +} diff --git a/app/Livewire/Components/Forms/Album/UnlockAlbum.php b/app/Livewire/Components/Forms/Album/UnlockAlbum.php new file mode 100644 index 0000000000..4dbac54c15 --- /dev/null +++ b/app/Livewire/Components/Forms/Album/UnlockAlbum.php @@ -0,0 +1,76 @@ +unlock = resolve(Unlock::class); + $this->albumFactory = resolve(AlbumFactory::class); + } + + /** + * This is the equivalent of the constructor for Livewire Components. + * + * @param $albumID album to unlock + * + * @return void + */ + public function mount(string $albumID): void + { + $this->albumID = $albumID; + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.album.unlock-album'); + } + + /** + * Method called from the front-end to unlock the album when given a password. + * This will throw an exception on failure! + * + * @return void + */ + public function submit(): void + { + if (!$this->areValid(UnlockAlbumRuleSet::rules())) { + return; + } + + $album = $this->albumFactory->findBaseAlbumOrFail($this->albumID); + $this->unlock->do($album, $this->password); + $this->redirect(route('livewire-gallery-album', ['albumId' => $this->albumID])); + } +} diff --git a/app/Livewire/Components/Forms/Album/Visibility.php b/app/Livewire/Components/Forms/Album/Visibility.php new file mode 100644 index 0000000000..71fabdd06a --- /dev/null +++ b/app/Livewire/Components/Forms/Album/Visibility.php @@ -0,0 +1,147 @@ +albumID = $album->id; + $this->is_nsfw = $album->is_nsfw; + + /** @var AccessPermission $perm */ + $perm = $album->public_permissions(); + + $this->is_public = $perm !== null; + if ($this->is_public) { + $this->setPublic($perm); + } + } + + /** + * When we initialize, we also need to update the public attributes of the components. + * + * @param AccessPermission $perm + * + * @return void + */ + private function setPublic(AccessPermission $perm): void + { + $this->grants_full_photo_access = $perm->grants_full_photo_access; + $this->is_link_required = $perm->is_link_required; + $this->grants_download = $perm->grants_download; + $this->is_password_required = $perm->password !== null; + // ! We do NOT load the password as we do not want to expose it. + } + + /** + * When we set to Private, we automatically reset the all the attributes to false. + * The AccessPermission object associated will be destroyed later, as such it is better to reset the data. + * + * @return void + */ + private function setPrivate(): void + { + $this->grants_full_photo_access = false; + $this->is_link_required = false; + $this->is_password_required = false; + $this->grants_download = false; + $this->password = null; + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.album.visibility'); + } + + /** + * If any attributes are changed, we call this. + * + * @return void + */ + public function updated() + { + $albumFactory = resolve(AlbumFactory::class); + $baseAlbum = $albumFactory->findBaseAlbumOrFail($this->albumID, false); + + $this->validate(SetAlbumProtectionPolicyRuleSet::rules()); + + Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $baseAlbum]); + + if (!$this->is_public) { + $this->setPrivate(); + } + + $albumProtectionPolicy = new AlbumProtectionPolicy( + is_public: $this->is_public, + is_link_required: $this->is_link_required, + is_nsfw: $this->is_nsfw, + grants_full_photo_access: $this->grants_full_photo_access, + grants_download: $this->grants_download, + ); + + // No empty string. + if ($this->password === '') { + $this->password = null; + } + + // If password is required but password is empty this means that we do not want to change current password. + $passwordUpdateRequested = $this->is_password_required && $this->password !== null; + + // Override password if it is no longer required + if (!$this->is_password_required) { + $this->password = null; + $passwordUpdateRequested = true; + } + + $setProtectionPolicy = resolve(SetProtectionPolicy::class); + $setProtectionPolicy->do( + $baseAlbum, + $albumProtectionPolicy, + $passwordUpdateRequested, + $this->password + ); + $this->notify(__('lychee.CHANGE_SUCCESS')); + } +} diff --git a/app/Livewire/Components/Forms/Confirms/SaveAll.php b/app/Livewire/Components/Forms/Confirms/SaveAll.php new file mode 100644 index 0000000000..c3dc041d90 --- /dev/null +++ b/app/Livewire/Components/Forms/Confirms/SaveAll.php @@ -0,0 +1,47 @@ +closeModal(); + $this->dispatch('saveAll')->to(AllSettings::class); + } + + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Photo/CopyTo.php b/app/Livewire/Components/Forms/Photo/CopyTo.php new file mode 100644 index 0000000000..a02d4f26b9 --- /dev/null +++ b/app/Livewire/Components/Forms/Photo/CopyTo.php @@ -0,0 +1,124 @@ + */ + #[Locked] public array $photoIDs; + #[Locked] public string $title = ''; + // Destination + #[Locked] public ?string $albumID = null; + #[Locked] public ?string $albumTitle = null; + #[Locked] public int $num; + /** + * Boot method. + */ + public function boot(): void + { + $this->duplicate = resolve(Duplicate::class); + } + + /** + * This is the equivalent of the constructor for Livewire Components. + * + * @param array{photoID?:string,photoIDs?:array,albumID:?string} $params to move + * + * @return void + */ + public function mount(array $params = ['albumID' => null]): void + { + $id = $params[Params::PHOTO_ID] ?? null; + $this->photoIDs = $id !== null ? [$id] : $params[Params::PHOTO_IDS] ?? []; + $this->num = count($this->photoIDs); + + if ($this->num === 1) { + /** @var Photo $photo */ + $photo = Photo::query()->findOrFail($this->photoIDs[0]); + $this->title = $photo->title; + } + + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]); + $this->parent_id = $params[Params::ALBUM_ID] ?? SmartAlbumType::UNSORTED->value; + } + + /** + * Prepare confirmation step. + * + * @param string $id + * @param string $title + * + * @return void + */ + public function setAlbum(string $id, string $title): void + { + $this->albumID = $id; + $this->title = $title; + + $this->validate(DuplicatePhotosRuleSet::rules()); + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]); + + $this->albumID = $this->albumID === '' ? null : $this->albumID; + + /** @var ?Album $album */ + $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID); + Gate::authorize(AlbumPolicy::CAN_EDIT, [Album::class, $album]); + + $photos = Photo::query()->with(['size_variants'])->findOrFail($this->photoIDs); + + $copiedPhotos = $this->duplicate->do($photos, $album); + + $notify = new UserNotify(); + + $copiedPhotos->each(fn ($photo, $k) => $notify->do($photo)); + + // We stay in current album. + $this->redirect(route('livewire-gallery-album', ['albumId' => $this->parent_id]), true); + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.photo.copyTo'); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Photo/Delete.php b/app/Livewire/Components/Forms/Photo/Delete.php new file mode 100644 index 0000000000..ebf8855f3d --- /dev/null +++ b/app/Livewire/Components/Forms/Photo/Delete.php @@ -0,0 +1,95 @@ + */ + #[Locked] public array $photoIDs; + #[Locked] public ?string $albumId = null; + #[Locked] public string $title = ''; + #[Locked] public int $num; + /** + * This is the equivalent of the constructor for Livewire Components. + * + * @param array{albumID:?string,photoID?:string,photoIDs?:array} $params to delete + * + * @return void + */ + public function mount(array $params = ['albumID' => null]): void + { + $id = $params[Params::PHOTO_ID] ?? null; + $this->photoIDs = $id !== null ? [$id] : $params[Params::PHOTO_IDS] ?? []; + + Gate::authorize(PhotoPolicy::CAN_DELETE_BY_ID, [Photo::class, $this->photoIDs]); + + $this->num = count($this->photoIDs); + + if ($this->num === 1) { + /** @var Photo $photo */ + $photo = Photo::query()->findOrFail($this->photoIDs[0]); + $this->title = $photo->title; + } + + $this->albumId = $params[Params::ALBUM_ID] ?? null; + $this->num = count($this->photoIDs); + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.photo.delete'); + } + + /** + * Execute deletion. + * + * @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse + */ + public function submit(DeleteAction $delete): \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse + { + $this->validate(DeletePhotosRuleSet::rules()); + + Gate::authorize(PhotoPolicy::CAN_DELETE_BY_ID, [Photo::class, $this->photoIDs]); + + $fileDeleter = $delete->do($this->photoIDs); + App::terminating(fn () => $fileDeleter->do()); + + return redirect()->to(route('livewire-gallery-album', ['albumId' => $this->albumId ?? SmartAlbumType::UNSORTED->value])); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Photo/Download.php b/app/Livewire/Components/Forms/Photo/Download.php new file mode 100644 index 0000000000..7ff0b67f27 --- /dev/null +++ b/app/Livewire/Components/Forms/Photo/Download.php @@ -0,0 +1,69 @@ + */ + #[Locked] public array $photoIDs; + public Photo $photo; + + /** + * This is the equivalent of the constructor for Livewire Components. + * + * @param array{albumID:?string,photoID?:string,photoIDs?:array} $params to download + * + * @return void + */ + public function mount(array $params = ['albumID' => null]): void + { + $id = $params[Params::PHOTO_ID] ?? null; + $this->photoIDs = $id !== null ? [$id] : $params[Params::PHOTO_IDS] ?? []; + $num = count($this->photoIDs); + + if ($num === 1) { + $this->photo = Photo::query()->findOrFail($this->photoIDs[0]); + Gate::authorize(PhotoPolicy::CAN_DOWNLOAD, [Photo::class, $this->photo]); + } else { + $this->redirect(route('photo_download', ['kind' => DownloadVariantType::ORIGINAL->value]) . '&photoIDs=' . implode(',', $this->photoIDs)); + } + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.photo.download'); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Photo/Move.php b/app/Livewire/Components/Forms/Photo/Move.php new file mode 100644 index 0000000000..eaea905ce2 --- /dev/null +++ b/app/Livewire/Components/Forms/Photo/Move.php @@ -0,0 +1,118 @@ + */ + #[Locked] public array $photoIDs; + #[Locked] public string $title = ''; + #[Locked] public int $num; + // Destination + #[Locked] public ?string $albumID = null; + #[Locked] public ?string $albumTitle = null; + /** + * This is the equivalent of the constructor for Livewire Components. + * + * @param array{photoID?:string,photoIDs?:array,albumID:?string} $params to move + * + * @return void + */ + public function mount(array $params = ['albumID' => null]): void + { + $id = $params[Params::PHOTO_ID] ?? null; + $this->photoIDs = $id !== null ? [$id] : $params[Params::PHOTO_IDS] ?? []; + $this->num = count($this->photoIDs); + + if ($this->num === 1) { + /** @var Photo $photo */ + $photo = Photo::query()->findOrFail($this->photoIDs[0]); + $this->title = $photo->title; + } + + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]); + $this->parent_id = $params[Params::ALBUM_ID] ?? SmartAlbumType::UNSORTED->value; + } + + /** + * Prepare confirmation step. + * + * @param string $id + * @param string $title + * + * @return void + */ + public function setAlbum(string $id, string $title): void + { + $this->albumID = $id; + $this->title = $title; + + $this->validate(MovePhotosRuleSet::rules()); + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]); + + $this->albumID = $this->albumID === '' ? null : $this->albumID; + + /** @var ?Album $album */ + $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID); + Gate::authorize(AlbumPolicy::CAN_EDIT, [Album::class, $album]); + + $photos = Photo::query()->findOrFail($this->photoIDs); + + $notify = new UserNotify(); + + /** @var Photo $photo */ + foreach ($photos as $photo) { + $photo->album_id = $album?->id; + // Avoid unnecessary DB request, when we access the album of a + // photo later (e.g. when a notification is sent). + $photo->setRelation('album', $album); + if ($album !== null) { + $photo->owner_id = $album->owner_id; + } + $photo->save(); + $notify->do($photo); + } + + // We stay in current album. + $this->redirect(route('livewire-gallery-album', ['albumId' => $this->parent_id]), true); + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.photo.move'); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Photo/Rename.php b/app/Livewire/Components/Forms/Photo/Rename.php new file mode 100644 index 0000000000..4993bd0366 --- /dev/null +++ b/app/Livewire/Components/Forms/Photo/Rename.php @@ -0,0 +1,83 @@ + */ + #[Locked] public array $photoIDs; + #[Locked] public int $num; + public string $title = ''; + + /** + * This is the equivalent of the constructor for Livewire Components. + * + * @param array{photoID?:string,photoIDs?:array,albumID:?string} $params to move + * + * @return void + */ + public function mount(array $params = ['albumID' => null]): void + { + $id = $params[Params::PHOTO_ID] ?? null; + $this->photoIDs = $id !== null ? [$id] : $params[Params::PHOTO_IDS] ?? []; + $this->num = count($this->photoIDs); + + if ($this->num === 1) { + /** @var Photo $photo */ + $photo = Photo::query()->findOrFail($this->photoIDs[0]); + $this->title = $photo->title; + } + + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]); + } + + /** + * Rename. + * + * @return void + */ + public function submit(): void + { + $this->validate(SetPhotosTitleRuleSet::rules()); + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]); + Photo::query()->whereIn('id', $this->photoIDs)->update(['title' => $this->title]); + + $this->close(); + $this->dispatch('reloadPage')->to(GalleryAlbum::class); + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.photo.rename'); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Photo/Tag.php b/app/Livewire/Components/Forms/Photo/Tag.php new file mode 100644 index 0000000000..71f7ac24a8 --- /dev/null +++ b/app/Livewire/Components/Forms/Photo/Tag.php @@ -0,0 +1,94 @@ + */ + #[Locked] public array $photoIDs; + #[Locked] public array $tags = []; + #[Locked] public int $num; + public bool $shall_override = false; + public ?string $tag = ''; + + /** + * This is the equivalent of the constructor for Livewire Components. + * + * @param array{photoID?:string,photoIDs?:array,albumID:?string} $params to move + * + * @return void + */ + public function mount(array $params = ['albumID' => null]): void + { + $id = $params[Params::PHOTO_ID] ?? null; + $this->photoIDs = $id !== null ? [$id] : $params[Params::PHOTO_IDS] ?? []; + $this->num = count($this->photoIDs); + + if ($this->num === 1) { + /** @var Photo $photo */ + $photo = Photo::query()->findOrFail($this->photoIDs[0]); + $this->tag = implode(', ', $photo->tags); + } + + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]); + } + + /** + * Tag. + * + * @return void + */ + public function submit(): void + { + $this->tags = collect(explode(',', $this->tag))->map(fn ($v) => trim($v))->filter(fn ($v) => $v !== '')->all(); + + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]); + + $photos = Photo::query()->whereIn('id', $this->photoIDs)->get(); + foreach ($photos as $photo) { + if ($this->shall_override) { + $photo->tags = $this->tags; + } else { + $photo->tags = array_unique(array_merge($photo->tags, $this->tags)); + } + $photo->save(); + } + + $this->close(); + $this->dispatch('reloadPage')->to(GalleryAlbum::class); + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.photo.tag'); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } +} diff --git a/app/Livewire/Components/Forms/Profile/GetApiToken.php b/app/Livewire/Components/Forms/Profile/GetApiToken.php new file mode 100644 index 0000000000..7f9e528942 --- /dev/null +++ b/app/Livewire/Components/Forms/Profile/GetApiToken.php @@ -0,0 +1,111 @@ +tokenReset = resolve(TokenReset::class); + $this->tokenDisable = resolve(TokenDisable::class); + } + + /** + * Mount the current data of the user. + * $token is kept empty in order to avoid revealing the data. + * + * @return void + */ + public function mount(): void + { + $user = Auth::user() ?? throw new UnauthenticatedException(); + + $this->token = __('lychee.TOKEN_NOT_AVAILABLE'); + $this->isDisabled = true; + + if ($user->token === null) { + $this->token = __('lychee.DISABLED_TOKEN_STATUS_MSG'); + } + } + + /** + * Renders the modal content. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.profile.get-api-token'); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } + + /** + * Method call from front-end to reset the Token. + * We generate a new one on the fly and display it. + * + * @return void + */ + public function resetToken(): void + { + /** + * Authorize the request. + */ + $this->authorize(UserPolicy::CAN_EDIT, [User::class]); + + $this->token = $this->tokenReset->do(); + $this->isDisabled = false; + } + + /** + * Method call from front-end to disable the token. + * We simply erase the current one. + * + * @return void + */ + public function disableToken(): void + { + /** + * Authorize the request. + */ + $this->authorize(UserPolicy::CAN_EDIT, [User::class]); + + $this->tokenDisable->do(); + $this->token = __('lychee.DISABLED_TOKEN_STATUS_MSG'); + $this->isDisabled = true; + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Profile/ManageSecondFactor.php b/app/Livewire/Components/Forms/Profile/ManageSecondFactor.php new file mode 100644 index 0000000000..ab9c9d2921 --- /dev/null +++ b/app/Livewire/Components/Forms/Profile/ManageSecondFactor.php @@ -0,0 +1,89 @@ + 'required|string|min:5|max:255']; + } + + /** + * Just mount the component with the required WebAuthn Credentials. + * + * @param WebAuthnCredential $credential + * + * @return void + */ + public function mount(WebAuthnCredential $credential): void + { + $this->authorize(UserPolicy::CAN_EDIT, [User::class]); + + if ($credential->authenticatable_id !== (Auth::id() ?? throw new UnauthenticatedException())) { + throw new UnauthorizedException(); + } + + $this->credential = $credential; + $this->alias = $credential->alias ?? Str::substr($credential->id, 0, 30); + } + + /** + * Rendering of the front-end. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.profile.manage-second-factor'); + } + + /** + * This runs after a wired property is updated. + * + * @param mixed $field + * @param mixed $value + * + * @return void + */ + public function updated($field, $value): void + { + if (!$this->areValid($this->rules())) { + $this->has_error = true; + + return; + } + + $this->has_error = false; + $this->credential->alias = $this->alias; + $this->credential->save(); + $this->notify(__('lychee.CHANGE_SUCCESS')); + } +} diff --git a/app/Livewire/Components/Forms/Profile/SecondFactor.php b/app/Livewire/Components/Forms/Profile/SecondFactor.php new file mode 100644 index 0000000000..c1f96d18c4 --- /dev/null +++ b/app/Livewire/Components/Forms/Profile/SecondFactor.php @@ -0,0 +1,65 @@ +authorize(UserPolicy::CAN_EDIT, [User::class]); + + return view('livewire.modules.profile.second-factor'); + } + + /** + * Return the list of credentials associated to the current logged in user. + * + * @return Collection + * + * @throws UnauthenticatedException + */ + public function getCredentialsProperty(): Collection + { + /** @var \App\Models\User $user */ + $user = Auth::user() ?? throw new UnauthenticatedException(); + + return $user->webAuthnCredentials; + } + + /** + * Delete an existing credential. + * + * @param string $id + * + * @return void + * + * @throws \InvalidArgumentException + */ + public function delete(string $id): void + { + /** @var User $user */ + $user = Auth::user() ?? throw new UnauthenticatedException(); + + $user->webAuthnCredentials()->where('id', '=', $id)->delete(); + $this->notify(__('lychee.U2F_CREDENTIALS_DELETED')); + } +} diff --git a/app/Livewire/Components/Forms/Profile/SetEmail.php b/app/Livewire/Components/Forms/Profile/SetEmail.php new file mode 100644 index 0000000000..709945e680 --- /dev/null +++ b/app/Livewire/Components/Forms/Profile/SetEmail.php @@ -0,0 +1,67 @@ +authorize(UserPolicy::CAN_EDIT, [User::class]); + + /** @var User $user */ + $user = Auth::user(); + $this->value = $user->email; + $this->description = __('lychee.ENTER_EMAIL'); + $this->action = __('lychee.SAVE'); + } + + /** + * Render the component with the email form. + * + * @return View + * + * @throws UnauthenticatedException + */ + public function render(): View + { + return view('livewire.forms.settings.input'); + } + + /** + * Save the email address entered. + * + * @return void + * + * @throws UnauthenticatedException + */ + public function save(): void + { + $this->validate(['value' => 'required|email']); + + $this->authorize(UserPolicy::CAN_EDIT, [User::class]); + + /** @var User $user */ + $user = Auth::user() ?? throw new UnauthenticatedException(); + $user->email = $this->value; + $user->save(); + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Profile/SetLogin.php b/app/Livewire/Components/Forms/Profile/SetLogin.php new file mode 100644 index 0000000000..489ddd0a45 --- /dev/null +++ b/app/Livewire/Components/Forms/Profile/SetLogin.php @@ -0,0 +1,92 @@ +updateLogin = resolve(UpdateLogin::class); + } + + public function mount(): void + { + $this->authorize(UserPolicy::CAN_EDIT, [User::class]); + } + + /** + * Simply render the form. + * + * @return View + */ + public function render(): View + { + return view('livewire.forms.profile.set-login'); + } + + /** + * Update Username & Password of current user. + */ + public function submit(): void + { + $this->validate(ChangeLoginRuleSet::rules()); + $this->validate(['oldPassword' => new CurrentPasswordRule()]); + + $this->authorize(UserPolicy::CAN_EDIT, [User::class]); + + $currentUser = $this->updateLogin->do( + $this->username, + $this->password, + $this->oldPassword, + request()->ip() + ); + + // Update the session with the new credentials of the user. + // Otherwise, the session is out-of-sync and falsely assumes the user + // to be unauthenticated upon the next request. + Auth::login($currentUser); + $this->notify(__('lychee.CHANGE_SUCCESS')); + + $this->oldPassword = ''; + $this->username = ''; + $this->password = ''; + $this->password_confirmation = ''; + } + + /** + * Open a login modal box. + * + * @return void + */ + public function openApiTokenModal(): void + { + $this->openClosableModal('forms.profile.get-api-token', __('lychee.CLOSE')); + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/Base/BaseConfigDoubleDropDown.php b/app/Livewire/Components/Forms/Settings/Base/BaseConfigDoubleDropDown.php new file mode 100644 index 0000000000..d10ae9a52f --- /dev/null +++ b/app/Livewire/Components/Forms/Settings/Base/BaseConfigDoubleDropDown.php @@ -0,0 +1,95 @@ +value1 = $this->config1->value; + $this->value2 = $this->config2->value; + + return view('livewire.forms.settings.double-drop-down'); + } + + /** + * This runs before a wired property is updated. + * + * @param mixed $field + * @param mixed $value + * + * @return void + * + * @throws InvalidCastException + * @throws JsonEncodingException + * @throws \RuntimeException + */ + public function updated($field, $value) + { + Gate::authorize(SettingsPolicy::CAN_EDIT, [Configs::class]); + $error_msg = $this->config1->sanity($this->value1); + if ($error_msg !== '') { + $this->notify($error_msg, NotificationType::ERROR); + + return; + } + $error_msg = $this->config2->sanity($this->value2); + if ($error_msg !== '') { + $this->notify($error_msg, NotificationType::ERROR); + + return; + } + + $this->config1->value = $this->value1; + $this->config1->save(); + $this->config2->value = $this->value2; + $this->config2->save(); + $this->notify(__('lychee.CHANGE_SUCCESS')); + } + + /** + * Defines accessor for the drop down options1. + * + * @return array + */ + abstract public function getOptions1Property(): array; + + /** + * Defines accessor for the drop down options2. + * + * @return array + */ + abstract public function getOptions2Property(): array; +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/Base/BaseConfigDropDown.php b/app/Livewire/Components/Forms/Settings/Base/BaseConfigDropDown.php new file mode 100644 index 0000000000..c7b2ac354a --- /dev/null +++ b/app/Livewire/Components/Forms/Settings/Base/BaseConfigDropDown.php @@ -0,0 +1,69 @@ +value = $this->config->value; + + return view('livewire.forms.settings.drop-down'); + } + + /** + * This runs before a wired property is updated. + * + * @param mixed $field + * @param mixed $value + * + * @return void + */ + public function updating($field, $value): void + { + Gate::authorize(SettingsPolicy::CAN_EDIT, [Configs::class]); + $error_msg = $this->config->sanity($value); + if ($error_msg !== '') { + $this->notify($error_msg, NotificationType::ERROR); + + return; + } + + $this->config->value = $value; + $this->config->save(); + $this->notify(__('lychee.CHANGE_SUCCESS')); + } + + /** + * Defines accessor for the drop down options1. + * + * @return array + */ + abstract public function getOptionsProperty(): array; +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/Base/BooleanSetting.php b/app/Livewire/Components/Forms/Settings/Base/BooleanSetting.php new file mode 100644 index 0000000000..694c3d8a37 --- /dev/null +++ b/app/Livewire/Components/Forms/Settings/Base/BooleanSetting.php @@ -0,0 +1,77 @@ +description = __('lychee.' . $description); + $this->footer = $footer !== '' ? __('lychee.' . $footer) : ''; + $this->config = Configs::where('key', '=', $name)->firstOrFail(); + } + + /** + * Render the toggle element. + * + * @return View + */ + public function render(): View + { + $this->flag = $this->config->value === '1'; + + return view('livewire.forms.settings.toggle'); + } + + /** + * This runs before a wired property is updated. + * + * @param mixed $field + * @param mixed $value + * + * @return void + * + * @throws InvalidCastException + * @throws JsonEncodingException + * @throws \RuntimeException + */ + public function updating($field, $value) + { + Gate::authorize(SettingsPolicy::CAN_EDIT, [Configs::class]); + + $this->config->value = $value === true ? '1' : '0'; + $this->config->save(); + $this->notify(__('lychee.CHANGE_SUCCESS')); + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/Base/StringSetting.php b/app/Livewire/Components/Forms/Settings/Base/StringSetting.php new file mode 100644 index 0000000000..d64f7b399c --- /dev/null +++ b/app/Livewire/Components/Forms/Settings/Base/StringSetting.php @@ -0,0 +1,76 @@ +description = __('lychee.' . $description); + $this->action = __('lychee.' . $action); + $this->placeholder = __('lychee.' . $placeholder); + $this->config = Configs::where('key', '=', $name)->firstOrFail(); + } + + /** + * Renders the input form. + * + * @return View + */ + public function render(): View + { + $this->value = $this->config->value; + + return view('livewire.forms.settings.input'); + } + + /** + * Validation call to persist the data (as opposed to drop down menu and toggle which are instant). + * + * @return void + */ + public function save(): void + { + Gate::authorize(SettingsPolicy::CAN_EDIT, [Configs::class]); + $error_msg = $this->config->sanity($this->value); + if ($error_msg !== '') { + $this->notify($error_msg, NotificationType::ERROR); + $this->value = $this->config->value; + + return; + } + + $this->config->value = $this->value; + $this->config->save(); + $this->notify(__('lychee.CHANGE_SUCCESS')); + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/SetAlbumDecorationOrientationSetting.php b/app/Livewire/Components/Forms/Settings/SetAlbumDecorationOrientationSetting.php new file mode 100644 index 0000000000..cdab0a7ebd --- /dev/null +++ b/app/Livewire/Components/Forms/Settings/SetAlbumDecorationOrientationSetting.php @@ -0,0 +1,34 @@ +description = __('lychee.ALBUM_DECORATION_ORIENTATION'); + $this->config = Configs::where('key', '=', 'album_decoration_orientation')->firstOrFail(); + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/SetAlbumDecorationSetting.php b/app/Livewire/Components/Forms/Settings/SetAlbumDecorationSetting.php new file mode 100644 index 0000000000..a9fe65396e --- /dev/null +++ b/app/Livewire/Components/Forms/Settings/SetAlbumDecorationSetting.php @@ -0,0 +1,34 @@ +description = __('lychee.ALBUM_DECORATION'); + $this->config = Configs::where('key', '=', 'album_decoration')->firstOrFail(); + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/SetAlbumSortingSetting.php b/app/Livewire/Components/Forms/Settings/SetAlbumSortingSetting.php new file mode 100644 index 0000000000..c7d28fa5dd --- /dev/null +++ b/app/Livewire/Components/Forms/Settings/SetAlbumSortingSetting.php @@ -0,0 +1,56 @@ +begin = $matches[1]; + $this->middle = $matches[2]; + $this->end = $matches[3]; + + $this->config1 = Configs::where('key', '=', 'sorting_albums_col')->firstOrFail(); + $this->config2 = Configs::where('key', '=', 'sorting_albums_order')->firstOrFail(); + } + + /** + * Give the options on the column. + * + * @return array + */ + public function getOptions1Property(): array + { + return ColumnSortingAlbumType::localized(); + } + + /** + * Give the options on the ordering. + * + * @return array + */ + public function getOptions2Property(): array + { + return OrderSortingType::localized(); + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/SetLangSetting.php b/app/Livewire/Components/Forms/Settings/SetLangSetting.php new file mode 100644 index 0000000000..5f8a20e512 --- /dev/null +++ b/app/Livewire/Components/Forms/Settings/SetLangSetting.php @@ -0,0 +1,35 @@ +description = __('lychee.LANG_TEXT'); + // We do not use Lang::get_code() because we want to be able to modify it. + // We are interested in the setting itself. + $this->config = Configs::where('key', '=', 'lang')->firstOrFail(); + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/SetLayoutSetting.php b/app/Livewire/Components/Forms/Settings/SetLayoutSetting.php new file mode 100644 index 0000000000..d7488c3cb7 --- /dev/null +++ b/app/Livewire/Components/Forms/Settings/SetLayoutSetting.php @@ -0,0 +1,34 @@ +description = __('lychee.LAYOUT_TYPE'); + $this->config = Configs::where('key', '=', 'layout')->firstOrFail(); + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/SetLicenseDefaultSetting.php b/app/Livewire/Components/Forms/Settings/SetLicenseDefaultSetting.php new file mode 100644 index 0000000000..0b5784829a --- /dev/null +++ b/app/Livewire/Components/Forms/Settings/SetLicenseDefaultSetting.php @@ -0,0 +1,34 @@ +description = __('lychee.DEFAULT_LICENSE'); + $this->config = Configs::where('key', '=', 'default_license')->firstOrFail(); + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/SetMapProviderSetting.php b/app/Livewire/Components/Forms/Settings/SetMapProviderSetting.php new file mode 100644 index 0000000000..238cd551e5 --- /dev/null +++ b/app/Livewire/Components/Forms/Settings/SetMapProviderSetting.php @@ -0,0 +1,39 @@ + __('lychee.MAP_PROVIDER_WIKIMEDIA'), + 'OpenStreetMap.org' => __('lychee.MAP_PROVIDER_OSM_ORG'), + 'OpenStreetMap.de' => __('lychee.MAP_PROVIDER_OSM_DE'), + 'OpenStreetMap.fr' => __('lychee.MAP_PROVIDER_OSM_FR'), + 'RRZE' => __('lychee.MAP_PROVIDER_RRZE'), + ]; + } + + /** + * Mount the config. + * + * @return void + */ + public function mount() + { + $this->description = __('lychee.MAP_PROVIDER'); + $this->config = Configs::where('key', '=', 'map_provider')->firstOrFail(); + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/SetPhotoOverlaySetting.php b/app/Livewire/Components/Forms/Settings/SetPhotoOverlaySetting.php new file mode 100644 index 0000000000..8b5a15f59a --- /dev/null +++ b/app/Livewire/Components/Forms/Settings/SetPhotoOverlaySetting.php @@ -0,0 +1,34 @@ +description = __('lychee.OVERLAY_TYPE'); + $this->config = Configs::where('key', '=', 'image_overlay_type')->firstOrFail(); + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/SetPhotoSortingSetting.php b/app/Livewire/Components/Forms/Settings/SetPhotoSortingSetting.php new file mode 100644 index 0000000000..af16d021e7 --- /dev/null +++ b/app/Livewire/Components/Forms/Settings/SetPhotoSortingSetting.php @@ -0,0 +1,56 @@ +begin = $matches[1]; + $this->middle = $matches[2]; + $this->end = $matches[3]; + + $this->config1 = Configs::where('key', '=', 'sorting_photos_col')->firstOrFail(); + $this->config2 = Configs::where('key', '=', 'sorting_photos_order')->firstOrFail(); + } + + /** + * Give the columns options. + * + * @return array + */ + public function getOptions1Property(): array + { + return ColumnSortingPhotoType::localized(); + } + + /** + * Ordering ascending or descending. + * + * @return array + */ + public function getOptions2Property(): array + { + return OrderSortingType::localized(); + } +} \ No newline at end of file diff --git a/app/Livewire/Components/Menus/AlbumAdd.php b/app/Livewire/Components/Menus/AlbumAdd.php new file mode 100644 index 0000000000..c8a2a410b8 --- /dev/null +++ b/app/Livewire/Components/Menus/AlbumAdd.php @@ -0,0 +1,69 @@ +closeContextMenu(); + $this->openModal('forms.album.create', $this->params); + } + + /** + * Open Create Tag Album modal. + * + * @return void + */ + public function openTagAlbumCreateModal(): void + { + $this->closeContextMenu(); + $this->openModal('forms.album.create-tag', $this->params); + } + + public function openImportFromServerModal(): void + { + $this->closeContextMenu(); + $this->openModal('forms.add.import-from-server', $this->params); + } + + public function openImportFromUrlModal(): void + { + $this->closeContextMenu(); + $this->openModal('forms.add.import-from-url', $this->params); + } + + public function openUploadModal(): void + { + $this->closeContextMenu(); + $this->openModal('forms.add.upload', $this->params); + } +} diff --git a/app/Livewire/Components/Menus/AlbumDropdown.php b/app/Livewire/Components/Menus/AlbumDropdown.php new file mode 100644 index 0000000000..a944619cda --- /dev/null +++ b/app/Livewire/Components/Menus/AlbumDropdown.php @@ -0,0 +1,61 @@ +closeContextMenu(); + $this->openModal('forms.album.rename', [Params::ALBUM_ID => $this->params[Params::ALBUM_ID], Params::PARENT_ID => $this->params[Params::PARENT_ID]]); + } + + public function merge(): void + { + $this->closeContextMenu(); + $this->openModal('forms.album.merge', [Params::ALBUM_ID => $this->params[Params::ALBUM_ID], Params::PARENT_ID => $this->params[Params::PARENT_ID]]); + } + + public function move(): void + { + $this->closeContextMenu(); + $this->openModal('forms.album.move', [Params::ALBUM_ID => $this->params[Params::ALBUM_ID], Params::PARENT_ID => $this->params[Params::PARENT_ID]]); + } + + public function delete(): void + { + $this->closeContextMenu(); + $this->openModal('forms.album.delete', [Params::ALBUM_ID => $this->params[Params::ALBUM_ID], Params::PARENT_ID => $this->params[Params::PARENT_ID]]); + } + + public function download(): void + { + $this->closeContextMenu(); + $this->redirect(route('download', ['albumIDs' => $this->params[Params::ALBUM_ID]])); + } +} diff --git a/app/Livewire/Components/Menus/AlbumsDropdown.php b/app/Livewire/Components/Menus/AlbumsDropdown.php new file mode 100644 index 0000000000..7cbe9e9d19 --- /dev/null +++ b/app/Livewire/Components/Menus/AlbumsDropdown.php @@ -0,0 +1,61 @@ +} */ + #[Locked] public array $params; + /** + * Renders the Add menu in the top right. + * + * @return View + */ + public function render(): View + { + return view('livewire.context-menus.albums-dropdown'); + } + + public function renameAll(): void + { + $this->closeContextMenu(); + $this->openModal('forms.album.rename', [Params::ALBUM_IDS => $this->params[Params::ALBUM_IDS], Params::PARENT_ID => $this->params[Params::PARENT_ID]]); + } + + public function mergeAll(): void + { + $this->closeContextMenu(); + $this->openModal('forms.album.merge', [Params::ALBUM_IDS => $this->params[Params::ALBUM_IDS], Params::PARENT_ID => $this->params[Params::PARENT_ID]]); + } + + public function moveAll(): void + { + $this->closeContextMenu(); + $this->openModal('forms.album.move', [Params::ALBUM_IDS => $this->params[Params::ALBUM_IDS], Params::PARENT_ID => $this->params[Params::PARENT_ID]]); + } + + public function deleteAll(): void + { + $this->closeContextMenu(); + $this->openModal('forms.album.delete', [Params::ALBUM_IDS => $this->params[Params::ALBUM_IDS], Params::PARENT_ID => $this->params[Params::PARENT_ID]]); + } + + public function downloadAll(): void + { + $this->redirect(route('download') . '?albumIDs=' . implode(',', $this->params[Params::ALBUM_IDS])); + $this->closeContextMenu(); + } +} diff --git a/app/Livewire/Components/Menus/LeftMenu.php b/app/Livewire/Components/Menus/LeftMenu.php new file mode 100644 index 0000000000..5c6e494326 --- /dev/null +++ b/app/Livewire/Components/Menus/LeftMenu.php @@ -0,0 +1,137 @@ +loadDevMenu(); + + return view('livewire.components.left-menu'); + } + + /** + * Open the Context Menu. + * + * @return void + */ + #[On('openLeftMenu')] + public function openLeftMenu(): void + { + $this->open(); + } + + /** + * Close the LeftMenu component. + * + * @return void + */ + #[On('closeLeftMenu')] + public function closeLeftMenu(): void + { + $this->close(); + } + + /** + * Toggle the LeftMenu component. + * + * @return void + */ + #[On('toggleLeftMenu')] + public function toggleLeftMenu(): void + { + $this->toggle(); + } + + /** + * Open a about modal box. + * TODO Consider moving this directly to Blade. + * + * @return void + */ + public function openAboutModal(): void + { + $this->openClosableModal('modals.about', __('lychee.CLOSE')); + } + + /** + * We load some data about debuging tools section. + * + * @return void + */ + private function loadDevMenu(): void + { + $this->has_dev_tools = Gate::check(SettingsPolicy::CAN_ACCESS_DEV_TOOLS, [Configs::class]); + if (!$this->has_dev_tools) { + return; + } + + // Defining clockwork URL + $clockWorkEnabled = config('clockwork.enable') === true || (config('app.debug') === true && config('clockwork.enable') === null); + $clockWorkWeb = config('clockwork.web'); + if ($clockWorkEnabled && $clockWorkWeb === true || is_string($clockWorkWeb)) { + $this->clockwork_url = $clockWorkWeb === true ? URL::asset('clockwork/app') : $clockWorkWeb . '/app'; + } + + // API documentation + $this->doc_api_url = Route::has('scramble.docs.api') ? route('scramble.docs.api') : null; + + // Double check to avoid showing an empty section. + $this->has_dev_tools = $this->doc_api_url !== null && $this->clockwork_url !== null; + } +} diff --git a/app/Livewire/Components/Menus/PhotoDropdown.php b/app/Livewire/Components/Menus/PhotoDropdown.php new file mode 100644 index 0000000000..86c5488653 --- /dev/null +++ b/app/Livewire/Components/Menus/PhotoDropdown.php @@ -0,0 +1,118 @@ +params = $params; + $this->is_starred = Photo::query()->findOrFail($params[Params::PHOTO_ID])->is_starred; + } + + /** + * Renders the Add menu in the top right. + * + * @return View + */ + public function render(): View + { + return view('livewire.context-menus.photo-dropdown'); + } + + public function star(): void + { + $this->closeContextMenu(); + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->params[Params::PHOTO_ID]]); + Photo::where('id', '=', $this->params[Params::PHOTO_ID])->update(['is_starred' => true]); + $this->dispatch('reloadPage')->to(GalleryAlbum::class); + } + + public function unstar(): void + { + $this->closeContextMenu(); + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->params[Params::PHOTO_ID]]); + Photo::where('id', '=', $this->params[Params::PHOTO_ID])->update(['is_starred' => false]); + $this->dispatch('reloadPage')->to(GalleryAlbum::class); + } + + public function tag(): void + { + $this->closeContextMenu(); + $this->openModal('forms.photo.tag', [Params::PHOTO_ID => $this->params[Params::PHOTO_ID], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]); + } + + public function setAsCover(): void + { + /** @var Album $album */ + $album = Album::query()->findOrFail($this->params[Params::ALBUM_ID]); + + Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $album]); + $album->cover_id = $album->cover_id === $this->params[Params::PHOTO_ID] ? null : $this->params[Params::PHOTO_ID]; + $album->save(); + $this->dispatch('reloadPage')->to(GalleryAlbum::class); + $this->closeContextMenu(); + } + + public function rename(): void + { + $this->closeContextMenu(); + $this->openModal('forms.photo.rename', [Params::PHOTO_ID => $this->params[Params::PHOTO_ID], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]); + } + + public function copyTo(): void + { + $this->closeContextMenu(); + $this->openModal('forms.photo.copy-to', [Params::PHOTO_ID => $this->params[Params::PHOTO_ID], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]); + } + + public function move(): void + { + $this->closeContextMenu(); + $this->openModal('forms.photo.move', [Params::PHOTO_ID => $this->params[Params::PHOTO_ID], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]); + } + + public function delete(): void + { + $this->closeContextMenu(); + $this->openModal('forms.photo.delete', [Params::PHOTO_ID => $this->params[Params::PHOTO_ID], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]); + } + + public function download(): void + { + $this->closeContextMenu(); + $this->openModal('forms.photo.download', [Params::PHOTO_ID => $this->params[Params::PHOTO_ID], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]); + } +} diff --git a/app/Livewire/Components/Menus/PhotosDropdown.php b/app/Livewire/Components/Menus/PhotosDropdown.php new file mode 100644 index 0000000000..9e74d5caf3 --- /dev/null +++ b/app/Livewire/Components/Menus/PhotosDropdown.php @@ -0,0 +1,102 @@ +} */ + #[Locked] public array $params; + #[Locked] public bool $are_starred; + /** + * mount info and load star condition. + * + * @param array{albumID:?string,photoIDs:array} $params + * + * @return void + */ + public function mount(array $params): void + { + $this->params = $params; + $this->are_starred = count($params[Params::PHOTO_IDS]) === + Photo::query()->whereIn('id', $params[Params::PHOTO_IDS])->where('is_starred', '=', true)->count(); + } + + /** + * Renders the Add menu in the top right. + * + * @return View + */ + public function render(): View + { + return view('livewire.context-menus.photos-dropdown'); + } + + public function starAll(): void + { + $this->closeContextMenu(); + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->params[Params::PHOTO_IDS]]); + Photo::whereIn('id', $this->params[Params::PHOTO_IDS])->update(['is_starred' => true]); + $this->dispatch('reloadPage')->to(GalleryAlbum::class); + } + + public function unstarAll(): void + { + $this->closeContextMenu(); + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->params[Params::PHOTO_IDS]]); + Photo::whereIn('id', $this->params[Params::PHOTO_IDS])->update(['is_starred' => false]); + $this->dispatch('reloadPage')->to(GalleryAlbum::class); + } + + public function tagAll(): void + { + $this->closeContextMenu(); + $this->openModal('forms.photo.tag', [Params::PHOTO_IDS => $this->params[Params::PHOTO_IDS], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]); + } + + public function renameAll(): void + { + $this->closeContextMenu(); + $this->openModal('forms.photo.rename', [Params::PHOTO_IDS => $this->params[Params::PHOTO_IDS], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]); + } + + public function copyAllTo(): void + { + $this->closeContextMenu(); + $this->openModal('forms.photo.copy-to', [Params::PHOTO_IDS => $this->params[Params::PHOTO_IDS], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]); + } + + public function moveAll(): void + { + $this->closeContextMenu(); + $this->openModal('forms.photo.move', [Params::PHOTO_IDS => $this->params[Params::PHOTO_IDS], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]); + } + + public function deleteAll(): void + { + $this->closeContextMenu(); + $this->openModal('forms.photo.delete', [Params::PHOTO_IDS => $this->params[Params::PHOTO_IDS], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]); + } + + public function downloadAll(): void + { + $this->closeContextMenu(); + $this->openModal('forms.photo.download', [Params::PHOTO_IDS => $this->params[Params::PHOTO_IDS], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]); + } +} diff --git a/app/Livewire/Components/Modals/About.php b/app/Livewire/Components/Modals/About.php new file mode 100644 index 0000000000..33383e154e --- /dev/null +++ b/app/Livewire/Components/Modals/About.php @@ -0,0 +1,56 @@ +version = resolve(InstalledVersion::class)->getVersion()->toString(); + } + + $fileVersion = resolve(FileVersion::class); + $gitHubVersion = resolve(GitHubVersion::class); + if (Configs::getValueAsBool('check_for_updates')) { + // @codeCoverageIgnoreStart + $fileVersion->hydrate(); + $gitHubVersion->hydrate(); + // @codeCoverageIgnoreEnd + } + $this->is_new_release_available = !$fileVersion->isUpToDate(); + $this->is_git_update_available = !$gitHubVersion->isUpToDate(); + } + + /** + * Renders the About component. + * + * @return View + */ + public function render(): View + { + return view('livewire.modals.about'); + } +} diff --git a/app/Livewire/Components/Modals/Login.php b/app/Livewire/Components/Modals/Login.php new file mode 100644 index 0000000000..bbafa5e6ee --- /dev/null +++ b/app/Livewire/Components/Modals/Login.php @@ -0,0 +1,95 @@ +version = resolve(InstalledVersion::class)->getVersion()->toString(); + } + + $fileVersion = resolve(FileVersion::class); + $gitHubVersion = resolve(GitHubVersion::class); + if (Configs::getValueAsBool('check_for_updates')) { + // @codeCoverageIgnoreStart + $fileVersion->hydrate(); + $gitHubVersion->hydrate(); + // @codeCoverageIgnoreEnd + } + $this->is_new_release_available = !$fileVersion->isUpToDate(); + $this->is_git_update_available = !$gitHubVersion->isUpToDate(); + } + + /** + * Hook the submit button. + * + * @return void + * + * @throws \Throwable + * @throws ValidationException + * @throws BindingResolutionException + * @throws \InvalidArgumentException + * @throws QueryBuilderException + */ + public function submit(): void + { + // Empty error bag + $this->resetErrorBag(); + + // Call Livewire validation on the from + $data = $this->validate(LoginRuleSet::rules()); + + // apply login as admin and trigger a reload + if (Auth::attempt(['username' => $data['username'], 'password' => $data['password']])) { + Log::notice(__METHOD__ . ':' . __LINE__ . ' User (' . $data['username'] . ') has logged in from ' . request()->ip()); + $this->dispatch('login-close'); + $this->dispatch('reloadPage'); + + return; + } + + // Wrong login: stay on the modal and update the rendering. + $this->addError('wrongLogin', 'Wrong login or password.'); + Log::error(__METHOD__ . ':' . __LINE__ . ' User (' . $data['username'] . ') has tried to log in from ' . request()->ip()); + } +} diff --git a/app/Livewire/Components/Modules/Diagnostics/AbstractPreSection.php b/app/Livewire/Components/Modules/Diagnostics/AbstractPreSection.php new file mode 100644 index 0000000000..ab4b70fedc --- /dev/null +++ b/app/Livewire/Components/Modules/Diagnostics/AbstractPreSection.php @@ -0,0 +1,41 @@ +get() : []; + } +} diff --git a/app/Livewire/Components/Modules/Diagnostics/Errors.php b/app/Livewire/Components/Modules/Diagnostics/Errors.php new file mode 100644 index 0000000000..e1ea04ea88 --- /dev/null +++ b/app/Livewire/Components/Modules/Diagnostics/Errors.php @@ -0,0 +1,63 @@ + + Diagnostics + ----------- + ' . __('lychee.LOADING') . ' ... +

+'; + } + + /** + * Computable property to access the errors. + * If we are not ready to load, we return an empty array. + * + * @return array + */ + public function getDataProperty(): array + { + return collect(resolve(DiagnosticsErrors::class)->get())->map(function ($line) { + $arr = ['color' => '', 'type' => '', 'line' => $line]; + + if (Str::startsWith($line, 'Warning: ')) { + $arr['color'] = 'text-warning-600'; + $arr['type'] = 'Warning:'; + $arr['line'] = Str::substr($line, 9); + } + + if (Str::startsWith($line, 'Error: ')) { + // @codeCoverageIgnoreStart + $arr['color'] = 'text-danger-600'; + $arr['type'] = 'Error:'; + $arr['line'] = Str::substr($line, 7); + // @codeCoverageIgnoreEnd + } + + return $arr; + })->all(); + } + + /** + * Rendering of the front-end. + * + * @return View + */ + final public function render(): View + { + return view('livewire.modules.diagnostics.pre-colored'); + } +} diff --git a/app/Livewire/Components/Modules/Diagnostics/Infos.php b/app/Livewire/Components/Modules/Diagnostics/Infos.php new file mode 100644 index 0000000000..e9f437cd5f --- /dev/null +++ b/app/Livewire/Components/Modules/Diagnostics/Infos.php @@ -0,0 +1,18 @@ +get() : []; + } +} diff --git a/app/Livewire/Components/Modules/Diagnostics/Optimize.php b/app/Livewire/Components/Modules/Diagnostics/Optimize.php new file mode 100644 index 0000000000..f1753c97dc --- /dev/null +++ b/app/Livewire/Components/Modules/Diagnostics/Optimize.php @@ -0,0 +1,54 @@ +optimizeDb = resolve(OptimizeDb::class); + $this->optimizeTables = resolve(OptimizeTables::class); + $this->action = 'Optimize!'; + } + + /** + * Rendering of the front-end. + * + * @return View + */ + public function render(): View + { + if (!Gate::check(SettingsPolicy::CAN_SEE_DIAGNOSTICS, Configs::class)) { + $this->result[] = 'Error: You must have administrator rights to see this.'; + } + + return view('livewire.modules.diagnostics.with-action-call'); + } + + /** + * Return the size used by Lychee. + * We now separate this from the initial get() call as this is quite time consuming. + * + * @return void + */ + public function do(): void + { + Gate::authorize(SettingsPolicy::CAN_SEE_DIAGNOSTICS, Configs::class); + $this->result = collect($this->optimizeDb->do())->merge(collect($this->optimizeTables->do()))->all(); + } +} diff --git a/app/Livewire/Components/Modules/Diagnostics/Space.php b/app/Livewire/Components/Modules/Diagnostics/Space.php new file mode 100644 index 0000000000..cedb61f0dd --- /dev/null +++ b/app/Livewire/Components/Modules/Diagnostics/Space.php @@ -0,0 +1,51 @@ +diagnostics = resolve(DiagnosticsSpace::class); + $this->action = __('lychee.DIAGNOSTICS_GET_SIZE'); + } + + /** + * Rendering of the front-end. + * + * @return View + */ + public function render(): View + { + if (!Gate::check(SettingsPolicy::CAN_SEE_DIAGNOSTICS, Configs::class)) { + $this->result[] = 'Error: You must have administrator rights to see this.'; + } + + return view('livewire.modules.diagnostics.with-action-call'); + } + + /** + * Return the size used by Lychee. + * We now separate this from the initial get() call as this is quite time consuming. + * + * @return void + */ + public function do(): void + { + Gate::authorize(SettingsPolicy::CAN_SEE_DIAGNOSTICS, Configs::class); + $this->result = $this->diagnostics->get(); + } +} diff --git a/app/Livewire/Components/Modules/Users/UserLine.php b/app/Livewire/Components/Modules/Users/UserLine.php new file mode 100644 index 0000000000..ca900c32b2 --- /dev/null +++ b/app/Livewire/Components/Modules/Users/UserLine.php @@ -0,0 +1,106 @@ +save = resolve(Save::class); + } + + /** + * Given a user, load the properties. + * Note that password stays empty to ensure that we do not update it by mistake. + * + * @param User $user + * + * @return void + */ + public function mount(User $user): void + { + Gate::authorize(UserPolicy::CAN_CREATE_OR_EDIT_OR_DELETE, [User::class]); + + $this->user = $user; + $this->id = $user->id; + $this->username = $user->username; + $this->may_edit_own_settings = $user->may_edit_own_settings; + $this->may_upload = $user->may_upload; + } + + /** + * Rendering of the front-end. + * + * @return View + */ + public function render(): View + { + return view('livewire.modules.users.user-line'); + } + + /** + * computed property to check if the state is dirty. + * TODO: See if the dirty state of Livewire is usable instead. + * + * @return bool + */ + public function getHasChangedProperty(): bool + { + return $this->user->username !== $this->username || + $this->user->may_upload !== $this->may_upload || + $this->user->may_edit_own_settings !== $this->may_edit_own_settings || + $this->password !== ''; + } + + /** + * Save modification done to a user. + * Note that an admin can change the password of a user at will. + * + * @return void + */ + public function save(): void + { + if (!$this->areValid(SetUserSettingsRuleSet::rules())) { + return; + } + + Gate::authorize(UserPolicy::CAN_CREATE_OR_EDIT_OR_DELETE, [User::class]); + + $this->save->do( + $this->user, + $this->username, + $this->password, + $this->may_upload, + $this->may_edit_own_settings + ); + } +} diff --git a/app/Livewire/Components/Pages/AllSettings.php b/app/Livewire/Components/Pages/AllSettings.php new file mode 100644 index 0000000000..6429d9afbf --- /dev/null +++ b/app/Livewire/Components/Pages/AllSettings.php @@ -0,0 +1,75 @@ +form->setConfigs(Configs::orderBy('cat', 'asc')->get()); + } + + /** + * Rendering of the front-end. + * + * @return View + */ + public function render(): View + { + return view('livewire.pages.all-settings'); + } + + /** + * Open Saving confirmation modal. + * + * @return void + */ + public function openConfirmSave(): void + { + $this->openModal('forms.confirms.save-all'); + } + + /** + * Save everything. + * + * @return void + */ + #[On('saveAll')] + public function saveAll(): void + { + Gate::authorize(SettingsPolicy::CAN_EDIT, [Configs::class]); + + $this->form->save(); + } + + public function back(): mixed + { + $this->dispatch('closeLeftMenu')->to(LeftMenu::class); + + return $this->redirect(route('settings'), true); + } +} diff --git a/app/Livewire/Components/Pages/Diagnostics.php b/app/Livewire/Components/Pages/Diagnostics.php new file mode 100644 index 0000000000..a09e8ae222 --- /dev/null +++ b/app/Livewire/Components/Pages/Diagnostics.php @@ -0,0 +1,34 @@ +dispatch('closeLeftMenu')->to(LeftMenu::class); + + return $this->redirect(route('livewire-gallery'), true); + } + + #[On('reloadPage')] + public function reloadPage(): void + { + $this->render(); + } +} diff --git a/app/Livewire/Components/Pages/Frame.php b/app/Livewire/Components/Pages/Frame.php new file mode 100644 index 0000000000..0a6bd082b3 --- /dev/null +++ b/app/Livewire/Components/Pages/Frame.php @@ -0,0 +1,113 @@ +albumId = $albumId ?? (($randomAlbumId !== '') ? $randomAlbumId : null); + + $album = $this->albumId === null ? null : $this->albumFactory->findAbstractAlbumOrFail($this->albumId); + Gate::authorize(AlbumPolicy::CAN_ACCESS, [AbstractAlbum::class, $album]); + + $this->title = $album?->title; + $this->loadPhoto(); + $this->timeout = Configs::getValueAsInt('mod_frame_refresh'); + $this->back = $albumId !== null ? route('livewire-gallery-album', ['albumId' => $albumId]) : route('livewire-gallery'); + } + + #[Renderless] + public function loadPhoto(int $retries = 5): array + { + // avoid infinite recursion + if ($retries === 0) { + $this->src = ''; + $this->srcset = ''; + + return ['src' => '', 'srcset' => '']; + } + + // default query + $query = $this->photoQueryPolicy->applySearchabilityFilter(Photo::query()->with(['album', 'size_variants', 'size_variants.sym_links'])); + + if ($this->albumId !== null) { + $query = $this->albumFactory->findAbstractAlbumOrFail($this->albumId) + ->photos() + ->with(['album', 'size_variants', 'size_variants.sym_links']); + } + + /** @var ?Photo $photo */ + // PHPStan does not understand that `firstOrFail` returns `Photo`, but assumes that it returns `Model` + // @phpstan-ignore-next-line + $photo = $query->inRandomOrder()->first(); + if ($photo === null) { + $this->title === null ? + throw new PhotoCollectionEmptyException() : throw new PhotoCollectionEmptyException('Photo collection of ' . $this->title . ' is empty'); + } + + // retry + if ($photo->isVideo()) { + return $this->loadPhoto($retries - 1); + } + + $this->src = $photo->size_variants->getMedium()?->url ?? $photo->size_variants->getOriginal()?->url; + + if ($photo->size_variants->getMedium() !== null && $photo->size_variants->getMedium2x() !== null) { + $this->srcset = $photo->size_variants->getMedium()->url . ' ' . $photo->size_variants->getMedium()->width . 'w'; + $this->srcset .= $photo->size_variants->getMedium2x()->url . ' ' . $photo->size_variants->getMedium2x()->width . 'w'; + } else { + $this->srcset = ''; + } + + return ['src' => $this->src, 'srcset' => $this->srcset]; + } + + public function boot(): void + { + $this->albumFactory = resolve(AlbumFactory::class); + $this->photoQueryPolicy = resolve(PhotoQueryPolicy::class); + } +} diff --git a/app/Livewire/Components/Pages/Gallery/Album.php b/app/Livewire/Components/Pages/Gallery/Album.php new file mode 100644 index 0000000000..d89dc95d9c --- /dev/null +++ b/app/Livewire/Components/Pages/Gallery/Album.php @@ -0,0 +1,217 @@ +albumFactory = resolve(AlbumFactory::class); + $this->layouts = new Layouts(); + } + + public function mount(string $albumId, string $photoId = ''): void + { + $this->albumId = $albumId; + $this->photoId = $photoId; + $this->flags = new AlbumFlags(); + + $this->reloadPage(); + } + + /** + * Rendering of the blade template. + * + * @return View + */ + final public function render(): View + { + $this->sessionFlags = SessionFlags::get(); + $this->rights = AlbumRights::make($this->album); + + if ($this->flags->is_accessible) { + $this->num_users = User::count(); + $this->header_url ??= $this->fetchHeaderUrl()?->url; + $this->num_albums = $this->album instanceof ModelsAlbum ? $this->album->children->count() : 0; + $this->num_photos = $this->album->photos->count(); + + $is_latitude_longitude_found = false; + if ($this->album instanceof ModelsAlbum) { + $is_latitude_longitude_found = $this->album->all_photos()->whereNotNull('latitude')->whereNotNull('longitude')->count() > 0; + } else { + $is_latitude_longitude_found = $this->album->photos()->whereNotNull('latitude')->whereNotNull('longitude')->count() > 0; + } + // Only display if there are actual data + $this->flags->is_map_accessible = $this->flags->is_map_accessible && $is_latitude_longitude_found; + + $this->photoFlags = new PhotoFlags( + can_autoplay: true, + can_rotate: Configs::getValueAsBool('editor_enabled'), + can_edit: $this->rights->can_edit, + ); + } + + return view('livewire.pages.gallery.album'); + } + + /** + * Reload the data. + * + * @return void + */ + #[On('reloadPage')] + public function reloadPage(): void + { + $this->album = $this->albumFactory->findAbstractAlbumOrFail($this->albumId); + $this->flags->is_base_album = $this->album instanceof BaseAlbum; + $this->flags->is_accessible = Gate::check(AlbumPolicy::CAN_ACCESS, [ModelsAlbum::class, $this->album]); + + if (!$this->flags->is_accessible) { + $this->flags->is_password_protected = + $this->album->public_permissions() !== null && + $this->album->public_permissions()->password !== null; + } + + if (Auth::check() && !$this->flags->is_accessible && !$this->flags->is_password_protected) { + $this->redirect(route('livewire-gallery')); + } + } + + /** + * Return the photoIDs (no need to wait to compute the geometry). + * + * @return Collection + */ + public function getPhotosProperty(): Collection + { + return $this->album->photos; + } + + /** + * @return Collection|null + */ + public function getAlbumsProperty(): Collection|null + { + if ($this->album instanceof ModelsAlbum) { + return $this->album->children; + } + + return null; + } + + /** + * Used in the JS front-end to manage the selected albums. + * + * @return array + */ + public function getAlbumIDsProperty(): array + { + return $this->getAlbumsProperty()?->map(fn ($v, $k) => $v->id)?->all() ?? []; + } + + /** + * Fetch the header url + * TODO: Later this can be also a field from the album and if null we apply the rdm query. + * + * @return SizeVariant|null + * + * @throws QueryBuilderException + * @throws RelationNotFoundException + */ + private function fetchHeaderUrl(): SizeVariant|null + { + if ($this->album->photos->isEmpty()) { + return null; + } + + return SizeVariant::query() + ->where('type', '=', SizeVariantType::MEDIUM) + ->whereBelongsTo($this->album->photos) + ->where('ratio', '>', 1) + ->inRandomOrder() + ->first(); + } + + public function getBackProperty(): string + { + if ($this->album instanceof ModelsAlbum && $this->album->parent_id !== null) { + return route('livewire-gallery-album', ['albumId' => $this->album->parent_id]); + } + + return route('livewire-gallery'); + } + + public function getTitleProperty(): string + { + return $this->album->title; + } + + public function setCover(?string $photoID): void + { + if (!$this->album instanceof ModelsAlbum) { + return; + } + + Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $this->album]); + + $photo = $photoID === null ? null : Photo::query()->findOrFail($photoID); + if ($photo !== null) { + Gate::authorize(PhotoPolicy::CAN_SEE, [Photo::class, $photo]); + } + + $this->album->cover_id = ($this->album->cover_id === $photo->id) ? null : $photo->id; + $this->album->save(); + $this->notify(__('lychee.CHANGE_SUCCESS')); + } + + public function getAlbumFormattedProperty(): AlbumFormatted + { + return new AlbumFormatted($this->album, $this->fetchHeaderUrl()?->url); + } + + public function getNoImagesAlbumsMessageProperty(): string + { + return 'Nothing to see here'; + } +} diff --git a/app/Livewire/Components/Pages/Gallery/Albums.php b/app/Livewire/Components/Pages/Gallery/Albums.php new file mode 100644 index 0000000000..18ac64b26a --- /dev/null +++ b/app/Livewire/Components/Pages/Gallery/Albums.php @@ -0,0 +1,93 @@ + */ + #[Locked] public array $albumIDs; + #[Locked] public ?string $albumId = null; + public AlbumsFlags $flags; + public AlbumRights $rights; + public SessionFlags $sessionFlags; + + /** + * Render component. + * + * @return View + * + * @throws BindingResolutionException + */ + public function render(): View + { + $this->flags = new AlbumsFlags(); + $this->rights = AlbumRights::make(null); + $this->albumIDs = $this->topAlbums->albums->map(fn ($v, $k) => $v->id)->all(); + + return view('livewire.pages.gallery.albums'); + } + + public function mount(): void + { + $this->sessionFlags = SessionFlags::get(); + } + + #[On('reloadPage')] + public function reloadPage(): void + { + $this->topAlbums = resolve(Top::class)->get(); + } + + public function boot(): void + { + $this->topAlbums = resolve(Top::class)->get(); + $this->title = Configs::getValueAsString('site_title'); + } + + public function getAlbumsProperty(): Collection + { + return $this->topAlbums->albums; + } + + public function getSmartAlbumsProperty(): Collection + { + return $this->topAlbums->smart_albums + // We filter out the public one (we don't remove it completely to not break the other front-end). + ->filter(fn (AbstractAlbum $e, $k) => $e->id !== SmartAlbumType::PUBLIC->value) + ->concat($this->topAlbums->tag_albums) + ->reject(fn ($album) => $album === null); + } + + public function getSharedAlbumsProperty(): Collection + { + return $this->topAlbums->shared_albums; + } +} diff --git a/app/Livewire/Components/Pages/Gallery/BaseAlbumComponent.php b/app/Livewire/Components/Pages/Gallery/BaseAlbumComponent.php new file mode 100644 index 0000000000..270a9a0e89 --- /dev/null +++ b/app/Livewire/Components/Pages/Gallery/BaseAlbumComponent.php @@ -0,0 +1,155 @@ +getPhotosProperty()); + } + + /** + * Return the photoIDs (no need to wait to compute the geometry). + * + * @return Collection + */ + abstract public function getPhotosProperty(): Collection|LengthAwarePaginator; + + /** + * Return the albums. + * + * @return Collection|null + */ + abstract public function getAlbumsProperty(): Collection|null; + + /** + * Used in the JS front-end to manage the selected albums. + * + * @return array + */ + abstract public function getAlbumIDsProperty(): array; + + /** + * Back property used to retrieve the URL to step back and back arrow. + * + * @return string + */ + abstract public function getBackProperty(): string; + + /** + * Title property for the header. + * + * @return string + */ + abstract public function getTitleProperty(): string; + + /** + * Data for Details & Hero. + * + * @return AlbumFormatted|null + */ + abstract public function getAlbumFormattedProperty(): AlbumFormatted|null; + + /** + * Return the data used to generate the layout on the front-end. + * + * @return Layouts + */ + final public function getLayoutsProperty(): Layouts + { + return $this->layouts; + } + + /** + * Getter for the license types in the front-end. + * + * @return array associated array of license type and their localization + */ + final public function getLicensesProperty(): array + { + return LicenseType::localized(); + } + + /** + * Getter for the OverlayType displayed in photoView. + * + * @return string enum + */ + final public function getOverlayTypeProperty(): string + { + return Configs::getValueAsEnum('image_overlay_type', ImageOverlayType::class)->value; + } + + final public function getMapProviderProperty(): MapProviders + { + return Configs::getValueAsEnum('map_provider', MapProviders::class); + } + + /** + * Message displayed when no result or the page is empty. + * + * @return string + */ + abstract public function getNoImagesAlbumsMessageProperty(): string; +} diff --git a/app/Livewire/Components/Pages/Gallery/Search.php b/app/Livewire/Components/Pages/Gallery/Search.php new file mode 100644 index 0000000000..dfb8c284ec --- /dev/null +++ b/app/Livewire/Components/Pages/Gallery/Search.php @@ -0,0 +1,168 @@ + */ + private LengthAwarePaginator $photos; + /** @var Collection */ + private Collection $albums; + + #[Locked] + #[Url(history: true)] + public string $urlQuery = ''; + public string $searchQuery = ''; // ! Wired + + /** @var string[] */ + protected array $terms = []; + + #[Locked] + public int $search_minimum_length_required; + + public function boot(): void + { + $this->layouts = new Layouts(); + $this->albumSearch = resolve(AlbumSearch::class); + $this->photoSearch = resolve(PhotoSearch::class); + $this->photos = new LengthAwarePaginator([], 0, 200); + $this->albums = collect([]); + $this->num_albums = 0; + $this->num_photos = 0; + $this->search_minimum_length_required = Configs::getValueAsInt('search_minimum_length_required'); + } + + public function mount(string $albumId = ''): void + { + if (!Auth::check() && !Configs::getValueAsBool('search_public')) { + redirect(route('livewire-gallery')); + } + + $this->rights = AlbumRights::make(null); + + $this->flags = new AlbumFlags(); + $this->photoFlags = new PhotoFlags( + can_autoplay: true, + can_rotate: Configs::getValueAsBool('editor_enabled'), + can_edit: false, + ); + $this->sessionFlags = SessionFlags::get(); + $this->flags->is_base_album = false; + $this->flags->is_accessible = true; + } + + /** + * Whenever searchQuery is updated, we recompute the urlQuery. + * + * @return void + */ + public function updatedSearchQuery(): void + { + $this->urlQuery = base64_encode($this->searchQuery); + } + + /** + * Render component. + * + * @return View + */ + public function render(): View + { + $this->searchQuery = base64_decode($this->urlQuery, true); + $this->terms = explode(' ', str_replace( + ['\\', '%', '_'], + ['\\\\', '\\%', '\\_'], + $this->searchQuery + )); + + if (strlen($this->searchQuery) >= $this->search_minimum_length_required) { + /** @var LengthAwarePaginator $photoResults */ + /** @disregard P1013 Undefined method withQueryString() (stupid intelephense) */ + $photoResults = $this->photoSearch + ->sqlQuery($this->terms) + ->orderBy(ColumnSortingPhotoType::TAKEN_AT->value, OrderSortingType::ASC->value) + ->paginate(Configs::getValueAsInt('search_pagination_limit')) + ->withQueryString(); + $this->photos = $photoResults; + /** @var Collection $albumResults */ + $albumResults = $this->albumSearch->queryAlbums($this->terms); + $this->albums = $albumResults; + $this->num_albums = $this->albums->count(); + $this->num_photos = $this->photos->count(); + $this->albumId = ''; + $this->photoId = ''; + } + + return view('livewire.pages.gallery.search'); + } + + /** + * Return the photos. + * + * @return Collection + */ + public function getPhotosProperty(): Collection + { + return collect($this->photos->items()); + } + + public function getAlbumsProperty(): ?Collection + { + return $this->albums; + } + + public function getAlbumIDsProperty(): array + { + return $this->albums->map(fn ($v, $k) => $v->id)->all(); + } + + // For now, simple + public function getBackProperty(): string + { + return route('livewire-gallery'); + } + + // For now, simple + public function getTitleProperty(): string + { + return __('lychee.SEARCH'); + } + + public function getAlbumFormattedProperty(): null + { + return null; + } + + public function getNoImagesAlbumsMessageProperty(): string + { + return strlen($this->searchQuery) < 3 ? '' : 'No results'; + } +} diff --git a/app/Livewire/Components/Pages/Gallery/SensitiveWarning.php b/app/Livewire/Components/Pages/Gallery/SensitiveWarning.php new file mode 100644 index 0000000000..75fd651f99 --- /dev/null +++ b/app/Livewire/Components/Pages/Gallery/SensitiveWarning.php @@ -0,0 +1,60 @@ +text = Configs::getValueAsString('nsfw_banner_override'); + $this->isBlurred = Configs::getValueAsBool('nsfw_banner_blur_backdrop'); + + // TODO: remember if was open or not. + + if ($album instanceof Album) { + $this->isOpen = $album->is_nsfw; + + if (Auth::user()?->may_administrate === true) { + $this->isOpen = $this->isOpen && Configs::getValueAsBool('nsfw_warning_admin'); + } else { + $this->isOpen = $this->isOpen && Configs::getValueAsBool('nsfw_warning'); + } + } + } + + /** + * Render the associated view. + * + * @return View + */ + public function render(): View + { + return view('livewire.modules.gallery.sensitive-warning'); + } +} diff --git a/app/Livewire/Components/Pages/Jobs.php b/app/Livewire/Components/Pages/Jobs.php new file mode 100644 index 0000000000..b07d8c5eea --- /dev/null +++ b/app/Livewire/Components/Pages/Jobs.php @@ -0,0 +1,59 @@ +orderBy('id', 'desc') + ->limit(Configs::getValueAsInt('log_max_num_line')) + ->get(); + } + + /** + * Rendering of the front-end. + * + * @return View + */ + public function render(): View + { + return view('livewire.pages.jobs'); + } + + public function back(): mixed + { + $this->dispatch('closeLeftMenu')->to(LeftMenu::class); + + return $this->redirect(route('livewire-gallery'), true); + } +} diff --git a/app/Livewire/Components/Pages/Landing.php b/app/Livewire/Components/Pages/Landing.php new file mode 100644 index 0000000000..7fee45e3b4 --- /dev/null +++ b/app/Livewire/Components/Pages/Landing.php @@ -0,0 +1,43 @@ +title = Configs::getValueAsString('landing_title'); + $this->subtitle = Configs::getValueAsString('landing_subtitle'); + $background = Configs::getValueAsString('landing_background'); + if (!Str::startsWith($background, 'http')) { + $background = URL::asset($background); + } + $this->background = $background; + } + + /** + * Rendering of the front-end. + * + * @return View + */ + public function render(): View + { + return view('livewire.pages.landing'); + } +} diff --git a/app/Livewire/Components/Pages/Map.php b/app/Livewire/Components/Pages/Map.php new file mode 100644 index 0000000000..63691fff54 --- /dev/null +++ b/app/Livewire/Components/Pages/Map.php @@ -0,0 +1,91 @@ +map_provider = Configs::getValueAsEnum('map_provider', MapProviders::class); + + return view('livewire.pages.gallery.map'); + } + + public function mount(?string $albumId = null): void + { + $this->albumId = $albumId; + + if ($albumId !== null) { + $this->album = $this->albumFactory->findAbstractAlbumOrFail($this->albumId); + $this->title = $this->album->title; + } + + Gate::authorize(AlbumPolicy::CAN_ACCESS_MAP, [AbstractAlbum::class, $this->album]); + } + + /** + * @return array + */ + public function getDataProperty(): array + { + if ($this->albumId === null) { + /** @var array $ret */ + $ret = $this->rootPositionData->do()->toArray(request()); + + return $ret; + } + + $includeSubAlbums = Configs::getValueAsBool('map_include_subalbums'); + + /** @var array $ret */ + $ret = $this->albumPositionData->get($this->album, $includeSubAlbums)->toArray(request()); + + return $ret; + } + + public function boot(): void + { + $this->albumFactory = resolve(AlbumFactory::class); + $this->rootPositionData = resolve(RootPositionData::class); + $this->albumPositionData = resolve(AlbumPositionData::class); + $this->title = Configs::getValueAsString('site_title'); + } + + public function back(): mixed + { + if ($this->albumId === null) { + return $this->redirect(route('livewire-gallery'), true); + } else { + return $this->redirect(route('livewire-gallery-album', ['albumId' => $this->albumId]), true); + } + } +} diff --git a/app/Livewire/Components/Pages/Profile.php b/app/Livewire/Components/Pages/Profile.php new file mode 100644 index 0000000000..5c9f140a38 --- /dev/null +++ b/app/Livewire/Components/Pages/Profile.php @@ -0,0 +1,58 @@ +are_notification_active = Configs::getValueAsBool('new_photos_notification'); + $this->is_token_auh_active = config('auth.guards.lychee.driver', 'session-or-token') === 'session-or-token'; + } + + /** + * Rendering of the front-end. + * + * @return View + */ + public function render(): View + { + return view('livewire.pages.profile'); + } + + public function back(): mixed + { + $this->dispatch('closeLeftMenu')->to(LeftMenu::class); + + return $this->redirect(route('livewire-gallery'), true); + } +} diff --git a/app/Livewire/Components/Pages/Settings.php b/app/Livewire/Components/Pages/Settings.php new file mode 100644 index 0000000000..bd026a5440 --- /dev/null +++ b/app/Livewire/Components/Pages/Settings.php @@ -0,0 +1,97 @@ +css = Storage::disk('dist')->get('user.css'); + $this->js = Storage::disk('dist')->get('custom.js'); + } + + /** + * Rendering of the front-end. + * + * @return View + */ + public function render(): View + { + return view('livewire.pages.settings'); + } + + public function back(): mixed + { + $this->dispatch('closeLeftMenu')->to(LeftMenu::class); + + return $this->redirect(route('livewire-gallery'), true); + } + + /** + * Takes the css input text and put it into `dist/user.css`. + * This allows admins to actually personalize the look of their + * installation. + * + * @return void + * + * @throws InsufficientFilesystemPermissions + */ + public function setCSS(): void + { + Gate::authorize(SettingsPolicy::CAN_EDIT, Configs::class); + + if (Storage::disk('dist')->put('user.css', $this->css) === false) { + if (Storage::disk('dist')->get('user.css') !== $this->css) { + throw new InsufficientFilesystemPermissions('Could not save CSS'); + } + } + $this->notify(__('lychee.CHANGE_SUCCESS')); + } + + /** + * Takes the js input text and put it into `dist/custom.js`. + * This allows admins to actually execute custom js code on their + * Lychee-Laravel installation. + * + * @return void + * + * @throws InsufficientFilesystemPermissions + */ + public function setJS(): void + { + Gate::authorize(SettingsPolicy::CAN_EDIT, Configs::class); + + if (Storage::disk('dist')->put('custom.js', $this->js) === false) { + if (Storage::disk('dist')->get('custom.js') !== $this->js) { + throw new InsufficientFilesystemPermissions('Could not save JS'); + } + } + $this->notify(__('lychee.CHANGE_SUCCESS')); + } +} diff --git a/app/Livewire/Components/Pages/Sharing.php b/app/Livewire/Components/Pages/Sharing.php new file mode 100644 index 0000000000..a5249aad4f --- /dev/null +++ b/app/Livewire/Components/Pages/Sharing.php @@ -0,0 +1,76 @@ + + */ + public function getPermsProperty(): array + { + // This could be optimized, but whatever. + return + AccessPermission::with(['album', 'user']) + ->when(!Auth::user()->may_administrate, fn ($q) => $q->whereIn('base_album_id', BaseAlbumImpl::select('id')->where('owner_id', '=', Auth::id()))) + ->whereNotNull('user_id') + ->orderBy('base_album_id', 'asc') + ->get()->all(); + } + + /** + * Set up the profile page. + * + * @return void + * + * @throws ConfigurationKeyMissingException + */ + public function mount(): void + { + Gate::authorize(AlbumPolicy::CAN_SHARE_WITH_USERS, [AbstractAlbum::class, null]); + } + + /** + * Rendering of the front-end. + * + * @return View + */ + public function render(): View + { + return view('livewire.pages.sharing'); + } + + public function back(): mixed + { + $this->dispatch('closeLeftMenu')->to(LeftMenu::class); + + return $this->redirect(route('livewire-gallery'), true); + } + + public function delete(int $id): void + { + $perm = AccessPermission::with('album')->findOrFail($id); + Gate::authorize(AlbumPolicy::CAN_SHARE_WITH_USERS, [AbstractAlbum::class, $perm->album]); + + AccessPermission::query()->where('id', '=', $id)->delete(); + } +} diff --git a/app/Livewire/Components/Pages/Users.php b/app/Livewire/Components/Pages/Users.php new file mode 100644 index 0000000000..c1d3032fb3 --- /dev/null +++ b/app/Livewire/Components/Pages/Users.php @@ -0,0 +1,121 @@ +create = resolve(Create::class); + } + + /** + * Load users. + * + * @return void + */ + public function mount(): void + { + Gate::authorize(UserPolicy::CAN_CREATE_OR_EDIT_OR_DELETE, User::class); + + $this->loadUsers(); + } + + /** + * Rendering of the front-end. + * + * @return View + */ + public function render(): View + { + return view('livewire.pages.users'); + } + + /** + * Refresh the user List. + * + * @return void + */ + public function loadUsers(): void + { + $this->users = User::orderBy('id', 'asc')->get(); + } + + /** + * Create a new user. + * + * @return void + */ + public function create(): void + { + Gate::authorize(UserPolicy::CAN_CREATE_OR_EDIT_OR_DELETE, User::class); + + // Create user + $this->create->do( + $this->username, + $this->password, + $this->may_upload, + $this->may_edit_own_settings); + + // reset attributes and reload user list (triggers refresh) + $this->username = ''; + $this->password = ''; + $this->may_upload = false; + $this->may_edit_own_settings = false; + $this->loadUsers(); + } + + public function back(): mixed + { + $this->dispatch('closeLeftMenu')->to(LeftMenu::class); + + return $this->redirect(route('livewire-gallery'), true); + } + + /** + * Delete an existing credential. + * + * @param int $id + * + * @return void + */ + public function delete(int $id): void + { + if ($id === Auth::id()) { + throw new UnauthorizedException('You are not allowed to delete yourself'); + } + + Gate::authorize(UserPolicy::CAN_CREATE_OR_EDIT_OR_DELETE, [User::class]); + + User::where('id', '=', $id)->delete(); + $this->loadUsers(); + } +} diff --git a/app/Livewire/DTO/AlbumFlags.php b/app/Livewire/DTO/AlbumFlags.php new file mode 100644 index 0000000000..0a0add67c1 --- /dev/null +++ b/app/Livewire/DTO/AlbumFlags.php @@ -0,0 +1,21 @@ +is_map_accessible = Configs::getValueAsBool('map_display'); + $this->is_map_accessible = $this->is_map_accessible && (Auth::check() || Configs::getValueAsBool('map_display_public')); + $this->is_mod_frame_enabled = Configs::getValueAsBool('mod_frame_enabled'); + } +} \ No newline at end of file diff --git a/app/Livewire/DTO/AlbumFormatted.php b/app/Livewire/DTO/AlbumFormatted.php new file mode 100644 index 0000000000..da6e042a0e --- /dev/null +++ b/app/Livewire/DTO/AlbumFormatted.php @@ -0,0 +1,43 @@ +url = $url; + $this->title = $album->title; + if ($album instanceof BaseAlbum) { + $this->min_taken_at = $album->min_taken_at?->format($min_max_date_format); + $this->max_taken_at = $album->max_taken_at?->format($min_max_date_format); + $this->created_at = $album->created_at->format($create_date_format); + $this->description = $album->description; + } + if ($album instanceof Album) { + $this->num_children = $album->num_children; + $this->num_photos = $album->num_photos; + $this->license = $album->license === LicenseType::NONE ? '' : $album->license->localization(); + } + } +} \ No newline at end of file diff --git a/app/Livewire/DTO/AlbumRights.php b/app/Livewire/DTO/AlbumRights.php new file mode 100644 index 0000000000..764aff8f41 --- /dev/null +++ b/app/Livewire/DTO/AlbumRights.php @@ -0,0 +1,41 @@ +whereNotNull('longitude')->count() > 0; + $this->is_map_accessible = $count_locations && Configs::getValueAsBool('map_display'); + $this->is_map_accessible = $this->is_map_accessible && (Auth::check() || Configs::getValueAsBool('map_display_public')); + $this->is_mod_frame_enabled = Configs::getValueAsBool('mod_frame_enabled'); + $this->can_use_2fa = !Auth::check() && (WebAuthnCredential::query()->whereNull('disabled_at')->count() > 0); + $this->can_edit = Gate::check(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class]); + $this->is_search_accessible = Auth::check() || Configs::getValueAsBool('search_public'); + } +} \ No newline at end of file diff --git a/app/Livewire/DTO/Layouts.php b/app/Livewire/DTO/Layouts.php new file mode 100644 index 0000000000..95ed6e9d7b --- /dev/null +++ b/app/Livewire/DTO/Layouts.php @@ -0,0 +1,30 @@ +photo_layout_justified_row_height ??= Configs::getValueAsInt('photo_layout_justified_row_height'); + $this->photo_layout_masonry_column_width ??= Configs::getValueAsInt('photo_layout_masonry_column_width'); + $this->photo_layout_grid_column_width ??= Configs::getValueAsInt('photo_layout_grid_column_width'); + $this->photo_layout_square_column_width ??= Configs::getValueAsInt('photo_layout_square_column_width'); + $this->photo_layout_gap ??= Configs::getValueAsInt('photo_layout_gap'); + $this->photos_layout ??= Configs::getValueAsEnum('layout', PhotoLayoutType::class)->value; + } + + public function photos_layout(): PhotoLayoutType + { + return PhotoLayoutType::from($this->photos_layout); + } +} diff --git a/app/Livewire/DTO/PhotoFlags.php b/app/Livewire/DTO/PhotoFlags.php new file mode 100644 index 0000000000..266739b85d --- /dev/null +++ b/app/Livewire/DTO/PhotoFlags.php @@ -0,0 +1,18 @@ + */ + #[Locked] + public array $configs; + + /** @var array */ + public array $values; + + /** + * This allows Livewire to know which values of the $configs we + * want to display in the wire:model. Sort of a white listing. + * + * @var array + */ + protected $rules = [ + 'values.*' => 'nullable', + ]; + + /** + * Initialize form data. + * + * @param Collection $configs + * + * @return void + */ + public function setConfigs(Collection $configs): void + { + // ! IMPORTANT, WE MUST use all() to get an array and not use the collections, + // ! otherwise this messes up the ordering. + $this->configs = $configs->all(); + $this->values = $configs->map(fn (Configs $c, int $k) => $c->value)->all(); + } + + /** + * Save form data. + * + * @return void + * + * @throws ValidationException + * @throws LycheeAssertionError + */ + public function save(): void + { + $this->validate(); + $n = count($this->values); + if ($n !== count($this->configs)) { + throw new LycheeAssertionError('Number of values do not match number of configs'); + } + + for ($idx = 0; $idx < $n; $idx++) { + $c = $this->configs[$idx]; + $candidateValue = $this->values[$idx]; + $template = 'Error: Expected %s, got ' . ($candidateValue ?? 'NULL') . '.'; + + $error_msg = $c->sanity($candidateValue, $template); + if ($error_msg === '') { + $c->value = $candidateValue; + $c->save(); + } else { + $this->addError('values.' . $idx, $error_msg); + } + } + } +} diff --git a/app/Livewire/Forms/ImportFromServerForm.php b/app/Livewire/Forms/ImportFromServerForm.php new file mode 100644 index 0000000000..a672b7998f --- /dev/null +++ b/app/Livewire/Forms/ImportFromServerForm.php @@ -0,0 +1,126 @@ + */ + public array $paths = []; + public bool $delete_imported; + public bool $skip_duplicates; + public bool $import_via_symlink; + public bool $resync_metadata; + + /** + * This allows Livewire to know which values of the $configs we + * want to display in the wire:model. Sort of a white listing. + * + * @return array + */ + protected function rules(): array + { + return [ + RequestAttribute::ALBUM_ID_ATTRIBUTE => ['present', new RandomIDRule(true)], + RequestAttribute::PATH_ATTRIBUTE => 'required|array|min:1', + RequestAttribute::PATH_ATTRIBUTE . '.*' => 'required|string|distinct', + RequestAttribute::DELETE_IMPORTED_ATTRIBUTE => 'sometimes|boolean', + RequestAttribute::SKIP_DUPLICATES_ATTRIBUTE => 'sometimes|boolean', + RequestAttribute::IMPORT_VIA_SYMLINK_ATTRIBUTE => 'sometimes|boolean', + RequestAttribute::RESYNC_METADATA_ATTRIBUTE => 'sometimes|boolean', + ]; + } + + /** + * split path into paths array. + * + * @return void + */ + public function prepare() + { + $subject = $this->path; + + // We split the given path string at unescaped spaces into an + // array or more precisely we create an array whose entries + // match strings with non-space characters or escaped spaces. + // After splitting, the escaped spaces must be replaced by + // proper spaces as escaping of spaces is a GUI-only thing to + // allow input of several paths into a single input field. + $matches = $this->split_escaped(' ', '\\', $subject); + + // drop first element: matched elements start at index 1 + // array_shift($matches); + $this->paths = array_map(fn ($v) => str_replace('\\ ', ' ', $v), $matches); + + // Remove empty elements + $this->paths = array_filter($this->paths, fn ($v) => $v === ''); + } + + /** + * Dark magic code from Stack Overflow + * https://stackoverflow.com/a/27135602. + * + * @param string $delimiter + * @param string $escaper + * @param string $text + * + * @return string[] + */ + private function split_escaped(string $delimiter, string $escaper, string $text): array + { + $d = preg_quote($delimiter, '~'); + $e = preg_quote($escaper, '~'); + $tokens = preg_split( + '~' . $e . '(' . $e . '|' . $d . ')(*SKIP)(*FAIL)|' . $d . '~', + $text + ); + $escaperReplacement = str_replace(['\\', '$'], ['\\\\', '\\$'], $escaper); + $delimiterReplacement = str_replace(['\\', '$'], ['\\\\', '\\$'], $delimiter); + + return preg_replace( + ['~' . $e . $e . '~', '~' . $e . $d . '~'], + [$escaperReplacement, $delimiterReplacement], + $tokens + ); + } + + /** + * Initialize form data. + * + * @param ?string $albumID + * + * @return void + */ + public function init(?string $albumID): void + { + $this->albumID = $albumID; + $this->path = public_path('uploads/import/'); + $this->delete_imported = Configs::getValueAsBool('delete_imported'); + $this->import_via_symlink = !Configs::getValueAsBool('delete_imported') && Configs::getValueAsBool('import_via_symlink'); + $this->skip_duplicates = Configs::getValueAsBool('skip_duplicates'); + $this->resync_metadata = false; + } + + public function getAlbum(): null|Album + { + /** @var Album $album */ + $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID); + + return $album; + } + + public function getImportMode(): ImportMode + { + return new ImportMode($this->delete_imported, $this->skip_duplicates, $this->import_via_symlink, $this->resync_metadata); + } +} diff --git a/app/Livewire/Forms/ImportFromUrlForm.php b/app/Livewire/Forms/ImportFromUrlForm.php new file mode 100644 index 0000000000..c9427a3d59 --- /dev/null +++ b/app/Livewire/Forms/ImportFromUrlForm.php @@ -0,0 +1,77 @@ + */ + public array $urls = []; + + public string $url = ''; + + /** + * This allows Livewire to know which values of the $configs we + * want to display in the wire:model. Sort of a white listing. + * + * @return array + */ + protected function rules(): array + { + return [ + RequestAttribute::ALBUM_ID_ATTRIBUTE => ['present', new RandomIDRule(true)], + RequestAttribute::URLS_ATTRIBUTE => 'required|array|min:1', + RequestAttribute::URLS_ATTRIBUTE . '.*' => 'required|string', + ]; + } + + /** + * split path into paths array. + * + * @return void + */ + public function prepare() + { + $this->urls = [$this->url]; + + // The replacement below looks suspicious. + // If it was really necessary, then there would be much more special + // characters (e.i. for example umlauts in international domain names) + // which would require replacement by their corresponding %-encoding. + // However, I assume that the PHP method `fopen` is happily fine with + // any character and internally handles special characters itself. + // Hence, either use a proper encoding method here instead of our + // home-brewed, poor-man replacement or drop it entirely. + // TODO: Find out what is needed and proceed accordingly. + // ? We can't use URL encode because we need to preserve :// and ? + $this->urls = str_replace(' ', '%20', $this->urls); + } + + /** + * Initialize form data. + * + * @param ?string $albumID + * + * @return void + */ + public function init(?string $albumID): void + { + $this->albumID = $albumID; + } + + public function getAlbum(): null|Album + { + /** @var Album $album */ + $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID); + + return $album; + } +} diff --git a/app/Livewire/Forms/PhotoUpdateForm.php b/app/Livewire/Forms/PhotoUpdateForm.php new file mode 100644 index 0000000000..cb9a313349 --- /dev/null +++ b/app/Livewire/Forms/PhotoUpdateForm.php @@ -0,0 +1,103 @@ + */ + #[Locked] public array $tags = []; + #[Locked] public string $date = ''; + public function __construct( + public string $photoID, + public string $title, + public string $description, + public string $tagsWithComma, + public string $uploadDate, + public string $uploadTz, + public string $license, + ) { + $this->tags = collect(explode(',', $this->tagsWithComma))->map(fn ($v) => trim($v))->filter(fn ($v) => $v !== '')->all(); + $this->date = $this->uploadDate . ':' . $this->uploadTz; + } + + /** + * This allows Livewire to know which values of the $configs we + * want to display in the wire:model. Sort of a white listing. + * + * @return array + */ + protected function rules(): array + { + return [ + RequestAttribute::TITLE_ATTRIBUTE => ['required', new TitleRule()], + ...SetPhotoDescriptionRuleSet::rules(), + RequestAttribute::TAGS_ATTRIBUTE => 'present|array', + RequestAttribute::TAGS_ATTRIBUTE . '.*' => 'required|string|min:1', + RequestAttribute::LICENSE_ATTRIBUTE => ['required', new Enum(LicenseType::class)], + RequestAttribute::DATE_ATTRIBUTE => 'required|date', + ]; + } + + /** + * Validate form. + * + * @return array> + */ + public function validate(): array + { + /** @var Validator $validator */ + $validator = ValidatorFacade::make($this->all(), $this->rules()); + + if ($validator->fails()) { + return $validator->getMessageBag()->messages(); + } + + return []; + } + + /** + * Fetch photo associated with request. + * + * @return Photo + */ + public function getPhoto(): Photo + { + $this->photo = Photo::query()->findOrFail($this->photoID); + + return $this->photo; + } + + /** + * Save data in photo. + * + * @return void + */ + public function save(): void + { + $photo = Photo::query()->where('id', '=', $this->photoID)->first(); + + $photo->title = $this->title; + $photo->description = $this->description; + $photo->created_at = $this->date; + $photo->tags = $this->tags; + $photo->license = LicenseType::from($this->license); + $photo->save(); + } + + public function all(): array + { + return Utils::getPublicProperties($this); + } +} diff --git a/app/Livewire/Synth/AlbumFlagsSynth.php b/app/Livewire/Synth/AlbumFlagsSynth.php new file mode 100644 index 0000000000..f98a47633d --- /dev/null +++ b/app/Livewire/Synth/AlbumFlagsSynth.php @@ -0,0 +1,80 @@ +> + */ + public function dehydrate($target): array + { + $result = []; + $cls = new \ReflectionClass(AlbumFlags::class); + $props = $cls->getProperties(\ReflectionProperty::IS_PUBLIC); + foreach ($props as $prop) { + $propertyValue = $prop->getValue($target); + if (is_object($propertyValue)) { + throw new LycheeLogicException(sprintf('wrong value type for %s', get_class($propertyValue))); + } + $result[$prop->getName()] = $propertyValue; + } + + return [$result, []]; + } + + /** + * @param array $value + * + * @return AlbumFlags + */ + public function hydrate($value): AlbumFlags + { + $cls = new \ReflectionClass(AlbumFlags::class); + + /** @var AlbumFlags $flags */ + $flags = $cls->newInstanceWithoutConstructor(); + $props = $cls->getProperties(\ReflectionProperty::IS_PUBLIC); + foreach ($props as $prop) { + $flags->{$prop->getName()} = $value[$prop->getName()]; + } + + return $flags; + } + + /** + * @param AlbumFlags $target + * @param string $key + * + * @return string + */ + public function get(&$target, $key) + { + return $target->{$key}; + } + + /** + * @param AlbumFlags $target + * @param string $key + * @param bool $value + * + * @return void + */ + public function set(&$target, $key, $value) + { + $target->{$key} = $value; + } +} \ No newline at end of file diff --git a/app/Livewire/Synth/AlbumSynth.php b/app/Livewire/Synth/AlbumSynth.php new file mode 100644 index 0000000000..d6a62f1909 --- /dev/null +++ b/app/Livewire/Synth/AlbumSynth.php @@ -0,0 +1,42 @@ +> + */ + public function dehydrate($target): array + { + return [[ + 'id' => $target->id, + ], []]; + } + + /** + * @param array $value + * + * @return AbstractAlbum + */ + public function hydrate($value): AbstractAlbum + { + /** @var AlbumFactory $albumFactory */ + $albumFactory = resolve(AlbumFactory::class); + + return $albumFactory->findAbstractAlbumOrFail($value['id']); + } +} \ No newline at end of file diff --git a/app/Livewire/Synth/PhotoSynth.php b/app/Livewire/Synth/PhotoSynth.php new file mode 100644 index 0000000000..d8e762cf9f --- /dev/null +++ b/app/Livewire/Synth/PhotoSynth.php @@ -0,0 +1,38 @@ +> + */ + public function dehydrate($target): array + { + return [[ + 'id' => $target->id, + ], []]; + } + + /** + * @param array $value + * + * @return Photo + */ + public function hydrate($value): Photo + { + return Photo::findOrFail($value['id']); + } +} \ No newline at end of file diff --git a/app/Livewire/Synth/SessionFlagsSynth.php b/app/Livewire/Synth/SessionFlagsSynth.php new file mode 100644 index 0000000000..a872a7cbf7 --- /dev/null +++ b/app/Livewire/Synth/SessionFlagsSynth.php @@ -0,0 +1,81 @@ +> + */ + public function dehydrate($target): array + { + $result = []; + $cls = new \ReflectionClass(SessionFlags::class); + $props = $cls->getProperties(\ReflectionProperty::IS_PUBLIC); + foreach ($props as $prop) { + $propertyValue = $prop->getValue($target); + if (is_object($propertyValue)) { + throw new LycheeLogicException(sprintf('wrong value type for %s', get_class($propertyValue))); + } + $result[$prop->getName()] = $propertyValue; + } + + return [$result, []]; + } + + /** + * @param array $value + * + * @return SessionFlags + */ + public function hydrate($value): SessionFlags + { + $cls = new \ReflectionClass(SessionFlags::class); + + /** @var SessionFlags $flags */ + $flags = $cls->newInstanceWithoutConstructor(); + $props = $cls->getProperties(\ReflectionProperty::IS_PUBLIC); + foreach ($props as $prop) { + $flags->{$prop->getName()} = $value[$prop->getName()]; + } + + return $flags; + } + + /** + * @param SessionFlags $target + * @param string $key + * + * @return string + */ + public function get(&$target, $key) + { + return $target->{$key}; + } + + /** + * @param SessionFlags $target + * @param string $key + * @param bool $value + * + * @return void + */ + public function set(&$target, $key, $value) + { + $target->{$key} = $value; + $target->save(); + } +} \ No newline at end of file diff --git a/app/Livewire/Traits/AlbumsPhotosContextMenus.php b/app/Livewire/Traits/AlbumsPhotosContextMenus.php new file mode 100644 index 0000000000..29bae91ad1 --- /dev/null +++ b/app/Livewire/Traits/AlbumsPhotosContextMenus.php @@ -0,0 +1,75 @@ +dispatch( + 'openContextMenu', + 'menus.AlbumAdd', + [Params::PARENT_ID => $this->albumId], + 'right: 30px; top: 30px; transform-origin: top right;' + )->to(ContextMenu::class); + } + + #[Renderless] + public function openPhotoDropdown(int $x, int $y, string $photoId): void + { + $this->dispatch( + 'openContextMenu', + 'menus.PhotoDropdown', + [Params::ALBUM_ID => $this->albumId, Params::PHOTO_ID => $photoId], + $this->getCss($x, $y) + )->to(ContextMenu::class); + } + + #[Renderless] + public function openPhotosDropdown(int $x, int $y, array $photoIds): void + { + $this->dispatch( + 'openContextMenu', + 'menus.PhotosDropdown', + [Params::ALBUM_ID => $this->albumId, Params::PHOTO_IDS => $photoIds], + $this->getCss($x, $y) + )->to(ContextMenu::class); + } + + #[Renderless] + public function openAlbumDropdown(int $x, int $y, string $albumID): void + { + $this->dispatch( + 'openContextMenu', + 'menus.AlbumDropdown', + [Params::PARENT_ID => $this->albumId, Params::ALBUM_ID => $albumID], + $this->getCss($x, $y) + )->to(ContextMenu::class); + } + + #[Renderless] + public function openAlbumsDropdown(int $x, int $y, array $albumIds): void + { + $this->dispatch( + 'openContextMenu', + 'menus.AlbumsDropdown', + [Params::PARENT_ID => $this->albumId, Params::ALBUM_IDS => $albumIds], + $this->getCss($x, $y) + )->to(ContextMenu::class); + } + + private function getCss(int $x, int $y): string + { + return sprintf('transform-origin: top left; left: %dpx; top: %dpx;', $x, $y); + } +} diff --git a/app/Livewire/Traits/InteractWithContextMenu.php b/app/Livewire/Traits/InteractWithContextMenu.php new file mode 100644 index 0000000000..168942507c --- /dev/null +++ b/app/Livewire/Traits/InteractWithContextMenu.php @@ -0,0 +1,18 @@ +dispatch('closeContextMenu')->to(ContextMenu::class); + } +} diff --git a/app/Livewire/Traits/InteractWithModal.php b/app/Livewire/Traits/InteractWithModal.php new file mode 100644 index 0000000000..6b98053546 --- /dev/null +++ b/app/Livewire/Traits/InteractWithModal.php @@ -0,0 +1,45 @@ +dispatch('openModal', $form, '', $params)->to(Modal::class); + } + + /** + * Open Modal with form and paramters. + * + * @param string $form Livewire component to include in the modal + * @param string $close_text text to put if we use a close button + * @param array $params Parameters for said component + * + * @return void + */ + protected function openClosableModal(string $form, string $close_text, array $params = []): void + { + $this->dispatch('openModal', $form, $close_text, $params)->to(Modal::class); + } + + /** + * Close the modal. + * + * @return void + */ + protected function closeModal(): void + { + $this->dispatch('closeModal')->to(Modal::class); + } +} diff --git a/app/Livewire/Traits/Notify.php b/app/Livewire/Traits/Notify.php new file mode 100644 index 0000000000..4b2a91ebe3 --- /dev/null +++ b/app/Livewire/Traits/Notify.php @@ -0,0 +1,24 @@ +dispatch('notify', ['msg' => $message, 'type' => $type->value]); + } +} \ No newline at end of file diff --git a/app/Livewire/Traits/SilentUpdate.php b/app/Livewire/Traits/SilentUpdate.php new file mode 100644 index 0000000000..03ad78cb1c --- /dev/null +++ b/app/Livewire/Traits/SilentUpdate.php @@ -0,0 +1,23 @@ +isOpen = true; + } + + /** + * Close the component. + * + * @return void + */ + #[On('close')] + public function close(): void + { + Debugbar::info('request to close.'); + $this->isOpen = false; + } + + /** + * Toggle the component. + * + * @return void + */ + #[On('toggle')] + public function toggle(): void + { + Debugbar::info('toggle.'); + $this->isOpen = !$this->isOpen; + } +} \ No newline at end of file diff --git a/app/Livewire/Traits/UsePhotoViewActions.php b/app/Livewire/Traits/UsePhotoViewActions.php new file mode 100644 index 0000000000..cf69f58b65 --- /dev/null +++ b/app/Livewire/Traits/UsePhotoViewActions.php @@ -0,0 +1,143 @@ +validate(); + if ($valdiation !== []) { + $msg = ''; + foreach ($valdiation as $value) { + $msg .= ($msg !== '' ? '
' : '') . implode('
', $value); + } + $this->notify($msg, NotificationType::ERROR); + + return null; + } + + Gate::authorize(PhotoPolicy::CAN_EDIT, [Photo::class, $form->getPhoto()]); + + $form->save(); + + $this->notify(__('lychee.CHANGE_SUCCESS')); + + return PhotoResource::make($form->getPhoto()); + } + + /** + * Flip the star of a given photo. + * + * @param array<0,string> $photoIDarg + * + * @return bool + */ + #[Renderless] + public function toggleStar(array $photoIDarg): bool + { + if (count($photoIDarg) !== 1 || !is_string($photoIDarg[0])) { + $this->notify('wrong ID', NotificationType::ERROR); + + return false; + } + $photo = Photo::query()->findOrFail($photoIDarg[0]); + + Gate::authorize(PhotoPolicy::CAN_EDIT, [Photo::class, $photo]); + $photo->is_starred = !$photo->is_starred; + $photo->save(); + + return true; + } + + /** + * Rotate selected photo Counter ClockWise. + * + * @param string $photoID + * + * @return void + */ + public function rotate_ccw(string $photoID): void + { + if (!Configs::getValueAsBool('editor_enabled')) { + return; + } + + $photo = Photo::query()->findOrFail($photoID); + Gate::authorize(PhotoPolicy::CAN_EDIT, [Photo::class, $photo]); + $rotateStrategy = new RotateStrategy($photo, -1); + $photo = $rotateStrategy->do(); + // Force hard refresh of the page (to load the rotated image) + $this->redirect(route('livewire-gallery-photo', ['albumId' => $this->albumId, 'photoId' => $photo->id])); + } + + /** + * Rotate selected photo ClockWise. + * + * @param string $photoID + * + * @return void + */ + public function rotate_cw(string $photoID): void + { + if (!Configs::getValueAsBool('editor_enabled')) { + return; + } + + $photo = Photo::query()->findOrFail($photoID); + Gate::authorize(PhotoPolicy::CAN_EDIT, [Photo::class, $photo]); + $rotateStrategy = new RotateStrategy($photo, 1); + $photo = $rotateStrategy->do(); + // Force hard refresh of the page (to load the rotated image) + $this->redirect(route('livewire-gallery-photo', ['albumId' => $this->albumId, 'photoId' => $photo->id])); + } + + /** + * Set all photos for given id as starred. + * + * @param array $photoIDs + * + * @return void + */ + public function setStar(array $photoIDs): void + { + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $photoIDs]); + Photo::whereIn('id', $photoIDs)->update(['is_starred' => true]); + } + + /** + * Set all photos for given id as NOT starred. + * + * @param array $photoIDs + * + * @return void + */ + public function unsetStar(array $photoIDs): void + { + Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $photoIDs]); + Photo::whereIn('id', $photoIDs)->update(['is_starred' => false]); + } +} \ No newline at end of file diff --git a/app/Livewire/Traits/UseValidator.php b/app/Livewire/Traits/UseValidator.php new file mode 100644 index 0000000000..5722527671 --- /dev/null +++ b/app/Livewire/Traits/UseValidator.php @@ -0,0 +1,37 @@ +all(), $rules); + + if ($validator->fails()) { + $msg = ''; + foreach ($validator->getMessageBag()->messages() as $value) { + $msg .= ($msg !== '' ? '
' : '') . implode('
', $value); + } + $this->dispatch('notify', ['msg' => $msg, 'type' => 'error']); + + return false; + } + + return true; + } +} \ No newline at end of file diff --git a/app/Livewire/Traits/UseWireable.php b/app/Livewire/Traits/UseWireable.php new file mode 100644 index 0000000000..b3b78eae13 --- /dev/null +++ b/app/Livewire/Traits/UseWireable.php @@ -0,0 +1,47 @@ +getProperties(\ReflectionProperty::IS_PUBLIC); + + foreach ($props as $prop) { + $propertyValue = $prop->getValue($this); + if (is_object($propertyValue)) { + throw new LycheeLogicException(sprintf('Convertion of %s is not supported', get_class($propertyValue))); + } + $result[$prop->getName()] = $propertyValue; + } + + return $result; + } + + /** + * @param mixed $data + * + * @return self + * + * @throws LycheeLogicException + * @throws \ReflectionException + */ + public static function fromLivewire(mixed $data) + { + if (!is_array($data)) { + throw new LycheeLogicException('data is not an array'); + } + + $cls = new \ReflectionClass(self::class); + + return $cls->newInstanceArgs($data); + } +} \ No newline at end of file diff --git a/app/Models/Album.php b/app/Models/Album.php index c1f55cc385..bcd030ebcd 100644 --- a/app/Models/Album.php +++ b/app/Models/Album.php @@ -16,6 +16,7 @@ use App\Relations\HasManyChildPhotos; use App\Relations\HasManyPhotosRecursively; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Query\Builder as BaseBuilder; use Illuminate\Http\UploadedFile; @@ -120,6 +121,7 @@ class Album extends BaseAlbum implements Node { use NodeTrait; use ToArrayThrowsNotImplemented; + use HasFactory; /** * The model's attributes. diff --git a/app/Models/BaseAlbumImpl.php b/app/Models/BaseAlbumImpl.php index 34bbfbcb3b..2896d47342 100644 --- a/app/Models/BaseAlbumImpl.php +++ b/app/Models/BaseAlbumImpl.php @@ -194,6 +194,11 @@ class BaseAlbumImpl extends Model implements HasRandomID */ protected $with = ['owner', 'access_permissions']; + protected function _toArray(): array + { + return parent::toArray(); + } + /** * @param $query * diff --git a/app/Models/Extensions/BaseConfigMigration.php b/app/Models/Extensions/BaseConfigMigration.php new file mode 100644 index 0000000000..beccc0d95e --- /dev/null +++ b/app/Models/Extensions/BaseConfigMigration.php @@ -0,0 +1,31 @@ + + */ + abstract public function getConfigs(): array; + + /** + * Run the migrations. + */ + final public function up(): void + { + DB::table('configs')->insert($this->getConfigs()); + } + + /** + * Reverse the migrations. + */ + final public function down(): void + { + $keys = collect($this->getConfigs())->map(fn ($v) => $v['key'])->all(); + DB::table('configs')->whereIn('key', $keys)->delete(); + } +} diff --git a/app/Models/Extensions/ToArrayThrowsNotImplemented.php b/app/Models/Extensions/ToArrayThrowsNotImplemented.php index 9511ebc4b5..400986775e 100644 --- a/app/Models/Extensions/ToArrayThrowsNotImplemented.php +++ b/app/Models/Extensions/ToArrayThrowsNotImplemented.php @@ -3,17 +3,28 @@ namespace App\Models\Extensions; use App\Exceptions\Internal\NotImplementedException; +use Illuminate\Support\Facades\Route; /** * Trait ToArrayThrowsNotImplemented. * * Now that we use Resources toArray should no longer be used. * Throw an exception if we encounter this function in the code. + * + * Because Livewire uses toArray to serialize models when passing them to sub components, + * we still need to allow those cases. Those can be detected by the Route::is() call */ trait ToArrayThrowsNotImplemented { + abstract protected function _toArray(): array; + final public function toArray(): array { - throw new NotImplementedException('->toArray() is deprecated, use Resources instead.'); + if (Route::is('livewire_index') || Route::is('livewire.message')) { + return $this->_toArray(); + } + $details = Route::getCurrentRoute()?->getName() ?? ''; + $details .= ($details !== '' ? ':' : '') . get_called_class(); + throw new NotImplementedException($details . '->toArray() is deprecated, use Resources instead.'); } } \ No newline at end of file diff --git a/app/Models/Photo.php b/app/Models/Photo.php index eee9734ec7..23d0ee7c50 100644 --- a/app/Models/Photo.php +++ b/app/Models/Photo.php @@ -24,6 +24,7 @@ use App\Models\Extensions\ToArrayThrowsNotImplemented; use App\Models\Extensions\UTCBasedTimes; use App\Relations\HasManySizeVariants; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Support\Carbon; @@ -122,6 +123,7 @@ */ class Photo extends Model { + use HasFactory; use UTCBasedTimes; use HasAttributesPatch; use HasRandomIDAndLegacyTimeBasedID; @@ -294,6 +296,16 @@ protected function getLicenseAttribute(?string $license): LicenseType return Configs::getValueAsEnum('default_license', LicenseType::class); } + /** + * This is to avoid loading the license from configs & albums. + * + * @return ?string + */ + public function getOriginalLicense(): ?string + { + return $this->attributes['license']; + } + /** * Accessor for attribute `focal`. * diff --git a/app/Models/SizeVariant.php b/app/Models/SizeVariant.php index 1c2df0c17b..14dfed3713 100644 --- a/app/Models/SizeVariant.php +++ b/app/Models/SizeVariant.php @@ -18,6 +18,7 @@ use App\Models\Extensions\UTCBasedTimes; use App\Relations\HasManyBidirectionally; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Support\Facades\Auth; @@ -51,6 +52,7 @@ * @property string $full_path * @property int $width * @property int $height + * @property float $ratio * @property int $filesize * @property Collection $sym_links * @@ -82,6 +84,7 @@ class SizeVariant extends Model use HasBidirectionalRelationships; use ThrowsConsistentExceptions; use ToArrayThrowsNotImplemented; + use HasFactory; /** * This model has no own timestamps as it is inseparably bound to its @@ -102,6 +105,28 @@ class SizeVariant extends Model 'width' => 'integer', 'height' => 'integer', 'filesize' => 'integer', + 'ratio' => 'float', + ]; + + /** + * @var array The list of attributes which exist as columns of the DB + * relation but shall not be serialized to JSON + */ + protected $hidden = [ + 'id', // irrelevant, because a size variant is always serialized as an embedded object of its photo + 'photo', // see above and otherwise infinite loops will occur + 'photo_id', // see above + 'short_path', // serialize url instead + 'sym_links', // don't serialize relation of symlinks + ]; + + /** + * @var string[] The list of "virtual" attributes which do not exist as + * columns of the DB relation but which shall be appended to + * JSON from accessors + */ + protected $appends = [ + 'url', ]; /** @@ -114,6 +139,11 @@ public function newEloquentBuilder($query): SizeVariantBuilder return new SizeVariantBuilder($query); } + protected function _toArray(): array + { + return parent::toArray(); + } + /** * Returns the association to the photo which this size variant belongs * to. diff --git a/app/Models/SymLink.php b/app/Models/SymLink.php index f285eec69a..fd55ef2930 100644 --- a/app/Models/SymLink.php +++ b/app/Models/SymLink.php @@ -79,6 +79,11 @@ class SymLink extends Model 'size_variant_id', // see above ]; + final protected function _toArray(): array + { + return parent::toArray(); + } + /** * @param $query * diff --git a/app/Models/TagAlbum.php b/app/Models/TagAlbum.php index 447442d5dd..7cab4c2569 100644 --- a/app/Models/TagAlbum.php +++ b/app/Models/TagAlbum.php @@ -75,6 +75,14 @@ class TagAlbum extends BaseAlbum 'show_tags' => ArrayCast::class, ]; + /** + * @var array The list of attributes which exist as columns of the DB + * relation but shall not be serialized to JSON + */ + protected $hidden = [ + 'base_class', // don't serialize base class as a relation, the attributes of the base class are flatly merged into the JSON result + ]; + /** * @var string[] The list of "virtual" attributes which do not exist as * columns of the DB relation but which shall be appended to @@ -84,6 +92,14 @@ class TagAlbum extends BaseAlbum 'thumb', ]; + protected function _toArray(): array + { + $result = parent::toArray(); + $result['is_tag_album'] = true; + + return $result; + } + public function photos(): HasManyPhotosByTag { return new HasManyPhotosByTag($this); diff --git a/app/Models/User.php b/app/Models/User.php index 58caf939bc..6b48e3dc74 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -11,6 +11,7 @@ use App\Models\Extensions\UTCBasedTimes; use Carbon\Exceptions\InvalidFormatException; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Query\Builder as BaseBuilder; @@ -74,6 +75,7 @@ */ class User extends Authenticatable implements WebAuthnAuthenticatable { + use HasFactory; use Notifiable; use WebAuthnAuthentication; use UTCBasedTimes; @@ -103,6 +105,11 @@ class User extends Authenticatable implements WebAuthnAuthenticatable 'may_edit_own_settings' => 'boolean', ]; + protected function _toArray(): array + { + return parent::toArray(); + } + /** * Create a new Eloquent query builder for the model. * diff --git a/app/Policies/AlbumPolicy.php b/app/Policies/AlbumPolicy.php index 57881cb1c2..d6810e87dd 100644 --- a/app/Policies/AlbumPolicy.php +++ b/app/Policies/AlbumPolicy.php @@ -23,6 +23,7 @@ class AlbumPolicy extends BasePolicy public const IS_OWNER = 'isOwner'; public const CAN_SEE = 'canSee'; public const CAN_ACCESS = 'canAccess'; + public const CAN_ACCESS_MAP = 'canAccessMap'; public const CAN_DOWNLOAD = 'canDownload'; public const CAN_DELETE = 'canDelete'; public const CAN_UPLOAD = 'canUpload'; @@ -36,12 +37,12 @@ class AlbumPolicy extends BasePolicy /** * This ensures that current album is owned by current user. * - * @param User|null $user - * @param BaseAlbum $album + * @param User|null $user + * @param BaseAlbum|BaseAlbumImpl $album * * @return bool */ - public function isOwner(?User $user, BaseAlbum $album): bool + public function isOwner(?User $user, BaseAlbum|BaseAlbumImpl $album): bool { return $user !== null && $album->owner_id === $user->id; } @@ -120,6 +121,30 @@ public function canAccess(?User $user, ?AbstractAlbum $album): bool return false; } + /** + * Check if user can access the map. + * Note that this is not used to determine the visibility of the header button because + * 1. Admin will always return true. + * 2. We also check if there are pictures with location data to be display in the album. + * + * @param User|null $user + * @param AbstractAlbum|null $album + * + * @return bool + */ + public function canAccessMap(?User $user, ?AbstractAlbum $album): bool + { + if (!Configs::getValueAsBool('map_display')) { + return false; + } + + if ($user === null && !Configs::getValueAsBool('map_display_public')) { + return false; + } + + return $this->canAccess($user, $album); + } + /** * Check if current user can download the album. * @@ -353,16 +378,14 @@ public function canDeleteById(User $user, array $albumIDs): bool /** * Check if user can share selected album with another user. * - * @param User|null $user + * @param User $user * @param AbstractAlbum $abstractAlbum * * @return bool - * - * @throws ConfigurationKeyMissingException */ - public function canShareWithUsers(?User $user, ?AbstractAlbum $abstractAlbum): bool + public function canShareWithUsers(User $user, AbstractAlbum|BaseAlbumImpl|null $abstractAlbum): bool { - if ($user?->may_upload !== true) { + if ($user->may_upload !== true) { return false; } @@ -371,7 +394,7 @@ public function canShareWithUsers(?User $user, ?AbstractAlbum $abstractAlbum): b return true; } - if (!$abstractAlbum instanceof BaseAlbum) { + if (!$abstractAlbum instanceof BaseAlbum && !$abstractAlbum instanceof BaseAlbumImpl) { return false; } diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php index b3b64c6fd4..7a1ee67d34 100644 --- a/app/Policies/UserPolicy.php +++ b/app/Policies/UserPolicy.php @@ -15,7 +15,6 @@ class UserPolicy extends BasePolicy public const CAN_EDIT = 'canEdit'; public const CAN_CREATE_OR_EDIT_OR_DELETE = 'canCreateOrEditOrDelete'; public const CAN_LIST = 'canList'; - public const CAN_USE_2FA = 'canUse2FA'; public function canCreateOrEditOrDelete(User $user): bool { @@ -28,22 +27,6 @@ public function canList(User $user): bool return $user->may_upload; } - /** - * This function returns false as it is bypassed by the before() - * which directly checks for admin rights. - * - * TODO: Later we will want to use this function to allow users - * to make use of 2FA as opposed to only the admin for now. - * - * @param User $user - * - * @return bool - */ - public function canUse2FA(User $user): bool - { - return false; - } - /** * This defines if user can edit their settings. * diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 78a95a7ba4..1268e71f47 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -11,6 +11,10 @@ use App\Factories\AlbumFactory; use App\Image\SizeVariantDefaultFactory; use App\Image\StreamStatFilter; +use App\Livewire\Synth\AlbumFlagsSynth; +use App\Livewire\Synth\AlbumSynth; +use App\Livewire\Synth\PhotoSynth; +use App\Livewire\Synth\SessionFlagsSynth; use App\Metadata\Json\CommitsRequest; use App\Metadata\Json\UpdateRequest; use App\Metadata\Versions\FileVersion; @@ -32,6 +36,7 @@ use Illuminate\Support\Facades\Log; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Str; +use Livewire\Livewire; use Opcodes\LogViewer\Facades\LogViewer; use Safe\Exceptions\StreamException; use function Safe\stream_filter_register; @@ -78,6 +83,14 @@ class AppServiceProvider extends ServiceProvider GitTags::class => GitTags::class, ]; + private array $livewireSynth = + [ + AlbumSynth::class, + PhotoSynth::class, + SessionFlagsSynth::class, + AlbumFlagsSynth::class, + ]; + /** * Bootstrap any application services. * @@ -139,6 +152,10 @@ public function boot() // return true to allow viewing the Log Viewer. return Auth::authenticate() !== null && Gate::check(SettingsPolicy::CAN_SEE_LOGS, Configs::class); }); + + foreach ($this->livewireSynth as $synth) { + Livewire::propertySynthesizer($synth); + } } /** diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index d0ce993d6e..e65f4f32dd 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -51,6 +51,9 @@ public function boot() Route::middleware('web-admin') ->group(base_path('routes/web-admin.php')); + Route::middleware('web') + ->group(base_path('routes/web-livewire.php')); + Route::middleware('web') ->group(base_path('routes/web.php')); }); diff --git a/app/SmartAlbums/BaseSmartAlbum.php b/app/SmartAlbums/BaseSmartAlbum.php index 1ddfc91a51..b4e3b1f09a 100644 --- a/app/SmartAlbums/BaseSmartAlbum.php +++ b/app/SmartAlbums/BaseSmartAlbum.php @@ -4,6 +4,7 @@ use App\Contracts\Exceptions\InternalLycheeException; use App\Contracts\Models\AbstractAlbum; +use App\DTO\AlbumProtectionPolicy; use App\DTO\PhotoSortingCriterion; use App\Enum\SmartAlbumType; use App\Exceptions\ConfigurationKeyMissingException; @@ -66,6 +67,36 @@ protected function __construct(SmartAlbumType $id, \Closure $smartCondition) } } + protected function _toArray(): array + { + // The properties `thumb` and `photos` are intentionally treated + // differently. + // + // 1. The result always includes `thumb`, hence we call the + // getter method to ensure that the property is initialized, if it + // has not already been accessed before. + // 2. The result only includes the collection `photos`, if it has + // already explicitly been accessed earlier and thus is initialized. + // + // Rationale: + // + // 1. This resembles the behaviour of a real Eloquent model, if the + // attribute `thumb` was part of the `append`-property of model. + // 2. This resembles the behaviour of a real Eloquent model for + // one-to-many relations. + // A relation is only included in the array representation, if the + // relation has been loaded. + // This avoids unnecessary hydration of photos if the album is + // only used within a listing of sub-albums. + return [ + 'id' => $this->id, + 'title' => $this->title, + 'thumb' => $this->getThumbAttribute(), + 'policy' => AlbumProtectionPolicy::ofSmartAlbum($this), + 'photos' => $this->photos?->toArray(), + ]; + } + /** * @throws InternalLycheeException */ diff --git a/app/View/Components/Footer.php b/app/View/Components/Footer.php new file mode 100644 index 0000000000..f2104cafd7 --- /dev/null +++ b/app/View/Components/Footer.php @@ -0,0 +1,74 @@ +layout = $layout; + $this->show_socials = Configs::getValueAsBool('footer_show_social_media'); + $this->facebook = Configs::getValueAsString('sm_facebook_url'); + $this->flickr = Configs::getValueAsString('sm_flickr_url'); + $this->twitter = Configs::getValueAsString('sm_twitter_url'); + $this->instagram = Configs::getValueAsString('sm_instagram_url'); + $this->youtube = Configs::getValueAsString('sm_youtube_url'); + + $this->hosted_by = __('lychee.HOSTED_WITH_LYCHEE'); + + if (Configs::getValueAsBool('footer_show_copyright')) { + $copyright_year = Configs::getValueAsString('site_copyright_begin'); + $copyright_year_end = Configs::getValueAsString('site_copyright_end'); + if ($copyright_year !== $copyright_year_end) { + $copyright_year = $copyright_year . '-' . $copyright_year_end; + } + + $this->copyright = sprintf( + __('lychee.FOOTER_COPYRIGHT'), + Configs::getValueAsString('site_owner'), + $copyright_year + ); + } + + $this->additional_footer_text = Configs::getValueAsString('footer_additional_text'); + } + + /** + * Render component. + * + * @return View + * + * @throws BindingResolutionException + */ + public function render(): View + { + return view('components.' . $this->layout); + } +} diff --git a/app/View/Components/Gallery/Album/SharingLinks.php b/app/View/Components/Gallery/Album/SharingLinks.php new file mode 100644 index 0000000000..065e5f8a74 --- /dev/null +++ b/app/View/Components/Gallery/Album/SharingLinks.php @@ -0,0 +1,31 @@ +url = route('livewire-gallery-album', ['albumId' => $album->id]); + $this->rawUrl = rawurlencode($this->url); + $raw_title = rawurlencode($album->title); + $this->twitter_link = 'https://twitter.com/share?url=' . $this->rawUrl; + $this->facebook_link = 'https://www.facebook.com/sharer.php?u=' . $this->rawUrl . '?t=' . $raw_title; + $this->mailTo_link = 'mailto:?subject=' . $raw_title . '&' . $this->rawUrl; + } + + public function render(): View + { + return view('components.gallery.album.sharing-links'); + } +} \ No newline at end of file diff --git a/app/View/Components/Gallery/Album/Thumbs/Album.php b/app/View/Components/Gallery/Album/Thumbs/Album.php new file mode 100644 index 0000000000..3f1d42f091 --- /dev/null +++ b/app/View/Components/Gallery/Album/Thumbs/Album.php @@ -0,0 +1,73 @@ +subType = Configs::getValueAsEnum('album_subtitle_type', ThumbAlbumSubtitleType::class)->value; + + $this->id = $data->id; + $this->thumb = $data->thumb; + $this->title = $data->title; + + if ($data instanceof BaseSmartAlbum) { + $policy = AlbumProtectionPolicy::ofSmartAlbum($data); + } else { + /** @var BaseAlbum $data */ + $this->max_taken_at = $data->max_taken_at?->format($date_format); + $this->min_taken_at = $data->min_taken_at?->format($date_format); + $this->created_at = $data->created_at->format($date_format); + $policy = AlbumProtectionPolicy::ofBaseAlbum($data); + } + + $this->is_nsfw = $policy->is_nsfw; + $this->is_nsfw_blurred = $this->is_nsfw && Configs::getValueAsBool('nsfw_blur'); + $this->is_public = $policy->is_public; + $this->is_link_required = $policy->is_link_required; + $this->is_password_required = $policy->is_password_required; + + $this->is_tag_album = $data instanceof TagAlbum; + // This aims to indicate whether the current thumb is used to determine the parent. + $this->is_cover_id = $data instanceof AlbumModel && $data->thumb !== null && $data->parent?->cover_id === $data->thumb->id; + $this->has_subalbum = $data instanceof AlbumModel && !$data->isLeaf(); + } + + public function render() + { + return view('components.gallery.album.thumbs.album'); + } +} \ No newline at end of file diff --git a/app/View/Components/Gallery/Album/Thumbs/AlbumThumb.php b/app/View/Components/Gallery/Album/Thumbs/AlbumThumb.php new file mode 100644 index 0000000000..1fe15da36e --- /dev/null +++ b/app/View/Components/Gallery/Album/Thumbs/AlbumThumb.php @@ -0,0 +1,48 @@ +class = $class; + if ($thumb === 'uploads/thumb/') { + $this->src = Str::contains($type, 'video') ? URL::asset('img/play-icon.png') : URL::asset('img/placeholder.png'); + $this->dataSrc = Str::contains($type, 'raw') ? URL::asset('img/no_images.svg') : ''; + } else { + $this->src = URL::asset('img/no_images.svg'); + + if ($thumb !== '') { + $this->dataSrc = URL::asset($thumb); + } + } + + $this->src = sprintf("src='%s'", $this->src); + if ($this->dataSrc !== '') { + $this->dataSrc = sprintf("data-src='%s'", $this->dataSrc); + } + + if ($thumb2x !== '') { + $this->dataSrcSet = sprintf("data-srcset='%s 2x'", URL::asset($thumb2x)); + } + } + + public function render() + { + return view('components.gallery.album.thumbs.album-thumb'); + } +} diff --git a/app/View/Components/Gallery/Album/Thumbs/Photo.php b/app/View/Components/Gallery/Album/Thumbs/Photo.php new file mode 100644 index 0000000000..549bc318d4 --- /dev/null +++ b/app/View/Components/Gallery/Album/Thumbs/Photo.php @@ -0,0 +1,170 @@ +idx = $idx; + $date_format = Configs::getValueAsString('date_format_photo_thumb'); + + $this->album_id = $albumId; + $this->photo_id = $data->id; + $this->title = $data->title; + $this->taken_at = $data->taken_at?->format($date_format) ?? ''; + $this->created_at = $data->created_at->format($date_format); + + $this->is_video = $data->isVideo(); + $this->is_livephoto = $data->live_photo_url !== null; + $this->is_cover_id = $data->album?->cover_id === $data->id; + + $thumb = $data->size_variants->getSizeVariant(SizeVariantType::THUMB); + $thumb2x = $data->size_variants->getSizeVariant(SizeVariantType::THUMB2X); + + $this->set_src($thumb); + + $dim = 200; + $dim2x = 400; + $thumbUrl = $thumb?->url; + $thumb2xUrl = $thumb2x?->url; + + // Probably this code needs some fix/refactoring, too. However, where is this method invoked and + // what is the structure of the passed `data` array? (Could find any invocation.) + + if ($data->size_variants->hasMediumOrSmall()) { + $thumbsUrls = $this->setThumbUrls($data->size_variants); + + $this->_w = $thumbsUrls['w']; + $this->_h = $thumbsUrls['h']; + $dim2x = $thumbsUrls['w2x']; + $thumbUrl = $thumbsUrls['thumbUrl']; + $thumb2xUrl = $thumbsUrls['thumb2xUrl']; + + $dim = $this->_w; + } elseif (!$data->isVideo()) { + $original = $data->size_variants->getSizeVariant(SizeVariantType::ORIGINAL); + + $this->_w ??= $original->width; + $this->_h ??= $original->height; + // Fallback for images with no small or medium. + $thumbUrl ??= $original->url; + } elseif ($thumbUrl === null) { + // Fallback for videos with no small (the case of no thumb is handled else where). + $dim = 200; + $dim2x = 200; + } + + $this->srcset = sprintf("data-src='%s'", URL::asset($thumbUrl)); + $this->srcset2x = $thumb2xUrl !== null ? sprintf("data-srcset='%s %dw, %s %dw'", URL::asset($thumbUrl), $dim, URL::asset($thumb2xUrl), $dim2x) : ''; + } + + /** + * Define src. + * + * this is what will be first deplayed before loading. + * + * @param SizeVariant|null $thumb + * + * @return void + */ + private function set_src(?SizeVariant $thumb): void + { + // default is place holder + $this->src = URL::asset('img/placeholder.png'); + + // if thumb is not null then directly return: + // it will be replaced later by src-set + if ($thumb !== null) { + $this->src = sprintf("src='%s'", $this->src); + + return; + } + + // change the png in the other cases. + // no need to lazyload too. + $this->is_lazyload = false; + $this->src = $this->is_video ? URL::asset('img/play-icon.png') : $this->src; + $this->src = $this->is_livephoto ? URL::asset('img/live-photo-icon.png') : $this->src; + $this->src = sprintf("src='%s'", $this->src); + } + + /** + * Fetch the thumbs data. + * + * @param SizeVariants $sizeVariants + * + * @return array{w:int,w2x:int|null,h:int,thumbUrl:string,thumb2xUrl:string|null} + * + * @throws InvalidSizeVariantException + */ + private function setThumbUrls(SizeVariants $sizeVariants): array + { + $small = $sizeVariants->getSizeVariant(SizeVariantType::SMALL); + $small2x = $sizeVariants->getSizeVariant(SizeVariantType::SMALL2X); + $medium = $sizeVariants->getSizeVariant(SizeVariantType::MEDIUM); + $medium2x = $sizeVariants->getSizeVariant(SizeVariantType::MEDIUM2X); + + /** @var int $w */ + $w = $small?->width ?? $medium?->width; + $w2x = $small2x?->width ?? $medium2x?->width; + /** @var int $h */ + $h = $small?->height ?? $medium?->height; + + /** @var string $thumbUrl */ + $thumbUrl = $small?->url ?? $medium?->url; + $thumb2xUrl = $small2x?->url ?? $medium2x?->url; + + return ['w' => $w, 'w2x' => $w2x, 'h' => $h, 'thumbUrl' => $thumbUrl, 'thumb2xUrl' => $thumb2xUrl]; + } + + /** + * Get the view / contents that represent the component. + * + * @return \Illuminate\Contracts\View\View|\Closure|string + * + * @throws BindingResolutionException + */ + public function render() + { + return view('components.gallery.album.thumbs.photo'); + } +} diff --git a/app/View/Components/Gallery/Photo/Download.php b/app/View/Components/Gallery/Photo/Download.php new file mode 100644 index 0000000000..386232046e --- /dev/null +++ b/app/View/Components/Gallery/Photo/Download.php @@ -0,0 +1,61 @@ +photoId = $photo->id; + + $downgrade = !Gate::check(PhotoPolicy::CAN_ACCESS_FULL_PHOTO, [Photo::class, $photo]) && + !$photo->isVideo() && + $photo->size_variants->hasMedium() === true; + + $rq = request(); + + // TODO: Add Live photo + $this->size_variants = collect(SizeVariantType::cases()) + ->map(fn ($v) => $photo->size_variants->getSizeVariant($v)) + ->filter(fn ($e) => $e !== null) + ->map(fn ($v) => SizeVariantResource::make($v)) + ->map(fn ($v, $k) => $k === 0 ? $v->setNoUrl($downgrade) : $v) // 0 = original + ->map(fn ($v) => $v->toArray($rq)) + ->map(function ($v) { + /** @var array{filesize:int} $v */ + $v['filesize'] = Helpers::getSymbolByQuantity(intval($v['filesize'])); + + return $v; + })->all(); + } + + /** + * Render the component. + * + * @return View + */ + public function render(): View + { + return view('components.gallery.photo.downloads'); + } +} diff --git a/app/View/Components/Meta.php b/app/View/Components/Meta.php new file mode 100644 index 0000000000..909abae6ef --- /dev/null +++ b/app/View/Components/Meta.php @@ -0,0 +1,75 @@ +photoId !== null) { + // $photo = Photo::findOrFail($this->photoId); + // $title = $photo->title; + // $description = $photo->description; + // $imageUrl = url()->to($photo->size_variants->getMedium()?->url ?? $photo->size_variants->getOriginal()->url); + // } elseif ($this->albumId !== null) { + // $albumFactory = resolve(AlbumFactory::class); + // $album = $albumFactory->findAbstractAlbumOrFail($this->albumId, false); + // $title = $album->title; + // $description = $album instanceof BaseAlbum ? $album->description : ''; + // $imageUrl = url()->to($album->thumb->thumbUrl ?? ''); + // } + + $this->pageTitle = $siteTitle . (!blank($siteTitle) && !blank($title) ? ' – ' : '') . $title; + $this->pageDescription = !blank($description) ? $description . ' – via Lychee' : ''; + $this->siteOwner = Configs::getValueAsString('site_owner'); + $this->imageUrl = $imageUrl; + $this->pageUrl = url()->current(); + $this->rssEnable = Configs::getValueAsBool('rss_enable'); + $this->userCssUrl = IndexController::getUserCustomFiles('user.css'); + $this->userJsUrl = IndexController::getUserCustomFiles('custom.js'); + $this->frame = ''; + } + + /** + * Render component. + * + * @return View + * + * @throws BindingResolutionException + */ + public function render(): View + { + return view('components.meta'); + } +} \ No newline at end of file diff --git a/composer.json b/composer.json index ada197ff7b..d9bc0fadbd 100644 --- a/composer.json +++ b/composer.json @@ -49,9 +49,11 @@ "doctrine/dbal": "^3.1", "geocoder-php/cache-provider": "^4.3", "geocoder-php/nominatim-provider": "^5.5", + "graham-campbell/markdown": "^15.0", "laminas/laminas-text": "^2.9", "laragear/webauthn": "^1.2.0", "laravel/framework": "^10.0", + "livewire/livewire": "^3.0", "lychee-org/nestedset": "^8.0", "lychee-org/php-exif": "^1.0.0", "maennchen/zipstream-php": "^3.1", @@ -79,7 +81,8 @@ "mockery/mockery": "^1.5", "larastan/larastan": "^2.0", "php-parallel-lint/php-parallel-lint": "^1.3", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^10.0", + "fakerphp/faker": "^1.23.0" }, "autoload": { "classmap": [ diff --git a/composer.lock b/composer.lock index 3b56297954..dc5df53efc 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b158ae44fc79994db940f20d61f53fd8", + "content-hash": "4e0a59023e0ef37787f242d7b0d54c54", "packages": [ { "name": "bepsvpt/secure-headers", @@ -1220,25 +1220,25 @@ }, { "name": "geocoder-php/common-http", - "version": "4.5.0", + "version": "4.6.0", "source": { "type": "git", "url": "https://github.com/geocoder-php/php-common-http.git", - "reference": "4ee2cee60d21631e2a09c196bf6b9fd296bca728" + "reference": "15629fd7bf771f525282ad1b60d2106bcf630ce9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/geocoder-php/php-common-http/zipball/4ee2cee60d21631e2a09c196bf6b9fd296bca728", - "reference": "4ee2cee60d21631e2a09c196bf6b9fd296bca728", + "url": "https://api.github.com/repos/geocoder-php/php-common-http/zipball/15629fd7bf771f525282ad1b60d2106bcf630ce9", + "reference": "15629fd7bf771f525282ad1b60d2106bcf630ce9", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0", + "php": "^8.0", "php-http/client-implementation": "^1.0", "php-http/discovery": "^1.6", "php-http/httplug": "^1.0 || ^2.0", "php-http/message-factory": "^1.0.2", - "psr/http-message": "^1.0", + "psr/http-message": "^1.0 || ^2.0", "psr/http-message-implementation": "^1.0", "willdurand/geocoder": "^4.0" }, @@ -1247,7 +1247,7 @@ "php-http/message": "^1.0", "php-http/mock-client": "^1.0", "phpunit/phpunit": "^9.5", - "symfony/stopwatch": "~2.5" + "symfony/stopwatch": "~2.5 || ~5.0" }, "type": "library", "extra": { @@ -1279,9 +1279,9 @@ "http geocoder" ], "support": { - "source": "https://github.com/geocoder-php/php-common-http/tree/4.5.0" + "source": "https://github.com/geocoder-php/php-common-http/tree/4.6.0" }, - "time": "2022-07-30T12:09:30+00:00" + "time": "2023-07-31T20:07:24+00:00" }, { "name": "geocoder-php/nominatim-provider", @@ -1342,6 +1342,86 @@ }, "time": "2023-03-01T10:18:27+00:00" }, + { + "name": "graham-campbell/markdown", + "version": "v15.1.0", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Laravel-Markdown.git", + "reference": "94917d0d712c26788095ad2b5eafd9b33cd43095" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/94917d0d712c26788095ad2b5eafd9b33cd43095", + "reference": "94917d0d712c26788095ad2b5eafd9b33cd43095", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^8.75 || ^9.0 || ^10.0", + "illuminate/filesystem": "^8.75 || ^9.0 || ^10.0", + "illuminate/support": "^8.75 || ^9.0 || ^10.0", + "illuminate/view": "^8.75 || ^9.0 || ^10.0", + "league/commonmark": "^2.4.1", + "php": "^7.4.15 || ^8.0.2" + }, + "require-dev": { + "graham-campbell/analyzer": "^4.1", + "graham-campbell/testbench": "^6.1", + "mockery/mockery": "^1.6.6", + "phpunit/phpunit": "^9.6.15 || ^10.4.2" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "GrahamCampbell\\Markdown\\MarkdownServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "GrahamCampbell\\Markdown\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Markdown Is A CommonMark Wrapper For Laravel", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Laravel Markdown", + "Laravel-Markdown", + "common mark", + "commonmark", + "framework", + "laravel", + "markdown" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Laravel-Markdown/issues", + "source": "https://github.com/GrahamCampbell/Laravel-Markdown/tree/v15.1.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/markdown", + "type": "tidelift" + } + ], + "time": "2023-12-04T02:43:19+00:00" + }, { "name": "graham-campbell/result-type", "version": "v1.1.2", @@ -2826,6 +2906,80 @@ ], "time": "2023-10-17T14:13:20+00:00" }, + { + "name": "livewire/livewire", + "version": "v3.3.3", + "source": { + "type": "git", + "url": "https://github.com/livewire/livewire.git", + "reference": "6dd3bec8c711cd792742be4620057637e261e6f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/livewire/livewire/zipball/6dd3bec8c711cd792742be4620057637e261e6f7", + "reference": "6dd3bec8c711cd792742be4620057637e261e6f7", + "shasum": "" + }, + "require": { + "illuminate/database": "^10.0", + "illuminate/support": "^10.0", + "illuminate/validation": "^10.0", + "league/mime-type-detection": "^1.9", + "php": "^8.1", + "symfony/http-kernel": "^6.2" + }, + "require-dev": { + "calebporzio/sushi": "^2.1", + "laravel/framework": "^10.0", + "laravel/prompts": "^0.1.6", + "mockery/mockery": "^1.3.1", + "orchestra/testbench": "^8.0", + "orchestra/testbench-dusk": "^8.0", + "phpunit/phpunit": "^9.0", + "psy/psysh": "@stable" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Livewire\\LivewireServiceProvider" + ], + "aliases": { + "Livewire": "Livewire\\Livewire" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Caleb Porzio", + "email": "calebporzio@gmail.com" + } + ], + "description": "A front-end framework for Laravel.", + "support": { + "issues": "https://github.com/livewire/livewire/issues", + "source": "https://github.com/livewire/livewire/tree/v3.3.3" + }, + "funding": [ + { + "url": "https://github.com/livewire", + "type": "github" + } + ], + "time": "2023-12-20T05:34:05+00:00" + }, { "name": "lychee-org/nestedset", "version": "v8.0.0", @@ -4506,16 +4660,16 @@ }, { "name": "psr/http-message", - "version": "1.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { @@ -4524,7 +4678,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4539,7 +4693,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -4553,9 +4707,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2023-04-04T09:50:52+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "psr/log", @@ -8843,6 +8997,74 @@ ], "time": "2023-02-20T08:34:36+00:00" }, + { + "name": "fakerphp/faker", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", + "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.21-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0" + }, + "time": "2023-06-12T08:44:38+00:00" + }, { "name": "filp/whoops", "version": "2.15.4", @@ -10112,23 +10334,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "10.1.10", + "version": "10.1.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "599109c8ca6bae97b23482d557d2874c25a65e59" + "reference": "78c3b7625965c2513ee96569a4dbb62601784145" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/599109c8ca6bae97b23482d557d2874c25a65e59", - "reference": "599109c8ca6bae97b23482d557d2874c25a65e59", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/78c3b7625965c2513ee96569a4dbb62601784145", + "reference": "78c3b7625965c2513ee96569a4dbb62601784145", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=8.1", "phpunit/php-file-iterator": "^4.0", "phpunit/php-text-template": "^3.0", @@ -10178,7 +10400,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.10" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.11" }, "funding": [ { @@ -10186,7 +10408,7 @@ "type": "github" } ], - "time": "2023-12-11T06:28:43+00:00" + "time": "2023-12-21T15:38:30+00:00" }, { "name": "phpunit/php-file-iterator", @@ -10836,16 +11058,16 @@ }, { "name": "sebastian/diff", - "version": "5.0.3", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b" + "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b", - "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/fbf413a49e54f6b9b17e12d900ac7f6101591b7f", + "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f", "shasum": "" }, "require": { @@ -10858,7 +11080,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -10891,7 +11113,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.0" }, "funding": [ { @@ -10899,7 +11121,7 @@ "type": "github" } ], - "time": "2023-05-01T07:48:21+00:00" + "time": "2023-12-22T10:55:06+00:00" }, { "name": "sebastian/environment", diff --git a/config/app.php b/config/app.php index a9ad42350d..51768d6a18 100644 --- a/config/app.php +++ b/config/app.php @@ -30,6 +30,18 @@ 'env' => env('APP_ENV', 'production'), + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines whether livewire front-end is enabled as it is + | currently under development. + | + */ + + 'livewire' => (bool) env('LIVEWIRE_ENABLED', false), + /* |-------------------------------------------------------------------------- | Application Debug Mode @@ -243,5 +255,16 @@ 'aliases' => Facade::defaultAliases()->merge([ 'DebugBar' => Barryvdh\Debugbar\Facades\Debugbar::class, 'Helpers' => App\Facades\Helpers::class, + // Aliases for easier access in the blade templates + 'Configs' => App\Models\Configs::class, + 'AlbumPolicy' => App\Policies\AlbumPolicy::class, + 'PhotoPolicy' => App\Policies\PhotoPolicy::class, + 'SettingsPolicy' => App\Policies\SettingsPolicy::class, + 'UserPolicy' => App\Policies\UserPolicy::class, + 'User' => App\Models\User::class, + 'SizeVariantType' => App\Enum\SizeVariantType::class, + 'FileStatus' => App\Enum\Livewire\FileStatus::class, + 'Params' => App\Contracts\Livewire\Params::class, + 'PhotoLayoutType' => \App\Enum\PhotoLayoutType::class, ])->toArray(), ]; diff --git a/config/filesystems.php b/config/filesystems.php index 472d722558..b857a508b6 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -44,8 +44,8 @@ // Lychee uses the disk "images" to store the media files 'images' => [ 'driver' => 'local', - 'root' => env('LYCHEE_UPLOADS', public_path('uploads/')), - 'url' => env('LYCHEE_UPLOADS_URL', 'uploads/'), + 'root' => env('LYCHEE_UPLOADS', public_path(env('LYCHEE_UPLOADS_DIR', 'uploads/'))), + 'url' => env('LYCHEE_UPLOADS_URL', env('APP_URL', 'http://localhost') . '/' . env('LYCHEE_UPLOADS_DIR', 'uploads/')), 'visibility' => env('LYCHEE_IMAGE_VISIBILITY', 'public'), 'directory_visibility' => env('LYCHEE_IMAGE_VISIBILITY', 'public'), 'permissions' => [ @@ -99,5 +99,11 @@ 'url' => env('LYCHEE_SYM_URL', 'sym'), 'visibility' => 'public', ], + + 'tmp-for-tests' => [ + 'driver' => 'local', + 'root' => storage_path('image-tmp/'), + 'visibility' => 'private', + ], ], ]; diff --git a/config/livewire.php b/config/livewire.php new file mode 100644 index 0000000000..dc056de88f --- /dev/null +++ b/config/livewire.php @@ -0,0 +1,158 @@ + 'App\\Livewire\\Components', + + /* + |--------------------------------------------------------------------------- + | View Path + |--------------------------------------------------------------------------- + | + | This value is used to specify where Livewire component Blade templates are + | stored when running file creation commands like `artisan make:livewire`. + | It is also used if you choose to omit a component's render() method. + | + */ + + 'view_path' => resource_path('views/livewire'), + + /* + |--------------------------------------------------------------------------- + | Layout + |--------------------------------------------------------------------------- + | The view that will be used as the layout when rendering a single component + | as an entire page via `Route::get('/post/create', CreatePost::class);`. + | In this case, the view returned by CreatePost will render into $slot. + | + */ + + 'layout' => 'components.layouts.app', + + /* + |--------------------------------------------------------------------------- + | Lazy Loading Placeholder + |--------------------------------------------------------------------------- + | Livewire allows you to lazy load components that would otherwise slow down + | the initial page load. Every component can have a custom placeholder or + | you can define the default placeholder view for all components below. + | + */ + + 'lazy_placeholder' => null, + + /* + |--------------------------------------------------------------------------- + | Temporary File Uploads + |--------------------------------------------------------------------------- + | + | Livewire handles file uploads by storing uploads in a temporary directory + | before the file is stored permanently. All file uploads are directed to + | a global endpoint for temporary storage. You may configure this below: + | + */ + + 'temporary_file_upload' => [ + 'disk' => null, // Example: 'local', 's3' | Default: 'default' + 'rules' => null, // Example: ['file', 'mimes:png,jpg'] | Default: ['required', 'file', 'max:12288'] (12MB) + 'directory' => null, // Example: 'tmp' | Default: 'livewire-tmp' + 'middleware' => null, // Example: 'throttle:5,1' | Default: 'throttle:60,1' + 'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs... + 'png', 'gif', 'bmp', 'svg', 'wav', 'mp4', + 'mov', 'avi', 'wmv', 'mp3', 'm4a', + 'jpg', 'jpeg', 'mpga', 'webp', 'wma', + ], + 'max_upload_time' => 5, // Max duration (in minutes) before an upload is invalidated... + ], + + /* + |--------------------------------------------------------------------------- + | Render On Redirect + |--------------------------------------------------------------------------- + | + | This value determines if Livewire will run a component's `render()` method + | after a redirect has been triggered using something like `redirect(...)` + | Setting this to true will render the view once more before redirecting + | + */ + + 'render_on_redirect' => false, + + /* + |--------------------------------------------------------------------------- + | Eloquent Model Binding + |--------------------------------------------------------------------------- + | + | Previous versions of Livewire supported binding directly to eloquent model + | properties using wire:model by default. However, this behavior has been + | deemed too "magical" and has therefore been put under a feature flag. + | + */ + + 'legacy_model_binding' => false, + + /* + |--------------------------------------------------------------------------- + | Auto-inject Frontend Assets + |--------------------------------------------------------------------------- + | + | By default, Livewire automatically injects its JavaScript and CSS into the + | and of pages containing Livewire components. By disabling + | this behavior, you need to use @livewireStyles and @livewireScripts. + | + */ + + 'inject_assets' => true, + + /* + |--------------------------------------------------------------------------- + | Navigate (SPA mode) + |--------------------------------------------------------------------------- + | + | By adding `wire:navigate` to links in your Livewire application, Livewire + | will prevent the default link handling and instead request those pages + | via AJAX, creating an SPA-like effect. Configure this behavior here. + | + */ + + 'navigate' => [ + 'show_progress_bar' => true, + 'progress_bar_color' => '#2299dd', + ], + + /* + |--------------------------------------------------------------------------- + | HTML Morph Markers + |--------------------------------------------------------------------------- + | + | Livewire intelligently "morphs" existing HTML into the newly rendered HTML + | after each update. To make this process more reliable, Livewire injects + | "markers" into the rendered Blade surrounding @if, @class & @foreach. + | + */ + + 'inject_morph_markers' => true, + + /* + |--------------------------------------------------------------------------- + | Pagination Theme + |--------------------------------------------------------------------------- + | + | When enabling Livewire's pagination feature by using the `WithPagination` + | trait, Livewire will use Tailwind templates to render pagination views + | on the page. If you want Bootstrap CSS, you can specify: "bootstrap" + | + */ + + 'pagination_theme' => 'tailwind', +]; diff --git a/database/factories/AlbumFactory.php b/database/factories/AlbumFactory.php new file mode 100644 index 0000000000..e74325b045 --- /dev/null +++ b/database/factories/AlbumFactory.php @@ -0,0 +1,65 @@ + + */ +class AlbumFactory extends Factory +{ + use OwnedBy; + + /** + * The name of the factory's corresponding model. + * + * @var string + */ + protected $model = Album::class; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'title' => fake()->country() . ' ' . fake()->year(), + 'owner_id' => 1, + ]; + } + + /** + * Defines the parent of the create album. + * + * @param Album $parent + * + * @return self + */ + public function children_of(Album $parent): Factory + { + return $this->afterMaking( + fn (Album $album) => $parent->appendNode($album) + ) + ->afterCreating(function (Album $album) use ($parent) { + $parent->load('children'); + $parent->fixOwnershipOfChildren(); + }); + } + + /** + * Make the album root. + * + * @return self + */ + public function as_root(): self + { + return $this->afterMaking(function (Album $album) { + $album->makeRoot(); + }); + } +} diff --git a/database/factories/PhotoFactory.php b/database/factories/PhotoFactory.php new file mode 100644 index 0000000000..ebd1c46f66 --- /dev/null +++ b/database/factories/PhotoFactory.php @@ -0,0 +1,136 @@ + + */ +class PhotoFactory extends Factory +{ + use OwnedBy; + + private bool $with_size_variants = true; + + /** + * The name of the factory's corresponding model. + * + * @var string + */ + protected $model = Photo::class; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'title' => 'CR_' . fake()->numerify('####'), + 'description' => null, + 'tags' => '', + 'is_public' => false, + 'owner_id' => 1, + 'type' => 'image/jpeg', + 'iso' => '100', + 'aperture' => 'f/2', + 'make' => 'Canon', + 'model' => 'Canon EOS R', + 'lens' => 'EF200mm f/2L IS', + 'shutter' => '1/320 s', + 'focal' => '200mm', + 'taken_at' => now(), + 'taken_at_orig_tz' => null, + 'is_starred' => false, + 'album_id' => null, + 'checksum' => sha1(rand()), + 'original_checksum' => sha1(rand()), + 'license' => 'none', + 'created_at' => now(), + 'updated_at' => now(), + ]; + } + + /** + * Indicate that the user is suspended. + */ + public function without_size_variants(): Factory + { + $this->with_size_variants = false; + + return $this; + } + + /** + * Set a bunch of GPS coordinates (in Netherlands). + * + * @return array + */ + public function with_GPS_coordinates(): self + { + return $this->state(function (array $attributes) { + return [ + 'latitude' => '51.81738000', + 'longitude' => '5.86694306', + 'altitude' => '83.1000', + ]; + }); + } + + /** + * Set a bunch of GPS coordinates (in Netherlands). + * + * @return array + */ + public function with_subGPS_coordinates(): self + { + return $this->state(function (array $attributes) { + return [ + 'latitude' => '-51.81738000', + 'longitude' => '-5.86694306', + 'altitude' => '83.1000', + ]; + }); + } + + /** + * Set a bunch of GPS coordinates (in Netherlands). + * + * @return self + */ + public function in(Album $album): self + { + return $this->state(function (array $attributes) use ($album) { + return [ + 'album_id' => $album->id, + ]; + })->afterCreating(function (Photo $photo) { + $photo->load('album', 'owner'); + }); + } + + /** + * Configure the model factory. + * We create 7 random Size Variants. + */ + public function configure(): static + { + return $this->afterCreating(function (Photo $photo) { + // Creates the size variants + if ($this->with_size_variants) { + SizeVariant::factory()->count(7)->allSizeVariants()->create(['photo_id' => $photo->id]); + $photo->fresh(); + $photo->load('size_variants'); + } + + // Reset the value if it was disabled. + $this->with_size_variants = true; + }); + } +} diff --git a/database/factories/SizeVariantFactory.php b/database/factories/SizeVariantFactory.php new file mode 100644 index 0000000000..e2a0bcc097 --- /dev/null +++ b/database/factories/SizeVariantFactory.php @@ -0,0 +1,57 @@ + + */ +class SizeVariantFactory extends Factory +{ + private const H = 360; + private const W = 540; + private const FS = 141011; + + /** + * The name of the factory's corresponding model. + * + * @var string + */ + protected $model = SizeVariant::class; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + $hash = fake()->sha1(); + $url = substr($hash, 0, 2) . '/' . substr($hash, 2, 2) . '/' . substr($hash, 4) . '.jpg'; + + return ['type' => SizeVariantType::ORIGINAL, 'short_path' => SizeVariantType::ORIGINAL->name() . '/' . $url, 'ratio' => 1.5, 'height' => self::H * 8, 'width' => self::W * 8, 'filesize' => 64 * self::FS]; + } + + /** + * Creates 7 size variant with correct type and size,. + */ + public function allSizeVariants(): Factory + { + $hash = fake()->sha1(); + $url = substr($hash, 0, 2) . '/' . substr($hash, 2, 2) . '/' . substr($hash, 4) . '.jpg'; + + return $this->state(new Sequence( + ['type' => SizeVariantType::ORIGINAL, 'short_path' => SizeVariantType::ORIGINAL->name() . '/' . $url, 'ratio' => 1.5, 'height' => self::H * 8, 'width' => self::W * 8, 'filesize' => 64 * self::FS], + ['type' => SizeVariantType::MEDIUM2X, 'short_path' => SizeVariantType::MEDIUM2X->name() . '/' . $url, 'ratio' => 1.5, 'height' => self::H * 6, 'width' => self::W * 6, 'filesize' => 36 * self::FS], + ['type' => SizeVariantType::MEDIUM, 'short_path' => SizeVariantType::MEDIUM->name() . '/' . $url, 'ratio' => 1.5, 'height' => self::H * 3, 'width' => self::W * 3, 'filesize' => 9 * self::FS], + ['type' => SizeVariantType::SMALL2X, 'short_path' => SizeVariantType::SMALL2X->name() . '/' . $url, 'ratio' => 1.5, 'height' => self::H * 2, 'width' => self::W * 2, 'filesize' => 4 * self::FS], + ['type' => SizeVariantType::SMALL, 'short_path' => SizeVariantType::SMALL->name() . '/' . $url, 'ratio' => 1.5, 'height' => self::H, 'width' => self::W, 'filesize' => self::FS], + ['type' => SizeVariantType::THUMB2X, 'short_path' => SizeVariantType::THUMB2X->name() . '/' . $url, 'ratio' => 1.5, 'height' => 400, 'width' => 400, 'filesize' => 160_000], + ['type' => SizeVariantType::THUMB, 'short_path' => SizeVariantType::THUMB->name() . '/' . $url, 'ratio' => 1.5, 'height' => 200, 'width' => 200, 'filesize' => 40_000], + )); + } +} diff --git a/database/factories/Traits/OwnedBy.php b/database/factories/Traits/OwnedBy.php new file mode 100644 index 0000000000..e421626ebd --- /dev/null +++ b/database/factories/Traits/OwnedBy.php @@ -0,0 +1,26 @@ +state(function (array $attributes) use ($user) { + return [ + 'owner_id' => $user->id, + ]; + }); + } +} \ No newline at end of file diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index 36125fd748..df30138c27 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -4,8 +4,10 @@ use App\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; -use Illuminate\Support\Str; +/** + * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User> + */ class UserFactory extends Factory { /** @@ -18,16 +20,59 @@ class UserFactory extends Factory /** * Define the model's default state. * - * @return array + * @return array */ - public function definition() + public function definition(): array { return [ - 'name' => $this->faker->name, - 'email' => $this->faker->unique()->safeEmail, - 'email_verified_at' => now(), + 'username' => fake()->name(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password - 'remember_token' => Str::random(10), + 'may_administrate' => false, + 'may_upload' => false, + 'email' => fake()->email(), + 'token' => null, + 'remember_token' => null, + 'may_edit_own_settings' => true, ]; } + + /** + * Indicate that user is Admin. + * + * @return Factory + */ + public function may_administrate(): Factory + { + return $this->state(function (array $attributes) { + return [ + 'may_administrate' => true, + ]; + }); + } + + /** + * Indicate that the user has upload rights. + * + * @return Factory + */ + public function may_upload(): Factory + { + return $this->state(function (array $attributes) { + return [ + 'may_upload' => true, + ]; + }); + } + + /** + * Indicates the user is locked. + * + * @return Factory + */ + public function locked(): Factory + { + return $this->state(function (array $attributes) { + return ['may_edit_own_settings' => false]; + }); + } } diff --git a/database/migrations/2023_05_04_193000_add_use_last_modified_date_when_no_exit_date_setting.php b/database/migrations/2023_05_04_193000_add_use_last_modified_date_when_no_exit_date_setting.php index 5d99c45104..fdd150a4bf 100644 --- a/database/migrations/2023_05_04_193000_add_use_last_modified_date_when_no_exit_date_setting.php +++ b/database/migrations/2023_05_04_193000_add_use_last_modified_date_when_no_exit_date_setting.php @@ -1,35 +1,19 @@ insert([ - 'key' => 'use_last_modified_date_when_no_exif_date', - 'value' => '0', - 'cat' => 'Image Processing', - 'type_range' => BOOL, - 'confidentiality' => '0', - 'description' => 'Use the file\'s last modified time when Exif data has no creation date', - ]); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - DB::table('configs')->where('key', '=', 'use_last_modified_date_when_no_exif_date')->delete(); + return [ + [ + 'key' => 'use_last_modified_date_when_no_exif_date', + 'value' => '0', + 'cat' => 'Image Processing', + 'type_range' => '0|1', + 'confidentiality' => '0', + 'description' => 'Use the file\'s last modified time when Exif data has no creation date', + ], + ]; } }; diff --git a/database/migrations/2023_09_24_110932_add_date_display_configurations.php b/database/migrations/2023_09_24_110932_add_date_display_configurations.php new file mode 100644 index 0000000000..833bb30424 --- /dev/null +++ b/database/migrations/2023_09_24_110932_add_date_display_configurations.php @@ -0,0 +1,70 @@ + 'date_format_photo_thumb', + 'value' => 'M j, Y, g:i:s A e', + 'confidentiality' => '0', + 'cat' => self::GALLERY, + 'type_range' => self::STRING_REQ, + 'description' => 'Format the date for the photo thumbs. See https://www.php.net/manual/en/datetime.format.php', + ], + [ + 'key' => 'date_format_photo_overlay', + 'value' => 'M j, Y, g:i:s A e', + 'confidentiality' => '0', + 'cat' => self::GALLERY, + 'type_range' => self::STRING_REQ, + 'description' => 'Format the date for the photo overlay. See https://www.php.net/manual/en/datetime.format.php', + ], + [ + 'key' => 'date_format_sidebar_uploaded', + 'value' => 'M j, Y, g:i:s A e', + 'confidentiality' => '0', + 'cat' => self::GALLERY, + 'type_range' => self::STRING_REQ, + 'description' => 'Format the upload date for the photo sidebar. See https://www.php.net/manual/en/datetime.format.php', + ], + [ + 'key' => 'date_format_sidebar_taken_at', + 'value' => 'M j, Y, g:i:s A e', + 'confidentiality' => '0', + 'cat' => self::GALLERY, + 'type_range' => self::STRING_REQ, + 'description' => 'Format the capture date for the photo sidebar. See https://www.php.net/manual/en/datetime.format.php', + ], + [ + 'key' => 'date_format_hero_min_max', + 'value' => 'F Y', + 'confidentiality' => '0', + 'cat' => self::GALLERY, + 'type_range' => self::STRING_REQ, + 'description' => 'Format the date for the album hero. See https://www.php.net/manual/en/datetime.format.php', + ], + [ + 'key' => 'date_format_hero_created_at', + 'value' => 'M j, Y, g:i:s A T', + 'confidentiality' => '0', + 'cat' => self::GALLERY, + 'type_range' => self::STRING_REQ, + 'description' => 'Format the created date for the album details. See https://www.php.net/manual/en/datetime.format.php', + ], + [ + 'key' => 'date_format_album_thumb', + 'value' => 'M Y', + 'confidentiality' => '0', + 'cat' => self::GALLERY, + 'type_range' => self::STRING_REQ, + 'description' => 'Format the date for the album thumbs. See https://www.php.net/manual/en/datetime.format.php', + ], + ]; + } +}; diff --git a/database/migrations/2023_09_24_223901_add_config_livewire_chunk_size.php b/database/migrations/2023_09_24_223901_add_config_livewire_chunk_size.php new file mode 100644 index 0000000000..b4b0218b9a --- /dev/null +++ b/database/migrations/2023_09_24_223901_add_config_livewire_chunk_size.php @@ -0,0 +1,22 @@ + 'upload_chunk_size', + 'value' => '0', + 'confidentiality' => '0', + 'cat' => self::IMAGE_PROCESSING, + 'type_range' => self::INT, + 'description' => 'Size of chunks when uploading in bytes: 0 is auto', + ], + ]; + } +}; diff --git a/database/migrations/2023_09_24_233717_refactor_type_layout_livewire.php b/database/migrations/2023_09_24_233717_refactor_type_layout_livewire.php new file mode 100644 index 0000000000..854949f1ef --- /dev/null +++ b/database/migrations/2023_09_24_233717_refactor_type_layout_livewire.php @@ -0,0 +1,36 @@ +where('key', '=', 'layout')->update([ + 'type_range' => self::SQUARE . '|' . self::JUSTIFIED . '|' . self::MASONRY . '|' . self::GRID, + 'description' => 'Layout for pictures', + ], + ); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + DB::table('configs')->where('key', '=', 'layout')->update([ + 'type_range' => self::SQUARE . '|' . self::JUSTIFIED . '|' . self::UNJUSTIFIED, + 'description' => 'Layout for pictures', + ], + ); + } +}; diff --git a/database/migrations/2023_09_25_123925_config_blur_nsfw.php b/database/migrations/2023_09_25_123925_config_blur_nsfw.php new file mode 100644 index 0000000000..d0e3f38ce2 --- /dev/null +++ b/database/migrations/2023_09_25_123925_config_blur_nsfw.php @@ -0,0 +1,22 @@ + 'nsfw_banner_blur_backdrop', + 'value' => '0', + 'confidentiality' => '0', + 'cat' => self::MOD_NSFW, + 'type_range' => self::BOOL, + 'description' => 'Blur background instead of dark red opaque.', + ], + ]; + } +}; diff --git a/database/migrations/2023_12_18_232500_config_pagination_search_limit.php b/database/migrations/2023_12_18_232500_config_pagination_search_limit.php new file mode 100644 index 0000000000..f1605ef86e --- /dev/null +++ b/database/migrations/2023_12_18_232500_config_pagination_search_limit.php @@ -0,0 +1,23 @@ + 'search_pagination_limit', + 'value' => '1000', + 'confidentiality' => '0', + 'cat' => self::MOD_SEARCH, + 'type_range' => self::POSITIVE, + 'description' => 'Number of results to display per page.', + ], + ]; + } +}; diff --git a/database/migrations/2023_12_19_115547_search_characters_limit.php b/database/migrations/2023_12_19_115547_search_characters_limit.php new file mode 100644 index 0000000000..f0ecc93d30 --- /dev/null +++ b/database/migrations/2023_12_19_115547_search_characters_limit.php @@ -0,0 +1,23 @@ + 'search_minimum_length_required', + 'value' => '4', + 'confidentiality' => '0', + 'cat' => self::MOD_SEARCH, + 'type_range' => self::POSITIVE, + 'description' => 'Number of characters required to trigger search (default: 4).', + ], + ]; + } +}; diff --git a/database/migrations/2023_12_19_122408_add_positive_requirements.php b/database/migrations/2023_12_19_122408_add_positive_requirements.php index 13fc150903..0155379c1c 100644 --- a/database/migrations/2023_12_19_122408_add_positive_requirements.php +++ b/database/migrations/2023_12_19_122408_add_positive_requirements.php @@ -16,6 +16,8 @@ 'swipe_tolerance_x', 'swipe_tolerance_y', 'log_max_num_line', + 'search_pagination_limit', + 'search_minimum_length_required', ]; /** diff --git a/database/migrations/2023_12_20_180854_add_setting_height_width_gallery.php b/database/migrations/2023_12_20_180854_add_setting_height_width_gallery.php new file mode 100644 index 0000000000..749499fc43 --- /dev/null +++ b/database/migrations/2023_12_20_180854_add_setting_height_width_gallery.php @@ -0,0 +1,58 @@ + 'photo_layout_justified_row_height', + 'value' => '320', + 'confidentiality' => '0', + 'cat' => self::GALLERY, + 'type_range' => self::POSITIVE, + 'description' => 'Heights of rows in Justified photo layout', + ], + [ + // md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 2xl:grid-cols-7 + 'key' => 'photo_layout_masonry_column_width', + 'value' => '300', + 'confidentiality' => '0', + 'cat' => self::GALLERY, + 'type_range' => self::POSITIVE, + 'description' => 'Minimum column width in Masonry photo layout.', + ], + [ + // md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 2xl:grid-cols-7 + 'key' => 'photo_layout_grid_column_width', + 'value' => '250', + 'confidentiality' => '0', + 'cat' => self::GALLERY, + 'type_range' => self::POSITIVE, + 'description' => 'Minimum column width in Grid photo layout.', + ], + [ + // md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 2xl:grid-cols-7 + 'key' => 'photo_layout_square_column_width', + 'value' => '200', + 'confidentiality' => '0', + 'cat' => self::GALLERY, + 'type_range' => self::POSITIVE, + 'description' => 'Minimum column width in Square photo layout.', + ], + [ + 'key' => 'photo_layout_gap', + 'value' => '12', + 'confidentiality' => '0', + 'cat' => self::GALLERY, + 'type_range' => self::POSITIVE, + 'description' => 'Gap between columns in Square/Masonry/Grid photo layout.', + ], + ]; + } +}; diff --git a/lang/cz/lychee.php b/lang/cz/lychee.php index c7ad4546bd..fd81a2c025 100644 --- a/lang/cz/lychee.php +++ b/lang/cz/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Heslo', 'ENTER' => 'Vložit', 'CANCEL' => 'Storno', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Příhlásit se', 'CLOSE' => 'Zavřít', 'SETTINGS' => 'Nastavení', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => 'Uživatelé', + 'PROFILE' => 'Profile', 'CREATE' => 'Create', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'O Lychee', 'DIAGNOSTICS' => 'Diagnostika', 'DIAGNOSTICS_GET_SIZE' => 'Request space usage', + 'JOBS' => 'Show job history', 'LOGS' => 'Protokoly', 'SIGN_OUT' => 'Odhlásit se', 'UPDATE_AVAILABLE' => 'Update je k dispozici!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'Funkce Mapy byla v nastavení deaktivována.', 'ERROR_SEARCH_DEACTIVATED' => 'Funkce hledání byla v nastavení deaktivována.', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Opakovat', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Vzhled fotografií:', 'LAYOUT_SQUARES' => 'Čtvercové náhledy', 'LAYOUT_JUSTIFIED' => 'V poměru stran, zarovnáno', + 'LAYOUT_MASONRY' => 'V poměru stran, masonry', + 'LAYOUT_GRID' => 'V poměru stran, grid', 'LAYOUT_UNJUSTIFIED' => 'V poměru stran, nezarovnáno', 'SET_LAYOUT' => 'Změnit vzhled', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => 'Bez výsledku', 'VIEW_NO_PUBLIC_ALBUMS' => 'Veřejná alba nejsou k dispozici', diff --git a/lang/de/lychee.php b/lang/de/lychee.php index 514bf4c18a..1323d39f19 100644 --- a/lang/de/lychee.php +++ b/lang/de/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Kennwort', 'ENTER' => 'Eingabe', 'CANCEL' => 'Abbrechen', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Anmelden', 'CLOSE' => 'Schließen', 'SETTINGS' => 'Einstellungen', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallerie', 'USERS' => 'Benutzer', + 'PROFILE' => 'Profile', 'CREATE' => 'Erstellen', 'REMOVE' => 'Entfernen', 'SHARE' => 'Freigeben', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'Über Lychee', 'DIAGNOSTICS' => 'Diagnose', 'DIAGNOSTICS_GET_SIZE' => 'Speicherplatz-Nutzung abrufen', + 'JOBS' => 'Show job history', 'LOGS' => 'Logs anzeigen', 'SIGN_OUT' => 'Abmelden', 'UPDATE_AVAILABLE' => 'Update verfügbar!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'Karten sind unter Einstellungen deaktiviert worden.', 'ERROR_SEARCH_DEACTIVATED' => 'Suchfunktion wurde unter Einstellungen deaktiviert.', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Noch einmal versuchen', 'OVERRIDE' => 'Überschreiben', 'TAGS_OVERRIDE_INFO' => 'Wenn das nicht aktiviert ist, werden die Tags zu den vorhandenen Tags des Fotos hinzugefügt.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Layout des Fotos:', 'LAYOUT_SQUARES' => 'Quadratische Miniaturansichten', 'LAYOUT_JUSTIFIED' => 'Seitenverhältnis beibehalten, Blocksatz', + 'LAYOUT_MASONRY' => 'Seitenverhältnis beibehalten, masonry', + 'LAYOUT_GRID' => 'Seitenverhältnis beibehalten, grid', 'LAYOUT_UNJUSTIFIED' => 'Seitenverhältnis beibehalten, Flattersatz', 'SET_LAYOUT' => 'Ausgerichtetes Layout benutzen:', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Standardmäßige Sichtbarkeit wurde erfolgreich geändert.', 'NSFW_BANNER' => '

Krititscher Inhalt

Diese Album enthält krititsche Inhalte, die manche Personen anstößig oder verstörend finden könnten.

Zur Einwilligung klicken.

', + 'NSFW_HEADER' => 'Krititscher Inhalt', + 'NSFW_EXPLANATION' => 'Diese Album enthält krititsche Inhalte, die manche Personen anstößig oder verstörend finden könnten.', + 'TAP_CONSENT' => 'Zur Einwilligung klicken.', 'VIEW_NO_RESULT' => 'Keine Ergebnisse', 'VIEW_NO_PUBLIC_ALBUMS' => 'Keine öffentlichen Alben', diff --git a/lang/el/lychee.php b/lang/el/lychee.php index 4c8b3b9b2c..f76cb8461a 100644 --- a/lang/el/lychee.php +++ b/lang/el/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Κωδικός πρόσβασης', 'ENTER' => 'Είσοδος', 'CANCEL' => 'Άκυρο', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Συνδεθείτε', 'CLOSE' => 'Κλείσιμο', 'SETTINGS' => 'Ρυθμίσεις', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => 'Χρήστες', + 'PROFILE' => 'Profile', 'CREATE' => 'Create', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'Περί Lychee', 'DIAGNOSTICS' => 'Διαγνωστικά', 'DIAGNOSTICS_GET_SIZE' => 'Request space usage', + 'JOBS' => 'Show job history', 'LOGS' => 'Εμφάνιση Καταγραφών', 'SIGN_OUT' => 'Αποσύνδεση', 'UPDATE_AVAILABLE' => 'Διαθέσιμη Ενημέρωση!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.', 'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Προσπάθεια ξανά', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Διάταξη φωτογραφιών:', 'LAYOUT_SQUARES' => 'Τετράγωνες μικρογραφίες', 'LAYOUT_JUSTIFIED' => 'Με ίσες αναλογίες', + 'LAYOUT_MASONRY' => 'Με ίσες masonry', + 'LAYOUT_GRID' => 'Με ίσες grid', 'LAYOUT_UNJUSTIFIED' => 'Με άνισες αναλογίες', 'SET_LAYOUT' => 'Αλλαγή διάταξης', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => 'Κανένα αποτέλεσμα', 'VIEW_NO_PUBLIC_ALBUMS' => 'Κανένα δημόσιο λεύκωμα', diff --git a/lang/en/lychee.php b/lang/en/lychee.php index fe52f67857..fd6a1c8eb0 100644 --- a/lang/en/lychee.php +++ b/lang/en/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Password', 'ENTER' => 'Enter', 'CANCEL' => 'Cancel', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Sign In', 'CLOSE' => 'Close', 'SETTINGS' => 'Settings', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => 'Users', + 'PROFILE' => 'Profile', 'CREATE' => 'Create', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'About Lychee', 'DIAGNOSTICS' => 'Diagnostics', 'DIAGNOSTICS_GET_SIZE' => 'Request space usage', + 'JOBS' => 'Show job history', 'LOGS' => 'Show Logs', 'SIGN_OUT' => 'Sign Out', 'UPDATE_AVAILABLE' => 'Update available!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.', 'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Retry', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -352,7 +356,7 @@ 'SORT_CHANGE' => 'Change Sorting', 'DROPBOX_TITLE' => 'Set Dropbox Key', - 'DROPBOX_TEXT' => "In order to import photos from your Dropbox, you need a valid drop-ins app key from their website. Generate yourself a personal key and enter it below:", + 'DROPBOX_TEXT' => "In order to import photos from your Dropbox, you need a valid drop-ins app key from their website. Generate yourself a personal key and enter it below:", 'LANG_TEXT' => 'Change Lychee language for:', 'LANG_TITLE' => 'Change Language', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Layout of photos:', 'LAYOUT_SQUARES' => 'Square thumbnails', 'LAYOUT_JUSTIFIED' => 'With aspect, justified', + 'LAYOUT_MASONRY' => 'With aspect, masonry', + 'LAYOUT_GRID' => 'With aspect, grid', 'LAYOUT_UNJUSTIFIED' => 'With aspect, unjustified', 'SET_LAYOUT' => 'Change layout', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => 'No results', 'VIEW_NO_PUBLIC_ALBUMS' => 'No public albums', diff --git a/lang/es/lychee.php b/lang/es/lychee.php index 40f2ed59af..beb23e413c 100644 --- a/lang/es/lychee.php +++ b/lang/es/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Contraseña', 'ENTER' => 'Entrar', 'CANCEL' => 'Cancelar', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Iniciar sesión', 'CLOSE' => 'Cerrar', 'SETTINGS' => 'Configuraciones', @@ -16,6 +17,7 @@ 'GALLERY' => 'Galería', 'USERS' => 'Usuarios', + 'PROFILE' => 'Profile', 'CREATE' => 'Crear', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'Acerca de Lychee', 'DIAGNOSTICS' => 'Diagnóstico', 'DIAGNOSTICS_GET_SIZE' => 'Pedir uso de espacio', + 'JOBS' => 'Show job history', 'LOGS' => 'Mostrar Registros', 'SIGN_OUT' => 'Cerrar Sesión', 'UPDATE_AVAILABLE' => '¡Actualización disponible!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'La funcionalidad del mapa se ha desactivado en la configuración.', 'ERROR_SEARCH_DEACTIVATED' => 'La función de búsqueda se ha desactivado en la configuración.', 'SUCCESS' => 'Vale', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Procesar de nuevo', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Diseño de fotos:', 'LAYOUT_SQUARES' => 'Miniaturas cuadradas', 'LAYOUT_JUSTIFIED' => 'Con aspecto justificado', + 'LAYOUT_MASONRY' => 'Con aspecto, masonry', + 'LAYOUT_GRID' => 'Con aspecto, grid', 'LAYOUT_UNJUSTIFIED' => 'Con aspecto, injustificado', 'SET_LAYOUT' => 'Cambia el diseño', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Visibilidad predeterminada del álbum sensible actualizada con éxito.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => 'No hay resultados', 'VIEW_NO_PUBLIC_ALBUMS' => 'Sin álbumes públicos', diff --git a/lang/fr/lychee.php b/lang/fr/lychee.php index 413dab30ef..bddd4ada71 100644 --- a/lang/fr/lychee.php +++ b/lang/fr/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Mot de passe', 'ENTER' => 'OK', 'CANCEL' => 'Annuler', + 'CONFIRM' => 'Confirmer', 'SIGN_IN' => 'Connexion', 'CLOSE' => 'Fermer', 'SETTINGS' => 'Paramètres', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => 'Utilisateurs', + 'PROFILE' => 'Profil', 'CREATE' => 'Créer', 'REMOVE' => 'Retirer', 'SHARE' => 'Partager', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'À propos de Lychee', 'DIAGNOSTICS' => 'Diagnostiques', 'DIAGNOSTICS_GET_SIZE' => 'Calculer l’espace utilisé', + 'JOBS' => 'Afficher l’historique des Jobs', 'LOGS' => 'Afficher les logs', 'SIGN_OUT' => 'Déconnexion', 'UPDATE_AVAILABLE' => 'Une mise-à-jour est disponible !', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'La carte a été désactivée dans les paramètres.', 'ERROR_SEARCH_DEACTIVATED' => 'La recherche a été désactivée dans les paramètres.', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Changement réussi.', 'RETRY' => 'Réessayer', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Affichage des photos :', 'LAYOUT_SQUARES' => 'Miniatures carrées', 'LAYOUT_JUSTIFIED' => 'En proportions, justifiées', + 'LAYOUT_MASONRY' => 'En proportion, Maçonnerie', + 'LAYOUT_GRID' => 'En proportion, Grille', 'LAYOUT_UNJUSTIFIED' => 'En proportions, non-justifiées', 'SET_LAYOUT' => 'Changer l’affichage', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Visibilé par default des albums sensible mis à jour.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Contenu Sensible', + 'NSFW_EXPLANATION' => 'Cet album contient des contenus sensible que certaine personnes peuvent trouver chocant ou troublant.', + 'TAP_CONSENT' => 'Tap pour consentir.', 'VIEW_NO_RESULT' => 'Aucun résultat', 'VIEW_NO_PUBLIC_ALBUMS' => 'Aucun album public', diff --git a/lang/hu/lychee.php b/lang/hu/lychee.php index 7bd89d6bfa..ddf620e165 100644 --- a/lang/hu/lychee.php +++ b/lang/hu/lychee.php @@ -5,6 +5,7 @@ 'PASSWORD' => 'Jelszó', 'ENTER' => 'Belépés', 'CANCEL' => 'Mégse', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Bejelentkezés', 'CLOSE' => 'Bezárás', 'SETTINGS' => 'Beállítások', @@ -14,6 +15,7 @@ 'GALLERY' => 'Galéria', 'USERS' => 'Felhasználók', + 'PROFILE' => 'Profile', 'CREATE' => 'Létrehozás', 'REMOVE' => 'Törlés', 'SHARE' => 'Megosztás', @@ -26,6 +28,7 @@ 'ABOUT_LYCHEE' => 'A Lychee-ről', 'DIAGNOSTICS' => 'Diagnosztika', 'DIAGNOSTICS_GET_SIZE' => 'Térhasználat lekérése', + 'JOBS' => 'Show job history', 'LOGS' => 'Naplók megtekintése', 'SIGN_OUT' => 'Kijelentkezés', 'UPDATE_AVAILABLE' => 'Frissítés elérhető!', @@ -278,6 +281,7 @@ 'ERROR_MAP_DEACTIVATED' => 'Térkép funkció letiltva a beállításokban.', 'ERROR_SEARCH_DEACTIVATED' => 'Keresési funkció letiltva a beállításokban.', 'SUCCESS' => 'Rendben', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Újra', 'OVERRIDE' => 'Felülbírálás', 'TAGS_OVERRIDE_INFO' => 'Ha ez nincs bejelölve, a címkéket hozzáadják a fénykép meglévő címkéihez.', @@ -396,6 +400,8 @@ 'LAYOUT_TYPE' => 'Fényképek elrendezése:', 'LAYOUT_SQUARES' => 'Négyzet alakú bélyegképek', 'LAYOUT_JUSTIFIED' => 'Képaránnyal, igazított', + 'LAYOUT_MASONRY' => 'Képaránnyal, masonry', + 'LAYOUT_GRID' => 'Képaránnyal, grid', 'LAYOUT_UNJUSTIFIED' => 'Képaránnyal, igazítatlan', 'SET_LAYOUT' => 'Elrendezés megváltoztatása', @@ -404,6 +410,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Az alapértelmezett érzékeny album láthatósága sikeresen frissítve.', 'NSFW_BANNER' => '

Érzékeny tartalom

Ez az album érzékeny tartalmat tartalmaz, amit néhány ember zavaró vagy zavarba ejtő lehet. Tapintson az engedélyezéshez.

', + 'NSFW_HEADER' => 'Érzékeny tartalom', + 'NSFW_EXPLANATION' => 'Ez az album érzékeny tartalmat tartalmaz, amit néhány ember zavaró vagy zavarba ejtő lehet.', + 'TAP_CONSENT' => 'Tapintson az engedélyezéshez.', 'VIEW_NO_RESULT' => 'Nincs találat', 'VIEW_NO_PUBLIC_ALBUMS' => 'Nincsenek nyilvános albumok', diff --git a/lang/it/lychee.php b/lang/it/lychee.php index a562eeb3a8..e10c01c55d 100644 --- a/lang/it/lychee.php +++ b/lang/it/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Password', 'ENTER' => 'Invia', 'CANCEL' => 'Annulla', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Entra', 'CLOSE' => 'Chiudi', 'SETTINGS' => 'Impostazioni', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => 'Utenti', + 'PROFILE' => 'Profile', 'CREATE' => 'Create', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'Informazioni su Lychee', 'DIAGNOSTICS' => 'Diagnostica', 'DIAGNOSTICS_GET_SIZE' => 'Request space usage', + 'JOBS' => 'Show job history', 'LOGS' => 'Visualizza Log', 'SIGN_OUT' => 'Esci', 'UPDATE_AVAILABLE' => 'Aggiornamento disponibile!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.', 'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Riprova', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Layout delle foto:', 'LAYOUT_SQUARES' => 'Miniature Quadrate', 'LAYOUT_JUSTIFIED' => 'Relativo all’aspetto, giustificate', + 'LAYOUT_MASONRY' => 'Relativo all’aspetto, masonry', + 'LAYOUT_GRID' => 'Relativo all’aspetto, grid', 'LAYOUT_UNJUSTIFIED' => 'Relativo all’aspetto, non giustificate', 'SET_LAYOUT' => 'Cambia layout', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => 'Nessun risultato', 'VIEW_NO_PUBLIC_ALBUMS' => 'Nessun album pubblico', diff --git a/lang/nl/lychee.php b/lang/nl/lychee.php index 92bfc89d8d..7fa9de1575 100644 --- a/lang/nl/lychee.php +++ b/lang/nl/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Wachtwoord', 'ENTER' => 'Enter', 'CANCEL' => 'Annuleer', + 'CONFIRM' => 'Doe maar', 'SIGN_IN' => 'Log in', 'CLOSE' => 'Sluit', 'SETTINGS' => 'Settings', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => 'Users', + 'PROFILE' => 'Profile', 'CREATE' => 'Create', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'Over Lychee', 'DIAGNOSTICS' => 'Diagnostics', 'DIAGNOSTICS_GET_SIZE' => 'Request space usage', + 'JOBS' => 'Show job history', 'LOGS' => 'Laat logs zien', 'SIGN_OUT' => 'Log uit', 'UPDATE_AVAILABLE' => 'Update beschikbaar!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.', 'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Probeer opnieuw', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Layout of photos:', 'LAYOUT_SQUARES' => 'Square thumbnails', 'LAYOUT_JUSTIFIED' => 'With aspect, justified', + 'LAYOUT_MASONRY' => 'With aspect, masonry', + 'LAYOUT_GRID' => 'With aspect, grid', 'LAYOUT_UNJUSTIFIED' => 'With aspect, unjustified', 'SET_LAYOUT' => 'Change layout', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => 'Geen resultaten', 'VIEW_NO_PUBLIC_ALBUMS' => 'Geen publieke albums', diff --git a/lang/no/lychee.php b/lang/no/lychee.php index 199338b445..f56dc79e77 100644 --- a/lang/no/lychee.php +++ b/lang/no/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Passord', 'ENTER' => 'Stig inn', 'CANCEL' => 'Avbryt', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Logg inn', 'CLOSE' => 'Lukk', 'SETTINGS' => 'Innstillinger', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => 'Brukere', + 'PROFILE' => 'Profile', 'CREATE' => 'Create', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'Om Lychee', 'DIAGNOSTICS' => 'Diagnostikk', 'DIAGNOSTICS_GET_SIZE' => 'Hent diskbruk', + 'JOBS' => 'Show job history', 'LOGS' => 'Vis Logg', 'SIGN_OUT' => 'Logg Ut', 'UPDATE_AVAILABLE' => 'Oppdatering er tilgjengelig!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'Kartfunksjoner har blitt deaktivert under innstillinger', 'ERROR_SEARCH_DEACTIVATED' => 'Søkefunksjoner har blitt deaktivert under innstillinger', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Prøv igjen', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Oppsett for bilder:', 'LAYOUT_SQUARES' => 'Kvadratiske miniatyrbilder', 'LAYOUT_JUSTIFIED' => 'Med aspektratio, justert', + 'LAYOUT_MASONRY' => 'Med aspektratio, masonry', + 'LAYOUT_GRID' => 'Med aspektratio, grid', 'LAYOUT_UNJUSTIFIED' => 'Med aspektratio, ikke justert', 'SET_LAYOUT' => 'Lagre oppsett', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => 'Ingen resultater', 'VIEW_NO_PUBLIC_ALBUMS' => 'Ingen offentlige album', diff --git a/lang/pl/lychee.php b/lang/pl/lychee.php index 2b58c23402..44da0b566a 100644 --- a/lang/pl/lychee.php +++ b/lang/pl/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Hasło', 'ENTER' => 'Potwierdź', 'CANCEL' => 'Anuluj', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Zaloguj', 'CLOSE' => 'Zamknij', 'SETTINGS' => 'Ustawienia', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => 'Użytkownicy', + 'PROFILE' => 'Profile', 'CREATE' => 'Create', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'O Lychee', 'DIAGNOSTICS' => 'Informacje techniczne', 'DIAGNOSTICS_GET_SIZE' => 'Analiza miejsca na dysku', + 'JOBS' => 'Show job history', 'LOGS' => 'Logi', 'SIGN_OUT' => 'Wyloguj', 'UPDATE_AVAILABLE' => 'Dostępna aktualizacja!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'Funkcja mapy została wyłączona w ustawieniach.', 'ERROR_SEARCH_DEACTIVATED' => 'Funkcja wyszkukiwania została wyłączona w ustawieniach.', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Ponów', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Układ zdjęć:', 'LAYOUT_SQUARES' => 'Kwadratowe miniaturki', 'LAYOUT_JUSTIFIED' => 'Aspekt, wyrównane', + 'LAYOUT_MASONRY' => 'Aspekt, masonry', + 'LAYOUT_GRID' => 'Aspekt, grid', 'LAYOUT_UNJUSTIFIED' => 'Aspekt, bez wyrównania', 'SET_LAYOUT' => 'Zmień układ', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Domyślne ustawienie dotyczące widoczności albumów poufnych ostało zaktualizowane.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => 'Brak wyników', 'VIEW_NO_PUBLIC_ALBUMS' => 'Brak albumów publicznych', diff --git a/lang/pt/lychee.php b/lang/pt/lychee.php index a2f4e0ab5f..c1b56ff5c9 100644 --- a/lang/pt/lychee.php +++ b/lang/pt/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Password', 'ENTER' => 'Inserir', 'CANCEL' => 'Cancelar', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Iniciar Sessão', 'CLOSE' => 'Fechar', 'SETTINGS' => 'Configurações', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => 'Utilizadores', + 'PROFILE' => 'Profile', 'CREATE' => 'Create', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'Acerca do Lychee', 'DIAGNOSTICS' => 'Diagnosticos', 'DIAGNOSTICS_GET_SIZE' => 'Pedir utilização de espaço', + 'JOBS' => 'Show job history', 'LOGS' => 'Mostrar Logs', 'SIGN_OUT' => 'Terminar Sessão', 'UPDATE_AVAILABLE' => 'Atualização disponível!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'A funcionalidade do mapa foi desativada nas configurações.', 'ERROR_SEARCH_DEACTIVATED' => 'A funcionalidade de procura foi desativada nas configurações.', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Tentar de novo', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Disposição das fotografias:', 'LAYOUT_SQUARES' => 'Miniaturas quadradas', 'LAYOUT_JUSTIFIED' => 'Com formatação, justificada', + 'LAYOUT_MASONRY' => 'Com formatação, masonry', + 'LAYOUT_GRID' => 'Com formatação, grid', 'LAYOUT_UNJUSTIFIED' => 'Com formatação, não justificada', 'SET_LAYOUT' => 'Alterar disposição', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Sensibilidade predefinida do álbum visível atualizada com sucesso.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => 'Sem resultados', 'VIEW_NO_PUBLIC_ALBUMS' => 'Sem álbums públicos', diff --git a/lang/ru/lychee.php b/lang/ru/lychee.php index 6621ff5e8a..f74e5f5284 100644 --- a/lang/ru/lychee.php +++ b/lang/ru/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Пароль', 'ENTER' => 'Enter', 'CANCEL' => 'Отмена', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Вход', 'CLOSE' => 'Закрыть', 'SETTINGS' => 'Параметры', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => 'Пользователи', + 'PROFILE' => 'Profile', 'CREATE' => 'Create', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'О Lychee', 'DIAGNOSTICS' => 'Диагностика', 'DIAGNOSTICS_GET_SIZE' => 'Request space usage', + 'JOBS' => 'Show job history', 'LOGS' => 'Логи', 'SIGN_OUT' => 'Выход', 'UPDATE_AVAILABLE' => 'Доступно обновление!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.', 'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.', 'SUCCESS' => 'Ок', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Повторить', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Компоновка фото:', 'LAYOUT_SQUARES' => 'Квадратные превью', 'LAYOUT_JUSTIFIED' => 'По формату, выровнять', + 'LAYOUT_MASONRY' => 'По формату, masonry', + 'LAYOUT_GRID' => 'По формату, grid', 'LAYOUT_UNJUSTIFIED' => 'По формату, не выравнивать', 'SET_LAYOUT' => 'Изменить компоновку', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => 'Не найдено', 'VIEW_NO_PUBLIC_ALBUMS' => 'Нет публичных альбомов', diff --git a/lang/sk/lychee.php b/lang/sk/lychee.php index 197a412f09..76b1d63887 100644 --- a/lang/sk/lychee.php +++ b/lang/sk/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Heslo', 'ENTER' => 'Zadať', 'CANCEL' => 'Prerušiť', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Prihlásiť', 'CLOSE' => 'Zatvoriť', 'SETTINGS' => 'Nastavenia', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => 'Užívatelia', + 'PROFILE' => 'Profile', 'CREATE' => 'Create', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'O Lychee', 'DIAGNOSTICS' => 'Diagnostika', 'DIAGNOSTICS_GET_SIZE' => 'Request space usage', + 'JOBS' => 'Show job history', 'LOGS' => 'Protokoly', 'SIGN_OUT' => 'Odhlásiť', 'UPDATE_AVAILABLE' => 'Update je k dispozícii!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.', 'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Opakovať', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Rozmiestnenie obrázkov:', 'LAYOUT_SQUARES' => 'Štvorcové náhľady', 'LAYOUT_JUSTIFIED' => 'Zachovaný pomer strán, zarovnané', + 'LAYOUT_MASONRY' => 'Zachovaný pomer strán, masonry', + 'LAYOUT_GRID' => 'Zachovaný pomer strán, grid', 'LAYOUT_UNJUSTIFIED' => 'Zachovaný pomer strán, nezarovnané', 'SET_LAYOUT' => 'Zmeniť rozmiestnenie', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => 'Žiadny výsledok', 'VIEW_NO_PUBLIC_ALBUMS' => 'Žiadne verejné albumy', diff --git a/lang/sv/lychee.php b/lang/sv/lychee.php index 8526f33529..65301e9864 100644 --- a/lang/sv/lychee.php +++ b/lang/sv/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Lösenord', 'ENTER' => 'Stig in', 'CANCEL' => 'Avbryt', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Logga in', 'CLOSE' => 'Stäng', 'SETTINGS' => 'Settings', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => 'Users', + 'PROFILE' => 'Profile', 'CREATE' => 'Create', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'Om Lychee', 'DIAGNOSTICS' => 'Diagnostik', 'DIAGNOSTICS_GET_SIZE' => 'Request space usage', + 'JOBS' => 'Show job history', 'LOGS' => 'Visa logfilen', 'SIGN_OUT' => 'Logga ut', 'UPDATE_AVAILABLE' => 'En uppdatering finns!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.', 'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Försök igen', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Layout of photos:', 'LAYOUT_SQUARES' => 'Square thumbnails', 'LAYOUT_JUSTIFIED' => 'With aspect, justified', + 'LAYOUT_MASONRY' => 'With aspect, masonry', + 'LAYOUT_GRID' => 'With aspect, grid', 'LAYOUT_UNJUSTIFIED' => 'With aspect, unjustified', 'SET_LAYOUT' => 'Change layout', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => 'Inget resultat', 'VIEW_NO_PUBLIC_ALBUMS' => 'Inga publika album', diff --git a/lang/vi/lychee.php b/lang/vi/lychee.php index 528d87d326..6eaf3a2edb 100644 --- a/lang/vi/lychee.php +++ b/lang/vi/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => 'Mật khẩu', 'ENTER' => 'Ok', 'CANCEL' => 'Bỏ', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => 'Đăng nhập', 'CLOSE' => 'Đóng', 'SETTINGS' => 'Cài đặt', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => 'Người dùng', + 'PROFILE' => 'Profile', 'CREATE' => 'Tạo', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => 'Giới thiệu Lychee', 'DIAGNOSTICS' => 'Thông tin hệ thống', 'DIAGNOSTICS_GET_SIZE' => 'Xem dung lượng đã dùng', + 'JOBS' => 'Show job history', 'LOGS' => 'Xem nhật ký thay đổi', 'SIGN_OUT' => 'Thoát', 'UPDATE_AVAILABLE' => 'Có phiên bản mới!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => 'Tính năng hiển thị bản đồ đã tắt trong phần cài đặt.', 'ERROR_SEARCH_DEACTIVATED' => 'Tính năng tìm kiếm đã tắt trong phần cài đặt', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => 'Thử lại', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => 'Cách trình bày hình ảnh:', 'LAYOUT_SQUARES' => 'Ô vuông hình nhỏ', 'LAYOUT_JUSTIFIED' => 'Theo tỷ lệ hình, canh đều hai bên', + 'LAYOUT_MASONRY' => 'Theo tỷ lệ hình, masonry', + 'LAYOUT_GRID' => 'Theo tỷ lệ hình, grid', 'LAYOUT_UNJUSTIFIED' => 'Theo tỷ lệ hình, không canh đều hai bên', 'SET_LAYOUT' => 'Thay đổi cách trình bày', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Chế độ hiển thị album nhạy cảm được cập nhật thành công.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => 'Không có kết quả nào', 'VIEW_NO_PUBLIC_ALBUMS' => 'Chưa có album chia sẻ công cộng nào', diff --git a/lang/zh_CN/lychee.php b/lang/zh_CN/lychee.php index 8f016fab63..49ab68198e 100644 --- a/lang/zh_CN/lychee.php +++ b/lang/zh_CN/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => '密码', 'ENTER' => '确定', 'CANCEL' => '取消', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => '登录', 'CLOSE' => '关闭', 'SETTINGS' => '设置', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => '用户', + 'PROFILE' => 'Profile', 'CREATE' => 'Create', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => '关于 Lychee', 'DIAGNOSTICS' => '诊断', 'DIAGNOSTICS_GET_SIZE' => '请求空间占用信息', + 'JOBS' => 'Show job history', 'LOGS' => '查看日志', 'SIGN_OUT' => '注销登录', 'UPDATE_AVAILABLE' => '可用更新!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => '地图功能已在设置中停用。', 'ERROR_SEARCH_DEACTIVATED' => '搜索功能已在设置中停用。', 'SUCCESS' => 'OK', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => '重试', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => '照片布局:', 'LAYOUT_SQUARES' => '方形缩略图', 'LAYOUT_JUSTIFIED' => '保持长宽比,两端对齐', + 'LAYOUT_MASONRY' => '保持长宽比, masonry', + 'LAYOUT_GRID' => '保持长宽比, grid', 'LAYOUT_UNJUSTIFIED' => '保持长宽比,不对齐', 'SET_LAYOUT' => '更改布局', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => '敏感相册的默认可见性成功更新。', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => '无结果', 'VIEW_NO_PUBLIC_ALBUMS' => '没有公开相册', diff --git a/lang/zh_TW/lychee.php b/lang/zh_TW/lychee.php index 1a794a6f1f..ee19972271 100644 --- a/lang/zh_TW/lychee.php +++ b/lang/zh_TW/lychee.php @@ -7,6 +7,7 @@ 'PASSWORD' => '密碼', 'ENTER' => '確定', 'CANCEL' => '取消', + 'CONFIRM' => 'Confirm', 'SIGN_IN' => '登入', 'CLOSE' => '關閉', 'SETTINGS' => '設定', @@ -16,6 +17,7 @@ 'GALLERY' => 'Gallery', 'USERS' => '使用者', + 'PROFILE' => 'Profile', 'CREATE' => 'Create', 'REMOVE' => 'Remove', 'SHARE' => 'Share', @@ -28,6 +30,7 @@ 'ABOUT_LYCHEE' => '關於Lychee', 'DIAGNOSTICS' => '診斷', 'DIAGNOSTICS_GET_SIZE' => '請求空間使用', + 'JOBS' => 'Show job history', 'LOGS' => '查看日誌', 'SIGN_OUT' => '登出', 'UPDATE_AVAILABLE' => '可用更新!', @@ -280,6 +283,7 @@ 'ERROR_MAP_DEACTIVATED' => '地圖功能已被設為停用。', 'ERROR_SEARCH_DEACTIVATED' => '搜索功能已在設為停用。', 'SUCCESS' => '好', + 'CHANGE_SUCCESS' => 'Change successful.', 'RETRY' => '重試', 'OVERRIDE' => 'Override', 'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.', @@ -398,6 +402,8 @@ 'LAYOUT_TYPE' => '照片佈局:', 'LAYOUT_SQUARES' => '方形縮略圖', 'LAYOUT_JUSTIFIED' => '有方面,有道理', + 'LAYOUT_MASONRY' => '有方面, masonry', + 'LAYOUT_GRID' => '有方面, grid', 'LAYOUT_UNJUSTIFIED' => '有方面,沒有道理', 'SET_LAYOUT' => '變更版面', @@ -406,6 +412,9 @@ 'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.', 'NSFW_BANNER' => '

Sensitive content

This album contains sensitive content which some people may find offensive or disturbing.

Tap to consent.

', + 'NSFW_HEADER' => 'Sensitive content', + 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.', + 'TAP_CONSENT' => 'Tap to consent.', 'VIEW_NO_RESULT' => '無結果', 'VIEW_NO_PUBLIC_ALBUMS' => '沒有公開相簿', diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..27deec751f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3528 @@ +{ + "name": "Lychee", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "autoprefixer": "^10.4.16", + "justified-layout": "^4.1.0", + "laravel-vite-plugin": "^0.8.1", + "lazysizes": "^5.3.2", + "leaflet": "^1.9.4", + "leaflet-gpx": "^1.7.0", + "leaflet-rotatedmarker": "^0.2.0", + "leaflet.markercluster": "^1.4.1", + "postcss": "^8.4.32", + "prettier": "^3.1.1", + "qrcode": "^1.5.3", + "tailwindcss": "^3.3.6", + "ts-loader": "^9.5.1", + "typescript": "^5.3.3", + "vite": "^4.5.1", + "vite-plugin-checker": "^0.6.2", + "vite-plugin-commonjs": "^0.10.0" + }, + "devDependencies": { + "@lychee-org/leaflet.photo": "^1.0.0", + "@types/alpinejs": "^3.13.5", + "@types/leaflet": "^1.9.8", + "@types/leaflet-rotatedmarker": "^0.2.5", + "@types/leaflet.markercluster": "^1.5.4", + "@types/mousetrap": "^1.6.15", + "@types/photoswipe": "^4.1.6", + "@types/qrcode": "^1.5.5", + "@types/tailwindcss": "^3.1.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lychee-org/leaflet.photo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@lychee-org/leaflet.photo/-/leaflet.photo-1.0.0.tgz", + "integrity": "sha512-0nUnOvcVxFdwJ7iqdpuZVT7t7ZLwluOTaRGZuGSf0KRd0f1Ebb6fed7uWaSa/TD+mXQIYagsoBtWYG0lxMakKw==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@types/alpinejs": { + "version": "3.13.5", + "resolved": "https://registry.npmjs.org/@types/alpinejs/-/alpinejs-3.13.5.tgz", + "integrity": "sha512-BSNTroRhmBkNiyd7ELK/5Boja92hnQMST6H4z1BqXKeMVzHjp9o1j5poqd5Tyhjd8oMFwxYC4I00eghfg2xrTA==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "peer": true + }, + "node_modules/@types/geojson": { + "version": "7946.0.13", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.13.tgz", + "integrity": "sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "peer": true + }, + "node_modules/@types/leaflet": { + "version": "1.9.8", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.8.tgz", + "integrity": "sha512-EXdsL4EhoUtGm2GC2ZYtXn+Fzc6pluVgagvo2VC1RHWToLGlTRwVYoDpqS/7QXa01rmDyBjJk3Catpf60VMkwg==", + "dev": true, + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/leaflet-rotatedmarker": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@types/leaflet-rotatedmarker/-/leaflet-rotatedmarker-0.2.5.tgz", + "integrity": "sha512-GaKK1bdQ6NYGkVdZj2cHe8Eu1BVf40Jhtmd8pZj5gQSJcTy5iTog0hsMIhf6QQDKnaEgrRJzm4OES6B9vxi4dw==", + "dev": true, + "dependencies": { + "@types/leaflet": "*" + } + }, + "node_modules/@types/leaflet.markercluster": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.5.4.tgz", + "integrity": "sha512-tfMP8J62+wfsVLDLGh5Zh1JZxijCaBmVsMAX78MkLPwvPitmZZtSin5aWOVRhZrCS+pEOZwNzexbfWXlY+7yjg==", + "dev": true, + "dependencies": { + "@types/leaflet": "*" + } + }, + "node_modules/@types/mousetrap": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.15.tgz", + "integrity": "sha512-qL0hyIMNPow317QWW/63RvL1x5MVMV+Ru3NaY9f/CuEpCqrmb7WeuK2071ZY5hczOnm38qExWM2i2WtkXLSqFw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", + "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/photoswipe": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/photoswipe/-/photoswipe-4.1.6.tgz", + "integrity": "sha512-6kN4KYjNF4sg79fSwZ46s4Pron4+YJxoW0DQOcHveUZc/3cWd8Q4B9OLlDmEYw9iI6fODU8kyyq8ZBy+8F/+zQ==", + "dev": true + }, + "node_modules/@types/qrcode": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.5.tgz", + "integrity": "sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tailwindcss": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/tailwindcss/-/tailwindcss-3.1.0.tgz", + "integrity": "sha512-JxPzrm609hzvF4nmOI3StLjbBEP3WWQxDDJESqR1nh94h7gyyy3XSl0hn5RBMJ9mPudlLjtaXs5YEBtLw7CnPA==", + "deprecated": "This is a stub types definition. tailwindcss provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "tailwindcss": "*" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "peer": true + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "peer": true + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001571", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001571.tgz", + "integrity": "sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.616", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz", + "integrity": "sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "peer": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "peer": true + }, + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "peer": true + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "peer": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/justified-layout": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/justified-layout/-/justified-layout-4.1.0.tgz", + "integrity": "sha512-M5FimNMXgiOYerVRGsXZ2YK9YNCaTtwtYp7Hb2308U1Q9TXXHx5G0p08mcVR5O53qf8bWY4NJcPBxE6zuayXSg==" + }, + "node_modules/laravel-vite-plugin": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.8.1.tgz", + "integrity": "sha512-fxzUDjOA37kOsYq8dP+3oPIlw8/kJVXwu0hOXLun82R1LpV02shGeWGYKx2lbpKffL5I0sfPPjfqbYxuqBluAA==", + "dependencies": { + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.0.5" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/lazysizes": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/lazysizes/-/lazysizes-5.3.2.tgz", + "integrity": "sha512-22UzWP+Vedi/sMeOr8O7FWimRVtiNJV2HCa+V8+peZOw6QbswN9k58VUhd7i6iK5bw5QkYrF01LJbeJe0PV8jg==" + }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" + }, + "node_modules/leaflet-gpx": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/leaflet-gpx/-/leaflet-gpx-1.7.0.tgz", + "integrity": "sha512-5NS5WKfp5zaAHMB2KM6OUaIng+SZ3e/UHK2++ABl2wELojYlmLqIL8t1Mj6DaZGkIh3kld+mAUvMGdIzC1yGRA==" + }, + "node_modules/leaflet-rotatedmarker": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/leaflet-rotatedmarker/-/leaflet-rotatedmarker-0.2.0.tgz", + "integrity": "sha512-yc97gxLXwbZa+Gk9VCcqI0CkvIBC9oNTTjFsHqq4EQvANrvaboib4UdeQLyTnEqDpaXHCqzwwVIDHtvz2mUiDg==" + }, + "node_modules/leaflet.markercluster": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", + "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==", + "peerDependencies": { + "leaflet": "^1.3.1" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==" + }, + "node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "peer": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "peer": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "engines": { + "node": ">=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prettier": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz", + "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz", + "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "peer": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/vite": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", + "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.6.2.tgz", + "integrity": "sha512-YvvvQ+IjY09BX7Ab+1pjxkELQsBd4rPhWNw8WLBeFVxu/E7O+n6VYAqNsKdK/a2luFlX/sMpoWdGFfg4HvwdJQ==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "ansi-escapes": "^4.3.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "commander": "^8.0.0", + "fast-glob": "^3.2.7", + "fs-extra": "^11.1.0", + "lodash.debounce": "^4.0.8", + "lodash.pick": "^4.4.0", + "npm-run-path": "^4.0.1", + "semver": "^7.5.0", + "strip-ansi": "^6.0.0", + "tiny-invariant": "^1.1.0", + "vscode-languageclient": "^7.0.0", + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-uri": "^3.0.2" + }, + "engines": { + "node": ">=14.16" + }, + "peerDependencies": { + "eslint": ">=7", + "meow": "^9.0.0", + "optionator": "^0.9.1", + "stylelint": ">=13", + "typescript": "*", + "vite": ">=2.0.0", + "vls": "*", + "vti": "*", + "vue-tsc": ">=1.3.9" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "meow": { + "optional": true + }, + "optionator": { + "optional": true + }, + "stylelint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vls": { + "optional": true + }, + "vti": { + "optional": true + }, + "vue-tsc": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/vite-plugin-checker/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/vite-plugin-checker/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vite-plugin-commonjs": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/vite-plugin-commonjs/-/vite-plugin-commonjs-0.10.1.tgz", + "integrity": "sha512-taP8R9kYGlCW5OzkVR0UIWRCnG6rSxeWWuA7tnU5b9t5MniibOnDY219NhisTeDhJAeGT8cEnrhVWZ9A5yD+vg==", + "dependencies": { + "acorn": "^8.8.2", + "fast-glob": "^3.2.12", + "magic-string": "^0.30.1", + "vite-plugin-dynamic-import": "^1.5.0" + } + }, + "node_modules/vite-plugin-dynamic-import": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.5.0.tgz", + "integrity": "sha512-Qp85c+AVJmLa8MLni74U4BDiWpUeFNx7NJqbGZyR2XJOU7mgW0cb7nwlAMucFyM4arEd92Nfxp4j44xPi6Fu7g==", + "dependencies": { + "acorn": "^8.8.2", + "es-module-lexer": "^1.2.1", + "fast-glob": "^3.2.12", + "magic-string": "^0.30.1" + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.1.0.tgz", + "integrity": "sha512-3cObNDzX6DdfhD9E7kf6w2mNunFpD7drxyNgHLw+XwIYAgb+Xt16SEXo0Up4VH+TMf3n+DSVJZtW2POBGcBYAA==", + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "node_modules/vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "engines": { + "node": ">=8.0.0 || >=10.0.0" + } + }, + "node_modules/vscode-languageclient": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", + "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "dependencies": { + "minimatch": "^3.0.4", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" + }, + "engines": { + "vscode": "^1.52.0" + } + }, + "node_modules/vscode-languageclient/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/vscode-languageclient/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "dependencies": { + "vscode-languageserver-protocol": "3.16.0" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "dependencies": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", + "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==" + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..4087727a3d --- /dev/null +++ b/package.json @@ -0,0 +1,44 @@ +{ + "private": true, + "type": "module", + "scripts": { + "check": "tsc --noEmit", + "dev": "vite", + "build": "vite build", + "check-formatting": "prettier --check resources/js/ resources/css/", + "format": "prettier --write resources/js/ resources/css/" + }, + "devDependencies": { + "@lychee-org/leaflet.photo": "^1.0.0", + "@types/alpinejs": "^3.13.5", + "@types/leaflet": "^1.9.8", + "@types/leaflet-rotatedmarker": "^0.2.5", + "@types/leaflet.markercluster": "^1.5.4", + "@types/mousetrap": "^1.6.15", + "@types/photoswipe": "^4.1.6", + "@types/qrcode": "^1.5.5", + "@types/tailwindcss": "^3.1.0" + }, + "dependencies": { + "autoprefixer": "^10.4.16", + "justified-layout": "^4.1.0", + "laravel-vite-plugin": "^0.8.1", + "lazysizes": "^5.3.2", + "leaflet": "^1.9.4", + "leaflet-gpx": "^1.7.0", + "leaflet-rotatedmarker": "^0.2.0", + "leaflet.markercluster": "^1.4.1", + "postcss": "^8.4.32", + "prettier": "^3.1.1", + "qrcode": "^1.5.3", + "tailwindcss": "^3.3.6", + "ts-loader": "^9.5.1", + "typescript": "^5.3.3", + "vite": "^4.5.1", + "vite-plugin-checker": "^0.6.2", + "vite-plugin-commonjs": "^0.10.0" + }, + "browserslist": [ + "defaults and fully supports es6-module" + ] +} diff --git a/phpstan.neon b/phpstan.neon index d27dbca811..e2b0081c3d 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -9,21 +9,20 @@ parameters: - app - scripts - lang - - database + - database/migrations - tests excludePaths: - - app/View/* - - app/Http/Livewire/* - - database/factories/* - database/migrations/2021_12_04_181200_refactor_models.php stubFiles: # these can be removed after https://github.com/thecodingmachine/safe/issues/283 has been merged + - phpstan/stubs/Wireable.stub - phpstan/stubs/image.stub - phpstan/stubs/imageexception.stub ignoreErrors: # False positive php8.2 + phpstan on interface @property - '#Access to an undefined property App\\Contracts\\Models\\AbstractAlbum::\$id#' - '#Access to an undefined property App\\Contracts\\Models\\AbstractAlbum::\$title#' + - '#Access to an undefined property App\\Contracts\\Models\\AbstractAlbum::\$thumb#' - '#Access to an undefined property App\\Contracts\\Models\\AbstractAlbum::\$photos#' - '#Access to an undefined property App\\Contracts\\Image\\StreamStats::\$checksum#' - '#Access to an undefined property App\\Contracts\\Image\\StreamStats::\$bytes#' @@ -40,12 +39,16 @@ parameters: - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::where(Not)?(Null|In|Between|Exists|Column|Year|Month|Day)?\(\).#' - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::delete\(\)#' - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::without\(\)#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::with\(\)#' - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::count\(\).#' - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::update\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::inRandomOrder\(\).#' - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::groupBy\(\).#' - '#Dynamic call to static method App\\Models\\Builders\\.*::orderByDesc\(\).#' - '#Call to an undefined method Illuminate\\Database\\Eloquent\\.*::update\(\)#' - '#Call to an undefined method Illuminate\\Database\\Eloquent\\.*::with(Only)?\(\)#' + - '#Call to an undefined method App\\Relations\\HasManyPhotosRecursively::whereNotNull\(\)#' + - '#Call to an undefined method Illuminate\\Database\\Eloquent\\Builder|Illuminate\\Database\\Eloquent\\Relations\\Relation::whereNotNull\(\).#' - '#Call to private method latest\(\) of parent class Illuminate\\Database\\Eloquent\\Relations\\HasMany#' - '#Call to protected method asDateTime\(\) of class Illuminate\\Database\\Eloquent\\Model.#' @@ -73,27 +76,51 @@ parameters: - '#Property .* \(App\\Models\\.*(\|null)?\) does not accept (Illuminate\\Database\\Eloquent\\Collection\|)?Illuminate\\Database\\Eloquent\\Model(\|null)?.#' + - '#Access to an undefined property Laragear\\WebAuthn\\Models\\WebAuthnCredential::\$authenticatable_id#' # False positive as stub code for PHP has not yet been updated to 2nd parameter, see https://github.com/php/doc-en/issues/1529 and https://www.php.net/imagick.writeimagefile - '#Method Imagick::writeImageFile\(\) invoked with 2 parameters, 1 required#' + # Synth + - + message: '#Variable property access on .*#' + paths: + - app/Livewire/Synth + + - + message: '#Parameter .* of method App\\Livewire\\Synth\\.* should be contravariant with parameter .* of method Livewire\\Mechanisms\\HandleComponents\\Synthesizers\\Synth::.*#' + paths: + - app/Livewire/Synth + # Migrations - message: '#Function define is unsafe to use.#' paths: - - database + - database/migrations - message: '#Variable property access on (mixed|object).#' paths: - - database + - database/migrations - message: '#Access to an undefined property object::\$value.#' paths: - - database + - database/migrations # TESTS + - + message: '#Dynamic call to static method Illuminate\\Testing\\TestResponse::assert(Forbidden|ViewIs|Unauthorized|Ok|Status)#' + paths: + - tests + - + message: '#Call to an undefined method Illuminate\\Testing\\TestResponse::(assert)?(SeeLivewire|dispatch|call|Set|Count)#' + paths: + - tests + - + message: '#Call to an undefined method Livewire\\Features\\SupportTesting\\Testable::test\(\)#' + paths: + - tests - - message: '#Dynamic call to static method PHPUnit\\Framework\\Assert::assert(Is)?(Not)?(True|False|Equals|Int|Null|Empty)\(\)#' + message: '#Dynamic call to static method PHPUnit\\Framework\\Assert::assert(Is)?(Not)?(True|False|Equals|Int|Null|Empty|Count)\(\)#' paths: - tests - @@ -113,10 +140,11 @@ parameters: paths: - tests - - message: '#Access to private property App\\Models\\Extensions\\SizeVariants::\$(original|thumb|small|medium)(2x)?#' + message: '#Cannot call method .* on Illuminate\\Testing\\PendingCommand\|int.#' paths: - tests + - - message: '#Cannot call method .* on Illuminate\\Testing\\PendingCommand\|int.#' + message: '#Access to private property App\\Models\\Extensions\\SizeVariants::\$(original|small(2x)?|thumb(2x)?|medium(2x)?)#' paths: - - tests + - tests \ No newline at end of file diff --git a/phpstan/stubs/Wireable.stub b/phpstan/stubs/Wireable.stub new file mode 100644 index 0000000000..a4dad48967 --- /dev/null +++ b/phpstan/stubs/Wireable.stub @@ -0,0 +1,22 @@ +./tests/Feature/LibUnitTests/SharingUnitTest.php ./tests/Feature/LibUnitTests/UsersUnitTest.php + + ./tests/Livewire + ./tests/Livewire/Base/BaseLivewireTest.php + diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000000..2e7af2b7f1 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/vendor/log-viewer/app.css b/public/vendor/log-viewer/app.css index 9d9bde5023..333d32d17d 100644 --- a/public/vendor/log-viewer/app.css +++ b/public/vendor/log-viewer/app.css @@ -1 +1 @@ -/*! tailwindcss v3.1.6 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e4e4e7;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#a1a1aa;opacity:1}input::placeholder,textarea::placeholder{color:#a1a1aa;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}.\!container{width:100%!important}@media (min-width:640px){.container{max-width:640px}.\!container{max-width:640px!important}}@media (min-width:768px){.container{max-width:768px}.\!container{max-width:768px!important}}@media (min-width:1024px){.container{max-width:1024px}.\!container{max-width:1024px!important}}@media (min-width:1280px){.container{max-width:1280px}.\!container{max-width:1280px!important}}@media (min-width:1536px){.container{max-width:1536px}.\!container{max-width:1536px!important}}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{left:0;right:0}.inset-0,.inset-y-0{bottom:0;top:0}.bottom-0{bottom:0}.left-3{left:.75rem}.right-7{right:1.75rem}.right-0{right:0}.top-9{top:2.25rem}.top-0{top:0}.bottom-10{bottom:2.5rem}.left-0{left:0}.-left-\[200\%\]{left:-200%}.right-\[200\%\]{right:200%}.bottom-4{bottom:1rem}.right-4{right:1rem}.z-20{z-index:20}.z-10{z-index:10}.m-1{margin:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-auto{margin-bottom:auto;margin-top:auto}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-1\.5{margin-left:.375rem;margin-right:.375rem}.mb-1{margin-bottom:.25rem}.ml-3{margin-left:.75rem}.ml-2{margin-left:.5rem}.mt-0{margin-top:0}.mr-1\.5{margin-right:.375rem}.mr-1{margin-right:.25rem}.mt-2{margin-top:.5rem}.mb-8{margin-bottom:2rem}.mt-6{margin-top:1.5rem}.ml-1{margin-left:.25rem}.mt-1{margin-top:.25rem}.mr-2{margin-right:.5rem}.mb-5{margin-bottom:1.25rem}.mr-5{margin-right:1.25rem}.-mr-2{margin-right:-.5rem}.mr-2\.5{margin-right:.625rem}.mb-4{margin-bottom:1rem}.mt-3{margin-top:.75rem}.ml-5{margin-left:1.25rem}.mb-2{margin-bottom:.5rem}.mr-4{margin-right:1rem}.mr-3{margin-right:.75rem}.-mb-0\.5{margin-bottom:-.125rem}.-mb-0{margin-bottom:0}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-full{height:100%}.h-\[18px\]{height:18px}.h-5{height:1.25rem}.h-3{height:.75rem}.h-4{height:1rem}.h-14{height:3.5rem}.h-7{height:1.75rem}.h-6{height:1.5rem}.h-0{height:0}.max-h-screen{max-height:100vh}.max-h-60{max-height:15rem}.min-h-\[38px\]{min-height:38px}.min-h-screen{min-height:100vh}.w-\[18px\]{width:18px}.w-full{width:100%}.w-5{width:1.25rem}.w-3{width:.75rem}.w-4{width:1rem}.w-48{width:12rem}.w-14{width:3.5rem}.w-screen{width:100vw}.w-6{width:1.5rem}.w-\[120px\]{width:120px}.w-\[180px\]{width:180px}.w-\[110px\]{width:110px}.w-auto{width:auto}.min-w-\[240px\]{min-width:240px}.min-w-full{min-width:100%}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.max-w-\[1px\]{max-width:1px}.flex-1{flex:1 1 0%}.shrink{flex-shrink:1}.table-fixed{table-layout:fixed}.border-separate{border-collapse:separate}.translate-x-full{--tw-translate-x:100%}.translate-x-0,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x:0px}.rotate-90{--tw-rotate:90deg}.rotate-90,.scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-flow-col{grid-auto-flow:column}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-l{border-left-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-brand-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-brand-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.bg-opacity-75{--tw-bg-opacity:0.75}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-gray-100{--tw-gradient-from:#f4f4f5;--tw-gradient-to:hsla(240,5%,96%,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:transparent}.p-1{padding:.25rem}.p-12{padding:3rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-4{padding-left:1rem;padding-right:1rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-4{padding-bottom:1rem;padding-top:1rem}.px-8{padding-left:2rem;padding-right:2rem}.pr-4{padding-right:1rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-9{padding-right:2.25rem}.pl-10{padding-left:2.5rem}.pl-2{padding-left:.5rem}.pt-2{padding-top:.5rem}.pb-1{padding-bottom:.25rem}.pt-3{padding-top:.75rem}.pb-16{padding-bottom:4rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-base{font-size:1rem;line-height:1.5rem}.font-semibold{font-weight:600}.font-normal{font-weight:400}.font-medium{font-weight:500}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.text-brand-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.text-brand-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-brand-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.opacity-100{opacity:1}.opacity-0{opacity:0}.opacity-90{opacity:.9}.opacity-75{opacity:.75}.opacity-25{opacity:.25}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-brand-500{outline-color:#0ea5e9}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-opacity-5{--tw-ring-opacity:0.05}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.spin{-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:spin;-moz-animation-name:spin;-ms-animation-name:spin;animation-name:spin;-webkit-animation-timing-function:linear;-moz-animation-timing-function:linear;-ms-animation-timing-function:linear;animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}html.dark{color-scheme:dark}#bmc-wbtn{height:48px!important;width:48px!important}#bmc-wbtn>img{height:32px!important;width:32px!important}.log-levels-selector .dropdown-toggle{white-space:nowrap}.log-levels-selector .dropdown-toggle:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .log-levels-selector .dropdown-toggle:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.log-levels-selector .dropdown-toggle>svg{height:1rem;margin-left:.25rem;opacity:.75;width:1rem}.log-levels-selector .dropdown .log-level{font-weight:600}.log-levels-selector .dropdown .log-level.success{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.dark .log-levels-selector .dropdown .log-level.success{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.info{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.dark .log-levels-selector .dropdown .log-level.info{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.warning{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.dark .log-levels-selector .dropdown .log-level.warning{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.danger{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.dark .log-levels-selector .dropdown .log-level.danger{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.none{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.dark .log-levels-selector .dropdown .log-level.none{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-count{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity));margin-left:2rem;white-space:nowrap}.dark .log-levels-selector .dropdown .log-count{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.success{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.info{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.warning{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.danger{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.none{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-count{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.dark .log-levels-selector .dropdown button.active .log-count{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.log-levels-selector .dropdown .no-results{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity));font-size:.75rem;line-height:1rem;padding:.25rem 1rem;text-align:center}.dark .log-levels-selector .dropdown .no-results{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-item{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));cursor:pointer;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dark .log-item{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.log-item.success.active>td,.log-item.success:focus-within>td,.log-item.success:hover>td{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.dark .log-item.success.active>td,.dark .log-item.success:focus-within>td,.dark .log-item.success:hover>td{--tw-bg-opacity:0.4;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.log-item.success .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.dark .log-item.success .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.log-item.success .log-level{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.dark .log-item.success .log-level{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.log-item.info.active>td,.log-item.info:focus-within>td,.log-item.info:hover>td{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.dark .log-item.info.active>td,.dark .log-item.info:focus-within>td,.dark .log-item.info:hover>td{--tw-bg-opacity:0.4;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.log-item.info .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.dark .log-item.info .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.log-item.info .log-level{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.dark .log-item.info .log-level{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.log-item.warning.active>td,.log-item.warning:focus-within>td,.log-item.warning:hover>td{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.dark .log-item.warning.active>td,.dark .log-item.warning:focus-within>td,.dark .log-item.warning:hover>td{--tw-bg-opacity:0.4;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.log-item.warning .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.dark .log-item.warning .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.log-item.warning .log-level{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.dark .log-item.warning .log-level{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.log-item.danger.active>td,.log-item.danger:focus-within>td,.log-item.danger:hover>td{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.dark .log-item.danger.active>td,.dark .log-item.danger:focus-within>td,.dark .log-item.danger:hover>td{--tw-bg-opacity:0.4;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.log-item.danger .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.dark .log-item.danger .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.log-item.danger .log-level{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.dark .log-item.danger .log-level{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.log-item.none.active>td,.log-item.none:focus-within>td,.log-item.none:hover>td{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.dark .log-item.none.active>td,.dark .log-item.none:focus-within>td,.dark .log-item.none:hover>td{--tw-bg-opacity:0.4;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.log-item.none .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.dark .log-item.none .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.log-item.none .log-level{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.dark .log-item.none .log-level{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-item:hover .log-level-icon{opacity:1}.badge{align-items:center;border-radius:.375rem;cursor:pointer;display:inline-flex;font-size:.875rem;line-height:1.25rem;margin-right:.5rem;margin-top:.25rem;padding:.25rem .75rem;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.badge.success{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity));border-color:rgb(167 243 208/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .badge.success{--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity));border-color:rgb(6 95 70/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.success:hover{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.dark .badge.success:hover{--tw-bg-opacity:0.75;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.badge.success .checkmark{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.dark .badge.success .checkmark{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.badge.success.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity));border-color:rgb(4 120 87/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.dark .badge.success.active{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity));border-color:rgb(5 150 105/var(--tw-border-opacity))}.badge.success.active:hover{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.dark .badge.success.active:hover{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.badge.success.active .checkmark{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.dark .badge.success.active .checkmark{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity));border-color:rgb(4 120 87/var(--tw-border-opacity))}.badge.success.active .checkmark>svg{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.dark .badge.success.active .checkmark>svg{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.badge.info{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity));border-color:rgb(186 230 253/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .badge.info{--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity));border-color:rgb(7 89 133/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.info:hover{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.dark .badge.info:hover{--tw-bg-opacity:0.75;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.badge.info .checkmark{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.dark .badge.info .checkmark{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.badge.info.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity));border-color:rgb(3 105 161/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.dark .badge.info.active{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity));border-color:rgb(2 132 199/var(--tw-border-opacity))}.badge.info.active:hover{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.dark .badge.info.active:hover{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.badge.info.active .checkmark{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.dark .badge.info.active .checkmark{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity));border-color:rgb(3 105 161/var(--tw-border-opacity))}.badge.info.active .checkmark>svg{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.dark .badge.info.active .checkmark>svg{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.badge.warning{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity));border-color:rgb(253 230 138/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .badge.warning{--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity));border-color:rgb(146 64 14/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.warning:hover{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.dark .badge.warning:hover{--tw-bg-opacity:0.75;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.badge.warning .checkmark{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.dark .badge.warning .checkmark{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.badge.warning.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity));border-color:rgb(180 83 9/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.dark .badge.warning.active{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity));border-color:rgb(217 119 6/var(--tw-border-opacity))}.badge.warning.active:hover{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.dark .badge.warning.active:hover{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.badge.warning.active .checkmark{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.dark .badge.warning.active .checkmark{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity));border-color:rgb(180 83 9/var(--tw-border-opacity))}.badge.warning.active .checkmark>svg{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.dark .badge.warning.active .checkmark>svg{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.badge.danger{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity));border-color:rgb(254 205 211/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .badge.danger{--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity));border-color:rgb(159 18 57/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.danger:hover{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.dark .badge.danger:hover{--tw-bg-opacity:0.75;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.badge.danger .checkmark{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.dark .badge.danger .checkmark{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.badge.danger.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity));border-color:rgb(190 18 60/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.dark .badge.danger.active{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity));border-color:rgb(225 29 72/var(--tw-border-opacity))}.badge.danger.active:hover{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.dark .badge.danger.active:hover{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.badge.danger.active .checkmark{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.dark .badge.danger.active .checkmark{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity));border-color:rgb(190 18 60/var(--tw-border-opacity))}.badge.danger.active .checkmark>svg{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.dark .badge.danger.active .checkmark>svg{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.badge.none{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-color:rgb(228 228 231/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .badge.none{--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));border-color:rgb(39 39 42/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.none:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.dark .badge.none:hover{--tw-bg-opacity:0.75;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.badge.none .checkmark{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.dark .badge.none .checkmark{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.badge.none.active{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:rgb(39 39 42/var(--tw-text-opacity))}.dark .badge.none.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(82 82 91/var(--tw-border-opacity));color:rgb(244 244 245/var(--tw-text-opacity))}.badge.none.active:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.dark .badge.none.active:hover{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.badge.none.active .checkmark{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.dark .badge.none.active .checkmark{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity))}.badge.none.active .checkmark>svg{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .badge.none.active .checkmark>svg{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.log-list table>thead th{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));color:rgb(113 113 122/var(--tw-text-opacity));font-size:.875rem;font-weight:600;line-height:1.25rem;padding:.5rem;position:sticky;text-align:left;top:0;z-index:10}.file-list .folder-container .folder-item-container.log-list table>thead th{position:sticky}.dark .log-list table>thead th{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.log-list .log-group{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));position:relative}.dark .log-list .log-group{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));color:rgb(228 228 231/var(--tw-text-opacity))}.log-list .log-group .log-item>td{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity));border-top-width:1px;font-size:.75rem;line-height:1rem;padding:.375rem .25rem}.dark .log-list .log-group .log-item>td{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .log-item>td{font-size:.875rem;line-height:1.25rem;padding:.5rem}}.log-list .log-group.first .log-item>td{border-top-color:transparent}.log-list .log-group .log-stack{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity));font-size:10px;line-height:.75rem;padding:.25rem .5rem;white-space:pre-wrap;word-break:break-all}.dark .log-list .log-group .log-stack{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .log-stack{font-size:.75rem;line-height:1rem;padding:.5rem 2rem}}.log-list .log-group .log-link{align-items:center;border-radius:.25rem;display:flex;justify-content:flex-end;margin-bottom:-.125rem;margin-top:-.125rem;padding-bottom:.125rem;padding-left:.25rem;padding-top:.125rem;width:100%}@media (min-width:640px){.log-list .log-group .log-link{min-width:64px}}.log-list .log-group .log-link>svg{height:1rem;margin-left:.25rem;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1rem}.log-list .log-group .log-link:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .log-list .log-group .log-link:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.log-list .log-group code,.log-list .log-group mark{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity));border-radius:.25rem;color:rgb(24 24 27/var(--tw-text-opacity));padding:.125rem .25rem}.dark .log-list .log-group code,.dark .log-list .log-group mark{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.pagination{align-items:center;display:flex;justify-content:center;width:100%}@media (min-width:640px){.pagination{margin-top:.5rem;padding-left:1rem;padding-right:1rem}}@media (min-width:1024px){.pagination{padding-left:0;padding-right:0}}.pagination .previous{display:flex;flex:1 1 0%;justify-content:flex-start;margin-top:-1px;width:0}@media (min-width:768px){.pagination .previous{justify-content:flex-end}}.pagination .previous button{--tw-text-opacity:1;align-items:center;border-color:transparent;border-top-width:2px;color:rgb(113 113 122/var(--tw-text-opacity));display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-right:.25rem;padding-top:.75rem}.dark .pagination .previous button{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.pagination .previous button:hover{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity));color:rgb(63 63 70/var(--tw-text-opacity))}.dark .pagination .previous button:hover{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.pagination .previous button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .pagination .previous button:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.pagination .previous button svg{color:currentColor;height:1.25rem;margin-left:.75rem;margin-right:.75rem;width:1.25rem}.pagination .next{display:flex;flex:1 1 0%;justify-content:flex-end;margin-top:-1px;width:0}@media (min-width:768px){.pagination .next{justify-content:flex-start}}.pagination .next button{--tw-text-opacity:1;align-items:center;border-color:transparent;border-top-width:2px;color:rgb(113 113 122/var(--tw-text-opacity));display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-left:.25rem;padding-top:.75rem}.dark .pagination .next button{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.pagination .next button:hover{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity));color:rgb(63 63 70/var(--tw-text-opacity))}.dark .pagination .next button:hover{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.pagination .next button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .pagination .next button:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.pagination .next button svg{color:currentColor;height:1.25rem;margin-left:.75rem;margin-right:.75rem;width:1.25rem}.pagination .pages{display:none}@media (min-width:640px){.pagination .pages{display:flex;margin-top:-1px}}.pagination .pages span{--tw-text-opacity:1;align-items:center;border-color:transparent;border-top-width:2px;color:rgb(113 113 122/var(--tw-text-opacity));display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-left:1rem;padding-right:1rem;padding-top:.75rem}.dark .pagination .pages span{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.pagination .pages button{align-items:center;border-top-width:2px;display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-left:1rem;padding-right:1rem;padding-top:.75rem}.pagination .pages button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .pagination .pages button:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.search{--tw-border-opacity:1;--tw-bg-opacity:1;align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(212 212 216/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;display:flex;font-size:.875rem;line-height:1.25rem;position:relative;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.dark .search{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(82 82 91/var(--tw-border-opacity));color:rgb(244 244 245/var(--tw-text-opacity))}.search .prefix-icon{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));margin-left:.75rem;margin-right:.25rem}.dark .search .prefix-icon{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.search input{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:transparent;background-color:inherit;border-radius:.25rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);flex:1 1 0%;padding:.25rem;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.search input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-color:transparent;outline:2px solid transparent;outline-offset:2px}.dark .search input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.search.has-error{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.search .submit-search button{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-bottom-right-radius:.25rem;border-top-right-radius:.25rem;color:rgb(82 82 91/var(--tw-text-opacity));display:flex;padding:.5rem;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dark .search .submit-search button{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity));color:rgb(212 212 216/var(--tw-text-opacity))}.search .submit-search button:hover{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.dark .search .submit-search button:hover{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.search .submit-search button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .search .submit-search button:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.search .submit-search button>svg{height:1.25rem;margin-left:.25rem;opacity:.75;width:1.25rem}.search .clear-search{position:absolute;right:0;top:0}.search .clear-search button{--tw-text-opacity:1;border-radius:.25rem;color:rgb(161 161 170/var(--tw-text-opacity));padding:.25rem;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dark .search .clear-search button{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.search .clear-search button:hover{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .search .clear-search button:hover{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.search .clear-search button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .search .clear-search button:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.search .clear-search button>svg{height:1.25rem;width:1.25rem}.search-progress-bar{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));border-radius:.25rem;height:.125rem;position:absolute;top:.25rem;transition-duration:.3s;transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:linear}.dark .search-progress-bar{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.dropdown{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(228 228 231/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(24 24 27/var(--tw-text-opacity));margin-top:-.25rem;overflow:hidden;position:absolute;right:.25rem;top:100%;z-index:40}.dark .dropdown{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity));color:rgb(228 228 231/var(--tw-text-opacity))}.dropdown{transform-origin:top right!important}.dropdown:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));--tw-ring-opacity:0.5;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .dropdown:focus{--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity));--tw-ring-opacity:0.5}.dropdown.up{bottom:100%;margin-bottom:-.25rem;margin-top:0;top:auto;transform-origin:bottom right!important}.dropdown.left{left:.25rem;right:auto;transform-origin:top left!important}.dropdown.left.up{transform-origin:bottom left!important}.dropdown a:not(.inline-link),.dropdown button:not(.inline-link){align-items:center;display:block;display:flex;font-size:.875rem;line-height:1.25rem;outline-color:#0ea5e9;padding:.5rem 1rem;text-align:left;width:100%}.dark .dropdown a:not(.inline-link),.dark .dropdown button:not(.inline-link){outline-color:#075985}.dropdown a:not(.inline-link)>svg,.dropdown button:not(.inline-link)>svg{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));height:1rem;margin-right:.75rem;width:1rem}.dropdown a:not(.inline-link)>svg.spin,.dropdown button:not(.inline-link)>svg.spin{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.dropdown a.active,.dropdown a:hover,.dropdown button.active,.dropdown button:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.dropdown a.active>.checkmark,.dropdown a:hover>.checkmark,.dropdown button.active>.checkmark,.dropdown button:hover>.checkmark{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.dark .dropdown a.active>.checkmark,.dark .dropdown a:hover>.checkmark,.dark .dropdown button.active>.checkmark,.dark .dropdown button:hover>.checkmark{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.dropdown a.active>svg,.dropdown a:hover>svg,.dropdown button.active>svg,.dropdown button:hover>svg{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dropdown .divider{border-top-width:1px;margin-bottom:.5rem;margin-top:.5rem;width:100%}.dark .dropdown .divider{--tw-border-opacity:1;border-top-color:rgb(63 63 70/var(--tw-border-opacity))}.dropdown .label{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));font-size:.75rem;font-weight:600;line-height:1rem;margin:.25rem 1rem}.file-list{height:100%;overflow-y:auto;padding-bottom:1rem;padding-left:.75rem;padding-right:.75rem;position:relative}@media (min-width:768px){.file-list{padding-left:0;padding-right:0}}.file-list .file-item-container,.file-list .folder-item-container{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;color:rgb(39 39 42/var(--tw-text-opacity));margin-top:.5rem;position:relative;top:0}.dark .file-list .file-item-container,.dark .file-list .folder-item-container{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));color:rgb(228 228 231/var(--tw-text-opacity))}.file-list .file-item-container .file-item,.file-list .folder-item-container .file-item{border-color:transparent;border-radius:.375rem;border-width:1px;cursor:pointer;position:relative;transition-duration:.1s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.file-list .file-item-container .file-item,.file-list .file-item-container .file-item .file-item-info,.file-list .folder-item-container .file-item,.file-list .folder-item-container .file-item .file-item-info{align-items:center;display:flex;justify-content:space-between;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter}.file-list .file-item-container .file-item .file-item-info,.file-list .folder-item-container .file-item .file-item-info{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem;flex:1 1 0%;outline-color:#0ea5e9;padding:.5rem .75rem .5rem 1rem;text-align:left;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dark .file-list .file-item-container .file-item .file-item-info,.dark .file-list .folder-item-container .file-item .file-item-info{outline-color:#0369a1}.file-list .file-item-container .file-item .file-item-info:hover,.file-list .folder-item-container .file-item .file-item-info:hover{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.dark .file-list .file-item-container .file-item .file-item-info:hover,.dark .file-list .folder-item-container .file-item .file-item-info:hover{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.file-list .file-item-container .file-item .file-icon,.file-list .folder-item-container .file-item .file-icon{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));margin-right:.5rem}.dark .file-list .file-item-container .file-item .file-icon,.dark .file-list .folder-item-container .file-item .file-icon{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.file-list .file-item-container .file-item .file-icon>svg,.file-list .folder-item-container .file-item .file-icon>svg{height:1rem;width:1rem}.file-list .file-item-container .file-item .file-name,.file-list .folder-item-container .file-item .file-name{font-size:.875rem;line-height:1.25rem;margin-right:.75rem;width:100%;word-break:break-word}.file-list .file-item-container .file-item .file-size,.file-list .folder-item-container .file-item .file-size{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity));font-size:.75rem;line-height:1rem;white-space:nowrap}.dark .file-list .file-item-container .file-item .file-size,.dark .file-list .folder-item-container .file-item .file-size{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity));opacity:.9}.file-list .file-item-container.active .file-item,.file-list .folder-item-container.active .file-item{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity));border-color:rgb(14 165 233/var(--tw-border-opacity))}.dark .file-list .file-item-container.active .file-item,.dark .file-list .folder-item-container.active .file-item{--tw-border-opacity:1;--tw-bg-opacity:0.4;background-color:rgb(12 74 110/var(--tw-bg-opacity));border-color:rgb(12 74 110/var(--tw-border-opacity))}.file-list .file-item-container.active-folder .file-item,.file-list .folder-item-container.active-folder .file-item{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.dark .file-list .file-item-container.active-folder .file-item,.dark .file-list .folder-item-container.active-folder .file-item{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.file-list .file-item-container:hover .file-item,.file-list .folder-item-container:hover .file-item{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.dark .file-list .file-item-container:hover .file-item,.dark .file-list .folder-item-container:hover .file-item{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.file-list .file-item-container .file-dropdown-toggle,.file-list .folder-item-container .file-dropdown-toggle{--tw-text-opacity:1;align-items:center;align-self:stretch;border-bottom-right-radius:.375rem;border-color:transparent;border-left-width:1px;border-top-right-radius:.375rem;color:rgb(113 113 122/var(--tw-text-opacity));display:flex;justify-content:center;outline-color:#0ea5e9;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2rem}.dark .file-list .file-item-container .file-dropdown-toggle,.dark .file-list .folder-item-container .file-dropdown-toggle{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));outline-color:#0369a1}.file-list .file-item-container .file-dropdown-toggle:hover,.file-list .folder-item-container .file-dropdown-toggle:hover{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity));border-color:rgb(2 132 199/var(--tw-border-opacity))}.dark .file-list .file-item-container .file-dropdown-toggle:hover,.dark .file-list .folder-item-container .file-dropdown-toggle:hover{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity));border-color:rgb(7 89 133/var(--tw-border-opacity))}.file-list .folder-container .folder-item-container.sticky{position:sticky}.file-list .folder-container:first-child>.folder-item-container{margin-top:0}.menu-button{--tw-text-opacity:1;border-radius:.375rem;color:rgb(161 161 170/var(--tw-text-opacity));cursor:pointer;outline-color:#0ea5e9;padding:.5rem;position:relative;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.menu-button:hover{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.dark .menu-button:hover{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.menu-button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .menu-button:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}a.button,button.button{--tw-text-opacity:1;align-items:center;border-radius:.375rem;color:rgb(24 24 27/var(--tw-text-opacity));display:block;display:flex;font-size:.875rem;line-height:1.25rem;outline-color:#0ea5e9;padding:.5rem 1rem;text-align:left;width:100%}.dark a.button,.dark button.button{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity));outline-color:#075985}a.button>svg,button.button>svg{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity));height:1rem;width:1rem}.dark a.button>svg,.dark button.button>svg{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}a.button>svg.spin,button.button>svg.spin{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}a.button:hover,button.button:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.dark a.button:hover,.dark button.button:hover{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.select{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-radius:.25rem;color:rgb(63 63 70/var(--tw-text-opacity));font-weight:400;margin-bottom:-.125rem;margin-top:-.125rem;outline:2px solid transparent;outline-offset:2px;padding:.125rem .25rem}.dark .select{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));color:rgb(212 212 216/var(--tw-text-opacity))}.select:hover{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.dark .select:hover{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.select:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.dark .select:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.keyboard-shortcut{--tw-text-opacity:1;align-items:center;color:rgb(82 82 91/var(--tw-text-opacity));display:flex;font-size:.875rem;justify-content:flex-start;line-height:1.25rem;margin-bottom:.75rem;width:100%}.dark .keyboard-shortcut{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.keyboard-shortcut .shortcut{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(244 244 245/var(--tw-ring-opacity));align-items:center;border-color:rgb(161 161 170/var(--tw-border-opacity));border-radius:.25rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:inline-flex;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1rem;height:1.5rem;justify-content:center;line-height:1.5rem;margin-right:.5rem;width:1.5rem}.dark .keyboard-shortcut .shortcut{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(24 24 27/var(--tw-ring-opacity));border-color:rgb(82 82 91/var(--tw-border-opacity))}.hover\:border-brand-600:hover{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:text-brand-800:hover{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.focus\:border-brand-500:focus{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-brand-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.group:hover .group-hover\:inline-block{display:inline-block}.group:hover .group-hover\:hidden{display:none}.group:hover .group-hover\:border-brand-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.group:hover .group-hover\:underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.group:hover .group-hover\:opacity-100{opacity:1}.group:focus .group-focus\:inline-block{display:inline-block}.group:focus .group-focus\:hidden{display:none}.dark .dark\:border-gray-600{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.dark .dark\:border-yellow-800{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.dark .dark\:border-gray-800{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.dark .dark\:border-gray-700{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.dark .dark\:border-brand-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.dark .dark\:bg-gray-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.dark .dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.dark .dark\:bg-yellow-900{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.dark .dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.dark .dark\:bg-opacity-40{--tw-bg-opacity:0.4}.dark .dark\:from-gray-900{--tw-gradient-from:#18181b;--tw-gradient-to:rgba(24,24,27,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.dark .dark\:text-brand-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.dark .dark\:text-gray-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.dark .dark\:text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.dark .dark\:text-gray-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.dark .dark\:text-gray-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.dark .dark\:text-brand-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.dark .dark\:text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.dark .dark\:opacity-90{opacity:.9}.dark .dark\:outline-brand-800{outline-color:#075985}.dark .hover\:dark\:border-brand-800:hover{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.dark .dark\:hover\:border-brand-700:hover{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.dark .dark\:hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.dark .dark\:hover\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.dark .dark\:hover\:text-brand-600:hover{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.dark .dark\:hover\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.dark .dark\:focus\:ring-brand-700:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.group:hover .dark .group-hover\:dark\:border-brand-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}@media (min-width:640px){.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:flex-col-reverse{flex-direction:column-reverse}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:duration-300{transition-duration:.3s}}@media (min-width:768px){.md\:fixed{position:fixed}.md\:inset-y-0{bottom:0;top:0}.md\:left-0{left:0}.md\:left-auto{left:auto}.md\:right-auto{right:auto}.md\:mx-0{margin-left:0;margin-right:0}.md\:mx-3{margin-left:.75rem;margin-right:.75rem}.md\:mt-0{margin-top:0}.md\:block{display:block}.md\:inline{display:inline}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-88{width:22rem}.md\:flex-col{flex-direction:column}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:pl-88{padding-left:22rem}.md\:pb-12{padding-bottom:3rem}.md\:opacity-75{opacity:.75}}@media (min-width:1024px){.lg\:absolute{position:absolute}.lg\:left-0{left:0}.lg\:right-0{right:0}.lg\:top-2{top:.5rem}.lg\:right-6{right:1.5rem}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:mt-0{margin-top:0}.lg\:mb-0{margin-bottom:0}.lg\:block{display:block}.lg\:inline{display:inline}.lg\:table-cell{display:table-cell}.lg\:hidden{display:none}.lg\:w-auto{width:auto}.lg\:flex-row{flex-direction:row}.lg\:px-5{padding-left:1.25rem;padding-right:1.25rem}.lg\:pl-2{padding-left:.5rem}}@media (min-width:1280px){.xl\:inline{display:inline}} +/*! tailwindcss v3.3.5 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e4e4e7;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#a1a1aa;opacity:1}input::placeholder,textarea::placeholder{color:#a1a1aa;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{bottom:0;top:0}.-left-\[200\%\]{left:-200%}.bottom-0{bottom:0}.bottom-10{bottom:2.5rem}.bottom-4{bottom:1rem}.left-0{left:0}.left-3{left:.75rem}.right-0{right:0}.right-4{right:1rem}.right-7{right:1.75rem}.right-\[200\%\]{right:200%}.top-0{top:0}.top-9{top:2.25rem}.z-10{z-index:10}.z-20{z-index:20}.m-1{margin:.25rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-1\.5{margin-left:.375rem;margin-right:.375rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.my-auto{margin-bottom:auto;margin-top:auto}.-mb-0{margin-bottom:0}.-mb-0\.5{margin-bottom:-.125rem}.-mb-px{margin-bottom:-1px}.-mr-2{margin-right:-.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-5{margin-left:1.25rem}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-2\.5{margin-right:.625rem}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-0{height:0}.h-14{height:3.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-\[18px\]{height:18px}.h-full{height:100%}.max-h-60{max-height:15rem}.max-h-screen{max-height:100vh}.min-h-\[38px\]{min-height:38px}.min-h-screen{min-height:100vh}.w-14{width:3.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-\[18px\]{width:18px}.w-full{width:100%}.w-screen{width:100vw}.min-w-\[240px\]{min-width:240px}.min-w-full{min-width:100%}.max-w-\[1px\]{max-width:1px}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.shrink{flex-shrink:1}.table-fixed{table-layout:fixed}.border-separate{border-collapse:separate}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%}.rotate-90{--tw-rotate:90deg}.rotate-90,.scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-flow-col{grid-auto-flow:column}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-brand-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.bg-brand-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.bg-opacity-75{--tw-bg-opacity:0.75}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-gray-100{--tw-gradient-from:#f4f4f5 var(--tw-gradient-from-position);--tw-gradient-to:hsla(240,5%,96%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.p-12{padding:3rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pb-1{padding-bottom:.25rem}.pb-16{padding-bottom:4rem}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pr-9{padding-right:2.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.text-brand-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.text-brand-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.text-brand-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-brand-500{outline-color:#0ea5e9}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-opacity-5{--tw-ring-opacity:0.05}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.spin{-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:spin;-moz-animation-name:spin;-ms-animation-name:spin;animation-name:spin;-webkit-animation-timing-function:linear;-moz-animation-timing-function:linear;-ms-animation-timing-function:linear;animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}html.dark{color-scheme:dark}#bmc-wbtn{height:48px!important;width:48px!important}#bmc-wbtn>img{height:32px!important;width:32px!important}.log-levels-selector .dropdown-toggle{white-space:nowrap}.log-levels-selector .dropdown-toggle:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .log-levels-selector .dropdown-toggle:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.log-levels-selector .dropdown-toggle>svg{height:1rem;margin-left:.25rem;opacity:.75;width:1rem}.log-levels-selector .dropdown .log-level{font-weight:600}.log-levels-selector .dropdown .log-level.success{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}:is(.dark .log-levels-selector .dropdown .log-level.success){--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.info{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}:is(.dark .log-levels-selector .dropdown .log-level.info){--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.warning{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}:is(.dark .log-levels-selector .dropdown .log-level.warning){--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.danger{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}:is(.dark .log-levels-selector .dropdown .log-level.danger){--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.none{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}:is(.dark .log-levels-selector .dropdown .log-level.none){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-count{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity));margin-left:2rem;white-space:nowrap}:is(.dark .log-levels-selector .dropdown .log-count){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.success{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.info{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.warning{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.danger{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.none{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-count{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}:is(.dark .log-levels-selector .dropdown button.active .log-count){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.log-levels-selector .dropdown .no-results{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity));font-size:.75rem;line-height:1rem;padding:.25rem 1rem;text-align:center}:is(.dark .log-levels-selector .dropdown .no-results){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-item{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));cursor:pointer;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}:is(.dark .log-item){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.log-item.success.active>td,.log-item.success:focus-within>td,.log-item.success:hover>td{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}:is(.dark .log-item.success.active>td),:is(.dark .log-item.success:focus-within>td),:is(.dark .log-item.success:hover>td){--tw-bg-opacity:0.4;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.log-item.success .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}:is(.dark .log-item.success .log-level-indicator){--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.log-item.success .log-level{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}:is(.dark .log-item.success .log-level){--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.log-item.info.active>td,.log-item.info:focus-within>td,.log-item.info:hover>td{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}:is(.dark .log-item.info.active>td),:is(.dark .log-item.info:focus-within>td),:is(.dark .log-item.info:hover>td){--tw-bg-opacity:0.4;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.log-item.info .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}:is(.dark .log-item.info .log-level-indicator){--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.log-item.info .log-level{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}:is(.dark .log-item.info .log-level){--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.log-item.warning.active>td,.log-item.warning:focus-within>td,.log-item.warning:hover>td{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}:is(.dark .log-item.warning.active>td),:is(.dark .log-item.warning:focus-within>td),:is(.dark .log-item.warning:hover>td){--tw-bg-opacity:0.4;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.log-item.warning .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}:is(.dark .log-item.warning .log-level-indicator){--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.log-item.warning .log-level{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}:is(.dark .log-item.warning .log-level){--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.log-item.danger.active>td,.log-item.danger:focus-within>td,.log-item.danger:hover>td{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}:is(.dark .log-item.danger.active>td),:is(.dark .log-item.danger:focus-within>td),:is(.dark .log-item.danger:hover>td){--tw-bg-opacity:0.4;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.log-item.danger .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}:is(.dark .log-item.danger .log-level-indicator){--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.log-item.danger .log-level{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}:is(.dark .log-item.danger .log-level){--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.log-item.none.active>td,.log-item.none:focus-within>td,.log-item.none:hover>td{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:is(.dark .log-item.none.active>td),:is(.dark .log-item.none:focus-within>td),:is(.dark .log-item.none:hover>td){--tw-bg-opacity:0.4;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.log-item.none .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}:is(.dark .log-item.none .log-level-indicator){--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.log-item.none .log-level{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}:is(.dark .log-item.none .log-level){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-item:hover .log-level-icon{opacity:1}.badge{align-items:center;border-radius:.375rem;cursor:pointer;display:inline-flex;font-size:.875rem;line-height:1.25rem;margin-right:.5rem;margin-top:.25rem;padding:.25rem .75rem;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.badge.success{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity));border-color:rgb(167 243 208/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .badge.success){--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity));border-color:rgb(6 95 70/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.success:hover{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}:is(.dark .badge.success:hover){--tw-bg-opacity:0.75;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.badge.success .checkmark{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}:is(.dark .badge.success .checkmark){--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.badge.success.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity));border-color:rgb(4 120 87/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .badge.success.active){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity));border-color:rgb(5 150 105/var(--tw-border-opacity))}.badge.success.active:hover{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}:is(.dark .badge.success.active:hover){--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.badge.success.active .checkmark{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}:is(.dark .badge.success.active .checkmark){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity));border-color:rgb(4 120 87/var(--tw-border-opacity))}.badge.success.active .checkmark>svg{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}:is(.dark .badge.success.active .checkmark>svg){--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.badge.info{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity));border-color:rgb(186 230 253/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .badge.info){--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity));border-color:rgb(7 89 133/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.info:hover{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}:is(.dark .badge.info:hover){--tw-bg-opacity:0.75;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.badge.info .checkmark{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}:is(.dark .badge.info .checkmark){--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.badge.info.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity));border-color:rgb(3 105 161/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .badge.info.active){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity));border-color:rgb(2 132 199/var(--tw-border-opacity))}.badge.info.active:hover{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}:is(.dark .badge.info.active:hover){--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.badge.info.active .checkmark{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}:is(.dark .badge.info.active .checkmark){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity));border-color:rgb(3 105 161/var(--tw-border-opacity))}.badge.info.active .checkmark>svg{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}:is(.dark .badge.info.active .checkmark>svg){--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.badge.warning{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity));border-color:rgb(253 230 138/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .badge.warning){--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity));border-color:rgb(146 64 14/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.warning:hover{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}:is(.dark .badge.warning:hover){--tw-bg-opacity:0.75;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.badge.warning .checkmark{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}:is(.dark .badge.warning .checkmark){--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.badge.warning.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity));border-color:rgb(180 83 9/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .badge.warning.active){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity));border-color:rgb(217 119 6/var(--tw-border-opacity))}.badge.warning.active:hover{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}:is(.dark .badge.warning.active:hover){--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.badge.warning.active .checkmark{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}:is(.dark .badge.warning.active .checkmark){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity));border-color:rgb(180 83 9/var(--tw-border-opacity))}.badge.warning.active .checkmark>svg{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}:is(.dark .badge.warning.active .checkmark>svg){--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.badge.danger{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity));border-color:rgb(254 205 211/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .badge.danger){--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity));border-color:rgb(159 18 57/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.danger:hover{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}:is(.dark .badge.danger:hover){--tw-bg-opacity:0.75;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.badge.danger .checkmark{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}:is(.dark .badge.danger .checkmark){--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.badge.danger.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity));border-color:rgb(190 18 60/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .badge.danger.active){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity));border-color:rgb(225 29 72/var(--tw-border-opacity))}.badge.danger.active:hover{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}:is(.dark .badge.danger.active:hover){--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.badge.danger.active .checkmark{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}:is(.dark .badge.danger.active .checkmark){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity));border-color:rgb(190 18 60/var(--tw-border-opacity))}.badge.danger.active .checkmark>svg{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}:is(.dark .badge.danger.active .checkmark>svg){--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.badge.none{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-color:rgb(228 228 231/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .badge.none){--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));border-color:rgb(39 39 42/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.none:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:is(.dark .badge.none:hover){--tw-bg-opacity:0.75;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.badge.none .checkmark{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}:is(.dark .badge.none .checkmark){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.badge.none.active{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:rgb(39 39 42/var(--tw-text-opacity))}:is(.dark .badge.none.active){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(82 82 91/var(--tw-border-opacity));color:rgb(244 244 245/var(--tw-text-opacity))}.badge.none.active:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:is(.dark .badge.none.active:hover){--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.badge.none.active .checkmark{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}:is(.dark .badge.none.active .checkmark){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity))}.badge.none.active .checkmark>svg{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .badge.none.active .checkmark>svg){--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.log-list table>thead th{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));color:rgb(113 113 122/var(--tw-text-opacity));font-size:.75rem;font-weight:600;line-height:1rem;padding:.5rem .25rem;position:sticky;text-align:left;top:0;z-index:10}.file-list .folder-container .folder-item-container.log-list table>thead th{position:sticky}:is(.dark .log-list table>thead th){--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}@media (min-width:1024px){.log-list table>thead th{font-size:.875rem;line-height:1.25rem;padding-left:.5rem;padding-right:.5rem}}.log-list .log-group{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));position:relative}:is(.dark .log-list .log-group){--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));color:rgb(228 228 231/var(--tw-text-opacity))}.log-list .log-group .log-item>td{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity));border-top-width:1px;font-size:.75rem;line-height:1rem;padding:.375rem .25rem}:is(.dark .log-list .log-group .log-item>td){--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .log-item>td{font-size:.875rem;line-height:1.25rem;padding:.5rem}}.log-list .log-group.first .log-item>td{border-top-color:transparent}.log-list .log-group .mail-preview-attributes{--tw-border-opacity:1;background-color:rgba(240,249,255,.3);border-color:rgb(224 242 254/var(--tw-border-opacity));border-radius:.25rem;border-width:1px;font-size:.75rem;line-height:1rem;margin-bottom:1rem;overflow-x:auto;width:100%}:is(.dark .log-list .log-group .mail-preview-attributes){--tw-border-opacity:1;background-color:rgba(12,74,110,.2);border-color:rgb(7 89 133/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .mail-preview-attributes{font-size:.875rem;line-height:1.25rem;margin-bottom:1.5rem;overflow:hidden}}.log-list .log-group .mail-preview-attributes table{width:100%}.log-list .log-group .mail-preview-attributes td{padding:.25rem .5rem}@media (min-width:1024px){.log-list .log-group .mail-preview-attributes td{padding:.5rem 1.5rem}}.log-list .log-group .mail-preview-attributes td:not(:first-child){overflow-wrap:anywhere}.log-list .log-group .mail-preview-attributes tr:first-child td{padding-top:.375rem}@media (min-width:1024px){.log-list .log-group .mail-preview-attributes tr:first-child td{padding-top:.75rem}}.log-list .log-group .mail-preview-attributes tr:last-child td{padding-bottom:.375rem}@media (min-width:1024px){.log-list .log-group .mail-preview-attributes tr:last-child td{padding-bottom:.75rem}}.log-list .log-group .mail-preview-attributes tr:not(:last-child) td{--tw-border-opacity:1;border-bottom-width:1px;border-color:rgb(224 242 254/var(--tw-border-opacity))}:is(.dark .log-list .log-group .mail-preview-attributes tr:not(:last-child) td){--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.log-list .log-group .mail-preview-html{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity));border-color:rgb(228 228 231/var(--tw-border-opacity));border-radius:.25rem;border-width:1px;margin-bottom:1rem;overflow:auto;width:100%}:is(.dark .log-list .log-group .mail-preview-html){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .mail-preview-html{margin-bottom:1.5rem}}.log-list .log-group .mail-preview-text{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity));border-color:rgb(228 228 231/var(--tw-border-opacity));border-radius:.25rem;border-width:1px;font-size:.875rem;line-height:1.25rem;margin-bottom:1rem;padding:1rem;white-space:pre-wrap;width:100%}:is(.dark .log-list .log-group .mail-preview-text){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .mail-preview-text{margin-bottom:1.5rem}}.log-list .log-group .mail-attachment-button{--tw-bg-opacity:1;align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.25rem;border-width:1px;display:flex;justify-content:space-between;padding:.25rem .5rem}:is(.dark .log-list .log-group .mail-attachment-button){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .mail-attachment-button{padding:.5rem 1rem}}.log-list .log-group .mail-attachment-button{max-width:460px}.log-list .log-group .mail-attachment-button:not(:last-child){margin-bottom:.5rem}.log-list .log-group .mail-attachment-button a:focus{outline-color:#0ea5e9}.log-list .log-group .tabs-container{font-size:.75rem;line-height:1rem}@media (min-width:1024px){.log-list .log-group .tabs-container{font-size:.875rem;line-height:1.25rem}}.log-list .log-group .log-stack,.log-list .log-group .mail-preview,.log-list .log-group .tabs-container{padding:.25rem .5rem}@media (min-width:1024px){.log-list .log-group .log-stack,.log-list .log-group .mail-preview,.log-list .log-group .tabs-container{padding:.5rem 2rem}}.log-list .log-group .log-stack{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity));font-size:10px;line-height:.75rem;white-space:pre-wrap;word-break:break-all}:is(.dark .log-list .log-group .log-stack){--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .log-stack{font-size:.75rem;line-height:1rem}}.log-list .log-group .log-link{align-items:center;border-radius:.25rem;display:flex;justify-content:flex-end;margin-bottom:-.125rem;margin-top:-.125rem;padding-bottom:.125rem;padding-left:.25rem;padding-top:.125rem;width:100%}@media (min-width:640px){.log-list .log-group .log-link{min-width:64px}}.log-list .log-group .log-link>svg{height:1rem;margin-left:.25rem;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1rem}.log-list .log-group .log-link:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .log-list .log-group .log-link:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.log-list .log-group code,.log-list .log-group mark{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity));border-radius:.25rem;color:rgb(24 24 27/var(--tw-text-opacity));padding:.125rem .25rem}:is(.dark .log-list .log-group code),:is(.dark .log-list .log-group mark){--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.pagination{align-items:center;display:flex;justify-content:center;width:100%}@media (min-width:640px){.pagination{margin-top:.5rem;padding-left:1rem;padding-right:1rem}}@media (min-width:1024px){.pagination{padding-left:0;padding-right:0}}.pagination .previous{display:flex;flex:1 1 0%;justify-content:flex-start;margin-top:-1px;width:0}@media (min-width:768px){.pagination .previous{justify-content:flex-end}}.pagination .previous button{--tw-text-opacity:1;align-items:center;border-color:transparent;border-top-width:2px;color:rgb(113 113 122/var(--tw-text-opacity));display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-right:.25rem;padding-top:.75rem}:is(.dark .pagination .previous button){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.pagination .previous button:hover{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity));color:rgb(63 63 70/var(--tw-text-opacity))}:is(.dark .pagination .previous button:hover){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.pagination .previous button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .pagination .previous button:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.pagination .previous button svg{color:currentColor;height:1.25rem;margin-left:.75rem;margin-right:.75rem;width:1.25rem}.pagination .next{display:flex;flex:1 1 0%;justify-content:flex-end;margin-top:-1px;width:0}@media (min-width:768px){.pagination .next{justify-content:flex-start}}.pagination .next button{--tw-text-opacity:1;align-items:center;border-color:transparent;border-top-width:2px;color:rgb(113 113 122/var(--tw-text-opacity));display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-left:.25rem;padding-top:.75rem}:is(.dark .pagination .next button){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.pagination .next button:hover{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity));color:rgb(63 63 70/var(--tw-text-opacity))}:is(.dark .pagination .next button:hover){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.pagination .next button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .pagination .next button:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.pagination .next button svg{color:currentColor;height:1.25rem;margin-left:.75rem;margin-right:.75rem;width:1.25rem}.pagination .pages{display:none}@media (min-width:640px){.pagination .pages{display:flex;margin-top:-1px}}.pagination .pages span{--tw-text-opacity:1;align-items:center;border-color:transparent;border-top-width:2px;color:rgb(113 113 122/var(--tw-text-opacity));display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-left:1rem;padding-right:1rem;padding-top:.75rem}:is(.dark .pagination .pages span){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.pagination .pages button{align-items:center;border-top-width:2px;display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-left:1rem;padding-right:1rem;padding-top:.75rem}.pagination .pages button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .pagination .pages button:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.search{--tw-border-opacity:1;--tw-bg-opacity:1;align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(212 212 216/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;display:flex;font-size:.875rem;line-height:1.25rem;position:relative;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}:is(.dark .search){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(82 82 91/var(--tw-border-opacity));color:rgb(244 244 245/var(--tw-text-opacity))}.search .prefix-icon{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));margin-left:.75rem;margin-right:.25rem}:is(.dark .search .prefix-icon){--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.search input{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:transparent;background-color:inherit;border-radius:.25rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);flex:1 1 0%;padding:.25rem;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.search input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-color:transparent;outline:2px solid transparent;outline-offset:2px}:is(.dark .search input:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.search.has-error{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.search .submit-search button{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-bottom-right-radius:.25rem;border-top-right-radius:.25rem;color:rgb(82 82 91/var(--tw-text-opacity));display:flex;padding:.5rem;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}:is(.dark .search .submit-search button){--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity));color:rgb(212 212 216/var(--tw-text-opacity))}.search .submit-search button:hover{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}:is(.dark .search .submit-search button:hover){--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.search .submit-search button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .search .submit-search button:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.search .submit-search button>svg{height:1.25rem;margin-left:.25rem;opacity:.75;width:1.25rem}.search .clear-search{position:absolute;right:0;top:0}.search .clear-search button{--tw-text-opacity:1;border-radius:.25rem;color:rgb(161 161 170/var(--tw-text-opacity));padding:.25rem;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}:is(.dark .search .clear-search button){--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.search .clear-search button:hover{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .search .clear-search button:hover){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.search .clear-search button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .search .clear-search button:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.search .clear-search button>svg{height:1.25rem;width:1.25rem}.search-progress-bar{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));border-radius:.25rem;height:.125rem;position:absolute;top:.25rem;transition-duration:.3s;transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:linear}:is(.dark .search-progress-bar){--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.dropdown{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(228 228 231/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(24 24 27/var(--tw-text-opacity));margin-top:-.25rem;overflow:hidden;position:absolute;right:.25rem;top:100%;z-index:40}:is(.dark .dropdown){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity));color:rgb(228 228 231/var(--tw-text-opacity))}.dropdown{transform-origin:top right!important}.dropdown:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));--tw-ring-opacity:0.5;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .dropdown:focus){--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity));--tw-ring-opacity:0.5}.dropdown.up{bottom:100%;margin-bottom:-.25rem;margin-top:0;top:auto;transform-origin:bottom right!important}.dropdown.left{left:.25rem;right:auto;transform-origin:top left!important}.dropdown.left.up{transform-origin:bottom left!important}.dropdown a:not(.inline-link),.dropdown button:not(.inline-link){align-items:center;display:block;display:flex;font-size:.875rem;line-height:1.25rem;outline-color:#0ea5e9;padding:.5rem 1rem;text-align:left;width:100%}:is(.dark .dropdown a:not(.inline-link)),:is(.dark .dropdown button:not(.inline-link)){outline-color:#075985}.dropdown a:not(.inline-link)>svg,.dropdown button:not(.inline-link)>svg{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));height:1rem;margin-right:.75rem;width:1rem}.dropdown a:not(.inline-link)>svg.spin,.dropdown button:not(.inline-link)>svg.spin{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.dropdown a.active,.dropdown a:hover,.dropdown button.active,.dropdown button:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.dropdown a.active>.checkmark,.dropdown a:hover>.checkmark,.dropdown button.active>.checkmark,.dropdown button:hover>.checkmark{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}:is(.dark .dropdown a.active>.checkmark),:is(.dark .dropdown a:hover>.checkmark),:is(.dark .dropdown button.active>.checkmark),:is(.dark .dropdown button:hover>.checkmark){--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.dropdown a.active>svg,.dropdown a:hover>svg,.dropdown button.active>svg,.dropdown button:hover>svg{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dropdown .divider{border-top-width:1px;margin-bottom:.5rem;margin-top:.5rem;width:100%}:is(.dark .dropdown .divider){--tw-border-opacity:1;border-top-color:rgb(63 63 70/var(--tw-border-opacity))}.dropdown .label{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));font-size:.75rem;font-weight:600;line-height:1rem;margin:.25rem 1rem}.file-list{height:100%;overflow-y:auto;padding-bottom:1rem;padding-left:.75rem;padding-right:.75rem;position:relative}@media (min-width:768px){.file-list{padding-left:0;padding-right:0}}.file-list .file-item-container,.file-list .folder-item-container{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;color:rgb(39 39 42/var(--tw-text-opacity));margin-top:.5rem;position:relative;top:0}:is(.dark .file-list .file-item-container),:is(.dark .file-list .folder-item-container){--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));color:rgb(228 228 231/var(--tw-text-opacity))}.file-list .file-item-container .file-item,.file-list .folder-item-container .file-item{border-color:transparent;border-radius:.375rem;border-width:1px;cursor:pointer;position:relative;transition-duration:.1s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.file-list .file-item-container .file-item,.file-list .file-item-container .file-item .file-item-info,.file-list .folder-item-container .file-item,.file-list .folder-item-container .file-item .file-item-info{align-items:center;display:flex;justify-content:space-between;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter}.file-list .file-item-container .file-item .file-item-info,.file-list .folder-item-container .file-item .file-item-info{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem;flex:1 1 0%;outline-color:#0ea5e9;padding:.5rem .75rem .5rem 1rem;text-align:left;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}:is(.dark .file-list .file-item-container .file-item .file-item-info),:is(.dark .file-list .folder-item-container .file-item .file-item-info){outline-color:#0369a1}.file-list .file-item-container .file-item .file-item-info:hover,.file-list .folder-item-container .file-item .file-item-info:hover{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}:is(.dark .file-list .file-item-container .file-item .file-item-info:hover),:is(.dark .file-list .folder-item-container .file-item .file-item-info:hover){--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.file-list .file-item-container .file-item .file-icon,.file-list .folder-item-container .file-item .file-icon{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));margin-right:.5rem}:is(.dark .file-list .file-item-container .file-item .file-icon),:is(.dark .file-list .folder-item-container .file-item .file-icon){--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.file-list .file-item-container .file-item .file-icon>svg,.file-list .folder-item-container .file-item .file-icon>svg{height:1rem;width:1rem}.file-list .file-item-container .file-item .file-name,.file-list .folder-item-container .file-item .file-name{font-size:.875rem;line-height:1.25rem;margin-right:.75rem;width:100%;word-break:break-word}.file-list .file-item-container .file-item .file-size,.file-list .folder-item-container .file-item .file-size{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity));font-size:.75rem;line-height:1rem;white-space:nowrap}:is(.dark .file-list .file-item-container .file-item .file-size),:is(.dark .file-list .folder-item-container .file-item .file-size){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity));opacity:.9}.file-list .file-item-container.active .file-item,.file-list .folder-item-container.active .file-item{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity));border-color:rgb(14 165 233/var(--tw-border-opacity))}:is(.dark .file-list .file-item-container.active .file-item),:is(.dark .file-list .folder-item-container.active .file-item){--tw-border-opacity:1;--tw-bg-opacity:0.4;background-color:rgb(12 74 110/var(--tw-bg-opacity));border-color:rgb(12 74 110/var(--tw-border-opacity))}.file-list .file-item-container.active-folder .file-item,.file-list .folder-item-container.active-folder .file-item{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}:is(.dark .file-list .file-item-container.active-folder .file-item),:is(.dark .file-list .folder-item-container.active-folder .file-item){--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.file-list .file-item-container:hover .file-item,.file-list .folder-item-container:hover .file-item{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}:is(.dark .file-list .file-item-container:hover .file-item),:is(.dark .file-list .folder-item-container:hover .file-item){--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.file-list .file-item-container .file-dropdown-toggle,.file-list .folder-item-container .file-dropdown-toggle{--tw-text-opacity:1;align-items:center;align-self:stretch;border-bottom-right-radius:.375rem;border-color:transparent;border-left-width:1px;border-top-right-radius:.375rem;color:rgb(113 113 122/var(--tw-text-opacity));display:flex;justify-content:center;outline-color:#0ea5e9;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2rem}:is(.dark .file-list .file-item-container .file-dropdown-toggle),:is(.dark .file-list .folder-item-container .file-dropdown-toggle){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));outline-color:#0369a1}.file-list .file-item-container .file-dropdown-toggle:hover,.file-list .folder-item-container .file-dropdown-toggle:hover{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity));border-color:rgb(2 132 199/var(--tw-border-opacity))}:is(.dark .file-list .file-item-container .file-dropdown-toggle:hover),:is(.dark .file-list .folder-item-container .file-dropdown-toggle:hover){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity));border-color:rgb(7 89 133/var(--tw-border-opacity))}.file-list .folder-container .folder-item-container.sticky{position:sticky}.file-list .folder-container:first-child>.folder-item-container{margin-top:0}.menu-button{--tw-text-opacity:1;border-radius:.375rem;color:rgb(161 161 170/var(--tw-text-opacity));cursor:pointer;outline-color:#0ea5e9;padding:.5rem;position:relative;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.menu-button:hover{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}:is(.dark .menu-button:hover){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.menu-button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .menu-button:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}a.button,button.button{--tw-text-opacity:1;align-items:center;border-radius:.375rem;color:rgb(24 24 27/var(--tw-text-opacity));display:block;display:flex;font-size:.875rem;line-height:1.25rem;outline-color:#0ea5e9;padding:.5rem 1rem;text-align:left;width:100%}:is(.dark a.button),:is(.dark button.button){--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity));outline-color:#075985}a.button>svg,button.button>svg{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity));height:1rem;width:1rem}:is(.dark a.button>svg),:is(.dark button.button>svg){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}a.button>svg.spin,button.button>svg.spin{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}a.button:hover,button.button:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:is(.dark a.button:hover),:is(.dark button.button:hover){--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.select{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-radius:.25rem;color:rgb(63 63 70/var(--tw-text-opacity));font-weight:400;margin-bottom:-.125rem;margin-top:-.125rem;outline:2px solid transparent;outline-offset:2px;padding:.125rem .25rem}:is(.dark .select){--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));color:rgb(212 212 216/var(--tw-text-opacity))}.select:hover{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}:is(.dark .select:hover){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.select:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}:is(.dark .select:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.keyboard-shortcut{--tw-text-opacity:1;align-items:center;color:rgb(82 82 91/var(--tw-text-opacity));display:flex;font-size:.875rem;justify-content:flex-start;line-height:1.25rem;margin-bottom:.75rem;width:100%}:is(.dark .keyboard-shortcut){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.keyboard-shortcut .shortcut{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(244 244 245/var(--tw-ring-opacity));align-items:center;border-color:rgb(161 161 170/var(--tw-border-opacity));border-radius:.25rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:inline-flex;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1rem;height:1.5rem;justify-content:center;line-height:1.5rem;margin-right:.5rem;width:1.5rem}:is(.dark .keyboard-shortcut .shortcut){--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(24 24 27/var(--tw-ring-opacity));border-color:rgb(82 82 91/var(--tw-border-opacity))}.hover\:border-brand-600:hover{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.hover\:text-brand-800:hover{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.focus\:border-brand-500:focus{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-brand-500:focus{outline-color:#0ea5e9}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-brand-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.group:hover .group-hover\:inline-block{display:inline-block}.group:hover .group-hover\:hidden{display:none}.group:hover .group-hover\:border-brand-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group:hover .group-hover\:opacity-100{opacity:1}.group:focus .group-focus\:inline-block{display:inline-block}.group:focus .group-focus\:hidden{display:none}:is(.dark .dark\:border-brand-400){--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}:is(.dark .dark\:border-brand-600){--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}:is(.dark .dark\:border-gray-600){--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}:is(.dark .dark\:border-gray-800){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}:is(.dark .dark\:border-yellow-800){--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}:is(.dark .dark\:bg-yellow-900){--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}:is(.dark .dark\:bg-opacity-40){--tw-bg-opacity:0.4}:is(.dark .dark\:from-gray-900){--tw-gradient-from:#18181b var(--tw-gradient-from-position);--tw-gradient-to:rgba(24,24,27,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}:is(.dark .dark\:text-blue-500){--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}:is(.dark .dark\:text-brand-500){--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}:is(.dark .dark\:text-brand-600){--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}:is(.dark .dark\:text-green-500){--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}:is(.dark .dark\:text-yellow-400){--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}:is(.dark .dark\:opacity-90){opacity:.9}:is(.dark .dark\:outline-brand-800){outline-color:#075985}:is(.dark .dark\:hover\:border-brand-700:hover){--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}:is(.dark .dark\:hover\:border-gray-400:hover){--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}:is(.dark .hover\:dark\:border-brand-800):hover{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}:is(.dark .dark\:hover\:bg-gray-600:hover){--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:text-blue-400:hover){--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-brand-600:hover){--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-gray-200:hover){--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-gray-300:hover){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}:is(.dark .dark\:focus\:ring-brand-700:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.group:hover :is(.dark .group-hover\:dark\:border-brand-800){--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}@media (min-width:640px){.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:flex-col-reverse{flex-direction:column-reverse}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:duration-300{transition-duration:.3s}}@media (min-width:768px){.md\:fixed{position:fixed}.md\:inset-y-0{bottom:0;top:0}.md\:left-0{left:0}.md\:left-auto{left:auto}.md\:right-auto{right:auto}.md\:mx-0{margin-left:0;margin-right:0}.md\:mx-3{margin-left:.75rem;margin-right:.75rem}.md\:mt-0{margin-top:0}.md\:block{display:block}.md\:inline{display:inline}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-88{width:22rem}.md\:flex-col{flex-direction:column}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:pb-12{padding-bottom:3rem}.md\:pl-88{padding-left:22rem}.md\:opacity-75{opacity:.75}}@media (min-width:1024px){.lg\:absolute{position:absolute}.lg\:left-0{left:0}.lg\:right-0{right:0}.lg\:right-6{right:1.5rem}.lg\:top-2{top:.5rem}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:mb-0{margin-bottom:0}.lg\:mt-0{margin-top:0}.lg\:block{display:block}.lg\:inline{display:inline}.lg\:table-cell{display:table-cell}.lg\:hidden{display:none}.lg\:w-auto{width:auto}.lg\:flex-row{flex-direction:row}.lg\:px-5{padding-left:1.25rem;padding-right:1.25rem}.lg\:pl-2{padding-left:.5rem}.lg\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width:1280px){.xl\:inline{display:inline}} diff --git a/public/vendor/log-viewer/app.js b/public/vendor/log-viewer/app.js index 9d1ae1061b..bfaf39b495 100644 --- a/public/vendor/log-viewer/app.js +++ b/public/vendor/log-viewer/app.js @@ -1,2 +1,2 @@ /*! For license information please see app.js.LICENSE.txt */ -(()=>{var e,t={520:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z","clip-rule":"evenodd"})])}},889:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z","clip-rule":"evenodd"})])}},10:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18"})])}},488:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"})])}},683:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M13.5 4.5L21 12m0 0l-7.5 7.5M21 12H3"})])}},69:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M13.5 6H5.25A2.25 2.25 0 003 8.25v10.5A2.25 2.25 0 005.25 21h10.5A2.25 2.25 0 0018 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"})])}},246:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M19.5 8.25l-7.5 7.5-7.5-7.5"})])}},388:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M8.25 4.5l7.5 7.5-7.5 7.5"})])}},782:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"})])}},156:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 9.75v6.75m0 0l-3-3m3 3l3-3m-8.25 6a4.5 4.5 0 01-1.41-8.775 5.25 5.25 0 0110.233-2.33 3 3 0 013.758 3.848A3.752 3.752 0 0118 19.5H6.75z"})])}},904:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"}),r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})])}},960:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9 17.25v1.007a3 3 0 01-.879 2.122L7.5 21h9l-.621-.621A3 3 0 0115 18.257V17.25m6-12V15a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 15V5.25m18 0A2.25 2.25 0 0018.75 3H5.25A2.25 2.25 0 003 5.25m18 0V12a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 12V5.25"})])}},243:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 6.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 12.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 18.75a.75.75 0 110-1.5.75.75 0 010 1.5z"})])}},706:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"})])}},413:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M2.25 12.75V12A2.25 2.25 0 014.5 9.75h15A2.25 2.25 0 0121.75 12v.75m-8.69-6.44l-2.12-2.12a1.5 1.5 0 00-1.061-.44H4.5A2.25 2.25 0 002.25 6v12a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9a2.25 2.25 0 00-2.25-2.25h-5.379a1.5 1.5 0 01-1.06-.44z"})])}},199:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M3.75 9.776c.112-.017.227-.026.344-.026h15.812c.117 0 .232.009.344.026m-16.5 0a2.25 2.25 0 00-1.883 2.542l.857 6a2.25 2.25 0 002.227 1.932H19.05a2.25 2.25 0 002.227-1.932l.857-6a2.25 2.25 0 00-1.883-2.542m-16.5 0V6A2.25 2.25 0 016 3.75h3.879a1.5 1.5 0 011.06.44l2.122 2.12a1.5 1.5 0 001.06.44H18A2.25 2.25 0 0120.25 9v.776"})])}},923:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M13.19 8.688a4.5 4.5 0 011.242 7.244l-4.5 4.5a4.5 4.5 0 01-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 00-6.364-6.364l-4.5 4.5a4.5 4.5 0 001.242 7.244"})])}},447:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z"})])}},902:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z"})])}},390:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9 5.25h.008v.008H12v-.008z"})])}},908:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M7.217 10.907a2.25 2.25 0 100 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186l9.566-5.314m-9.566 7.5l9.566 5.314m0 0a2.25 2.25 0 103.935 2.186 2.25 2.25 0 00-3.935-2.186zm0-12.814a2.25 2.25 0 103.933-2.185 2.25 2.25 0 00-3.933 2.185z"})])}},817:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z"})])}},558:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0"})])}},505:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18L18 6M6 6l12 12"})])}},598:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M4.755 10.059a7.5 7.5 0 0112.548-3.364l1.903 1.903h-3.183a.75.75 0 100 1.5h4.992a.75.75 0 00.75-.75V4.356a.75.75 0 00-1.5 0v3.18l-1.9-1.9A9 9 0 003.306 9.67a.75.75 0 101.45.388zm15.408 3.352a.75.75 0 00-.919.53 7.5 7.5 0 01-12.548 3.364l-1.902-1.903h3.183a.75.75 0 000-1.5H2.984a.75.75 0 00-.75.75v4.992a.75.75 0 001.5 0v-3.18l1.9 1.9a9 9 0 0015.059-4.035.75.75 0 00-.53-.918z","clip-rule":"evenodd"})])}},462:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M3 6.75A.75.75 0 013.75 6h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 6.75zM3 12a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 12zm0 5.25a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75a.75.75 0 01-.75-.75z","clip-rule":"evenodd"})])}},452:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M16.28 11.47a.75.75 0 010 1.06l-7.5 7.5a.75.75 0 01-1.06-1.06L14.69 12 7.72 5.03a.75.75 0 011.06-1.06l7.5 7.5z","clip-rule":"evenodd"})])}},640:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z","clip-rule":"evenodd"})])}},307:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z","clip-rule":"evenodd"})])}},968:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{d:"M7.493 18.75c-.425 0-.82-.236-.975-.632A7.48 7.48 0 016 15.375c0-1.75.599-3.358 1.602-4.634.151-.192.373-.309.6-.397.473-.183.89-.514 1.212-.924a9.042 9.042 0 012.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 00.322-1.672V3a.75.75 0 01.75-.75 2.25 2.25 0 012.25 2.25c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 01-2.649 7.521c-.388.482-.987.729-1.605.729H14.23c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 00-1.423-.23h-.777zM2.331 10.977a11.969 11.969 0 00-.831 4.398 12 12 0 00.52 3.507c.26.85 1.084 1.368 1.973 1.368H4.9c.445 0 .72-.498.523-.898a8.963 8.963 0 01-.924-3.977c0-1.708.476-3.305 1.302-4.666.245-.403-.028-.959-.5-.959H4.25c-.832 0-1.612.453-1.918 1.227z"})])}},36:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 01.67 1.34l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 11-.671-1.34l.041-.022zM12 9a.75.75 0 100-1.5.75.75 0 000 1.5z","clip-rule":"evenodd"})])}},500:(e,t,n)=>{"use strict";var r=n(821),o=!1;function i(e,t,n){return Array.isArray(e)?(e.length=Math.max(e.length,t),e.splice(t,1,n),n):(e[t]=n,n)}function a(){return"undefined"!=typeof navigator&&"undefined"!=typeof window?window:void 0!==n.g?n.g:{}}const l="function"==typeof Proxy,s="devtools-plugin:setup";let c,u,f;function d(){return function(){var e;return void 0!==c||("undefined"!=typeof window&&window.performance?(c=!0,u=window.performance):void 0!==n.g&&(null===(e=n.g.perf_hooks)||void 0===e?void 0:e.performance)?(c=!0,u=n.g.perf_hooks.performance):c=!1),c}()?u.now():Date.now()}class p{constructor(e,t){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=e,this.hook=t;const n={};if(e.settings)for(const t in e.settings){const r=e.settings[t];n[t]=r.defaultValue}const r=`__vue-devtools-plugin-settings__${e.id}`;let o=Object.assign({},n);try{const e=localStorage.getItem(r),t=JSON.parse(e);Object.assign(o,t)}catch(e){}this.fallbacks={getSettings:()=>o,setSettings(e){try{localStorage.setItem(r,JSON.stringify(e))}catch(e){}o=e},now:()=>d()},t&&t.on("plugin:settings:set",((e,t)=>{e===this.plugin.id&&this.fallbacks.setSettings(t)})),this.proxiedOn=new Proxy({},{get:(e,t)=>this.target?this.target.on[t]:(...e)=>{this.onQueue.push({method:t,args:e})}}),this.proxiedTarget=new Proxy({},{get:(e,t)=>this.target?this.target[t]:"on"===t?this.proxiedOn:Object.keys(this.fallbacks).includes(t)?(...e)=>(this.targetQueue.push({method:t,args:e,resolve:()=>{}}),this.fallbacks[t](...e)):(...e)=>new Promise((n=>{this.targetQueue.push({method:t,args:e,resolve:n})}))})}async setRealTarget(e){this.target=e;for(const e of this.onQueue)this.target.on[e.method](...e.args);for(const e of this.targetQueue)e.resolve(await this.target[e.method](...e.args))}}function h(e,t){const n=e,r=a(),o=a().__VUE_DEVTOOLS_GLOBAL_HOOK__,i=l&&n.enableEarlyProxy;if(!o||!r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__&&i){const e=i?new p(n,o):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:e}),e&&t(e.proxiedTarget)}else o.emit(s,e,t)}const v=e=>f=e,m=Symbol();function g(e){return e&&"object"==typeof e&&"[object Object]"===Object.prototype.toString.call(e)&&"function"!=typeof e.toJSON}var y;!function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"}(y||(y={}));const b="undefined"!=typeof window,w=!1,C=(()=>"object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:"object"==typeof globalThis?globalThis:{HTMLElement:null})();function _(e,t,n){const r=new XMLHttpRequest;r.open("GET",e),r.responseType="blob",r.onload=function(){O(r.response,t,n)},r.onerror=function(){},r.send()}function E(e){const t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return t.status>=200&&t.status<=299}function x(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(t){const n=document.createEvent("MouseEvents");n.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(n)}}const k="object"==typeof navigator?navigator:{userAgent:""},S=(()=>/Macintosh/.test(k.userAgent)&&/AppleWebKit/.test(k.userAgent)&&!/Safari/.test(k.userAgent))(),O=b?"undefined"!=typeof HTMLAnchorElement&&"download"in HTMLAnchorElement.prototype&&!S?function(e,t="download",n){const r=document.createElement("a");r.download=t,r.rel="noopener","string"==typeof e?(r.href=e,r.origin!==location.origin?E(r.href)?_(e,t,n):(r.target="_blank",x(r)):x(r)):(r.href=URL.createObjectURL(e),setTimeout((function(){URL.revokeObjectURL(r.href)}),4e4),setTimeout((function(){x(r)}),0))}:"msSaveOrOpenBlob"in k?function(e,t="download",n){if("string"==typeof e)if(E(e))_(e,t,n);else{const t=document.createElement("a");t.href=e,t.target="_blank",setTimeout((function(){x(t)}))}else navigator.msSaveOrOpenBlob(function(e,{autoBom:t=!1}={}){return t&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e}(e,n),t)}:function(e,t,n,r){(r=r||open("","_blank"))&&(r.document.title=r.document.body.innerText="downloading...");if("string"==typeof e)return _(e,t,n);const o="application/octet-stream"===e.type,i=/constructor/i.test(String(C.HTMLElement))||"safari"in C,a=/CriOS\/[\d]+/.test(navigator.userAgent);if((a||o&&i||S)&&"undefined"!=typeof FileReader){const t=new FileReader;t.onloadend=function(){let e=t.result;if("string"!=typeof e)throw r=null,new Error("Wrong reader.result type");e=a?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),r?r.location.href=e:location.assign(e),r=null},t.readAsDataURL(e)}else{const t=URL.createObjectURL(e);r?r.location.assign(t):location.href=t,r=null,setTimeout((function(){URL.revokeObjectURL(t)}),4e4)}}:()=>{};function N(e,t){"function"==typeof __VUE_DEVTOOLS_TOAST__&&__VUE_DEVTOOLS_TOAST__("🍍 "+e,t)}function P(e){return"_a"in e&&"install"in e}function T(){if(!("clipboard"in navigator))return N("Your browser doesn't support the Clipboard API","error"),!0}function V(e){return!!(e instanceof Error&&e.message.toLowerCase().includes("document is not focused"))&&(N('You need to activate the "Emulate a focused page" setting in the "Rendering" panel of devtools.',"warn"),!0)}let R;async function L(e){try{const t=await(R||(R=document.createElement("input"),R.type="file",R.accept=".json"),function(){return new Promise(((e,t)=>{R.onchange=async()=>{const t=R.files;if(!t)return e(null);const n=t.item(0);return e(n?{text:await n.text(),file:n}:null)},R.oncancel=()=>e(null),R.onerror=t,R.click()}))}),n=await t();if(!n)return;const{text:r,file:o}=n;e.state.value=JSON.parse(r),N(`Global state imported from "${o.name}".`)}catch(e){N("Failed to export the state as JSON. Check the console for more details.","error")}}function A(e){return{_custom:{display:e}}}const j="🍍 Pinia (root)",B="_root";function I(e){return P(e)?{id:B,label:j}:{id:e.$id,label:e.$id}}function M(e){return e?Array.isArray(e)?e.reduce(((e,t)=>(e.keys.push(t.key),e.operations.push(t.type),e.oldValue[t.key]=t.oldValue,e.newValue[t.key]=t.newValue,e)),{oldValue:{},keys:[],operations:[],newValue:{}}):{operation:A(e.type),key:A(e.key),oldValue:e.oldValue,newValue:e.newValue}:{}}function F(e){switch(e){case y.direct:return"mutation";case y.patchFunction:case y.patchObject:return"$patch";default:return"unknown"}}let D=!0;const U=[],$="pinia:mutations",H="pinia",{assign:z}=Object,q=e=>"🍍 "+e;function W(e,t){h({id:"dev.esm.pinia",label:"Pinia 🍍",logo:"https://pinia.vuejs.org/logo.svg",packageName:"pinia",homepage:"https://pinia.vuejs.org",componentStateTypes:U,app:e},(n=>{"function"!=typeof n.now&&N("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),n.addTimelineLayer({id:$,label:"Pinia 🍍",color:15064968}),n.addInspector({id:H,label:"Pinia 🍍",icon:"storage",treeFilterPlaceholder:"Search stores",actions:[{icon:"content_copy",action:()=>{!async function(e){if(!T())try{await navigator.clipboard.writeText(JSON.stringify(e.state.value)),N("Global state copied to clipboard.")}catch(e){if(V(e))return;N("Failed to serialize the state. Check the console for more details.","error")}}(t)},tooltip:"Serialize and copy the state"},{icon:"content_paste",action:async()=>{await async function(e){if(!T())try{e.state.value=JSON.parse(await navigator.clipboard.readText()),N("Global state pasted from clipboard.")}catch(e){if(V(e))return;N("Failed to deserialize the state from clipboard. Check the console for more details.","error")}}(t),n.sendInspectorTree(H),n.sendInspectorState(H)},tooltip:"Replace the state with the content of your clipboard"},{icon:"save",action:()=>{!async function(e){try{O(new Blob([JSON.stringify(e.state.value)],{type:"text/plain;charset=utf-8"}),"pinia-state.json")}catch(e){N("Failed to export the state as JSON. Check the console for more details.","error")}}(t)},tooltip:"Save the state as a JSON file"},{icon:"folder_open",action:async()=>{await L(t),n.sendInspectorTree(H),n.sendInspectorState(H)},tooltip:"Import the state from a JSON file"}],nodeActions:[{icon:"restore",tooltip:"Reset the state (option store only)",action:e=>{const n=t._s.get(e);n?n._isOptionsAPI?(n.$reset(),N(`Store "${e}" reset.`)):N(`Cannot reset "${e}" store because it's a setup store.`,"warn"):N(`Cannot reset "${e}" store because it wasn't found.`,"warn")}}]}),n.on.inspectComponent(((e,t)=>{const n=e.componentInstance&&e.componentInstance.proxy;if(n&&n._pStores){const t=e.componentInstance.proxy._pStores;Object.values(t).forEach((t=>{e.instanceData.state.push({type:q(t.$id),key:"state",editable:!0,value:t._isOptionsAPI?{_custom:{value:(0,r.toRaw)(t.$state),actions:[{icon:"restore",tooltip:"Reset the state of this store",action:()=>t.$reset()}]}}:Object.keys(t.$state).reduce(((e,n)=>(e[n]=t.$state[n],e)),{})}),t._getters&&t._getters.length&&e.instanceData.state.push({type:q(t.$id),key:"getters",editable:!1,value:t._getters.reduce(((e,n)=>{try{e[n]=t[n]}catch(t){e[n]=t}return e}),{})})}))}})),n.on.getInspectorTree((n=>{if(n.app===e&&n.inspectorId===H){let e=[t];e=e.concat(Array.from(t._s.values())),n.rootNodes=(n.filter?e.filter((e=>"$id"in e?e.$id.toLowerCase().includes(n.filter.toLowerCase()):j.toLowerCase().includes(n.filter.toLowerCase()))):e).map(I)}})),n.on.getInspectorState((n=>{if(n.app===e&&n.inspectorId===H){const e=n.nodeId===B?t:t._s.get(n.nodeId);if(!e)return;e&&(n.state=function(e){if(P(e)){const t=Array.from(e._s.keys()),n=e._s,r={state:t.map((t=>({editable:!0,key:t,value:e.state.value[t]}))),getters:t.filter((e=>n.get(e)._getters)).map((e=>{const t=n.get(e);return{editable:!1,key:e,value:t._getters.reduce(((e,n)=>(e[n]=t[n],e)),{})}}))};return r}const t={state:Object.keys(e.$state).map((t=>({editable:!0,key:t,value:e.$state[t]})))};return e._getters&&e._getters.length&&(t.getters=e._getters.map((t=>({editable:!1,key:t,value:e[t]})))),e._customProperties.size&&(t.customProperties=Array.from(e._customProperties).map((t=>({editable:!0,key:t,value:e[t]})))),t}(e))}})),n.on.editInspectorState(((n,r)=>{if(n.app===e&&n.inspectorId===H){const e=n.nodeId===B?t:t._s.get(n.nodeId);if(!e)return N(`store "${n.nodeId}" not found`,"error");const{path:r}=n;P(e)?r.unshift("state"):1===r.length&&e._customProperties.has(r[0])&&!(r[0]in e.$state)||r.unshift("$state"),D=!1,n.set(e,r,n.state.value),D=!0}})),n.on.editComponentState((e=>{if(e.type.startsWith("🍍")){const n=e.type.replace(/^🍍\s*/,""),r=t._s.get(n);if(!r)return N(`store "${n}" not found`,"error");const{path:o}=e;if("state"!==o[0])return N(`Invalid path for store "${n}":\n${o}\nOnly state can be modified.`);o[0]="$state",D=!1,e.set(r,o,e.state.value),D=!0}}))}))}let K,G=0;function Z(e,t){const n=t.reduce(((t,n)=>(t[n]=(0,r.toRaw)(e)[n],t)),{});for(const t in n)e[t]=function(){const r=G,o=new Proxy(e,{get:(...e)=>(K=r,Reflect.get(...e)),set:(...e)=>(K=r,Reflect.set(...e))});return n[t].apply(o,arguments)}}function Y({app:e,store:t,options:n}){if(!t.$id.startsWith("__hot:")){if(n.state&&(t._isOptionsAPI=!0),"function"==typeof n.state){Z(t,Object.keys(n.actions));const e=t._hotUpdate;(0,r.toRaw)(t)._hotUpdate=function(n){e.apply(this,arguments),Z(t,Object.keys(n._hmrPayload.actions))}}!function(e,t){U.includes(q(t.$id))||U.push(q(t.$id)),h({id:"dev.esm.pinia",label:"Pinia 🍍",logo:"https://pinia.vuejs.org/logo.svg",packageName:"pinia",homepage:"https://pinia.vuejs.org",componentStateTypes:U,app:e,settings:{logStoreChanges:{label:"Notify about new/deleted stores",type:"boolean",defaultValue:!0}}},(e=>{const n="function"==typeof e.now?e.now.bind(e):Date.now;t.$onAction((({after:r,onError:o,name:i,args:a})=>{const l=G++;e.addTimelineEvent({layerId:$,event:{time:n(),title:"🛫 "+i,subtitle:"start",data:{store:A(t.$id),action:A(i),args:a},groupId:l}}),r((r=>{K=void 0,e.addTimelineEvent({layerId:$,event:{time:n(),title:"🛬 "+i,subtitle:"end",data:{store:A(t.$id),action:A(i),args:a,result:r},groupId:l}})})),o((r=>{K=void 0,e.addTimelineEvent({layerId:$,event:{time:n(),logType:"error",title:"💥 "+i,subtitle:"end",data:{store:A(t.$id),action:A(i),args:a,error:r},groupId:l}})}))}),!0),t._customProperties.forEach((o=>{(0,r.watch)((()=>(0,r.unref)(t[o])),((t,r)=>{e.notifyComponentUpdate(),e.sendInspectorState(H),D&&e.addTimelineEvent({layerId:$,event:{time:n(),title:"Change",subtitle:o,data:{newValue:t,oldValue:r},groupId:K}})}),{deep:!0})})),t.$subscribe((({events:r,type:o},i)=>{if(e.notifyComponentUpdate(),e.sendInspectorState(H),!D)return;const a={time:n(),title:F(o),data:z({store:A(t.$id)},M(r)),groupId:K};K=void 0,o===y.patchFunction?a.subtitle="⤵️":o===y.patchObject?a.subtitle="🧩":r&&!Array.isArray(r)&&(a.subtitle=r.type),r&&(a.data["rawEvent(s)"]={_custom:{display:"DebuggerEvent",type:"object",tooltip:"raw DebuggerEvent[]",value:r}}),e.addTimelineEvent({layerId:$,event:a})}),{detached:!0,flush:"sync"});const o=t._hotUpdate;t._hotUpdate=(0,r.markRaw)((r=>{o(r),e.addTimelineEvent({layerId:$,event:{time:n(),title:"🔥 "+t.$id,subtitle:"HMR update",data:{store:A(t.$id),info:A("HMR update")}}}),e.notifyComponentUpdate(),e.sendInspectorTree(H),e.sendInspectorState(H)}));const{$dispose:i}=t;t.$dispose=()=>{i(),e.notifyComponentUpdate(),e.sendInspectorTree(H),e.sendInspectorState(H),e.getSettings().logStoreChanges&&N(`Disposed "${t.$id}" store 🗑`)},e.notifyComponentUpdate(),e.sendInspectorTree(H),e.sendInspectorState(H),e.getSettings().logStoreChanges&&N(`"${t.$id}" store installed 🆕`)}))}(e,t)}}const J=()=>{};function Q(e,t,n,o=J){e.push(t);const i=()=>{const n=e.indexOf(t);n>-1&&(e.splice(n,1),o())};return!n&&(0,r.getCurrentScope)()&&(0,r.onScopeDispose)(i),i}function X(e,...t){e.slice().forEach((e=>{e(...t)}))}function ee(e,t){e instanceof Map&&t instanceof Map&&t.forEach(((t,n)=>e.set(n,t))),e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const o=t[n],i=e[n];g(i)&&g(o)&&e.hasOwnProperty(n)&&!(0,r.isRef)(o)&&!(0,r.isReactive)(o)?e[n]=ee(i,o):e[n]=o}return e}const te=Symbol(),ne=new WeakMap;const{assign:re}=Object;function oe(e,t,n={},a,l,s){let c;const u=re({actions:{}},n);const f={deep:!0};let d,p;let h,m=(0,r.markRaw)([]),b=(0,r.markRaw)([]);const C=a.state.value[e];s||C||(o?i(a.state.value,e,{}):a.state.value[e]={});const _=(0,r.ref)({});let E;function x(t){let n;d=p=!1,"function"==typeof t?(t(a.state.value[e]),n={type:y.patchFunction,storeId:e,events:h}):(ee(a.state.value[e],t),n={type:y.patchObject,payload:t,storeId:e,events:h});const o=E=Symbol();(0,r.nextTick)().then((()=>{E===o&&(d=!0)})),p=!0,X(m,n,a.state.value[e])}const k=J;function S(t,n){return function(){v(a);const r=Array.from(arguments),o=[],i=[];let l;X(b,{args:r,name:t,store:P,after:function(e){o.push(e)},onError:function(e){i.push(e)}});try{l=n.apply(this&&this.$id===e?this:P,r)}catch(e){throw X(i,e),e}return l instanceof Promise?l.then((e=>(X(o,e),e))).catch((e=>(X(i,e),Promise.reject(e)))):(X(o,l),l)}}const O=(0,r.markRaw)({actions:{},getters:{},state:[],hotState:_}),N={_p:a,$id:e,$onAction:Q.bind(null,b),$patch:x,$reset:k,$subscribe(t,n={}){const o=Q(m,t,n.detached,(()=>i())),i=c.run((()=>(0,r.watch)((()=>a.state.value[e]),(r=>{("sync"===n.flush?p:d)&&t({storeId:e,type:y.direct,events:h},r)}),re({},f,n))));return o},$dispose:function(){c.stop(),m=[],b=[],a._s.delete(e)}};o&&(N._r=!1);const P=(0,r.reactive)(w?re({_hmrPayload:O,_customProperties:(0,r.markRaw)(new Set)},N):N);a._s.set(e,P);const T=a._e.run((()=>(c=(0,r.effectScope)(),c.run((()=>t())))));for(const t in T){const n=T[t];if((0,r.isRef)(n)&&(R=n,!(0,r.isRef)(R)||!R.effect)||(0,r.isReactive)(n))s||(!C||(V=n,o?ne.has(V):g(V)&&V.hasOwnProperty(te))||((0,r.isRef)(n)?n.value=C[t]:ee(n,C[t])),o?i(a.state.value[e],t,n):a.state.value[e][t]=n);else if("function"==typeof n){const e=S(t,n);o?i(T,t,e):T[t]=e,u.actions[t]=n}else 0}var V,R;if(o?Object.keys(T).forEach((e=>{i(P,e,T[e])})):(re(P,T),re((0,r.toRaw)(P),T)),Object.defineProperty(P,"$state",{get:()=>a.state.value[e],set:e=>{x((t=>{re(t,e)}))}}),w){const e={writable:!0,configurable:!0,enumerable:!1};["_p","_hmrPayload","_getters","_customProperties"].forEach((t=>{Object.defineProperty(P,t,re({value:P[t]},e))}))}return o&&(P._r=!0),a._p.forEach((e=>{if(w){const t=c.run((()=>e({store:P,app:a._a,pinia:a,options:u})));Object.keys(t||{}).forEach((e=>P._customProperties.add(e))),re(P,t)}else re(P,c.run((()=>e({store:P,app:a._a,pinia:a,options:u}))))})),C&&s&&n.hydrate&&n.hydrate(P.$state,C),d=!0,p=!0,P}function ie(e,t,n){let a,l;const s="function"==typeof t;function c(e,n){const c=(0,r.getCurrentInstance)();(e=e||c&&(0,r.inject)(m,null))&&v(e),(e=f)._s.has(a)||(s?oe(a,t,l,e):function(e,t,n,a){const{state:l,actions:s,getters:c}=t,u=n.state.value[e];let f;f=oe(e,(function(){u||(o?i(n.state.value,e,l?l():{}):n.state.value[e]=l?l():{});const t=(0,r.toRefs)(n.state.value[e]);return re(t,s,Object.keys(c||{}).reduce(((t,i)=>(t[i]=(0,r.markRaw)((0,r.computed)((()=>{v(n);const t=n._s.get(e);if(!o||t._r)return c[i].call(t,t)}))),t)),{}))}),t,n,0,!0),f.$reset=function(){const e=l?l():{};this.$patch((t=>{re(t,e)}))}}(a,l,e));return e._s.get(a)}return"string"==typeof e?(a=e,l=s?n:t):(l=e,a=e.id),c.$id=a,c}function ae(e,t){return function(){return e.apply(t,arguments)}}const{toString:le}=Object.prototype,{getPrototypeOf:se}=Object,ce=(ue=Object.create(null),e=>{const t=le.call(e);return ue[t]||(ue[t]=t.slice(8,-1).toLowerCase())});var ue;const fe=e=>(e=e.toLowerCase(),t=>ce(t)===e),de=e=>t=>typeof t===e,{isArray:pe}=Array,he=de("undefined");const ve=fe("ArrayBuffer");const me=de("string"),ge=de("function"),ye=de("number"),be=e=>null!==e&&"object"==typeof e,we=e=>{if("object"!==ce(e))return!1;const t=se(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},Ce=fe("Date"),_e=fe("File"),Ee=fe("Blob"),xe=fe("FileList"),ke=fe("URLSearchParams");function Se(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),pe(e))for(r=0,o=e.length;r0;)if(r=n[o],t===r.toLowerCase())return r;return null}const Ne="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Pe=e=>!he(e)&&e!==Ne;const Te=(Ve="undefined"!=typeof Uint8Array&&se(Uint8Array),e=>Ve&&e instanceof Ve);var Ve;const Re=fe("HTMLFormElement"),Le=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),Ae=fe("RegExp"),je=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};Se(n,((n,o)=>{!1!==t(n,o,e)&&(r[o]=n)})),Object.defineProperties(e,r)},Be="abcdefghijklmnopqrstuvwxyz",Ie="0123456789",Me={DIGIT:Ie,ALPHA:Be,ALPHA_DIGIT:Be+Be.toUpperCase()+Ie};const Fe={isArray:pe,isArrayBuffer:ve,isBuffer:function(e){return null!==e&&!he(e)&&null!==e.constructor&&!he(e.constructor)&&ge(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{const t="[object FormData]";return e&&("function"==typeof FormData&&e instanceof FormData||le.call(e)===t||ge(e.toString)&&e.toString()===t)},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&ve(e.buffer),t},isString:me,isNumber:ye,isBoolean:e=>!0===e||!1===e,isObject:be,isPlainObject:we,isUndefined:he,isDate:Ce,isFile:_e,isBlob:Ee,isRegExp:Ae,isFunction:ge,isStream:e=>be(e)&&ge(e.pipe),isURLSearchParams:ke,isTypedArray:Te,isFileList:xe,forEach:Se,merge:function e(){const{caseless:t}=Pe(this)&&this||{},n={},r=(r,o)=>{const i=t&&Oe(n,o)||o;we(n[i])&&we(r)?n[i]=e(n[i],r):we(r)?n[i]=e({},r):pe(r)?n[i]=r.slice():n[i]=r};for(let e=0,t=arguments.length;e(Se(t,((t,r)=>{n&&ge(t)?e[r]=ae(t,n):e[r]=t}),{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,i,a;const l={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)a=o[i],r&&!r(a,e,t)||l[a]||(t[a]=e[a],l[a]=!0);e=!1!==n&&se(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:ce,kindOfTest:fe,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(pe(e))return e;let t=e.length;if(!ye(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:Re,hasOwnProperty:Le,hasOwnProp:Le,reduceDescriptors:je,freezeMethods:e=>{je(e,((t,n)=>{if(ge(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];ge(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return pe(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:Oe,global:Ne,isContextDefined:Pe,ALPHABET:Me,generateString:(e=16,t=Me.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n},isSpecCompliantForm:function(e){return!!(e&&ge(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(be(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[r]=e;const o=pe(e)?[]:{};return Se(e,((e,t)=>{const i=n(e,r+1);!he(i)&&(o[t]=i)})),t[r]=void 0,o}}return e};return n(e,0)}};function De(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}Fe.inherits(De,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Fe.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const Ue=De.prototype,$e={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{$e[e]={value:e}})),Object.defineProperties(De,$e),Object.defineProperty(Ue,"isAxiosError",{value:!0}),De.from=(e,t,n,r,o,i)=>{const a=Object.create(Ue);return Fe.toFlatObject(e,a,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),De.call(a,e.message,t,n,r,o),a.cause=e,a.name=e.name,i&&Object.assign(a,i),a};const He=De,ze=null;var qe=n(764).lW;function We(e){return Fe.isPlainObject(e)||Fe.isArray(e)}function Ke(e){return Fe.endsWith(e,"[]")?e.slice(0,-2):e}function Ge(e,t,n){return e?e.concat(t).map((function(e,t){return e=Ke(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const Ze=Fe.toFlatObject(Fe,{},null,(function(e){return/^is[A-Z]/.test(e)}));const Ye=function(e,t,n){if(!Fe.isObject(e))throw new TypeError("target must be an object");t=t||new(ze||FormData);const r=(n=Fe.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!Fe.isUndefined(t[e])}))).metaTokens,o=n.visitor||c,i=n.dots,a=n.indexes,l=(n.Blob||"undefined"!=typeof Blob&&Blob)&&Fe.isSpecCompliantForm(t);if(!Fe.isFunction(o))throw new TypeError("visitor must be a function");function s(e){if(null===e)return"";if(Fe.isDate(e))return e.toISOString();if(!l&&Fe.isBlob(e))throw new He("Blob is not supported. Use a Buffer instead.");return Fe.isArrayBuffer(e)||Fe.isTypedArray(e)?l&&"function"==typeof Blob?new Blob([e]):qe.from(e):e}function c(e,n,o){let l=e;if(e&&!o&&"object"==typeof e)if(Fe.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(Fe.isArray(e)&&function(e){return Fe.isArray(e)&&!e.some(We)}(e)||(Fe.isFileList(e)||Fe.endsWith(n,"[]"))&&(l=Fe.toArray(e)))return n=Ke(n),l.forEach((function(e,r){!Fe.isUndefined(e)&&null!==e&&t.append(!0===a?Ge([n],r,i):null===a?n:n+"[]",s(e))})),!1;return!!We(e)||(t.append(Ge(o,n,i),s(e)),!1)}const u=[],f=Object.assign(Ze,{defaultVisitor:c,convertValue:s,isVisitable:We});if(!Fe.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!Fe.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+r.join("."));u.push(n),Fe.forEach(n,(function(n,i){!0===(!(Fe.isUndefined(n)||null===n)&&o.call(t,n,Fe.isString(i)?i.trim():i,r,f))&&e(n,r?r.concat(i):[i])})),u.pop()}}(e),t};function Je(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function Qe(e,t){this._pairs=[],e&&Ye(e,this,t)}const Xe=Qe.prototype;Xe.append=function(e,t){this._pairs.push([e,t])},Xe.toString=function(e){const t=e?function(t){return e.call(this,t,Je)}:Je;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};const et=Qe;function tt(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function nt(e,t,n){if(!t)return e;const r=n&&n.encode||tt,o=n&&n.serialize;let i;if(i=o?o(t,n):Fe.isURLSearchParams(t)?t.toString():new et(t,n).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}const rt=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Fe.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},ot={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},it="undefined"!=typeof URLSearchParams?URLSearchParams:et,at=FormData,lt=(()=>{let e;return("undefined"==typeof navigator||"ReactNative"!==(e=navigator.product)&&"NativeScript"!==e&&"NS"!==e)&&("undefined"!=typeof window&&"undefined"!=typeof document)})(),st="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,ct={isBrowser:!0,classes:{URLSearchParams:it,FormData:at,Blob},isStandardBrowserEnv:lt,isStandardBrowserWebWorkerEnv:st,protocols:["http","https","file","blob","url","data"]};const ut=function(e){function t(e,n,r,o){let i=e[o++];const a=Number.isFinite(+i),l=o>=e.length;if(i=!i&&Fe.isArray(r)?r.length:i,l)return Fe.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!a;r[i]&&Fe.isObject(r[i])||(r[i]=[]);return t(e,n,r[i],o)&&Fe.isArray(r[i])&&(r[i]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let i;for(r=0;r{t(function(e){return Fe.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null},ft={"Content-Type":void 0};const dt={transitional:ot,adapter:["xhr","http"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=Fe.isObject(e);o&&Fe.isHTMLForm(e)&&(e=new FormData(e));if(Fe.isFormData(e))return r&&r?JSON.stringify(ut(e)):e;if(Fe.isArrayBuffer(e)||Fe.isBuffer(e)||Fe.isStream(e)||Fe.isFile(e)||Fe.isBlob(e))return e;if(Fe.isArrayBufferView(e))return e.buffer;if(Fe.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Ye(e,new ct.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return ct.isNode&&Fe.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((i=Fe.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return Ye(i?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(Fe.isString(e))try{return(t||JSON.parse)(e),Fe.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||dt.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(e&&Fe.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw He.from(e,He.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ct.classes.FormData,Blob:ct.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};Fe.forEach(["delete","get","head"],(function(e){dt.headers[e]={}})),Fe.forEach(["post","put","patch"],(function(e){dt.headers[e]=Fe.merge(ft)}));const pt=dt,ht=Fe.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),vt=Symbol("internals");function mt(e){return e&&String(e).trim().toLowerCase()}function gt(e){return!1===e||null==e?e:Fe.isArray(e)?e.map(gt):String(e)}function yt(e,t,n,r){return Fe.isFunction(r)?r.call(this,t,n):Fe.isString(t)?Fe.isString(r)?-1!==t.indexOf(r):Fe.isRegExp(r)?r.test(t):void 0:void 0}class bt{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=mt(t);if(!o)throw new Error("header name must be a non-empty string");const i=Fe.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=gt(e))}const i=(e,t)=>Fe.forEach(e,((e,n)=>o(e,n,t)));return Fe.isPlainObject(e)||e instanceof this.constructor?i(e,t):Fe.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z]+$/.test(e.trim())?i((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&ht[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t):null!=e&&o(t,e,n),this}get(e,t){if(e=mt(e)){const n=Fe.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(Fe.isFunction(t))return t.call(this,e,n);if(Fe.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=mt(e)){const n=Fe.findKey(this,e);return!(!n||void 0===this[n]||t&&!yt(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=mt(e)){const o=Fe.findKey(n,e);!o||t&&!yt(0,n[o],o,t)||(delete n[o],r=!0)}}return Fe.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!yt(0,this[o],o,e)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return Fe.forEach(this,((r,o)=>{const i=Fe.findKey(n,o);if(i)return t[i]=gt(r),void delete t[o];const a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();a!==o&&delete t[o],t[a]=gt(r),n[a]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return Fe.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&Fe.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[vt]=this[vt]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=mt(e);t[r]||(!function(e,t){const n=Fe.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return Fe.isArray(e)?e.forEach(r):r(e),this}}bt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),Fe.freezeMethods(bt.prototype),Fe.freezeMethods(bt);const wt=bt;function Ct(e,t){const n=this||pt,r=t||n,o=wt.from(r.headers);let i=r.data;return Fe.forEach(e,(function(e){i=e.call(n,i,o.normalize(),t?t.status:void 0)})),o.normalize(),i}function _t(e){return!(!e||!e.__CANCEL__)}function Et(e,t,n){He.call(this,null==e?"canceled":e,He.ERR_CANCELED,t,n),this.name="CanceledError"}Fe.inherits(Et,He,{__CANCEL__:!0});const xt=Et;const kt=ct.isStandardBrowserEnv?{write:function(e,t,n,r,o,i){const a=[];a.push(e+"="+encodeURIComponent(t)),Fe.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),Fe.isString(r)&&a.push("path="+r),Fe.isString(o)&&a.push("domain="+o),!0===i&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}};function St(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Ot=ct.isStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let n;function r(n){let r=n;return e&&(t.setAttribute("href",r),r=t.href),t.setAttribute("href",r),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=r(window.location.href),function(e){const t=Fe.isString(e)?r(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0};const Nt=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,i=0,a=0;return t=void 0!==t?t:1e3,function(l){const s=Date.now(),c=r[a];o||(o=s),n[i]=l,r[i]=s;let u=a,f=0;for(;u!==i;)f+=n[u++],u%=e;if(i=(i+1)%e,i===a&&(a=(a+1)%e),s-o{const i=o.loaded,a=o.lengthComputable?o.total:void 0,l=i-n,s=r(l);n=i;const c={loaded:i,total:a,progress:a?i/a:void 0,bytes:l,rate:s||void 0,estimated:s&&a&&i<=a?(a-i)/s:void 0,event:o};c[t?"download":"upload"]=!0,e(c)}}const Tt="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){let r=e.data;const o=wt.from(e.headers).normalize(),i=e.responseType;let a;function l(){e.cancelToken&&e.cancelToken.unsubscribe(a),e.signal&&e.signal.removeEventListener("abort",a)}Fe.isFormData(r)&&(ct.isStandardBrowserEnv||ct.isStandardBrowserWebWorkerEnv)&&o.setContentType(!1);let s=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",n=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.set("Authorization","Basic "+btoa(t+":"+n))}const c=St(e.baseURL,e.url);function u(){if(!s)return;const r=wt.from("getAllResponseHeaders"in s&&s.getAllResponseHeaders());!function(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new He("Request failed with status code "+n.status,[He.ERR_BAD_REQUEST,He.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}((function(e){t(e),l()}),(function(e){n(e),l()}),{data:i&&"text"!==i&&"json"!==i?s.response:s.responseText,status:s.status,statusText:s.statusText,headers:r,config:e,request:s}),s=null}if(s.open(e.method.toUpperCase(),nt(c,e.params,e.paramsSerializer),!0),s.timeout=e.timeout,"onloadend"in s?s.onloadend=u:s.onreadystatechange=function(){s&&4===s.readyState&&(0!==s.status||s.responseURL&&0===s.responseURL.indexOf("file:"))&&setTimeout(u)},s.onabort=function(){s&&(n(new He("Request aborted",He.ECONNABORTED,e,s)),s=null)},s.onerror=function(){n(new He("Network Error",He.ERR_NETWORK,e,s)),s=null},s.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const r=e.transitional||ot;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new He(t,r.clarifyTimeoutError?He.ETIMEDOUT:He.ECONNABORTED,e,s)),s=null},ct.isStandardBrowserEnv){const t=(e.withCredentials||Ot(c))&&e.xsrfCookieName&&kt.read(e.xsrfCookieName);t&&o.set(e.xsrfHeaderName,t)}void 0===r&&o.setContentType(null),"setRequestHeader"in s&&Fe.forEach(o.toJSON(),(function(e,t){s.setRequestHeader(t,e)})),Fe.isUndefined(e.withCredentials)||(s.withCredentials=!!e.withCredentials),i&&"json"!==i&&(s.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&s.addEventListener("progress",Pt(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&s.upload&&s.upload.addEventListener("progress",Pt(e.onUploadProgress)),(e.cancelToken||e.signal)&&(a=t=>{s&&(n(!t||t.type?new xt(null,e,s):t),s.abort(),s=null)},e.cancelToken&&e.cancelToken.subscribe(a),e.signal&&(e.signal.aborted?a():e.signal.addEventListener("abort",a)));const f=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(c);f&&-1===ct.protocols.indexOf(f)?n(new He("Unsupported protocol "+f+":",He.ERR_BAD_REQUEST,e)):s.send(r||null)}))},Vt={http:ze,xhr:Tt};Fe.forEach(Vt,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Rt={getAdapter:e=>{e=Fe.isArray(e)?e:[e];const{length:t}=e;let n,r;for(let o=0;oe instanceof wt?e.toJSON():e;function Bt(e,t){t=t||{};const n={};function r(e,t,n){return Fe.isPlainObject(e)&&Fe.isPlainObject(t)?Fe.merge.call({caseless:n},e,t):Fe.isPlainObject(t)?Fe.merge({},t):Fe.isArray(t)?t.slice():t}function o(e,t,n){return Fe.isUndefined(t)?Fe.isUndefined(e)?void 0:r(void 0,e,n):r(e,t,n)}function i(e,t){if(!Fe.isUndefined(t))return r(void 0,t)}function a(e,t){return Fe.isUndefined(t)?Fe.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function l(n,o,i){return i in t?r(n,o):i in e?r(void 0,n):void 0}const s={url:i,method:i,data:i,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:l,headers:(e,t)=>o(jt(e),jt(t),!0)};return Fe.forEach(Object.keys(e).concat(Object.keys(t)),(function(r){const i=s[r]||o,a=i(e[r],t[r],r);Fe.isUndefined(a)&&i!==l||(n[r]=a)})),n}const It="1.3.2",Mt={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Mt[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Ft={};Mt.transitional=function(e,t,n){return(r,o,i)=>{if(!1===e)throw new He(function(e,t){return"[Axios v"+It+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}(o," has been removed"+(t?" in "+t:"")),He.ERR_DEPRECATED);return t&&!Ft[o]&&(Ft[o]=!0),!e||e(r,o,i)}};const Dt={assertOptions:function(e,t,n){if("object"!=typeof e)throw new He("options must be an object",He.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const i=r[o],a=t[i];if(a){const t=e[i],n=void 0===t||a(t,i,e);if(!0!==n)throw new He("option "+i+" must be "+n,He.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new He("Unknown option "+i,He.ERR_BAD_OPTION)}},validators:Mt},Ut=Dt.validators;class $t{constructor(e){this.defaults=e,this.interceptors={request:new rt,response:new rt}}request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Bt(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;let i;void 0!==n&&Dt.assertOptions(n,{silentJSONParsing:Ut.transitional(Ut.boolean),forcedJSONParsing:Ut.transitional(Ut.boolean),clarifyTimeoutError:Ut.transitional(Ut.boolean)},!1),void 0!==r&&Dt.assertOptions(r,{encode:Ut.function,serialize:Ut.function},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase(),i=o&&Fe.merge(o.common,o[t.method]),i&&Fe.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=wt.concat(i,o);const a=[];let l=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(l=l&&e.synchronous,a.unshift(e.fulfilled,e.rejected))}));const s=[];let c;this.interceptors.response.forEach((function(e){s.push(e.fulfilled,e.rejected)}));let u,f=0;if(!l){const e=[At.bind(this),void 0];for(e.unshift.apply(e,a),e.push.apply(e,s),u=e.length,c=Promise.resolve(t);f{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new xt(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;const t=new zt((function(t){e=t}));return{token:t,cancel:e}}}const qt=zt;const Wt={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Wt).forEach((([e,t])=>{Wt[t]=e}));const Kt=Wt;const Gt=function e(t){const n=new Ht(t),r=ae(Ht.prototype.request,n);return Fe.extend(r,Ht.prototype,n,{allOwnKeys:!0}),Fe.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(Bt(t,n))},r}(pt);Gt.Axios=Ht,Gt.CanceledError=xt,Gt.CancelToken=qt,Gt.isCancel=_t,Gt.VERSION=It,Gt.toFormData=Ye,Gt.AxiosError=He,Gt.Cancel=Gt.CanceledError,Gt.all=function(e){return Promise.all(e)},Gt.spread=function(e){return function(t){return e.apply(null,t)}},Gt.isAxiosError=function(e){return Fe.isObject(e)&&!0===e.isAxiosError},Gt.mergeConfig=Bt,Gt.AxiosHeaders=wt,Gt.formToJSON=e=>ut(Fe.isHTMLForm(e)?new FormData(e):e),Gt.HttpStatusCode=Kt,Gt.default=Gt;const Zt=Gt,Yt="undefined"!=typeof window;function Jt(e){return e.__esModule||"Module"===e[Symbol.toStringTag]}const Qt=Object.assign;function Xt(e,t){const n={};for(const r in t){const o=t[r];n[r]=tn(o)?o.map(e):e(o)}return n}const en=()=>{},tn=Array.isArray;const nn=/\/$/,rn=e=>e.replace(nn,"");function on(e,t,n="/"){let r,o={},i="",a="";const l=t.indexOf("#");let s=t.indexOf("?");return l=0&&(s=-1),s>-1&&(r=t.slice(0,s),i=t.slice(s+1,l>-1?l:t.length),o=e(i)),l>-1&&(r=r||t.slice(0,l),a=t.slice(l,t.length)),r=function(e,t){if(e.startsWith("/"))return e;0;if(!e)return t;const n=t.split("/"),r=e.split("/");let o,i,a=n.length-1;for(o=0;o1&&a--}return n.slice(0,a).join("/")+"/"+r.slice(o-(o===r.length?1:0)).join("/")}(null!=r?r:t,n),{fullPath:r+(i&&"?")+i+a,path:r,query:o,hash:a}}function an(e,t){return t&&e.toLowerCase().startsWith(t.toLowerCase())?e.slice(t.length)||"/":e}function ln(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function sn(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!cn(e[n],t[n]))return!1;return!0}function cn(e,t){return tn(e)?un(e,t):tn(t)?un(t,e):e===t}function un(e,t){return tn(t)?e.length===t.length&&e.every(((e,n)=>e===t[n])):1===e.length&&e[0]===t}var fn,dn;!function(e){e.pop="pop",e.push="push"}(fn||(fn={})),function(e){e.back="back",e.forward="forward",e.unknown=""}(dn||(dn={}));function pn(e){if(!e)if(Yt){const t=document.querySelector("base");e=(e=t&&t.getAttribute("href")||"/").replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return"/"!==e[0]&&"#"!==e[0]&&(e="/"+e),rn(e)}const hn=/^[^#]+#/;function vn(e,t){return e.replace(hn,"#")+t}const mn=()=>({left:window.pageXOffset,top:window.pageYOffset});function gn(e){let t;if("el"in e){const n=e.el,r="string"==typeof n&&n.startsWith("#");0;const o="string"==typeof n?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=function(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(null!=t.left?t.left:window.pageXOffset,null!=t.top?t.top:window.pageYOffset)}function yn(e,t){return(history.state?history.state.position-t:-1)+e}const bn=new Map;let wn=()=>location.protocol+"//"+location.host;function Cn(e,t){const{pathname:n,search:r,hash:o}=t,i=e.indexOf("#");if(i>-1){let t=o.includes(e.slice(i))?e.slice(i).length:1,n=o.slice(t);return"/"!==n[0]&&(n="/"+n),an(n,"")}return an(n,e)+r+o}function _n(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?mn():null}}function En(e){const t=function(e){const{history:t,location:n}=window,r={value:Cn(e,n)},o={value:t.state};function i(r,i,a){const l=e.indexOf("#"),s=l>-1?(n.host&&document.querySelector("base")?e:e.slice(l))+r:wn()+e+r;try{t[a?"replaceState":"pushState"](i,"",s),o.value=i}catch(e){n[a?"replace":"assign"](s)}}return o.value||i(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0),{location:r,state:o,push:function(e,n){const a=Qt({},o.value,t.state,{forward:e,scroll:mn()});i(a.current,a,!0),i(e,Qt({},_n(r.value,e,null),{position:a.position+1},n),!1),r.value=e},replace:function(e,n){i(e,Qt({},t.state,_n(o.value.back,e,o.value.forward,!0),n,{position:o.value.position}),!0),r.value=e}}}(e=pn(e)),n=function(e,t,n,r){let o=[],i=[],a=null;const l=({state:i})=>{const l=Cn(e,location),s=n.value,c=t.value;let u=0;if(i){if(n.value=l,t.value=i,a&&a===s)return void(a=null);u=c?i.position-c.position:0}else r(l);o.forEach((e=>{e(n.value,s,{delta:u,type:fn.pop,direction:u?u>0?dn.forward:dn.back:dn.unknown})}))};function s(){const{history:e}=window;e.state&&e.replaceState(Qt({},e.state,{scroll:mn()}),"")}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",s),{pauseListeners:function(){a=n.value},listen:function(e){o.push(e);const t=()=>{const t=o.indexOf(e);t>-1&&o.splice(t,1)};return i.push(t),t},destroy:function(){for(const e of i)e();i=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",s)}}}(e,t.state,t.location,t.replace);const r=Qt({location:"",base:e,go:function(e,t=!0){t||n.pauseListeners(),history.go(e)},createHref:vn.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function xn(e){return"string"==typeof e||"symbol"==typeof e}const kn={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Sn=Symbol("");var On;!function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"}(On||(On={}));function Nn(e,t){return Qt(new Error,{type:e,[Sn]:!0},t)}function Pn(e,t){return e instanceof Error&&Sn in e&&(null==t||!!(e.type&t))}const Tn="[^/]+?",Vn={sensitive:!1,strict:!1,start:!0,end:!0},Rn=/[.+*?^${}()[\]/\\]/g;function Ln(e,t){let n=0;for(;nt.length?1===t.length&&80===t[0]?1:-1:0}function An(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const Bn={type:0,value:""},In=/[a-zA-Z0-9_]/;function Mn(e,t,n){const r=function(e,t){const n=Qt({},Vn,t),r=[];let o=n.start?"^":"";const i=[];for(const t of e){const e=t.length?[]:[90];n.strict&&!t.length&&(o+="/");for(let r=0;r1&&("*"===l||"+"===l)&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:c,regexp:u,repeatable:"*"===l||"+"===l,optional:"*"===l||"?"===l})):t("Invalid state to consume buffer"),c="")}function d(){c+=l}for(;s{i(d)}:en}function i(e){if(xn(e)){const t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(i),t.alias.forEach(i))}else{const t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(i),e.alias.forEach(i))}}function a(e){let t=0;for(;t=0&&(e.record.path!==n[t].record.path||!qn(e,n[t]));)t++;n.splice(t,0,e),e.record.name&&!$n(e)&&r.set(e.record.name,e)}return t=zn({strict:!1,end:!0,sensitive:!1},t),e.forEach((e=>o(e))),{addRoute:o,resolve:function(e,t){let o,i,a,l={};if("name"in e&&e.name){if(o=r.get(e.name),!o)throw Nn(1,{location:e});0,a=o.record.name,l=Qt(Dn(t.params,o.keys.filter((e=>!e.optional)).map((e=>e.name))),e.params&&Dn(e.params,o.keys.map((e=>e.name)))),i=o.stringify(l)}else if("path"in e)i=e.path,o=n.find((e=>e.re.test(i))),o&&(l=o.parse(i),a=o.record.name);else{if(o=t.name?r.get(t.name):n.find((e=>e.re.test(t.path))),!o)throw Nn(1,{location:e,currentLocation:t});a=o.record.name,l=Qt({},t.params,e.params),i=o.stringify(l)}const s=[];let c=o;for(;c;)s.unshift(c.record),c=c.parent;return{name:a,path:i,params:l,matched:s,meta:Hn(s)}},removeRoute:i,getRoutes:function(){return n},getRecordMatcher:function(e){return r.get(e)}}}function Dn(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function Un(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]="boolean"==typeof n?n:n[r];return t}function $n(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Hn(e){return e.reduce(((e,t)=>Qt(e,t.meta)),{})}function zn(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function qn(e,t){return t.children.some((t=>t===e||qn(e,t)))}const Wn=/#/g,Kn=/&/g,Gn=/\//g,Zn=/=/g,Yn=/\?/g,Jn=/\+/g,Qn=/%5B/g,Xn=/%5D/g,er=/%5E/g,tr=/%60/g,nr=/%7B/g,rr=/%7C/g,or=/%7D/g,ir=/%20/g;function ar(e){return encodeURI(""+e).replace(rr,"|").replace(Qn,"[").replace(Xn,"]")}function lr(e){return ar(e).replace(Jn,"%2B").replace(ir,"+").replace(Wn,"%23").replace(Kn,"%26").replace(tr,"`").replace(nr,"{").replace(or,"}").replace(er,"^")}function sr(e){return null==e?"":function(e){return ar(e).replace(Wn,"%23").replace(Yn,"%3F")}(e).replace(Gn,"%2F")}function cr(e){try{return decodeURIComponent(""+e)}catch(e){}return""+e}function ur(e){const t={};if(""===e||"?"===e)return t;const n=("?"===e[0]?e.slice(1):e).split("&");for(let e=0;ee&&lr(e))):[r&&lr(r)];o.forEach((e=>{void 0!==e&&(t+=(t.length?"&":"")+n,null!=e&&(t+="="+e))}))}return t}function dr(e){const t={};for(const n in e){const r=e[n];void 0!==r&&(t[n]=tn(r)?r.map((e=>null==e?null:""+e)):null==r?r:""+r)}return t}const pr=Symbol(""),hr=Symbol(""),vr=Symbol(""),mr=Symbol(""),gr=Symbol("");function yr(){let e=[];return{add:function(t){return e.push(t),()=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)}},list:()=>e,reset:function(){e=[]}}}function br(e,t,n,r,o){const i=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise(((a,l)=>{const s=e=>{var s;!1===e?l(Nn(4,{from:n,to:t})):e instanceof Error?l(e):"string"==typeof(s=e)||s&&"object"==typeof s?l(Nn(2,{from:t,to:e})):(i&&r.enterCallbacks[o]===i&&"function"==typeof e&&i.push(e),a())},c=e.call(r&&r.instances[o],t,n,s);let u=Promise.resolve(c);e.length<3&&(u=u.then(s)),u.catch((e=>l(e)))}))}function wr(e,t,n,r){const o=[];for(const a of e){0;for(const e in a.components){let l=a.components[e];if("beforeRouteEnter"===t||a.instances[e])if("object"==typeof(i=l)||"displayName"in i||"props"in i||"__vccOpts"in i){const i=(l.__vccOpts||l)[t];i&&o.push(br(i,n,r,a,e))}else{let i=l();0,o.push((()=>i.then((o=>{if(!o)return Promise.reject(new Error(`Couldn't resolve component "${e}" at "${a.path}"`));const i=Jt(o)?o.default:o;a.components[e]=i;const l=(i.__vccOpts||i)[t];return l&&br(l,n,r,a,e)()}))))}}}var i;return o}function Cr(e){const t=(0,r.inject)(vr),n=(0,r.inject)(mr),o=(0,r.computed)((()=>t.resolve((0,r.unref)(e.to)))),i=(0,r.computed)((()=>{const{matched:e}=o.value,{length:t}=e,r=e[t-1],i=n.matched;if(!r||!i.length)return-1;const a=i.findIndex(ln.bind(null,r));if(a>-1)return a;const l=Er(e[t-2]);return t>1&&Er(r)===l&&i[i.length-1].path!==l?i.findIndex(ln.bind(null,e[t-2])):a})),a=(0,r.computed)((()=>i.value>-1&&function(e,t){for(const n in t){const r=t[n],o=e[n];if("string"==typeof r){if(r!==o)return!1}else if(!tn(o)||o.length!==r.length||r.some(((e,t)=>e!==o[t])))return!1}return!0}(n.params,o.value.params))),l=(0,r.computed)((()=>i.value>-1&&i.value===n.matched.length-1&&sn(n.params,o.value.params)));return{route:o,href:(0,r.computed)((()=>o.value.href)),isActive:a,isExactActive:l,navigate:function(n={}){return function(e){if(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)return;if(e.defaultPrevented)return;if(void 0!==e.button&&0!==e.button)return;if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}e.preventDefault&&e.preventDefault();return!0}(n)?t[(0,r.unref)(e.replace)?"replace":"push"]((0,r.unref)(e.to)).catch(en):Promise.resolve()}}}const _r=(0,r.defineComponent)({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Cr,setup(e,{slots:t}){const n=(0,r.reactive)(Cr(e)),{options:o}=(0,r.inject)(vr),i=(0,r.computed)((()=>({[xr(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[xr(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive})));return()=>{const o=t.default&&t.default(n);return e.custom?o:(0,r.h)("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},o)}}});function Er(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const xr=(e,t,n)=>null!=e?e:null!=t?t:n;function kr(e,t){if(!e)return null;const n=e(t);return 1===n.length?n[0]:n}const Sr=(0,r.defineComponent)({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=(0,r.inject)(gr),i=(0,r.computed)((()=>e.route||o.value)),a=(0,r.inject)(hr,0),l=(0,r.computed)((()=>{let e=(0,r.unref)(a);const{matched:t}=i.value;let n;for(;(n=t[e])&&!n.components;)e++;return e})),s=(0,r.computed)((()=>i.value.matched[l.value]));(0,r.provide)(hr,(0,r.computed)((()=>l.value+1))),(0,r.provide)(pr,s),(0,r.provide)(gr,i);const c=(0,r.ref)();return(0,r.watch)((()=>[c.value,s.value,e.name]),(([e,t,n],[r,o,i])=>{t&&(t.instances[n]=e,o&&o!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=o.leaveGuards),t.updateGuards.size||(t.updateGuards=o.updateGuards))),!e||!t||o&&ln(t,o)&&r||(t.enterCallbacks[n]||[]).forEach((t=>t(e)))}),{flush:"post"}),()=>{const o=i.value,a=e.name,l=s.value,u=l&&l.components[a];if(!u)return kr(n.default,{Component:u,route:o});const f=l.props[a],d=f?!0===f?o.params:"function"==typeof f?f(o):f:null,p=(0,r.h)(u,Qt({},d,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(l.instances[a]=null)},ref:c}));return kr(n.default,{Component:p,route:o})||p}}});function Or(e){return e.reduce(((e,t)=>e.then((()=>t()))),Promise.resolve())}function Nr(){return(0,r.inject)(vr)}function Pr(){return(0,r.inject)(mr)}function Tr(e,t,...n){if(e in t){let r=t[e];return"function"==typeof r?r(...n):r}let r=new Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(t).map((e=>`"${e}"`)).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,Tr),r}var Vr,Rr=((Vr=Rr||{})[Vr.None=0]="None",Vr[Vr.RenderStrategy=1]="RenderStrategy",Vr[Vr.Static=2]="Static",Vr),Lr=(e=>(e[e.Unmount=0]="Unmount",e[e.Hidden=1]="Hidden",e))(Lr||{});function Ar({visible:e=!0,features:t=0,ourProps:n,theirProps:r,...o}){var i;let a=Ir(r,n),l=Object.assign(o,{props:a});if(e||2&t&&a.static)return jr(l);if(1&t){return Tr(null==(i=a.unmount)||i?0:1,{0:()=>null,1:()=>jr({...o,props:{...a,hidden:!0,style:{display:"none"}}})})}return jr(l)}function jr({props:e,attrs:t,slots:n,slot:o,name:i}){var a,l;let{as:s,...c}=Mr(e,["unmount","static"]),u=null==(a=n.default)?void 0:a.call(n,o),f={};if(o){let e=!1,t=[];for(let[n,r]of Object.entries(o))"boolean"==typeof r&&(e=!0),!0===r&&t.push(n);e&&(f["data-headlessui-state"]=t.join(" "))}if("template"===s){if(u=Br(null!=u?u:[]),Object.keys(c).length>0||Object.keys(t).length>0){let[e,...n]=null!=u?u:[];if(!function(e){return null!=e&&("string"==typeof e.type||"object"==typeof e.type||"function"==typeof e.type)}(e)||n.length>0)throw new Error(['Passing props on "template"!',"",`The current component <${i} /> is rendering a "template".`,"However we need to passthrough the following props:",Object.keys(c).concat(Object.keys(t)).map((e=>e.trim())).filter(((e,t,n)=>n.indexOf(e)===t)).sort(((e,t)=>e.localeCompare(t))).map((e=>` - ${e}`)).join("\n"),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "template".',"Render a single element as the child so that we can forward the props onto that element."].map((e=>` - ${e}`)).join("\n")].join("\n"));let o=Ir(null!=(l=e.props)?l:{},c),a=(0,r.cloneVNode)(e,o);for(let e in o)e.startsWith("on")&&(a.props||(a.props={}),a.props[e]=o[e]);return a}return Array.isArray(u)&&1===u.length?u[0]:u}return(0,r.h)(s,Object.assign({},c,f),{default:()=>u})}function Br(e){return e.flatMap((e=>e.type===r.Fragment?Br(e.children):[e]))}function Ir(...e){if(0===e.length)return{};if(1===e.length)return e[0];let t={},n={};for(let r of e)for(let e in r)e.startsWith("on")&&"function"==typeof r[e]?(null!=n[e]||(n[e]=[]),n[e].push(r[e])):t[e]=r[e];if(t.disabled||t["aria-disabled"])return Object.assign(t,Object.fromEntries(Object.keys(n).map((e=>[e,void 0]))));for(let e in n)Object.assign(t,{[e](t,...r){let o=n[e];for(let e of o){if(t instanceof Event&&t.defaultPrevented)return;e(t,...r)}}});return t}function Mr(e,t=[]){let n=Object.assign({},e);for(let e of t)e in n&&delete n[e];return n}let Fr=0;function Dr(){return++Fr}var Ur=(e=>(e.Space=" ",e.Enter="Enter",e.Escape="Escape",e.Backspace="Backspace",e.Delete="Delete",e.ArrowLeft="ArrowLeft",e.ArrowUp="ArrowUp",e.ArrowRight="ArrowRight",e.ArrowDown="ArrowDown",e.Home="Home",e.End="End",e.PageUp="PageUp",e.PageDown="PageDown",e.Tab="Tab",e))(Ur||{});var $r=(e=>(e[e.First=0]="First",e[e.Previous=1]="Previous",e[e.Next=2]="Next",e[e.Last=3]="Last",e[e.Specific=4]="Specific",e[e.Nothing=5]="Nothing",e))($r||{});function Hr(e,t){let n=t.resolveItems();if(n.length<=0)return null;let r=t.resolveActiveIndex(),o=null!=r?r:-1,i=(()=>{switch(e.focus){case 0:return n.findIndex((e=>!t.resolveDisabled(e)));case 1:{let e=n.slice().reverse().findIndex(((e,n,r)=>!(-1!==o&&r.length-n-1>=o)&&!t.resolveDisabled(e)));return-1===e?e:n.length-1-e}case 2:return n.findIndex(((e,n)=>!(n<=o)&&!t.resolveDisabled(e)));case 3:{let e=n.slice().reverse().findIndex((e=>!t.resolveDisabled(e)));return-1===e?e:n.length-1-e}case 4:return n.findIndex((n=>t.resolveId(n)===e.id));case 5:return null;default:!function(e){throw new Error("Unexpected object: "+e)}(e)}})();return-1===i?r:i}function zr(e){var t;return null==e||null==e.value?null:null!=(t=e.value.$el)?t:e.value}let qr=new class{constructor(){this.current=this.detect(),this.currentId=0}set(e){this.current!==e&&(this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return"server"===this.current}get isClient(){return"client"===this.current}detect(){return"undefined"==typeof window||"undefined"==typeof document?"server":"client"}};function Wr(e){if(qr.isServer)return null;if(e instanceof Node)return e.ownerDocument;if(null!=e&&e.hasOwnProperty("value")){let t=zr(e);if(t)return t.ownerDocument}return document}let Kr=Symbol("Context");var Gr=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(Gr||{});function Zr(){return(0,r.inject)(Kr,null)}function Yr(e){(0,r.provide)(Kr,e)}function Jr(e,t){if(e)return e;let n=null!=t?t:"button";return"string"==typeof n&&"button"===n.toLowerCase()?"button":void 0}function Qr(e,t){let n=(0,r.ref)(Jr(e.value.type,e.value.as));return(0,r.onMounted)((()=>{n.value=Jr(e.value.type,e.value.as)})),(0,r.watchEffect)((()=>{var e;n.value||!zr(t)||zr(t)instanceof HTMLButtonElement&&(null==(e=zr(t))||!e.hasAttribute("type"))&&(n.value="button")})),n}let Xr=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map((e=>`${e}:not([tabindex='-1'])`)).join(",");var eo=(e=>(e[e.First=1]="First",e[e.Previous=2]="Previous",e[e.Next=4]="Next",e[e.Last=8]="Last",e[e.WrapAround=16]="WrapAround",e[e.NoScroll=32]="NoScroll",e))(eo||{}),to=(e=>(e[e.Error=0]="Error",e[e.Overflow=1]="Overflow",e[e.Success=2]="Success",e[e.Underflow=3]="Underflow",e))(to||{}),no=(e=>(e[e.Previous=-1]="Previous",e[e.Next=1]="Next",e))(no||{});function ro(e=document.body){return null==e?[]:Array.from(e.querySelectorAll(Xr)).sort(((e,t)=>Math.sign((e.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER))))}var oo=(e=>(e[e.Strict=0]="Strict",e[e.Loose=1]="Loose",e))(oo||{});function io(e,t=0){var n;return e!==(null==(n=Wr(e))?void 0:n.body)&&Tr(t,{0:()=>e.matches(Xr),1(){let t=e;for(;null!==t;){if(t.matches(Xr))return!0;t=t.parentElement}return!1}})}function ao(e){let t=Wr(e);(0,r.nextTick)((()=>{t&&!io(t.activeElement,0)&&lo(e)}))}function lo(e){null==e||e.focus({preventScroll:!0})}let so=["textarea","input"].join(",");function co(e,t=(e=>e)){return e.slice().sort(((e,n)=>{let r=t(e),o=t(n);if(null===r||null===o)return 0;let i=r.compareDocumentPosition(o);return i&Node.DOCUMENT_POSITION_FOLLOWING?-1:i&Node.DOCUMENT_POSITION_PRECEDING?1:0}))}function uo(e,t){return fo(ro(),t,{relativeTo:e})}function fo(e,t,{sorted:n=!0,relativeTo:r=null,skipElements:o=[]}={}){var i;let a=null!=(i=Array.isArray(e)?e.length>0?e[0].ownerDocument:document:null==e?void 0:e.ownerDocument)?i:document,l=Array.isArray(e)?n?co(e):e:ro(e);o.length>0&&l.length>1&&(l=l.filter((e=>!o.includes(e)))),r=null!=r?r:a.activeElement;let s,c=(()=>{if(5&t)return 1;if(10&t)return-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),u=(()=>{if(1&t)return 0;if(2&t)return Math.max(0,l.indexOf(r))-1;if(4&t)return Math.max(0,l.indexOf(r))+1;if(8&t)return l.length-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),f=32&t?{preventScroll:!0}:{},d=0,p=l.length;do{if(d>=p||d+p<=0)return 0;let e=u+d;if(16&t)e=(e+p)%p;else{if(e<0)return 3;if(e>=p)return 1}s=l[e],null==s||s.focus(f),d+=c}while(s!==a.activeElement);return 6&t&&function(e){var t,n;return null!=(n=null==(t=null==e?void 0:e.matches)?void 0:t.call(e,so))&&n}(s)&&s.select(),s.hasAttribute("tabindex")||s.setAttribute("tabindex","0"),2}function po(e,t,n){qr.isServer||(0,r.watchEffect)((r=>{document.addEventListener(e,t,n),r((()=>document.removeEventListener(e,t,n)))}))}function ho(e,t,n=(0,r.computed)((()=>!0))){function o(r,o){if(!n.value||r.defaultPrevented)return;let i=o(r);if(null===i||!i.getRootNode().contains(i))return;let a=function e(t){return"function"==typeof t?e(t()):Array.isArray(t)||t instanceof Set?t:[t]}(e);for(let e of a){if(null===e)continue;let t=e instanceof HTMLElement?e:zr(e);if(null!=t&&t.contains(i)||r.composed&&r.composedPath().includes(t))return}return!io(i,oo.Loose)&&-1!==i.tabIndex&&r.preventDefault(),t(r,i)}let i=(0,r.ref)(null);po("mousedown",(e=>{var t,r;n.value&&(i.value=(null==(r=null==(t=e.composedPath)?void 0:t.call(e))?void 0:r[0])||e.target)}),!0),po("click",(e=>{!i.value||(o(e,(()=>i.value)),i.value=null)}),!0),po("blur",(e=>o(e,(()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null))),!0)}function vo(e){return[e.screenX,e.screenY]}function mo(){let e=(0,r.ref)([-1,-1]);return{wasMoved(t){let n=vo(t);return(e.value[0]!==n[0]||e.value[1]!==n[1])&&(e.value=n,!0)},update(t){e.value=vo(t)}}}var go=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(go||{}),yo=(e=>(e[e.Pointer=0]="Pointer",e[e.Other=1]="Other",e))(yo||{});let bo=Symbol("MenuContext");function wo(e){let t=(0,r.inject)(bo,null);if(null===t){let t=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,wo),t}return t}let Co=(0,r.defineComponent)({name:"Menu",props:{as:{type:[Object,String],default:"template"}},setup(e,{slots:t,attrs:n}){let o=(0,r.ref)(1),i=(0,r.ref)(null),a=(0,r.ref)(null),l=(0,r.ref)([]),s=(0,r.ref)(""),c=(0,r.ref)(null),u=(0,r.ref)(1);function f(e=(e=>e)){let t=null!==c.value?l.value[c.value]:null,n=co(e(l.value.slice()),(e=>zr(e.dataRef.domRef))),r=t?n.indexOf(t):null;return-1===r&&(r=null),{items:n,activeItemIndex:r}}let d={menuState:o,buttonRef:i,itemsRef:a,items:l,searchQuery:s,activeItemIndex:c,activationTrigger:u,closeMenu:()=>{o.value=1,c.value=null},openMenu:()=>o.value=0,goToItem(e,t,n){let r=f(),o=Hr(e===$r.Specific?{focus:$r.Specific,id:t}:{focus:e},{resolveItems:()=>r.items,resolveActiveIndex:()=>r.activeItemIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.disabled});s.value="",c.value=o,u.value=null!=n?n:1,l.value=r.items},search(e){let t=""!==s.value?0:1;s.value+=e.toLowerCase();let n=(null!==c.value?l.value.slice(c.value+t).concat(l.value.slice(0,c.value+t)):l.value).find((e=>e.dataRef.textValue.startsWith(s.value)&&!e.dataRef.disabled)),r=n?l.value.indexOf(n):-1;-1===r||r===c.value||(c.value=r,u.value=1)},clearSearch(){s.value=""},registerItem(e,t){let n=f((n=>[...n,{id:e,dataRef:t}]));l.value=n.items,c.value=n.activeItemIndex,u.value=1},unregisterItem(e){let t=f((t=>{let n=t.findIndex((t=>t.id===e));return-1!==n&&t.splice(n,1),t}));l.value=t.items,c.value=t.activeItemIndex,u.value=1}};return ho([i,a],((e,t)=>{var n;d.closeMenu(),io(t,oo.Loose)||(e.preventDefault(),null==(n=zr(i))||n.focus())}),(0,r.computed)((()=>0===o.value))),(0,r.provide)(bo,d),Yr((0,r.computed)((()=>Tr(o.value,{0:Gr.Open,1:Gr.Closed})))),()=>{let r={open:0===o.value,close:d.closeMenu};return Ar({ourProps:{},theirProps:e,slot:r,slots:t,attrs:n,name:"Menu"})}}}),_o=(0,r.defineComponent)({name:"MenuButton",props:{disabled:{type:Boolean,default:!1},as:{type:[Object,String],default:"button"},id:{type:String,default:()=>`headlessui-menu-button-${Dr()}`}},setup(e,{attrs:t,slots:n,expose:o}){let i=wo("MenuButton");function a(e){switch(e.key){case Ur.Space:case Ur.Enter:case Ur.ArrowDown:e.preventDefault(),e.stopPropagation(),i.openMenu(),(0,r.nextTick)((()=>{var e;null==(e=zr(i.itemsRef))||e.focus({preventScroll:!0}),i.goToItem($r.First)}));break;case Ur.ArrowUp:e.preventDefault(),e.stopPropagation(),i.openMenu(),(0,r.nextTick)((()=>{var e;null==(e=zr(i.itemsRef))||e.focus({preventScroll:!0}),i.goToItem($r.Last)}))}}function l(e){if(e.key===Ur.Space)e.preventDefault()}function s(t){e.disabled||(0===i.menuState.value?(i.closeMenu(),(0,r.nextTick)((()=>{var e;return null==(e=zr(i.buttonRef))?void 0:e.focus({preventScroll:!0})}))):(t.preventDefault(),i.openMenu(),function(e){requestAnimationFrame((()=>requestAnimationFrame(e)))}((()=>{var e;return null==(e=zr(i.itemsRef))?void 0:e.focus({preventScroll:!0})}))))}o({el:i.buttonRef,$el:i.buttonRef});let c=Qr((0,r.computed)((()=>({as:e.as,type:t.type}))),i.buttonRef);return()=>{var r;let o={open:0===i.menuState.value},{id:u,...f}=e;return Ar({ourProps:{ref:i.buttonRef,id:u,type:c.value,"aria-haspopup":"menu","aria-controls":null==(r=zr(i.itemsRef))?void 0:r.id,"aria-expanded":e.disabled?void 0:0===i.menuState.value,onKeydown:a,onKeyup:l,onClick:s},theirProps:f,slot:o,attrs:t,slots:n,name:"MenuButton"})}}}),Eo=(0,r.defineComponent)({name:"MenuItems",props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:()=>`headlessui-menu-items-${Dr()}`}},setup(e,{attrs:t,slots:n,expose:o}){let i=wo("MenuItems"),a=(0,r.ref)(null);function l(e){var t;switch(a.value&&clearTimeout(a.value),e.key){case Ur.Space:if(""!==i.searchQuery.value)return e.preventDefault(),e.stopPropagation(),i.search(e.key);case Ur.Enter:if(e.preventDefault(),e.stopPropagation(),null!==i.activeItemIndex.value){null==(t=zr(i.items.value[i.activeItemIndex.value].dataRef.domRef))||t.click()}i.closeMenu(),ao(zr(i.buttonRef));break;case Ur.ArrowDown:return e.preventDefault(),e.stopPropagation(),i.goToItem($r.Next);case Ur.ArrowUp:return e.preventDefault(),e.stopPropagation(),i.goToItem($r.Previous);case Ur.Home:case Ur.PageUp:return e.preventDefault(),e.stopPropagation(),i.goToItem($r.First);case Ur.End:case Ur.PageDown:return e.preventDefault(),e.stopPropagation(),i.goToItem($r.Last);case Ur.Escape:e.preventDefault(),e.stopPropagation(),i.closeMenu(),(0,r.nextTick)((()=>{var e;return null==(e=zr(i.buttonRef))?void 0:e.focus({preventScroll:!0})}));break;case Ur.Tab:e.preventDefault(),e.stopPropagation(),i.closeMenu(),(0,r.nextTick)((()=>uo(zr(i.buttonRef),e.shiftKey?eo.Previous:eo.Next)));break;default:1===e.key.length&&(i.search(e.key),a.value=setTimeout((()=>i.clearSearch()),350))}}function s(e){if(e.key===Ur.Space)e.preventDefault()}o({el:i.itemsRef,$el:i.itemsRef}),function({container:e,accept:t,walk:n,enabled:o}){(0,r.watchEffect)((()=>{let r=e.value;if(!r||void 0!==o&&!o.value)return;let i=Wr(e);if(!i)return;let a=Object.assign((e=>t(e)),{acceptNode:t}),l=i.createTreeWalker(r,NodeFilter.SHOW_ELEMENT,a,!1);for(;l.nextNode();)n(l.currentNode)}))}({container:(0,r.computed)((()=>zr(i.itemsRef))),enabled:(0,r.computed)((()=>0===i.menuState.value)),accept:e=>"menuitem"===e.getAttribute("role")?NodeFilter.FILTER_REJECT:e.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT,walk(e){e.setAttribute("role","none")}});let c=Zr(),u=(0,r.computed)((()=>null!==c?c.value===Gr.Open:0===i.menuState.value));return()=>{var r,o;let a={open:0===i.menuState.value},{id:c,...f}=e;return Ar({ourProps:{"aria-activedescendant":null===i.activeItemIndex.value||null==(r=i.items.value[i.activeItemIndex.value])?void 0:r.id,"aria-labelledby":null==(o=zr(i.buttonRef))?void 0:o.id,id:c,onKeydown:l,onKeyup:s,role:"menu",tabIndex:0,ref:i.itemsRef},theirProps:f,slot:a,attrs:t,slots:n,features:Rr.RenderStrategy|Rr.Static,visible:u.value,name:"MenuItems"})}}}),xo=(0,r.defineComponent)({name:"MenuItem",inheritAttrs:!1,props:{as:{type:[Object,String],default:"template"},disabled:{type:Boolean,default:!1},id:{type:String,default:()=>`headlessui-menu-item-${Dr()}`}},setup(e,{slots:t,attrs:n,expose:o}){let i=wo("MenuItem"),a=(0,r.ref)(null);o({el:a,$el:a});let l=(0,r.computed)((()=>null!==i.activeItemIndex.value&&i.items.value[i.activeItemIndex.value].id===e.id)),s=(0,r.computed)((()=>({disabled:e.disabled,textValue:"",domRef:a})));function c(t){if(e.disabled)return t.preventDefault();i.closeMenu(),ao(zr(i.buttonRef))}function u(){if(e.disabled)return i.goToItem($r.Nothing);i.goToItem($r.Specific,e.id)}(0,r.onMounted)((()=>{var e,t;let n=null==(t=null==(e=zr(a))?void 0:e.textContent)?void 0:t.toLowerCase().trim();void 0!==n&&(s.value.textValue=n)})),(0,r.onMounted)((()=>i.registerItem(e.id,s))),(0,r.onUnmounted)((()=>i.unregisterItem(e.id))),(0,r.watchEffect)((()=>{0===i.menuState.value&&(!l.value||0!==i.activationTrigger.value&&(0,r.nextTick)((()=>{var e,t;return null==(t=null==(e=zr(a))?void 0:e.scrollIntoView)?void 0:t.call(e,{block:"nearest"})})))}));let f=mo();function d(e){f.update(e)}function p(t){!f.wasMoved(t)||e.disabled||l.value||i.goToItem($r.Specific,e.id,0)}function h(t){!f.wasMoved(t)||e.disabled||!l.value||i.goToItem($r.Nothing)}return()=>{let{disabled:r}=e,o={active:l.value,disabled:r,close:i.closeMenu},{id:s,...f}=e;return Ar({ourProps:{id:s,ref:a,role:"menuitem",tabIndex:!0===r?void 0:-1,"aria-disabled":!0===r||void 0,disabled:void 0,onClick:c,onFocus:u,onPointerenter:d,onMouseenter:d,onPointermove:p,onMousemove:p,onPointerleave:h,onMouseleave:h},theirProps:{...n,...f},slot:o,attrs:n,slots:t,name:"MenuItem"})}}});var ko=n(505),So=n(10),Oo=n(706),No=n(558),Po=n(413),To=n(199),Vo=n(388),Ro=n(243),Lo=n(782),Ao=n(156),jo=n(488),Bo=ie({id:"hosts",state:function(){return{selectedHostIdentifier:null}},getters:{supportsHosts:function(){return LogViewer.supports_hosts},hosts:function(){return LogViewer.hosts||[]},hasRemoteHosts:function(){return this.hosts.some((function(e){return e.is_remote}))},selectedHost:function(){var e=this;return this.hosts.find((function(t){return t.identifier===e.selectedHostIdentifier}))},localHost:function(){return this.hosts.find((function(e){return!e.is_remote}))},hostQueryParam:function(){return this.selectedHost&&this.selectedHost.is_remote?this.selectedHost.identifier:void 0}},actions:{selectHost:function(e){var t;this.supportsHosts||(e=null),"string"==typeof e&&(e=this.hosts.find((function(t){return t.identifier===e}))),e||(e=this.hosts.find((function(e){return!e.is_remote}))),this.selectedHostIdentifier=(null===(t=e)||void 0===t?void 0:t.identifier)||null}}});var Io;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;const Mo="undefined"!=typeof window,Fo=(Object.prototype.toString,e=>"function"==typeof e),Do=e=>"string"==typeof e,Uo=()=>{};Mo&&(null==(Io=null==window?void 0:window.navigator)?void 0:Io.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function $o(e){return"function"==typeof e?e():(0,r.unref)(e)}function Ho(e,t){return function(...n){return new Promise(((r,o)=>{Promise.resolve(e((()=>t.apply(this,n)),{fn:t,thisArg:this,args:n})).then(r).catch(o)}))}}const zo=e=>e();function qo(e){return!!(0,r.getCurrentScope)()&&((0,r.onScopeDispose)(e),!0)}Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;var Wo=Object.getOwnPropertySymbols,Ko=Object.prototype.hasOwnProperty,Go=Object.prototype.propertyIsEnumerable,Zo=(e,t)=>{var n={};for(var r in e)Ko.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&Wo)for(var r of Wo(e))t.indexOf(r)<0&&Go.call(e,r)&&(n[r]=e[r]);return n};function Yo(e,t,n={}){const o=n,{eventFilter:i=zo}=o,a=Zo(o,["eventFilter"]);return(0,r.watch)(e,Ho(i,t),a)}Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;var Jo=Object.defineProperty,Qo=Object.defineProperties,Xo=Object.getOwnPropertyDescriptors,ei=Object.getOwnPropertySymbols,ti=Object.prototype.hasOwnProperty,ni=Object.prototype.propertyIsEnumerable,ri=(e,t,n)=>t in e?Jo(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,oi=(e,t)=>{for(var n in t||(t={}))ti.call(t,n)&&ri(e,n,t[n]);if(ei)for(var n of ei(t))ni.call(t,n)&&ri(e,n,t[n]);return e},ii=(e,t)=>Qo(e,Xo(t)),ai=(e,t)=>{var n={};for(var r in e)ti.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&ei)for(var r of ei(e))t.indexOf(r)<0&&ni.call(e,r)&&(n[r]=e[r]);return n};function li(e,t,n={}){const o=n,{eventFilter:i}=o,a=ai(o,["eventFilter"]),{eventFilter:l,pause:s,resume:c,isActive:u}=function(e=zo){const t=(0,r.ref)(!0);return{isActive:(0,r.readonly)(t),pause:function(){t.value=!1},resume:function(){t.value=!0},eventFilter:(...n)=>{t.value&&e(...n)}}}(i);return{stop:Yo(e,t,ii(oi({},a),{eventFilter:l})),pause:s,resume:c,isActive:u}}Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;function si(e){var t;const n=$o(e);return null!=(t=null==n?void 0:n.$el)?t:n}const ci=Mo?window:void 0;Mo&&window.document,Mo&&window.navigator,Mo&&window.location;function ui(...e){let t,n,o,i;if(Do(e[0])||Array.isArray(e[0])?([n,o,i]=e,t=ci):[t,n,o,i]=e,!t)return Uo;Array.isArray(n)||(n=[n]),Array.isArray(o)||(o=[o]);const a=[],l=()=>{a.forEach((e=>e())),a.length=0},s=(0,r.watch)((()=>si(t)),(e=>{l(),e&&a.push(...n.flatMap((t=>o.map((n=>((e,t,n)=>(e.addEventListener(t,n,i),()=>e.removeEventListener(t,n,i)))(e,t,n))))))}),{immediate:!0,flush:"post"}),c=()=>{s(),l()};return qo(c),c}Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;const fi="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},di="__vueuse_ssr_handlers__";fi[di]=fi[di]||{};const pi=fi[di];function hi(e,t){return pi[e]||t}function vi(e){return null==e?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":"boolean"==typeof e?"boolean":"string"==typeof e?"string":"object"==typeof e?"object":Number.isNaN(e)?"any":"number"}var mi=Object.defineProperty,gi=Object.getOwnPropertySymbols,yi=Object.prototype.hasOwnProperty,bi=Object.prototype.propertyIsEnumerable,wi=(e,t,n)=>t in e?mi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ci=(e,t)=>{for(var n in t||(t={}))yi.call(t,n)&&wi(e,n,t[n]);if(gi)for(var n of gi(t))bi.call(t,n)&&wi(e,n,t[n]);return e};const _i={boolean:{read:e=>"true"===e,write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}};function Ei(e,t,n,o={}){var i;const{flush:a="pre",deep:l=!0,listenToStorageChanges:s=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:f,window:d=ci,eventFilter:p,onError:h=(e=>{})}=o,v=(f?r.shallowRef:r.ref)(t);if(!n)try{n=hi("getDefaultStorage",(()=>{var e;return null==(e=ci)?void 0:e.localStorage}))()}catch(e){h(e)}if(!n)return v;const m=$o(t),g=vi(m),y=null!=(i=o.serializer)?i:_i[g],{pause:b,resume:w}=li(v,(()=>function(t){try{if(null==t)n.removeItem(e);else{const r=y.write(t),o=n.getItem(e);o!==r&&(n.setItem(e,r),d&&(null==d||d.dispatchEvent(new StorageEvent("storage",{key:e,oldValue:o,newValue:r,storageArea:n}))))}}catch(e){h(e)}}(v.value)),{flush:a,deep:l,eventFilter:p});return d&&s&&ui(d,"storage",C),C(),v;function C(t){if(!t||t.storageArea===n)if(t&&null==t.key)v.value=m;else if(!t||t.key===e){b();try{v.value=function(t){const r=t?t.newValue:n.getItem(e);if(null==r)return c&&null!==m&&n.setItem(e,y.write(m)),m;if(!t&&u){const e=y.read(r);return Fo(u)?u(e,m):"object"!==g||Array.isArray(e)?e:Ci(Ci({},m),e)}return"string"!=typeof r?r:y.read(r)}(t)}catch(e){h(e)}finally{t?(0,r.nextTick)(w):w()}}}}Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;new Map;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;function xi(e,t,n={}){const{window:r=ci}=n;return Ei(e,t,null==r?void 0:r.localStorage,n)}Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;var ki,Si;(Si=ki||(ki={})).UP="UP",Si.RIGHT="RIGHT",Si.DOWN="DOWN",Si.LEFT="LEFT",Si.NONE="NONE";Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;var Oi=Object.defineProperty,Ni=Object.getOwnPropertySymbols,Pi=Object.prototype.hasOwnProperty,Ti=Object.prototype.propertyIsEnumerable,Vi=(e,t,n)=>t in e?Oi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;((e,t)=>{for(var n in t||(t={}))Pi.call(t,n)&&Vi(e,n,t[n]);if(Ni)for(var n of Ni(t))Ti.call(t,n)&&Vi(e,n,t[n])})({linear:function(e){return e}},{easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]});var Ri=ie({id:"search",state:function(){return{query:"",searchMoreRoute:null,searching:!1,percentScanned:0,error:null}},getters:{hasQuery:function(e){return""!==String(e.query).trim()}},actions:{init:function(){this.checkSearchProgress()},setQuery:function(e){this.query=e},update:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;this.query=e,this.error=t&&""!==t?t:null,this.searchMoreRoute=n,this.searching=r,this.percentScanned=o,this.searching&&this.checkSearchProgress()},checkSearchProgress:function(){var e=this,t=this.query;if(""!==t){var n="?"+new URLSearchParams({query:t});fetch(this.searchMoreRoute+n).then((function(e){return e.json()})).then((function(n){if(e.query===t){var r=e.searching;e.searching=n.hasMoreResults,e.percentScanned=n.percentScanned,e.searching?e.checkSearchProgress():r&&!e.searching&&window.dispatchEvent(new CustomEvent("reload-results"))}}))}}}}),Li=ie({id:"pagination",state:function(){return{page:1,pagination:{}}},getters:{currentPage:function(e){return 1!==e.page?Number(e.page):null},links:function(e){var t;return((null===(t=e.pagination)||void 0===t?void 0:t.links)||[]).slice(1,-1)},linksShort:function(e){var t;return((null===(t=e.pagination)||void 0===t?void 0:t.links_short)||[]).slice(1,-1)},hasPages:function(e){var t;return(null===(t=e.pagination)||void 0===t?void 0:t.last_page)>1},hasMorePages:function(e){var t;return null!==(null===(t=e.pagination)||void 0===t?void 0:t.next_page_url)}},actions:{setPagination:function(e){var t,n;(this.pagination=e,(null===(t=this.pagination)||void 0===t?void 0:t.last_page)0}))},totalResults:function(){return this.levelsFound.reduce((function(e,t){return e+t.count}),0)},levelsSelected:function(){return this.levelsFound.filter((function(e){return e.selected}))},totalResultsSelected:function(){return this.levelsSelected.reduce((function(e,t){return e+t.count}),0)}},actions:{setLevelCounts:function(e){e.hasOwnProperty("length")?this.levelCounts=e:this.levelCounts=Object.values(e)},selectAllLevels:function(){this.selectedLevels=Ai,this.levelCounts.forEach((function(e){return e.selected=!0}))},deselectAllLevels:function(){this.selectedLevels=[],this.levelCounts.forEach((function(e){return e.selected=!1}))},toggleLevel:function(e){var t=this.levelCounts.find((function(t){return t.level===e}))||{};this.selectedLevels.includes(e)?(this.selectedLevels=this.selectedLevels.filter((function(t){return t!==e})),t.selected=!1):(this.selectedLevels.push(e),t.selected=!0)}}}),Bi=n(486),Ii={System:"System",Light:"Light",Dark:"Dark"},Mi=ie({id:"logViewer",state:function(){return{theme:xi("logViewerTheme",Ii.System),shorterStackTraces:xi("logViewerShorterStackTraces",!1),direction:xi("logViewerDirection","desc"),resultsPerPage:xi("logViewerResultsPerPage",25),helpSlideOverOpen:!1,loading:!1,error:null,logs:[],levelCounts:[],performance:{},hasMoreResults:!1,percentScanned:100,abortController:null,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,stacksOpen:[],stacksInView:[],stackTops:{},containerTop:0,showLevelsDropdown:!0}},getters:{selectedFile:function(){return Fi().selectedFile},isOpen:function(e){return function(t){return e.stacksOpen.includes(t)}},isMobile:function(e){return e.viewportWidth<=1023},tableRowHeight:function(){return this.isMobile?29:36},headerHeight:function(){return this.isMobile?0:36},shouldBeSticky:function(e){var t=this;return function(n){return t.isOpen(n)&&e.stacksInView.includes(n)}},stickTopPosition:function(){var e=this;return function(t){var n=e.pixelsAboveFold(t);return n<0?Math.max(e.headerHeight-e.tableRowHeight,e.headerHeight+n)+"px":e.headerHeight+"px"}},pixelsAboveFold:function(e){var t=this;return function(n){var r=document.getElementById("tbody-"+n);if(!r)return!1;var o=r.getClientRects()[0];return o.top+o.height-t.tableRowHeight-t.headerHeight-e.containerTop}},isInViewport:function(){var e=this;return function(t){return e.pixelsAboveFold(t)>-e.tableRowHeight}}},actions:{setViewportDimensions:function(e,t){this.viewportWidth=e,this.viewportHeight=t;var n=document.querySelector(".log-item-container");n&&(this.containerTop=n.getBoundingClientRect().top)},toggleTheme:function(){switch(this.theme){case Ii.System:this.theme=Ii.Light;break;case Ii.Light:this.theme=Ii.Dark;break;default:this.theme=Ii.System}this.syncTheme()},syncTheme:function(){var e=this.theme;e===Ii.Dark||e===Ii.System&&window.matchMedia("(prefers-color-scheme: dark)").matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},toggle:function(e){this.isOpen(e)?this.stacksOpen=this.stacksOpen.filter((function(t){return t!==e})):this.stacksOpen.push(e),this.onScroll()},onScroll:function(){var e=this;this.stacksOpen.forEach((function(t){e.isInViewport(t)?(e.stacksInView.includes(t)||e.stacksInView.push(t),e.stackTops[t]=e.stickTopPosition(t)):(e.stacksInView=e.stacksInView.filter((function(e){return e!==t})),delete e.stackTops[t])}))},reset:function(){this.stacksOpen=[],this.stacksInView=[],this.stackTops={};var e=document.querySelector(".log-item-container");e&&(this.containerTop=e.getBoundingClientRect().top,e.scrollTo(0,0))},loadLogs:(0,Bi.debounce)((function(){var e,t=this,n=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).silently,o=void 0!==n&&n,i=Bo(),a=Fi(),l=Ri(),s=Li(),c=ji();if(0!==a.folders.length&&(this.abortController&&this.abortController.abort(),this.selectedFile||l.hasQuery)){this.abortController=new AbortController;var u={host:i.hostQueryParam,file:null===(e=this.selectedFile)||void 0===e?void 0:e.identifier,direction:this.direction,query:l.query,page:s.currentPage,per_page:this.resultsPerPage,levels:(0,r.toRaw)(c.selectedLevels.length>0?c.selectedLevels:"none"),shorter_stack_traces:this.shorterStackTraces};o||(this.loading=!0),Zt.get("".concat(LogViewer.basePath,"/api/logs"),{params:u,signal:this.abortController.signal}).then((function(e){var n=e.data;t.logs=u.host?n.logs.map((function(e){var t={host:u.host,file:e.file_identifier,query:"log-index:".concat(e.index)};return e.url="".concat(window.location.host).concat(LogViewer.basePath,"?").concat(new URLSearchParams(t)),e})):n.logs,t.hasMoreResults=n.hasMoreResults,t.percentScanned=n.percentScanned,t.error=n.error||null,t.performance=n.performance||{},c.setLevelCounts(n.levelCounts),s.setPagination(n.pagination),t.loading=!1,o||(0,r.nextTick)((function(){t.reset(),n.expandAutomatically&&t.stacksOpen.push(0)})),t.hasMoreResults&&t.loadLogs({silently:!0})})).catch((function(e){var n,r;if("ERR_CANCELED"===e.code)return t.hasMoreResults=!1,void(t.percentScanned=100);t.loading=!1,t.error=e.message,null!==(n=e.response)&&void 0!==n&&null!==(r=n.data)&&void 0!==r&&r.message&&(t.error+=": "+e.response.data.message)}))}}),10)}}),Fi=ie({id:"files",state:function(){return{folders:[],direction:xi("fileViewerDirection","desc"),selectedFileIdentifier:null,error:null,clearingCache:{},cacheRecentlyCleared:{},deleting:{},abortController:null,loading:!1,checkBoxesVisibility:!1,filesChecked:[],openFolderIdentifiers:[],foldersInView:[],containerTop:0,sidebarOpen:!1}},getters:{selectedHost:function(){return Bo().selectedHost},hostQueryParam:function(){return Bo().hostQueryParam},files:function(e){return e.folders.flatMap((function(e){return e.files}))},selectedFile:function(e){return e.files.find((function(t){return t.identifier===e.selectedFileIdentifier}))},foldersOpen:function(e){return e.openFolderIdentifiers.map((function(t){return e.folders.find((function(e){return e.identifier===t}))}))},isOpen:function(){var e=this;return function(t){return e.foldersOpen.includes(t)}},isChecked:function(e){return function(t){return e.filesChecked.includes("string"==typeof t?t:t.identifier)}},shouldBeSticky:function(e){var t=this;return function(n){return t.isOpen(n)&&e.foldersInView.includes(n)}},isInViewport:function(){var e=this;return function(t){return e.pixelsAboveFold(t)>-36}},pixelsAboveFold:function(e){return function(t){var n=document.getElementById("folder-"+t);if(!n)return!1;var r=n.getClientRects()[0];return r.top+r.height-e.containerTop}},hasFilesChecked:function(e){return e.filesChecked.length>0}},actions:{setDirection:function(e){this.direction=e},selectFile:function(e){this.selectedFileIdentifier!==e&&(this.selectedFileIdentifier=e,this.openFolderForActiveFile(),this.sidebarOpen=!1)},openFolderForActiveFile:function(){var e=this;if(this.selectedFile){var t=this.folders.find((function(t){return t.files.some((function(t){return t.identifier===e.selectedFile.identifier}))}));t&&!this.isOpen(t)&&this.toggle(t)}},openRootFolderIfNoneOpen:function(){var e=this.folders.find((function(e){return e.is_root}));e&&0===this.openFolderIdentifiers.length&&this.openFolderIdentifiers.push(e.identifier)},loadFolders:function(){var e=this;return this.abortController&&this.abortController.abort(),this.selectedHost?(this.abortController=new AbortController,this.loading=!0,Zt.get("".concat(LogViewer.basePath,"/api/folders"),{params:{host:this.hostQueryParam,direction:this.direction},signal:this.abortController.signal}).then((function(t){var n=t.data;e.folders=n,e.error=n.error||null,e.loading=!1,0===e.openFolderIdentifiers.length&&(e.openFolderForActiveFile(),e.openRootFolderIfNoneOpen()),e.onScroll()})).catch((function(t){var n,r;"ERR_CANCELED"!==t.code&&(e.loading=!1,e.error=t.message,null!==(n=t.response)&&void 0!==n&&null!==(r=n.data)&&void 0!==r&&r.message&&(e.error+=": "+t.response.data.message))}))):(this.folders=[],this.error=null,void(this.loading=!1))},toggle:function(e){this.isOpen(e)?this.openFolderIdentifiers=this.openFolderIdentifiers.filter((function(t){return t!==e.identifier})):this.openFolderIdentifiers.push(e.identifier),this.onScroll()},onScroll:function(){var e=this;this.foldersOpen.forEach((function(t){e.isInViewport(t)?e.foldersInView.includes(t)||e.foldersInView.push(t):e.foldersInView=e.foldersInView.filter((function(e){return e!==t}))}))},reset:function(){this.openFolderIdentifiers=[],this.foldersInView=[];var e=document.getElementById("file-list-container");e&&(this.containerTop=e.getBoundingClientRect().top,e.scrollTo(0,0))},toggleSidebar:function(){this.sidebarOpen=!this.sidebarOpen},checkBoxToggle:function(e){this.isChecked(e)?this.filesChecked=this.filesChecked.filter((function(t){return t!==e})):this.filesChecked.push(e)},toggleCheckboxVisibility:function(){this.checkBoxesVisibility=!this.checkBoxesVisibility},resetChecks:function(){this.filesChecked=[],this.checkBoxesVisibility=!1},clearCacheForFile:function(e){var t=this;return this.clearingCache[e.identifier]=!0,Zt.post("".concat(LogViewer.basePath,"/api/files/").concat(e.identifier,"/clear-cache"),{},{params:{host:this.hostQueryParam}}).then((function(){e.identifier===t.selectedFileIdentifier&&Mi().loadLogs(),t.cacheRecentlyCleared[e.identifier]=!0,setTimeout((function(){return t.cacheRecentlyCleared[e.identifier]=!1}),2e3)})).catch((function(e){})).finally((function(){return t.clearingCache[e.identifier]=!1}))},deleteFile:function(e){var t=this;return Zt.delete("".concat(LogViewer.basePath,"/api/files/").concat(e.identifier),{params:{host:this.hostQueryParam}}).then((function(){return t.loadFolders()}))},clearCacheForFolder:function(e){var t=this;return this.clearingCache[e.identifier]=!0,Zt.post("".concat(LogViewer.basePath,"/api/folders/").concat(e.identifier,"/clear-cache"),{},{params:{host:this.hostQueryParam}}).then((function(){e.files.some((function(e){return e.identifier===t.selectedFileIdentifier}))&&Mi().loadLogs(),t.cacheRecentlyCleared[e.identifier]=!0,setTimeout((function(){return t.cacheRecentlyCleared[e.identifier]=!1}),2e3)})).catch((function(e){})).finally((function(){t.clearingCache[e.identifier]=!1}))},deleteFolder:function(e){var t=this;return this.deleting[e.identifier]=!0,Zt.delete("".concat(LogViewer.basePath,"/api/folders/").concat(e.identifier),{params:{host:this.hostQueryParam}}).then((function(){return t.loadFolders()})).catch((function(e){})).finally((function(){t.deleting[e.identifier]=!1}))},deleteSelectedFiles:function(){return Zt.post("".concat(LogViewer.basePath,"/api/delete-multiple-files"),{files:this.filesChecked},{params:{host:this.hostQueryParam}})},clearCacheForAllFiles:function(){var e=this;this.clearingCache["*"]=!0,Zt.post("".concat(LogViewer.basePath,"/api/clear-cache-all"),{},{params:{host:this.hostQueryParam}}).then((function(){e.cacheRecentlyCleared["*"]=!0,setTimeout((function(){return e.cacheRecentlyCleared["*"]=!1}),2e3),Mi().loadLogs()})).catch((function(e){})).finally((function(){return e.clearingCache["*"]=!1}))}}}),Di=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(t)try{e=e.replace(new RegExp(t,"gi"),"$&")}catch(e){}return Ui(e).replace(/<mark>/g,"").replace(/<\/mark>/g,"")},Ui=function(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'"};return e.replace(/[&<>"']/g,(function(e){return t[e]}))},$i=function(e){var t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t);var n=document.getSelection().rangeCount>0&&document.getSelection().getRangeAt(0);t.select(),document.execCommand("copy"),document.body.removeChild(t),n&&(document.getSelection().removeAllRanges(),document.getSelection().addRange(n))},Hi=function(e,t,n){var r=e.currentRoute.value,o={host:r.query.host||void 0,file:r.query.file||void 0,query:r.query.query||void 0,page:r.query.page||void 0};"host"===t?(o.file=void 0,o.page=void 0):"file"===t&&void 0!==o.page&&(o.page=void 0),o[t]=n?String(n):void 0,e.push({name:"home",query:o})},zi=function(){var e=(0,r.ref)({});return{dropdownDirections:e,calculateDropdownDirection:function(t){e.value[t.dataset.toggleId]=function(e){window.innerWidth||document.documentElement.clientWidth;var t=window.innerHeight||document.documentElement.clientHeight;return e.getBoundingClientRect().bottom+190=0&&null===n[r].offsetParent;)r--;return n[r]?n[r]:null},ta=function(e,t){for(var n=Array.from(document.querySelectorAll(".".concat(t))),r=n.findIndex((function(t){return t===e}))+1;r0&&t[0].focus();else if(e.key===Xi.Hosts){e.preventDefault();var r=document.getElementById("hosts-toggle-button");null==r||r.click()}else if(e.key===Xi.Severity){e.preventDefault();var o=document.getElementById("severity-dropdown-toggle");null==o||o.click()}else if(e.key===Xi.Settings){e.preventDefault();var i=document.querySelector("#desktop-site-settings .menu-button");null==i||i.click()}else if(e.key===Xi.Search){e.preventDefault();var a=document.getElementById("query");null==a||a.focus()}else if(e.key===Xi.Refresh){e.preventDefault();var l=document.getElementById("reload-logs-button");null==l||l.click()}},oa=function(e){if("ArrowLeft"===e.key)e.preventDefault(),function(){var e=document.querySelector(".file-item-container.active .file-item-info");if(e)e.nextElementSibling.focus();else{var t,n=document.querySelector(".file-item-container .file-item-info");null==n||null===(t=n.nextElementSibling)||void 0===t||t.focus()}}();else if("ArrowRight"===e.key){var t=na(document.activeElement,Ji),n=Array.from(document.querySelectorAll(".".concat(Qi)));n.length>t&&(e.preventDefault(),n[t].focus())}else if("ArrowUp"===e.key){var r=ea(document.activeElement,Ji);r&&(e.preventDefault(),r.focus())}else if("ArrowDown"===e.key){var o=ta(document.activeElement,Ji);o&&(e.preventDefault(),o.focus())}},ia=function(e){if("ArrowLeft"===e.key){var t=na(document.activeElement,Qi),n=Array.from(document.querySelectorAll(".".concat(Ji)));n.length>t&&(e.preventDefault(),n[t].focus())}else if("ArrowUp"===e.key){var r=ea(document.activeElement,Qi);r&&(e.preventDefault(),r.focus())}else if("ArrowDown"===e.key){var o=ta(document.activeElement,Qi);o&&(e.preventDefault(),o.focus())}else if("Enter"===e.key||" "===e.key){e.preventDefault();var i=document.activeElement;i.click(),i.focus()}},aa=function(e){if("ArrowUp"===e.key){var t=ea(document.activeElement,Yi);t&&(e.preventDefault(),t.focus())}else if("ArrowDown"===e.key){var n=ta(document.activeElement,Yi);n&&(e.preventDefault(),n.focus())}else"ArrowRight"===e.key&&(e.preventDefault(),document.activeElement.nextElementSibling.focus())},la=function(e){if("ArrowLeft"===e.key)e.preventDefault(),document.activeElement.previousElementSibling.focus();else if("ArrowRight"===e.key){e.preventDefault();var t=Array.from(document.querySelectorAll(".".concat(Ji)));t.length>0&&t[0].focus()}};function sa(e){return sa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},sa(e)}function ca(){ca=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function c(e,t,n,o){var i=t&&t.prototype instanceof d?t:d,a=Object.create(i.prototype),l=new k(o||[]);return r(a,"_invoke",{value:C(e,n,l)}),a}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var f={};function d(){}function p(){}function h(){}var v={};s(v,i,(function(){return this}));var m=Object.getPrototypeOf,g=m&&m(m(S([])));g&&g!==t&&n.call(g,i)&&(v=g);var y=h.prototype=d.prototype=Object.create(v);function b(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function o(r,i,a,l){var s=u(e[r],e,i);if("throw"!==s.type){var c=s.arg,f=c.value;return f&&"object"==sa(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){o("next",e,a,l)}),(function(e){o("throw",e,a,l)})):t.resolve(f).then((function(e){c.value=e,a(c)}),(function(e){return o("throw",e,a,l)}))}l(s.arg)}var i;r(this,"_invoke",{value:function(e,n){function r(){return new t((function(t,r){o(e,n,t,r)}))}return i=i?i.then(r,r):r()}})}function C(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return O()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var l=_(a,n);if(l){if(l===f)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=u(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===f)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}function _(e,t){var n=t.method,r=e.iterator[n];if(void 0===r)return t.delegate=null,"throw"===n&&e.iterator.return&&(t.method="return",t.arg=void 0,_(e,t),"throw"===t.method)||"return"!==n&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+n+"' method")),f;var o=u(r,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,f;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function E(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(E,this),this.reset(!0)}function S(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,o=function t(){for(;++r=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=n.call(i,"catchLoc"),s=n.call(i,"finallyLoc");if(l&&s){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;x(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:S(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},e}function ua(e,t,n,r,o,i,a){try{var l=e[i](a),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}var fa={class:"file-item group"},da={key:0,class:"sr-only"},pa={key:1,class:"sr-only"},ha={key:2,class:"my-auto mr-2"},va=["onClick","checked","value"],ma={class:"file-name"},ga=(0,r.createElementVNode)("span",{class:"sr-only"},"Name:",-1),ya={class:"file-size"},ba=(0,r.createElementVNode)("span",{class:"sr-only"},"Size:",-1),wa={class:"py-2"},Ca={class:"text-brand-500"},_a=["href"],Ea=(0,r.createElementVNode)("div",{class:"divider"},null,-1);const xa={__name:"FileListItem",props:{logFile:{type:Object,required:!0},showSelectToggle:{type:Boolean,default:!1}},emits:["selectForDeletion"],setup:function(e,t){t.emit;var n=e,o=Fi(),i=Nr(),a=zi(),l=a.dropdownDirections,s=a.calculateDropdownDirection,c=(0,r.computed)((function(){return o.selectedFile&&o.selectedFile.identifier===n.logFile.identifier})),u=function(){var e,t=(e=ca().mark((function e(){return ca().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!confirm("Are you sure you want to delete the log file '".concat(n.logFile.name,"'? THIS ACTION CANNOT BE UNDONE."))){e.next=6;break}return e.next=3,o.deleteFile(n.logFile);case 3:return n.logFile.identifier===o.selectedFileIdentifier&&Hi(i,"file",null),e.next=6,o.loadFolders();case 6:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){ua(i,r,o,a,l,"next",e)}function l(e){ua(i,r,o,a,l,"throw",e)}a(void 0)}))});return function(){return t.apply(this,arguments)}}(),f=function(){o.checkBoxToggle(n.logFile.identifier)},d=function(){o.toggleCheckboxVisibility(),f()};return function(t,n){return(0,r.openBlock)(),(0,r.createElementBlock)("div",{class:(0,r.normalizeClass)(["file-item-container",[(0,r.unref)(c)?"active":""]])},[(0,r.createVNode)((0,r.unref)(Co),null,{default:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("div",fa,[(0,r.createElementVNode)("button",{class:"file-item-info",onKeydown:n[0]||(n[0]=function(){return(0,r.unref)(aa)&&(0,r.unref)(aa).apply(void 0,arguments)})},[(0,r.unref)(c)?(0,r.createCommentVNode)("",!0):((0,r.openBlock)(),(0,r.createElementBlock)("span",da,"Select log file")),(0,r.unref)(c)?((0,r.openBlock)(),(0,r.createElementBlock)("span",pa,"Deselect log file")):(0,r.createCommentVNode)("",!0),e.logFile.can_delete?(0,r.withDirectives)(((0,r.openBlock)(),(0,r.createElementBlock)("span",ha,[(0,r.createElementVNode)("input",{type:"checkbox",onClick:(0,r.withModifiers)(f,["stop"]),checked:(0,r.unref)(o).isChecked(e.logFile),value:(0,r.unref)(o).isChecked(e.logFile)},null,8,va)],512)),[[r.vShow,(0,r.unref)(o).checkBoxesVisibility]]):(0,r.createCommentVNode)("",!0),(0,r.createElementVNode)("span",ma,[ga,(0,r.createTextVNode)((0,r.toDisplayString)(e.logFile.name),1)]),(0,r.createElementVNode)("span",ya,[ba,(0,r.createTextVNode)((0,r.toDisplayString)(e.logFile.size_formatted),1)])],32),(0,r.createVNode)((0,r.unref)(_o),{as:"button",class:"file-dropdown-toggle group-hover:border-brand-600 group-hover:dark:border-brand-800","data-toggle-id":e.logFile.identifier,onKeydown:(0,r.unref)(la),onClick:n[1]||(n[1]=(0,r.withModifiers)((function(e){return(0,r.unref)(s)(e.target)}),["stop"]))},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(Ro),{class:"w-4 h-4 pointer-events-none"})]})),_:1},8,["data-toggle-id","onKeydown"])]),(0,r.createVNode)(r.Transition,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-90","enter-active-class":"transition ease-out duration-100","enter-from-class":"opacity-0 scale-90","enter-to-class":"opacity-100 scale-100"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(Eo),{as:"div",class:(0,r.normalizeClass)(["dropdown w-48",[(0,r.unref)(l)[e.logFile.identifier]]])},{default:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("div",wa,[(0,r.createVNode)((0,r.unref)(xo),{onClick:n[2]||(n[2]=(0,r.withModifiers)((function(t){return(0,r.unref)(o).clearCacheForFile(e.logFile)}),["stop","prevent"]))},{default:(0,r.withCtx)((function(t){var n=t.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([n?"active":""])},[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Lo),{class:"h-4 w-4 mr-2"},null,512),[[r.vShow,!(0,r.unref)(o).clearingCache[e.logFile.identifier]]]),(0,r.withDirectives)((0,r.createVNode)(Zi,null,null,512),[[r.vShow,(0,r.unref)(o).clearingCache[e.logFile.identifier]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Clear index",512),[[r.vShow,!(0,r.unref)(o).cacheRecentlyCleared[e.logFile.identifier]&&!(0,r.unref)(o).clearingCache[e.logFile.identifier]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Clearing...",512),[[r.vShow,!(0,r.unref)(o).cacheRecentlyCleared[e.logFile.identifier]&&(0,r.unref)(o).clearingCache[e.logFile.identifier]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",Ca,"Index cleared",512),[[r.vShow,(0,r.unref)(o).cacheRecentlyCleared[e.logFile.identifier]]])],2)]})),_:1}),e.logFile.can_download?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(xo),{key:0,onClick:n[3]||(n[3]=(0,r.withModifiers)((function(){}),["stop"]))},{default:(0,r.withCtx)((function(t){var n=t.active;return[(0,r.createElementVNode)("a",{href:e.logFile.download_url,download:"",class:(0,r.normalizeClass)([n?"active":""])},[(0,r.createVNode)((0,r.unref)(Ao),{class:"w-4 h-4 mr-2"}),(0,r.createTextVNode)(" Download ")],10,_a)]})),_:1})):(0,r.createCommentVNode)("",!0),e.logFile.can_delete?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:1},[Ea,(0,r.createVNode)((0,r.unref)(xo),{onClick:(0,r.withModifiers)(u,["stop","prevent"])},{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([t?"active":""])},[(0,r.createVNode)((0,r.unref)(No),{class:"w-4 h-4 mr-2"}),(0,r.createTextVNode)(" Delete ")],2)]})),_:1},8,["onClick"]),(0,r.createVNode)((0,r.unref)(xo),{onClick:(0,r.withModifiers)(d,["stop"])},{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([t?"active":""])},[(0,r.createVNode)((0,r.unref)(No),{class:"w-4 h-4 mr-2"}),(0,r.createTextVNode)(" Delete Multiple ")],2)]})),_:1},8,["onClick"])],64)):(0,r.createCommentVNode)("",!0)])]})),_:1},8,["class"])]})),_:1})]})),_:1})],2)}}},ka=xa;var Sa=n(904),Oa=n(908),Na=n(960),Pa=n(817),Ta=n(902),Va=n(390),Ra=n(69),La=n(520),Aa={class:"checkmark w-[18px] h-[18px] bg-gray-50 dark:bg-gray-800 rounded border dark:border-gray-600 inline-flex items-center justify-center"};const ja={__name:"Checkmark",props:{checked:{type:Boolean,required:!0}},setup:function(e){return function(t,n){return(0,r.openBlock)(),(0,r.createElementBlock)("div",Aa,[e.checked?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(La),{key:0,width:"18",height:"18",class:"w-full h-full"})):(0,r.createCommentVNode)("",!0)])}}};var Ba={width:"884",height:"1279",viewBox:"0 0 884 1279",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Ia=[(0,r.createStaticVNode)('',14)];const Ma={},Fa=(0,Ki.Z)(Ma,[["render",function(e,t){return(0,r.openBlock)(),(0,r.createElementBlock)("svg",Ba,Ia)}]]);var Da=(0,r.createElementVNode)("span",{class:"sr-only"},"Settings dropdown",-1),Ua={class:"py-2"},$a=(0,r.createElementVNode)("div",{class:"label"},"Settings",-1),Ha=(0,r.createElementVNode)("span",{class:"ml-3"},"Shorter stack traces",-1),za=(0,r.createElementVNode)("div",{class:"divider"},null,-1),qa=(0,r.createElementVNode)("div",{class:"label"},"Actions",-1),Wa={class:"text-brand-500"},Ka={class:"text-brand-500"},Ga=(0,r.createElementVNode)("div",{class:"divider"},null,-1),Za=["innerHTML"],Ya=(0,r.createElementVNode)("div",{class:"divider"},null,-1),Ja={class:"w-4 h-4 mr-3 flex flex-col items-center"};const Qa={__name:"SiteSettingsDropdown",setup:function(e){var t=Mi(),n=Fi(),o=(0,r.ref)(!1),i=function(){$i(window.location.href),o.value=!0,setTimeout((function(){return o.value=!1}),2e3)};return(0,r.watch)((function(){return t.shorterStackTraces}),(function(){return t.loadLogs()})),function(e,a){return(0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(Co),{as:"div",class:"relative"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(_o),{as:"button",class:"menu-button"},{default:(0,r.withCtx)((function(){return[Da,(0,r.createVNode)((0,r.unref)(Sa),{class:"w-5 h-5"})]})),_:1}),(0,r.createVNode)(r.Transition,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-90","enter-active-class":"transition ease-out duration-100","enter-from-class":"opacity-0 scale-90","enter-to-class":"opacity-100 scale-100"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(Eo),{as:"div",style:{"min-width":"250px"},class:"dropdown"},{default:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("div",Ua,[$a,(0,r.createVNode)((0,r.unref)(xo),null,{default:(0,r.withCtx)((function(e){var n=e.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([n?"active":""]),onClick:a[0]||(a[0]=(0,r.withModifiers)((function(e){return(0,r.unref)(t).shorterStackTraces=!(0,r.unref)(t).shorterStackTraces}),["stop","prevent"]))},[(0,r.createVNode)(ja,{checked:(0,r.unref)(t).shorterStackTraces},null,8,["checked"]),Ha],2)]})),_:1}),za,qa,(0,r.createVNode)((0,r.unref)(xo),{onClick:(0,r.withModifiers)((0,r.unref)(n).clearCacheForAllFiles,["stop","prevent"])},{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([t?"active":""])},[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Lo),{class:"w-4 h-4 mr-1.5"},null,512),[[r.vShow,!(0,r.unref)(n).clearingCache["*"]]]),(0,r.withDirectives)((0,r.createVNode)(Zi,{class:"w-4 h-4 mr-1.5"},null,512),[[r.vShow,(0,r.unref)(n).clearingCache["*"]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Clear indices for all files",512),[[r.vShow,!(0,r.unref)(n).cacheRecentlyCleared["*"]&&!(0,r.unref)(n).clearingCache["*"]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Please wait...",512),[[r.vShow,!(0,r.unref)(n).cacheRecentlyCleared["*"]&&(0,r.unref)(n).clearingCache["*"]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",Wa,"File indices cleared",512),[[r.vShow,(0,r.unref)(n).cacheRecentlyCleared["*"]]])],2)]})),_:1},8,["onClick"]),(0,r.createVNode)((0,r.unref)(xo),{onClick:(0,r.withModifiers)(i,["stop","prevent"])},{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([t?"active":""])},[(0,r.createVNode)((0,r.unref)(Oa),{class:"w-4 h-4"}),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Share this page",512),[[r.vShow,!o.value]]),(0,r.withDirectives)((0,r.createElementVNode)("span",Ka,"Link copied!",512),[[r.vShow,o.value]])],2)]})),_:1},8,["onClick"]),Ga,(0,r.createVNode)((0,r.unref)(xo),{onClick:a[1]||(a[1]=(0,r.withModifiers)((function(e){return(0,r.unref)(t).toggleTheme()}),["stop","prevent"]))},{default:(0,r.withCtx)((function(e){var n=e.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([n?"active":""])},[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Na),{class:"w-4 h-4"},null,512),[[r.vShow,(0,r.unref)(t).theme===(0,r.unref)(Ii).System]]),(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Pa),{class:"w-4 h-4"},null,512),[[r.vShow,(0,r.unref)(t).theme===(0,r.unref)(Ii).Light]]),(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Ta),{class:"w-4 h-4"},null,512),[[r.vShow,(0,r.unref)(t).theme===(0,r.unref)(Ii).Dark]]),(0,r.createElementVNode)("span",null,[(0,r.createTextVNode)("Theme: "),(0,r.createElementVNode)("span",{innerHTML:(0,r.unref)(t).theme,class:"font-semibold"},null,8,Za)])],2)]})),_:1}),(0,r.createVNode)((0,r.unref)(xo),null,{default:(0,r.withCtx)((function(e){var n=e.active;return[(0,r.createElementVNode)("button",{onClick:a[2]||(a[2]=function(e){return(0,r.unref)(t).helpSlideOverOpen=!0}),class:(0,r.normalizeClass)([n?"active":""])},[(0,r.createVNode)((0,r.unref)(Va),{class:"w-4 h-4"}),(0,r.createTextVNode)(" Keyboard Shortcuts ")],2)]})),_:1}),(0,r.createVNode)((0,r.unref)(xo),null,{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("a",{href:"https://log-viewer.opcodes.io/docs",target:"_blank",class:(0,r.normalizeClass)([t?"active":""])},[(0,r.createVNode)((0,r.unref)(Va),{class:"w-4 h-4"}),(0,r.createTextVNode)(" Documentation ")],2)]})),_:1}),(0,r.createVNode)((0,r.unref)(xo),null,{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("a",{href:"https://www.github.com/opcodesio/log-viewer",target:"_blank",class:(0,r.normalizeClass)([t?"active":""])},[(0,r.createVNode)((0,r.unref)(Va),{class:"w-4 h-4"}),(0,r.createTextVNode)(" Help ")],2)]})),_:1}),Ya,(0,r.createVNode)((0,r.unref)(xo),null,{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("a",{href:"https://www.buymeacoffee.com/arunas",target:"_blank",class:(0,r.normalizeClass)([t?"active":""])},[(0,r.createElementVNode)("div",Ja,[(0,r.createVNode)(Fa,{class:"h-4 w-auto"})]),(0,r.createElementVNode)("strong",{class:(0,r.normalizeClass)([t?"text-white":"text-brand-500"])},"Show your support",2),(0,r.createVNode)((0,r.unref)(Ra),{class:"ml-2 w-4 h-4 opacity-75"})],2)]})),_:1})])]})),_:1})]})),_:1})]})),_:1})}}};var Xa=(e=>(e[e.None=1]="None",e[e.Focusable=2]="Focusable",e[e.Hidden=4]="Hidden",e))(Xa||{});let el=(0,r.defineComponent)({name:"Hidden",props:{as:{type:[Object,String],default:"div"},features:{type:Number,default:1}},setup:(e,{slots:t,attrs:n})=>()=>{let{features:r,...o}=e;return Ar({ourProps:{"aria-hidden":2==(2&r)||void 0,style:{position:"fixed",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",...4==(4&r)&&2!=(2&r)&&{display:"none"}}},theirProps:o,slot:{},attrs:n,slots:t,name:"Hidden"})}});function tl(e={},t=null,n=[]){for(let[r,o]of Object.entries(e))rl(n,nl(t,r),o);return n}function nl(e,t){return e?e+"["+t+"]":t}function rl(e,t,n){if(Array.isArray(n))for(let[r,o]of n.entries())rl(e,nl(t,r.toString()),o);else n instanceof Date?e.push([t,n.toISOString()]):"boolean"==typeof n?e.push([t,n?"1":"0"]):"string"==typeof n?e.push([t,n]):"number"==typeof n?e.push([t,`${n}`]):null==n?e.push([t,""]):tl(n,t,e)}function ol(e,t){return e===t}var il=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(il||{}),al=(e=>(e[e.Single=0]="Single",e[e.Multi=1]="Multi",e))(al||{}),ll=(e=>(e[e.Pointer=0]="Pointer",e[e.Other=1]="Other",e))(ll||{});let sl=Symbol("ListboxContext");function cl(e){let t=(0,r.inject)(sl,null);if(null===t){let t=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,cl),t}return t}let ul=(0,r.defineComponent)({name:"Listbox",emits:{"update:modelValue":e=>!0},props:{as:{type:[Object,String],default:"template"},disabled:{type:[Boolean],default:!1},by:{type:[String,Function],default:()=>ol},horizontal:{type:[Boolean],default:!1},modelValue:{type:[Object,String,Number,Boolean],default:void 0},defaultValue:{type:[Object,String,Number,Boolean],default:void 0},name:{type:String,optional:!0},multiple:{type:[Boolean],default:!1}},inheritAttrs:!1,setup(e,{slots:t,attrs:n,emit:o}){let i=(0,r.ref)(1),a=(0,r.ref)(null),l=(0,r.ref)(null),s=(0,r.ref)(null),c=(0,r.ref)([]),u=(0,r.ref)(""),f=(0,r.ref)(null),d=(0,r.ref)(1);function p(e=(e=>e)){let t=null!==f.value?c.value[f.value]:null,n=co(e(c.value.slice()),(e=>zr(e.dataRef.domRef))),r=t?n.indexOf(t):null;return-1===r&&(r=null),{options:n,activeOptionIndex:r}}let h=(0,r.computed)((()=>e.multiple?1:0)),[v,m]=function(e,t,n){let o=(0,r.ref)(null==n?void 0:n.value),i=(0,r.computed)((()=>void 0!==e.value));return[(0,r.computed)((()=>i.value?e.value:o.value)),function(e){return i.value||(o.value=e),null==t?void 0:t(e)}]}((0,r.computed)((()=>void 0===e.modelValue?Tr(h.value,{1:[],0:void 0}):e.modelValue)),(e=>o("update:modelValue",e)),(0,r.computed)((()=>e.defaultValue))),g={listboxState:i,value:v,mode:h,compare(t,n){if("string"==typeof e.by){let r=e.by;return(null==t?void 0:t[r])===(null==n?void 0:n[r])}return e.by(t,n)},orientation:(0,r.computed)((()=>e.horizontal?"horizontal":"vertical")),labelRef:a,buttonRef:l,optionsRef:s,disabled:(0,r.computed)((()=>e.disabled)),options:c,searchQuery:u,activeOptionIndex:f,activationTrigger:d,closeListbox(){e.disabled||1!==i.value&&(i.value=1,f.value=null)},openListbox(){e.disabled||0!==i.value&&(i.value=0)},goToOption(t,n,r){if(e.disabled||1===i.value)return;let o=p(),a=Hr(t===$r.Specific?{focus:$r.Specific,id:n}:{focus:t},{resolveItems:()=>o.options,resolveActiveIndex:()=>o.activeOptionIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.disabled});u.value="",f.value=a,d.value=null!=r?r:1,c.value=o.options},search(t){if(e.disabled||1===i.value)return;let n=""!==u.value?0:1;u.value+=t.toLowerCase();let r=(null!==f.value?c.value.slice(f.value+n).concat(c.value.slice(0,f.value+n)):c.value).find((e=>e.dataRef.textValue.startsWith(u.value)&&!e.dataRef.disabled)),o=r?c.value.indexOf(r):-1;-1===o||o===f.value||(f.value=o,d.value=1)},clearSearch(){e.disabled||1!==i.value&&""!==u.value&&(u.value="")},registerOption(e,t){let n=p((n=>[...n,{id:e,dataRef:t}]));c.value=n.options,f.value=n.activeOptionIndex},unregisterOption(e){let t=p((t=>{let n=t.findIndex((t=>t.id===e));return-1!==n&&t.splice(n,1),t}));c.value=t.options,f.value=t.activeOptionIndex,d.value=1},select(t){e.disabled||m(Tr(h.value,{0:()=>t,1:()=>{let e=(0,r.toRaw)(g.value.value).slice(),n=(0,r.toRaw)(t),o=e.findIndex((e=>g.compare(n,(0,r.toRaw)(e))));return-1===o?e.push(n):e.splice(o,1),e}}))}};ho([l,s],((e,t)=>{var n;g.closeListbox(),io(t,oo.Loose)||(e.preventDefault(),null==(n=zr(l))||n.focus())}),(0,r.computed)((()=>0===i.value))),(0,r.provide)(sl,g),Yr((0,r.computed)((()=>Tr(i.value,{0:Gr.Open,1:Gr.Closed}))));let y=(0,r.computed)((()=>{var e;return null==(e=zr(l))?void 0:e.closest("form")}));return(0,r.onMounted)((()=>{(0,r.watch)([y],(()=>{if(y.value&&void 0!==e.defaultValue)return y.value.addEventListener("reset",t),()=>{var e;null==(e=y.value)||e.removeEventListener("reset",t)};function t(){g.select(e.defaultValue)}}),{immediate:!0})})),()=>{let{name:o,modelValue:a,disabled:l,...s}=e,c={open:0===i.value,disabled:l,value:v.value};return(0,r.h)(r.Fragment,[...null!=o&&null!=v.value?tl({[o]:v.value}).map((([e,t])=>(0,r.h)(el,function(e){let t=Object.assign({},e);for(let e in t)void 0===t[e]&&delete t[e];return t}({features:Xa.Hidden,key:e,as:"input",type:"hidden",hidden:!0,readOnly:!0,name:e,value:t})))):[],Ar({ourProps:{},theirProps:{...n,...Mr(s,["defaultValue","onUpdate:modelValue","horizontal","multiple","by"])},slot:c,slots:t,attrs:n,name:"Listbox"})])}}}),fl=(0,r.defineComponent)({name:"ListboxLabel",props:{as:{type:[Object,String],default:"label"},id:{type:String,default:()=>`headlessui-listbox-label-${Dr()}`}},setup(e,{attrs:t,slots:n}){let r=cl("ListboxLabel");function o(){var e;null==(e=zr(r.buttonRef))||e.focus({preventScroll:!0})}return()=>{let i={open:0===r.listboxState.value,disabled:r.disabled.value},{id:a,...l}=e;return Ar({ourProps:{id:a,ref:r.labelRef,onClick:o},theirProps:l,slot:i,attrs:t,slots:n,name:"ListboxLabel"})}}}),dl=(0,r.defineComponent)({name:"ListboxButton",props:{as:{type:[Object,String],default:"button"},id:{type:String,default:()=>`headlessui-listbox-button-${Dr()}`}},setup(e,{attrs:t,slots:n,expose:o}){let i=cl("ListboxButton");function a(e){switch(e.key){case Ur.Space:case Ur.Enter:case Ur.ArrowDown:e.preventDefault(),i.openListbox(),(0,r.nextTick)((()=>{var e;null==(e=zr(i.optionsRef))||e.focus({preventScroll:!0}),i.value.value||i.goToOption($r.First)}));break;case Ur.ArrowUp:e.preventDefault(),i.openListbox(),(0,r.nextTick)((()=>{var e;null==(e=zr(i.optionsRef))||e.focus({preventScroll:!0}),i.value.value||i.goToOption($r.Last)}))}}function l(e){if(e.key===Ur.Space)e.preventDefault()}function s(e){i.disabled.value||(0===i.listboxState.value?(i.closeListbox(),(0,r.nextTick)((()=>{var e;return null==(e=zr(i.buttonRef))?void 0:e.focus({preventScroll:!0})}))):(e.preventDefault(),i.openListbox(),function(e){requestAnimationFrame((()=>requestAnimationFrame(e)))}((()=>{var e;return null==(e=zr(i.optionsRef))?void 0:e.focus({preventScroll:!0})}))))}o({el:i.buttonRef,$el:i.buttonRef});let c=Qr((0,r.computed)((()=>({as:e.as,type:t.type}))),i.buttonRef);return()=>{var r,o;let u={open:0===i.listboxState.value,disabled:i.disabled.value,value:i.value.value},{id:f,...d}=e;return Ar({ourProps:{ref:i.buttonRef,id:f,type:c.value,"aria-haspopup":"listbox","aria-controls":null==(r=zr(i.optionsRef))?void 0:r.id,"aria-expanded":i.disabled.value?void 0:0===i.listboxState.value,"aria-labelledby":i.labelRef.value?[null==(o=zr(i.labelRef))?void 0:o.id,f].join(" "):void 0,disabled:!0===i.disabled.value||void 0,onKeydown:a,onKeyup:l,onClick:s},theirProps:d,slot:u,attrs:t,slots:n,name:"ListboxButton"})}}}),pl=(0,r.defineComponent)({name:"ListboxOptions",props:{as:{type:[Object,String],default:"ul"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:()=>`headlessui-listbox-options-${Dr()}`}},setup(e,{attrs:t,slots:n,expose:o}){let i=cl("ListboxOptions"),a=(0,r.ref)(null);function l(e){switch(a.value&&clearTimeout(a.value),e.key){case Ur.Space:if(""!==i.searchQuery.value)return e.preventDefault(),e.stopPropagation(),i.search(e.key);case Ur.Enter:if(e.preventDefault(),e.stopPropagation(),null!==i.activeOptionIndex.value){let e=i.options.value[i.activeOptionIndex.value];i.select(e.dataRef.value)}0===i.mode.value&&(i.closeListbox(),(0,r.nextTick)((()=>{var e;return null==(e=zr(i.buttonRef))?void 0:e.focus({preventScroll:!0})})));break;case Tr(i.orientation.value,{vertical:Ur.ArrowDown,horizontal:Ur.ArrowRight}):return e.preventDefault(),e.stopPropagation(),i.goToOption($r.Next);case Tr(i.orientation.value,{vertical:Ur.ArrowUp,horizontal:Ur.ArrowLeft}):return e.preventDefault(),e.stopPropagation(),i.goToOption($r.Previous);case Ur.Home:case Ur.PageUp:return e.preventDefault(),e.stopPropagation(),i.goToOption($r.First);case Ur.End:case Ur.PageDown:return e.preventDefault(),e.stopPropagation(),i.goToOption($r.Last);case Ur.Escape:e.preventDefault(),e.stopPropagation(),i.closeListbox(),(0,r.nextTick)((()=>{var e;return null==(e=zr(i.buttonRef))?void 0:e.focus({preventScroll:!0})}));break;case Ur.Tab:e.preventDefault(),e.stopPropagation();break;default:1===e.key.length&&(i.search(e.key),a.value=setTimeout((()=>i.clearSearch()),350))}}o({el:i.optionsRef,$el:i.optionsRef});let s=Zr(),c=(0,r.computed)((()=>null!==s?s.value===Gr.Open:0===i.listboxState.value));return()=>{var r,o,a,s;let u={open:0===i.listboxState.value},{id:f,...d}=e;return Ar({ourProps:{"aria-activedescendant":null===i.activeOptionIndex.value||null==(r=i.options.value[i.activeOptionIndex.value])?void 0:r.id,"aria-multiselectable":1===i.mode.value||void 0,"aria-labelledby":null!=(s=null==(o=zr(i.labelRef))?void 0:o.id)?s:null==(a=zr(i.buttonRef))?void 0:a.id,"aria-orientation":i.orientation.value,id:f,onKeydown:l,role:"listbox",tabIndex:0,ref:i.optionsRef},theirProps:d,slot:u,attrs:t,slots:n,features:Rr.RenderStrategy|Rr.Static,visible:c.value,name:"ListboxOptions"})}}}),hl=(0,r.defineComponent)({name:"ListboxOption",props:{as:{type:[Object,String],default:"li"},value:{type:[Object,String,Number,Boolean]},disabled:{type:Boolean,default:!1},id:{type:String,default:()=>`headlessui-listbox.option-${Dr()}`}},setup(e,{slots:t,attrs:n,expose:o}){let i=cl("ListboxOption"),a=(0,r.ref)(null);o({el:a,$el:a});let l=(0,r.computed)((()=>null!==i.activeOptionIndex.value&&i.options.value[i.activeOptionIndex.value].id===e.id)),s=(0,r.computed)((()=>Tr(i.mode.value,{0:()=>i.compare((0,r.toRaw)(i.value.value),(0,r.toRaw)(e.value)),1:()=>(0,r.toRaw)(i.value.value).some((t=>i.compare((0,r.toRaw)(t),(0,r.toRaw)(e.value))))}))),c=(0,r.computed)((()=>Tr(i.mode.value,{1:()=>{var t;let n=(0,r.toRaw)(i.value.value);return(null==(t=i.options.value.find((e=>n.some((t=>i.compare((0,r.toRaw)(t),(0,r.toRaw)(e.dataRef.value)))))))?void 0:t.id)===e.id},0:()=>s.value}))),u=(0,r.computed)((()=>({disabled:e.disabled,value:e.value,textValue:"",domRef:a})));function f(t){if(e.disabled)return t.preventDefault();i.select(e.value),0===i.mode.value&&(i.closeListbox(),(0,r.nextTick)((()=>{var e;return null==(e=zr(i.buttonRef))?void 0:e.focus({preventScroll:!0})})))}function d(){if(e.disabled)return i.goToOption($r.Nothing);i.goToOption($r.Specific,e.id)}(0,r.onMounted)((()=>{var e,t;let n=null==(t=null==(e=zr(a))?void 0:e.textContent)?void 0:t.toLowerCase().trim();void 0!==n&&(u.value.textValue=n)})),(0,r.onMounted)((()=>i.registerOption(e.id,u))),(0,r.onUnmounted)((()=>i.unregisterOption(e.id))),(0,r.onMounted)((()=>{(0,r.watch)([i.listboxState,s],(()=>{0===i.listboxState.value&&(!s.value||Tr(i.mode.value,{1:()=>{c.value&&i.goToOption($r.Specific,e.id)},0:()=>{i.goToOption($r.Specific,e.id)}}))}),{immediate:!0})})),(0,r.watchEffect)((()=>{0===i.listboxState.value&&(!l.value||0!==i.activationTrigger.value&&(0,r.nextTick)((()=>{var e,t;return null==(t=null==(e=zr(a))?void 0:e.scrollIntoView)?void 0:t.call(e,{block:"nearest"})})))}));let p=mo();function h(e){p.update(e)}function v(t){!p.wasMoved(t)||e.disabled||l.value||i.goToOption($r.Specific,e.id,0)}function m(t){!p.wasMoved(t)||e.disabled||!l.value||i.goToOption($r.Nothing)}return()=>{let{disabled:r}=e,o={active:l.value,selected:s.value,disabled:r},{id:i,value:c,disabled:u,...p}=e;return Ar({ourProps:{id:i,ref:a,role:"option",tabIndex:!0===r?void 0:-1,"aria-disabled":!0===r||void 0,"aria-selected":s.value,disabled:void 0,onClick:f,onFocus:d,onPointerenter:h,onMouseenter:h,onPointermove:v,onMousemove:v,onPointerleave:m,onMouseleave:m},theirProps:p,slot:o,attrs:n,slots:t,name:"ListboxOption"})}}});var vl=n(889),ml={class:"relative mt-1"},gl={class:"block truncate"},yl={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};const bl={__name:"HostSelector",setup:function(e){var t=Nr(),n=Bo();return(0,r.watch)((function(){return n.selectedHost}),(function(e){Hi(t,"host",null!=e&&e.is_remote?e.identifier:null)})),function(e,t){return(0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(ul),{as:"div",modelValue:(0,r.unref)(n).selectedHostIdentifier,"onUpdate:modelValue":t[0]||(t[0]=function(e){return(0,r.unref)(n).selectedHostIdentifier=e})},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(fl),{class:"ml-1 block text-sm text-gray-500 dark:text-gray-400"},{default:(0,r.withCtx)((function(){return[(0,r.createTextVNode)("Select host")]})),_:1}),(0,r.createElementVNode)("div",ml,[(0,r.createVNode)((0,r.unref)(dl),{id:"hosts-toggle-button",class:"cursor-pointer relative text-gray-800 dark:text-gray-200 w-full cursor-default rounded-md border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 py-2 pl-4 pr-10 text-left hover:border-brand-600 hover:dark:border-brand-800 focus:border-brand-500 focus:outline-none focus:ring-1 focus:ring-brand-500 text-sm"},{default:(0,r.withCtx)((function(){var e;return[(0,r.createElementVNode)("span",gl,(0,r.toDisplayString)((null===(e=(0,r.unref)(n).selectedHost)||void 0===e?void 0:e.name)||"Please select a server"),1),(0,r.createElementVNode)("span",yl,[(0,r.createVNode)((0,r.unref)(vl),{class:"h-5 w-5 text-gray-400","aria-hidden":"true"})])]})),_:1}),(0,r.createVNode)(r.Transition,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(pl),{class:"absolute z-20 mt-1 max-h-60 w-full overflow-auto rounded-md shadow-md bg-white dark:bg-gray-800 py-1 border border-gray-200 dark:border-gray-700 ring-1 ring-brand ring-opacity-5 focus:outline-none text-sm"},{default:(0,r.withCtx)((function(){return[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)((0,r.unref)(n).hosts,(function(e){return(0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(hl),{as:"template",key:e.identifier,value:e.identifier},{default:(0,r.withCtx)((function(t){var n=t.active,o=t.selected;return[(0,r.createElementVNode)("li",{class:(0,r.normalizeClass)([n?"text-white bg-brand-600":"text-gray-900 dark:text-gray-300","relative cursor-default select-none py-2 pl-3 pr-9"])},[(0,r.createElementVNode)("span",{class:(0,r.normalizeClass)([o?"font-semibold":"font-normal","block truncate"])},(0,r.toDisplayString)(e.name),3),o?((0,r.openBlock)(),(0,r.createElementBlock)("span",{key:0,class:(0,r.normalizeClass)([n?"text-white":"text-brand-600","absolute inset-y-0 right-0 flex items-center pr-4"])},[(0,r.createVNode)((0,r.unref)(La),{class:"h-5 w-5","aria-hidden":"true"})],2)):(0,r.createCommentVNode)("",!0)],2)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1})])]})),_:1},8,["modelValue"])}}},wl=bl;function Cl(e){return Cl="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Cl(e)}function _l(){_l=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function c(e,t,n,o){var i=t&&t.prototype instanceof d?t:d,a=Object.create(i.prototype),l=new k(o||[]);return r(a,"_invoke",{value:C(e,n,l)}),a}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var f={};function d(){}function p(){}function h(){}var v={};s(v,i,(function(){return this}));var m=Object.getPrototypeOf,g=m&&m(m(S([])));g&&g!==t&&n.call(g,i)&&(v=g);var y=h.prototype=d.prototype=Object.create(v);function b(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function o(r,i,a,l){var s=u(e[r],e,i);if("throw"!==s.type){var c=s.arg,f=c.value;return f&&"object"==Cl(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){o("next",e,a,l)}),(function(e){o("throw",e,a,l)})):t.resolve(f).then((function(e){c.value=e,a(c)}),(function(e){return o("throw",e,a,l)}))}l(s.arg)}var i;r(this,"_invoke",{value:function(e,n){function r(){return new t((function(t,r){o(e,n,t,r)}))}return i=i?i.then(r,r):r()}})}function C(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return O()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var l=_(a,n);if(l){if(l===f)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=u(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===f)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}function _(e,t){var n=t.method,r=e.iterator[n];if(void 0===r)return t.delegate=null,"throw"===n&&e.iterator.return&&(t.method="return",t.arg=void 0,_(e,t),"throw"===t.method)||"return"!==n&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+n+"' method")),f;var o=u(r,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,f;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function E(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(E,this),this.reset(!0)}function S(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,o=function t(){for(;++r=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=n.call(i,"catchLoc"),s=n.call(i,"finallyLoc");if(l&&s){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;x(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:S(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},e}function El(e,t,n,r,o,i,a){try{var l=e[i](a),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}function xl(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){El(i,r,o,a,l,"next",e)}function l(e){El(i,r,o,a,l,"throw",e)}a(void 0)}))}}var kl={class:"flex flex-col h-full py-5"},Sl={class:"mx-3 md:mx-0 mb-1"},Ol={class:"sm:flex sm:flex-col-reverse"},Nl={class:"font-semibold text-brand-700 dark:text-brand-600 text-2xl flex items-center"},Pl=(0,r.createElementVNode)("a",{href:"https://www.github.com/opcodesio/log-viewer",target:"_blank",class:"rounded ml-3 text-gray-400 hover:text-brand-800 dark:hover:text-brand-600 focus:outline-none focus:ring-2 focus:ring-brand-500 dark:focus:ring-brand-700 p-1"},[(0,r.createElementVNode)("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5",viewBox:"0 0 24 24",fill:"currentColor",title:""},[(0,r.createElementVNode)("path",{d:"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"})])],-1),Tl={class:"md:hidden flex-1 flex justify-end"},Vl={type:"button",class:"menu-button"},Rl={key:0},Ll=["href"],Al={key:0,class:"bg-yellow-100 dark:bg-yellow-900 bg-opacity-75 dark:bg-opacity-40 border border-yellow-300 dark:border-yellow-800 rounded-md px-2 py-1 mt-2 text-xs leading-5 text-yellow-700 dark:text-yellow-400"},jl=(0,r.createElementVNode)("code",{class:"font-mono px-2 py-1 bg-gray-100 dark:bg-gray-900 rounded"},"php artisan log-viewer:publish",-1),Bl={key:2,class:"flex justify-between items-baseline mt-6"},Il={class:"ml-1 block text-sm text-gray-500 dark:text-gray-400 truncate"},Ml={class:"text-sm text-gray-500 dark:text-gray-400"},Fl=(0,r.createElementVNode)("label",{for:"file-sort-direction",class:"sr-only"},"Sort direction",-1),Dl=[(0,r.createElementVNode)("option",{value:"desc"},"Newest first",-1),(0,r.createElementVNode)("option",{value:"asc"},"Oldest first",-1)],Ul={key:3,class:"mx-1 mt-1 text-red-600 text-xs"},$l=(0,r.createElementVNode)("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"Please select files to delete and confirm or cancel deletion.",-1),Hl=["onClick"],zl={id:"file-list-container",class:"relative h-full overflow-hidden"},ql=["id"],Wl=["onClick"],Kl={class:"file-item group"},Gl={key:0,class:"sr-only"},Zl={key:1,class:"sr-only"},Yl={class:"file-icon group-hover:hidden group-focus:hidden"},Jl={class:"file-icon hidden group-hover:inline-block group-focus:inline-block"},Ql={class:"file-name"},Xl={key:0},es=(0,r.createElementVNode)("span",{class:"text-gray-500 dark:text-gray-400"},"root",-1),ts={key:1},ns=(0,r.createElementVNode)("span",{class:"sr-only"},"Open folder options",-1),rs={class:"py-2"},os={class:"text-brand-500"},is=["href"],as=(0,r.createElementVNode)("div",{class:"divider"},null,-1),ls=["onClick","disabled"],ss={class:"folder-files pl-3 ml-1 border-l border-gray-200 dark:border-gray-800"},cs={key:0,class:"text-center text-sm text-gray-600 dark:text-gray-400"},us=(0,r.createElementVNode)("p",{class:"mb-5"},"No log files were found.",-1),fs={class:"flex items-center justify-center px-1"},ds=(0,r.createElementVNode)("div",{class:"pointer-events-none absolute z-10 bottom-0 h-4 w-full bg-gradient-to-t from-gray-100 dark:from-gray-900 to-transparent"},null,-1),ps={class:"absolute inset-y-0 left-3 right-7 lg:left-0 lg:right-0 z-10"},hs={class:"rounded-md bg-white text-gray-800 dark:bg-gray-700 dark:text-gray-200 opacity-90 w-full h-full flex items-center justify-center"};const vs={__name:"FileList",setup:function(e){var t=Nr(),n=Pr(),o=Bo(),i=Fi(),a=zi(),l=a.dropdownDirections,s=a.calculateDropdownDirection,c=function(){var e=xl(_l().mark((function e(n){return _l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!confirm("Are you sure you want to delete the log folder '".concat(n.path,"'? THIS ACTION CANNOT BE UNDONE."))){e.next=4;break}return e.next=3,i.deleteFolder(n);case 3:n.files.some((function(e){return e.identifier===i.selectedFileIdentifier}))&&Hi(t,"file",null);case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),u=function(){var e=xl(_l().mark((function e(){return _l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!confirm("Are you sure you want to delete selected log files? THIS ACTION CANNOT BE UNDONE.")){e.next=7;break}return e.next=3,i.deleteSelectedFiles();case 3:return i.filesChecked.includes(i.selectedFileIdentifier)&&Hi(t,"file",null),i.resetChecks(),e.next=7,i.loadFolders();case 7:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();return(0,r.onMounted)(xl(_l().mark((function e(){return _l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o.selectHost(n.query.host||null);case 1:case"end":return e.stop()}}),e)})))),(0,r.watch)((function(){return i.direction}),(function(){return i.loadFolders()})),function(e,a){var f,d;return(0,r.openBlock)(),(0,r.createElementBlock)("nav",kl,[(0,r.createElementVNode)("div",Sl,[(0,r.createElementVNode)("div",Ol,[(0,r.createElementVNode)("h1",Nl,[(0,r.createTextVNode)(" Log Viewer "),Pl,(0,r.createElementVNode)("span",Tl,[(0,r.createVNode)(Qa,{class:"ml-2"}),(0,r.createElementVNode)("button",Vl,[(0,r.createVNode)((0,r.unref)(ko),{class:"w-5 h-5 ml-2",onClick:(0,r.unref)(i).toggleSidebar},null,8,["onClick"])])])]),e.LogViewer.back_to_system_url?((0,r.openBlock)(),(0,r.createElementBlock)("div",Rl,[(0,r.createElementVNode)("a",{href:e.LogViewer.back_to_system_url,class:"rounded shrink inline-flex items-center text-sm text-gray-500 dark:text-gray-400 hover:text-brand-800 dark:hover:text-brand-600 focus:outline-none focus:ring-2 focus:ring-brand-500 dark:focus:ring-brand-700 mt-0"},[(0,r.createVNode)((0,r.unref)(So),{class:"h-3 w-3 mr-1.5"}),(0,r.createTextVNode)(" "+(0,r.toDisplayString)(e.LogViewer.back_to_system_label||"Back to ".concat(e.LogViewer.app_name)),1)],8,Ll)])):(0,r.createCommentVNode)("",!0)]),e.LogViewer.assets_outdated?((0,r.openBlock)(),(0,r.createElementBlock)("div",Al,[(0,r.createVNode)((0,r.unref)(Oo),{class:"h-4 w-4 mr-1 inline"}),(0,r.createTextVNode)(" Front-end assets are outdated. To update, please run "),jl])):(0,r.createCommentVNode)("",!0),(0,r.unref)(o).supportsHosts&&(0,r.unref)(o).hasRemoteHosts?((0,r.openBlock)(),(0,r.createBlock)(wl,{key:1,class:"mb-8 mt-6"})):(0,r.createCommentVNode)("",!0),(null===(f=(0,r.unref)(i).folders)||void 0===f?void 0:f.length)>0?((0,r.openBlock)(),(0,r.createElementBlock)("div",Bl,[(0,r.createElementVNode)("div",Il,"Log files on "+(0,r.toDisplayString)(null===(d=(0,r.unref)(i).selectedHost)||void 0===d?void 0:d.name),1),(0,r.createElementVNode)("div",Ml,[Fl,(0,r.withDirectives)((0,r.createElementVNode)("select",{id:"file-sort-direction",class:"select","onUpdate:modelValue":a[0]||(a[0]=function(e){return(0,r.unref)(i).direction=e})},Dl,512),[[r.vModelSelect,(0,r.unref)(i).direction]])])])):(0,r.createCommentVNode)("",!0),(0,r.unref)(i).error?((0,r.openBlock)(),(0,r.createElementBlock)("p",Ul,(0,r.toDisplayString)((0,r.unref)(i).error),1)):(0,r.createCommentVNode)("",!0)]),(0,r.withDirectives)((0,r.createElementVNode)("div",null,[$l,(0,r.createElementVNode)("div",{class:(0,r.normalizeClass)(["grid grid-flow-col pr-4 mt-2",[(0,r.unref)(i).hasFilesChecked?"justify-between":"justify-end"]])},[(0,r.withDirectives)((0,r.createElementVNode)("button",{onClick:(0,r.withModifiers)(u,["stop"]),class:"button inline-flex"},[(0,r.createVNode)((0,r.unref)(No),{class:"w-5 mr-1"}),(0,r.createTextVNode)(" Delete selected files ")],8,Hl),[[r.vShow,(0,r.unref)(i).hasFilesChecked]]),(0,r.createElementVNode)("button",{class:"button inline-flex",onClick:a[1]||(a[1]=(0,r.withModifiers)((function(e){return(0,r.unref)(i).resetChecks()}),["stop"]))},[(0,r.createTextVNode)(" Cancel "),(0,r.createVNode)((0,r.unref)(ko),{class:"w-5 ml-1"})])],2)],512),[[r.vShow,(0,r.unref)(i).checkBoxesVisibility]]),(0,r.createElementVNode)("div",zl,[(0,r.createElementVNode)("div",{class:"file-list",onScroll:a[6]||(a[6]=function(e){return(0,r.unref)(i).onScroll(e)})},[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)((0,r.unref)(i).folders,(function(e){return(0,r.openBlock)(),(0,r.createElementBlock)("div",{key:e.identifier,id:"folder-".concat(e.identifier),class:"relative folder-container"},[(0,r.createVNode)((0,r.unref)(Co),null,{default:(0,r.withCtx)((function(t){var n=t.open;return[(0,r.createElementVNode)("div",{class:(0,r.normalizeClass)(["folder-item-container",[(0,r.unref)(i).isOpen(e)?"active-folder":"",(0,r.unref)(i).shouldBeSticky(e)?"sticky "+(n?"z-20":"z-10"):""]]),onClick:function(t){return(0,r.unref)(i).toggle(e)}},[(0,r.createElementVNode)("div",Kl,[(0,r.createElementVNode)("button",{class:"file-item-info group",onKeydown:a[2]||(a[2]=function(){return(0,r.unref)(aa)&&(0,r.unref)(aa).apply(void 0,arguments)})},[(0,r.unref)(i).isOpen(e)?(0,r.createCommentVNode)("",!0):((0,r.openBlock)(),(0,r.createElementBlock)("span",Gl,"Open folder")),(0,r.unref)(i).isOpen(e)?((0,r.openBlock)(),(0,r.createElementBlock)("span",Zl,"Close folder")):(0,r.createCommentVNode)("",!0),(0,r.createElementVNode)("span",Yl,[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Po),{class:"w-5 h-5"},null,512),[[r.vShow,!(0,r.unref)(i).isOpen(e)]]),(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(To),{class:"w-5 h-5"},null,512),[[r.vShow,(0,r.unref)(i).isOpen(e)]])]),(0,r.createElementVNode)("span",Jl,[(0,r.createVNode)((0,r.unref)(Vo),{class:(0,r.normalizeClass)([(0,r.unref)(i).isOpen(e)?"rotate-90":"","transition duration-100"])},null,8,["class"])]),(0,r.createElementVNode)("span",Ql,[String(e.clean_path||"").startsWith("root")?((0,r.openBlock)(),(0,r.createElementBlock)("span",Xl,[es,(0,r.createTextVNode)((0,r.toDisplayString)(String(e.clean_path).substring(4)),1)])):((0,r.openBlock)(),(0,r.createElementBlock)("span",ts,(0,r.toDisplayString)(e.clean_path),1))])],32),(0,r.createVNode)((0,r.unref)(_o),{as:"button",class:"file-dropdown-toggle group-hover:border-brand-600 group-hover:dark:border-brand-800","data-toggle-id":e.identifier,onKeydown:(0,r.unref)(la),onClick:a[3]||(a[3]=(0,r.withModifiers)((function(e){return(0,r.unref)(s)(e.target)}),["stop"]))},{default:(0,r.withCtx)((function(){return[ns,(0,r.createVNode)((0,r.unref)(Ro),{class:"w-4 h-4 pointer-events-none"})]})),_:2},1032,["data-toggle-id","onKeydown"])]),(0,r.createVNode)(r.Transition,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-90","enter-active-class":"transition ease-out duration-100","enter-from-class":"opacity-0 scale-90","enter-to-class":"opacity-100 scale-100"},{default:(0,r.withCtx)((function(){return[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Eo),{static:"",as:"div",class:(0,r.normalizeClass)(["dropdown w-48",[(0,r.unref)(l)[e.identifier]]])},{default:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("div",rs,[(0,r.createVNode)((0,r.unref)(xo),{onClick:(0,r.withModifiers)((function(t){return(0,r.unref)(i).clearCacheForFolder(e)}),["stop","prevent"])},{default:(0,r.withCtx)((function(t){var n=t.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([n?"active":""])},[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Lo),{class:"w-4 h-4 mr-2"},null,512),[[r.vShow,!(0,r.unref)(i).clearingCache[e.identifier]]]),(0,r.withDirectives)((0,r.createVNode)(Zi,{class:"w-4 h-4 mr-2"},null,512),[[r.vShow,(0,r.unref)(i).clearingCache[e.identifier]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Clear indices",512),[[r.vShow,!(0,r.unref)(i).cacheRecentlyCleared[e.identifier]&&!(0,r.unref)(i).clearingCache[e.identifier]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Clearing...",512),[[r.vShow,!(0,r.unref)(i).cacheRecentlyCleared[e.identifier]&&(0,r.unref)(i).clearingCache[e.identifier]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",os,"Indices cleared",512),[[r.vShow,(0,r.unref)(i).cacheRecentlyCleared[e.identifier]]])],2)]})),_:2},1032,["onClick"]),e.can_download?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(xo),{key:0},{default:(0,r.withCtx)((function(t){var n=t.active;return[(0,r.createElementVNode)("a",{href:e.download_url,download:"",onClick:a[4]||(a[4]=(0,r.withModifiers)((function(){}),["stop"])),class:(0,r.normalizeClass)([n?"active":""])},[(0,r.createVNode)((0,r.unref)(Ao),{class:"w-4 h-4 mr-2"}),(0,r.createTextVNode)(" Download ")],10,is)]})),_:2},1024)):(0,r.createCommentVNode)("",!0),e.can_delete?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:1},[as,(0,r.createVNode)((0,r.unref)(xo),null,{default:(0,r.withCtx)((function(t){var n=t.active;return[(0,r.createElementVNode)("button",{onClick:(0,r.withModifiers)((function(t){return c(e)}),["stop"]),disabled:(0,r.unref)(i).deleting[e.identifier],class:(0,r.normalizeClass)([n?"active":""])},[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(No),{class:"w-4 h-4 mr-2"},null,512),[[r.vShow,!(0,r.unref)(i).deleting[e.identifier]]]),(0,r.withDirectives)((0,r.createVNode)(Zi,null,null,512),[[r.vShow,(0,r.unref)(i).deleting[e.identifier]]]),(0,r.createTextVNode)(" Delete ")],10,ls)]})),_:2},1024)],64)):(0,r.createCommentVNode)("",!0)])]})),_:2},1032,["class"]),[[r.vShow,n]])]})),_:2},1024)],10,Wl)]})),_:2},1024),(0,r.withDirectives)((0,r.createElementVNode)("div",ss,[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(e.files||[],(function(e){return(0,r.openBlock)(),(0,r.createBlock)(ka,{key:e.identifier,"log-file":e,onClick:function(r){return o=e.identifier,void(n.query.file&&n.query.file===o?Hi(t,"file",null):Hi(t,"file",o));var o}},null,8,["log-file","onClick"])})),128))],512),[[r.vShow,(0,r.unref)(i).isOpen(e)]])],8,ql)})),128)),0===(0,r.unref)(i).folders.length?((0,r.openBlock)(),(0,r.createElementBlock)("div",cs,[us,(0,r.createElementVNode)("div",fs,[(0,r.createElementVNode)("button",{onClick:a[5]||(a[5]=(0,r.withModifiers)((function(e){return(0,r.unref)(i).loadFolders()}),["prevent"])),class:"inline-flex items-center px-4 py-2 text-left text-sm bg-white hover:bg-gray-50 outline-brand-500 dark:outline-brand-800 text-gray-900 dark:text-gray-200 rounded-md dark:bg-gray-700 dark:hover:bg-gray-600"},[(0,r.createVNode)((0,r.unref)(jo),{class:"w-4 h-4 mr-1.5"}),(0,r.createTextVNode)(" Refresh file list ")])])])):(0,r.createCommentVNode)("",!0)],32),ds,(0,r.withDirectives)((0,r.createElementVNode)("div",ps,[(0,r.createElementVNode)("div",hs,[(0,r.createVNode)(Zi,{class:"w-14 h-14"})])],512),[[r.vShow,(0,r.unref)(i).loading]])])])}}},ms=vs;var gs=n(598),ys=n(462),bs=n(640),ws=n(307),Cs=n(36),_s=n(452),Es=n(683),xs={class:"pagination"},ks={class:"previous"},Ss=["disabled"],Os=(0,r.createElementVNode)("span",{class:"sm:hidden"},"Previous page",-1),Ns={class:"sm:hidden border-transparent text-gray-500 dark:text-gray-400 border-t-2 pt-3 px-4 inline-flex items-center text-sm font-medium"},Ps={class:"pages"},Ts={key:0,class:"border-brand-500 text-brand-600 dark:border-brand-600 dark:text-brand-500","aria-current":"page"},Vs={key:1},Rs=["onClick"],Ls={class:"next"},As=["disabled"],js=(0,r.createElementVNode)("span",{class:"sm:hidden"},"Next page",-1);const Bs={__name:"Pagination",props:{loading:{type:Boolean,required:!0},short:{type:Boolean,default:!1}},setup:function(e){var t=Li(),n=Nr(),o=Pr(),i=((0,r.computed)((function(){return Number(o.query.page)||1})),function(e){e<1&&(e=1),t.pagination&&e>t.pagination.last_page&&(e=t.pagination.last_page),Hi(n,"page",e>1?Number(e):null)}),a=function(){return i(t.page+1)},l=function(){return i(t.page-1)};return function(n,o){return(0,r.openBlock)(),(0,r.createElementBlock)("nav",xs,[(0,r.createElementVNode)("div",ks,[1!==(0,r.unref)(t).page?((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:0,onClick:l,disabled:e.loading,rel:"prev"},[(0,r.createVNode)((0,r.unref)(So),{class:"h-5 w-5"}),Os],8,Ss)):(0,r.createCommentVNode)("",!0)]),(0,r.createElementVNode)("div",Ns,[(0,r.createElementVNode)("span",null,(0,r.toDisplayString)((0,r.unref)(t).page),1)]),(0,r.createElementVNode)("div",Ps,[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(e.short?(0,r.unref)(t).linksShort:(0,r.unref)(t).links,(function(e){return(0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,null,[e.active?((0,r.openBlock)(),(0,r.createElementBlock)("button",Ts,(0,r.toDisplayString)(Number(e.label).toLocaleString()),1)):"..."===e.label?((0,r.openBlock)(),(0,r.createElementBlock)("span",Vs,(0,r.toDisplayString)(e.label),1)):((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:2,onClick:function(t){return i(Number(e.label))},class:"border-transparent text-gray-500 dark:text-gray-400 hover:text-gray-700 hover:border-gray-300 dark:hover:text-gray-300 dark:hover:border-gray-400"},(0,r.toDisplayString)(Number(e.label).toLocaleString()),9,Rs))],64)})),256))]),(0,r.createElementVNode)("div",Ls,[(0,r.unref)(t).hasMorePages?((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:0,onClick:a,disabled:e.loading,rel:"next"},[js,(0,r.createVNode)((0,r.unref)(Es),{class:"h-5 w-5"})],8,As)):(0,r.createCommentVNode)("",!0)])])}}},Is=Bs;var Ms=n(246),Fs={class:"flex items-center"},Ds={class:"opacity-90 mr-1"},Us={class:"font-semibold"},$s={class:"opacity-90 mr-1"},Hs={class:"font-semibold"},zs={key:2,class:"opacity-90"},qs={key:3,class:"opacity-90"},Ws={class:"py-2"},Ks={class:"label flex justify-between"},Gs={key:0,class:"no-results"},Zs={class:"flex-1 inline-flex justify-between"},Ys={class:"log-count"};const Js={__name:"LevelButtons",setup:function(e){var t=Mi(),n=ji();return(0,r.watch)((function(){return n.selectedLevels}),(function(){return t.loadLogs()})),function(e,o){return(0,r.openBlock)(),(0,r.createElementBlock)("div",Fs,[(0,r.createVNode)((0,r.unref)(Co),{as:"div",class:"mr-5 relative log-levels-selector"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(_o),{as:"button",id:"severity-dropdown-toggle",class:(0,r.normalizeClass)(["dropdown-toggle badge none",(0,r.unref)(n).levelsSelected.length>0?"active":""])},{default:(0,r.withCtx)((function(){return[(0,r.unref)(n).levelsSelected.length>2?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:0},[(0,r.createElementVNode)("span",Ds,(0,r.toDisplayString)((0,r.unref)(n).totalResultsSelected.toLocaleString()+((0,r.unref)(t).hasMoreResults?"+":""))+" entries in",1),(0,r.createElementVNode)("strong",Us,(0,r.toDisplayString)((0,r.unref)(n).levelsSelected[0].level_name)+" + "+(0,r.toDisplayString)((0,r.unref)(n).levelsSelected.length-1)+" more",1)],64)):(0,r.unref)(n).levelsSelected.length>0?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:1},[(0,r.createElementVNode)("span",$s,(0,r.toDisplayString)((0,r.unref)(n).totalResultsSelected.toLocaleString()+((0,r.unref)(t).hasMoreResults?"+":""))+" entries in",1),(0,r.createElementVNode)("strong",Hs,(0,r.toDisplayString)((0,r.unref)(n).levelsSelected.map((function(e){return e.level_name})).join(", ")),1)],64)):(0,r.unref)(n).levelsFound.length>0?((0,r.openBlock)(),(0,r.createElementBlock)("span",zs,(0,r.toDisplayString)((0,r.unref)(n).totalResults.toLocaleString()+((0,r.unref)(t).hasMoreResults?"+":""))+" entries found. None selected",1)):((0,r.openBlock)(),(0,r.createElementBlock)("span",qs,"No entries found")),(0,r.createVNode)((0,r.unref)(Ms),{class:"w-4 h-4"})]})),_:1},8,["class"]),(0,r.createVNode)(r.Transition,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-90","enter-active-class":"transition ease-out duration-100","enter-from-class":"opacity-0 scale-90","enter-to-class":"opacity-100 scale-100"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(Eo),{as:"div",class:"dropdown down left min-w-[240px]"},{default:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("div",Ws,[(0,r.createElementVNode)("div",Ks,[(0,r.createTextVNode)(" Severity "),(0,r.unref)(n).levelsFound.length>0?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:0},[(0,r.unref)(n).levelsSelected.length===(0,r.unref)(n).levelsFound.length?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(xo),{key:0,onClick:(0,r.withModifiers)((0,r.unref)(n).deselectAllLevels,["stop"])},{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("a",{class:(0,r.normalizeClass)(["inline-link px-2 -mr-2 py-1 -my-1 rounded-md cursor-pointer text-brand-700 dark:text-brand-500 font-normal",[t?"active":""]])}," Deselect all ",2)]})),_:1},8,["onClick"])):((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(xo),{key:1,onClick:(0,r.withModifiers)((0,r.unref)(n).selectAllLevels,["stop"])},{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("a",{class:(0,r.normalizeClass)(["inline-link px-2 -mr-2 py-1 -my-1 rounded-md cursor-pointer text-brand-700 dark:text-brand-500 font-normal",[t?"active":""]])}," Select all ",2)]})),_:1},8,["onClick"]))],64)):(0,r.createCommentVNode)("",!0)]),0===(0,r.unref)(n).levelsFound.length?((0,r.openBlock)(),(0,r.createElementBlock)("div",Gs,"There are no severity filters to display because no entries have been found.")):((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,{key:1},(0,r.renderList)((0,r.unref)(n).levelsFound,(function(e){return(0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(xo),{onClick:(0,r.withModifiers)((function(t){return(0,r.unref)(n).toggleLevel(e.level)}),["stop","prevent"])},{default:(0,r.withCtx)((function(t){var n=t.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([n?"active":""])},[(0,r.createVNode)(ja,{class:"checkmark mr-2.5",checked:e.selected},null,8,["checked"]),(0,r.createElementVNode)("span",Zs,[(0,r.createElementVNode)("span",{class:(0,r.normalizeClass)(["log-level",e.level_class])},(0,r.toDisplayString)(e.level_name),3),(0,r.createElementVNode)("span",Ys,(0,r.toDisplayString)(Number(e.count).toLocaleString()),1)])],2)]})),_:2},1032,["onClick"])})),256))])]})),_:1})]})),_:1})]})),_:1})])}}};var Qs=n(447),Xs={class:"flex-1"},ec={class:"prefix-icon"},tc=(0,r.createElementVNode)("label",{for:"query",class:"sr-only"},"Search",-1),nc={class:"relative flex-1 m-1"},rc=["onKeydown"],oc={class:"clear-search"},ic={class:"submit-search"},ac={key:0,disabled:"disabled"},lc={class:"hidden xl:inline ml-1"},sc={class:"hidden xl:inline ml-1"},cc={class:"relative h-0 w-full overflow-visible"},uc=["innerHTML"];const fc={__name:"SearchInput",setup:function(e){var t=Ri(),n=Mi(),o=Nr(),i=Pr(),a=(0,r.computed)((function(){return n.selectedFile})),l=(0,r.ref)(i.query.query||""),s=function(){var e;Hi(o,"query",""===l.value?null:l.value),null===(e=document.getElementById("query-submit"))||void 0===e||e.focus()},c=function(){l.value="",s()};return(0,r.watch)((function(){return i.query.query}),(function(e){return l.value=e||""})),function(e,o){return(0,r.openBlock)(),(0,r.createElementBlock)("div",Xs,[(0,r.createElementVNode)("div",{class:(0,r.normalizeClass)(["search",{"has-error":(0,r.unref)(n).error}])},[(0,r.createElementVNode)("div",ec,[tc,(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Qs),{class:"h-4 w-4"},null,512),[[r.vShow,!(0,r.unref)(n).hasMoreResults]]),(0,r.withDirectives)((0,r.createVNode)(Zi,{class:"w-4 h-4"},null,512),[[r.vShow,(0,r.unref)(n).hasMoreResults]])]),(0,r.createElementVNode)("div",nc,[(0,r.withDirectives)((0,r.createElementVNode)("input",{"onUpdate:modelValue":o[0]||(o[0]=function(e){return l.value=e}),name:"query",id:"query",type:"text",onKeydown:[(0,r.withKeys)(s,["enter"]),o[1]||(o[1]=(0,r.withKeys)((function(e){return e.target.blur()}),["esc"]))]},null,40,rc),[[r.vModelText,l.value]]),(0,r.withDirectives)((0,r.createElementVNode)("div",oc,[(0,r.createElementVNode)("button",{onClick:c},[(0,r.createVNode)((0,r.unref)(ko),{class:"h-4 w-4"})])],512),[[r.vShow,(0,r.unref)(t).hasQuery]])]),(0,r.createElementVNode)("div",ic,[(0,r.unref)(n).hasMoreResults?((0,r.openBlock)(),(0,r.createElementBlock)("button",ac,[(0,r.createElementVNode)("span",null,[(0,r.createTextVNode)("Searching"),(0,r.createElementVNode)("span",lc,(0,r.toDisplayString)((0,r.unref)(a)?(0,r.unref)(a).name:"all files"),1),(0,r.createTextVNode)("...")])])):((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:1,onClick:s,id:"query-submit"},[(0,r.createElementVNode)("span",null,[(0,r.createTextVNode)("Search"),(0,r.createElementVNode)("span",sc,(0,r.toDisplayString)((0,r.unref)(a)?'in "'+(0,r.unref)(a).name+'"':"all files"),1)]),(0,r.createVNode)((0,r.unref)(Es),{class:"h-4 w-4"})]))])],2),(0,r.createElementVNode)("div",cc,[(0,r.withDirectives)((0,r.createElementVNode)("div",{class:"search-progress-bar",style:(0,r.normalizeStyle)({width:(0,r.unref)(n).percentScanned+"%"})},null,4),[[r.vShow,(0,r.unref)(n).hasMoreResults]])]),(0,r.withDirectives)((0,r.createElementVNode)("p",{class:"mt-1 text-red-600 text-xs",innerHTML:(0,r.unref)(n).error},null,8,uc),[[r.vShow,(0,r.unref)(n).error]])])}}},dc=fc;var pc=n(923),hc=n(968),vc=["onClick"],mc={class:"sr-only"},gc={class:"text-green-600 dark:text-green-500 hidden md:inline"};const yc={__name:"LogCopyButton",props:{log:{type:Object,required:!0}},setup:function(e){var t=e,n=(0,r.ref)(!1),o=function(){$i(t.log.url),n.value=!0,setTimeout((function(){return n.value=!1}),1e3)};return function(t,i){return(0,r.openBlock)(),(0,r.createElementBlock)("button",{class:"log-link group",onClick:(0,r.withModifiers)(o,["stop"]),onKeydown:i[0]||(i[0]=function(){return(0,r.unref)(ia)&&(0,r.unref)(ia).apply(void 0,arguments)}),title:"Copy link to this log entry"},[(0,r.createElementVNode)("span",mc,"Log index "+(0,r.toDisplayString)(e.log.index)+". Click the button to copy link to this log entry.",1),(0,r.withDirectives)((0,r.createElementVNode)("span",{class:"hidden md:inline group-hover:underline"},(0,r.toDisplayString)(Number(e.log.index).toLocaleString()),513),[[r.vShow,!n.value]]),(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(pc),{class:"md:opacity-75 group-hover:opacity-100"},null,512),[[r.vShow,!n.value]]),(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(hc),{class:"text-green-600 dark:text-green-500 md:hidden"},null,512),[[r.vShow,n.value]]),(0,r.withDirectives)((0,r.createElementVNode)("span",gc,"Copied!",512),[[r.vShow,n.value]])],40,vc)}}};var bc={class:"h-full w-full py-5 log-list"},wc={class:"flex flex-col h-full w-full md:mx-3 mb-4"},Cc={class:"md:px-4 mb-4 flex flex-col-reverse lg:flex-row items-start"},_c={key:0,class:"flex items-center mr-5 mt-3 md:mt-0"},Ec={class:"w-full lg:w-auto flex-1 flex justify-end min-h-[38px]"},xc={class:"hidden md:block ml-5"},kc={class:"hidden md:block"},Sc={class:"md:hidden"},Oc={type:"button",class:"menu-button"},Nc={key:0,class:"relative overflow-hidden h-full text-sm"},Pc={class:"mx-2 mt-1 mb-2 text-right lg:mx-0 lg:mt-0 lg:mb-0 lg:absolute lg:top-2 lg:right-6 z-20 text-sm text-gray-500 dark:text-gray-400"},Tc=(0,r.createElementVNode)("label",{for:"log-sort-direction",class:"sr-only"},"Sort direction",-1),Vc=[(0,r.createElementVNode)("option",{value:"desc"},"Newest first",-1),(0,r.createElementVNode)("option",{value:"asc"},"Oldest first",-1)],Rc=(0,r.createElementVNode)("label",{for:"items-per-page",class:"sr-only"},"Items per page",-1),Lc=[(0,r.createStaticVNode)('',6)],Ac={class:"inline-block min-w-full max-w-full align-middle"},jc={class:"table-fixed min-w-full max-w-full border-separate",style:{"border-spacing":"0"}},Bc=(0,r.createElementVNode)("thead",{class:"bg-gray-50"},[(0,r.createElementVNode)("tr",null,[(0,r.createElementVNode)("th",{scope:"col",class:"w-[120px] hidden lg:table-cell"},[(0,r.createElementVNode)("div",{class:"pl-2"},"Level")]),(0,r.createElementVNode)("th",{scope:"col",class:"w-[180px] hidden lg:table-cell"},"Time"),(0,r.createElementVNode)("th",{scope:"col",class:"w-[110px] hidden lg:table-cell"},"Env"),(0,r.createElementVNode)("th",{scope:"col",class:"hidden lg:table-cell"},"Description"),(0,r.createElementVNode)("th",{scope:"col",class:"hidden lg:table-cell"},[(0,r.createElementVNode)("span",{class:"sr-only"},"Log index")])])],-1),Ic=["id","data-index"],Mc=["onClick"],Fc={class:"log-level truncate"},Dc={class:"flex items-center lg:pl-2"},Uc=["aria-expanded"],$c={key:0,class:"sr-only"},Hc={key:1,class:"sr-only"},zc={class:"w-full h-full group-hover:hidden group-focus:hidden"},qc={class:"w-full h-full hidden group-hover:inline-block group-focus:inline-block"},Wc={class:"whitespace-nowrap text-gray-900 dark:text-gray-200"},Kc=["innerHTML"],Gc={class:"lg:hidden"},Zc=["innerHTML"],Yc=["innerHTML"],Jc={class:"whitespace-nowrap text-gray-500 dark:text-gray-300 dark:opacity-90 text-xs hidden lg:table-cell"},Qc={colspan:"6"},Xc={class:"lg:hidden flex justify-between px-2 pt-2 pb-1 text-xs"},eu={class:"flex-1"},tu=(0,r.createElementVNode)("span",{class:"font-semibold"},"Time:",-1),nu={class:"flex-1"},ru=(0,r.createElementVNode)("span",{class:"font-semibold"},"Env:",-1),ou=["innerHTML"],iu=(0,r.createElementVNode)("p",{class:"mx-2 lg:mx-8 pt-2 border-t font-semibold text-gray-700 dark:text-gray-400"},"Context:",-1),au=["innerHTML"],lu={key:1,class:"py-4 px-8 text-gray-500 italic"},su={key:1,class:"log-group"},cu={colspan:"6"},uu={class:"bg-white text-gray-600 dark:bg-gray-800 dark:text-gray-200 p-12"},fu=(0,r.createElementVNode)("div",{class:"text-center font-semibold"},"No results",-1),du={class:"text-center mt-6"},pu=["onClick"],hu={class:"absolute inset-0 top-9 md:px-4 z-20"},vu={class:"rounded-md bg-white text-gray-800 dark:bg-gray-700 dark:text-gray-200 opacity-90 w-full h-full flex items-center justify-center"},mu={key:1,class:"flex h-full items-center justify-center text-gray-600 dark:text-gray-400"},gu={key:0},yu={key:1},bu={key:2,class:"md:px-4"},wu={class:"hidden lg:block"},Cu={class:"lg:hidden"};const _u={__name:"LogList",setup:function(e){var t=Nr(),n=Fi(),o=Mi(),i=Ri(),a=Li(),l=ji(),s=(0,r.computed)((function(){return n.selectedFile||String(i.query||"").trim().length>0})),c=(0,r.computed)((function(){return o.logs&&(o.logs.length>0||!o.hasMoreResults)&&(o.selectedFile||i.hasQuery)})),u=function(e){return JSON.stringify(e,(function(e,t){return"string"==typeof t?t.replaceAll("\n","
"):t}),2)},f=function(){Hi(t,"file",null)},d=function(){Hi(t,"query",null)};return(0,r.watch)([function(){return o.direction},function(){return o.resultsPerPage}],(function(){return o.loadLogs()})),function(e,t){var p,h;return(0,r.openBlock)(),(0,r.createElementBlock)("div",bc,[(0,r.createElementVNode)("div",wc,[(0,r.createElementVNode)("div",Cc,[(0,r.unref)(s)?((0,r.openBlock)(),(0,r.createElementBlock)("div",_c,[(0,r.createVNode)(Js)])):(0,r.createCommentVNode)("",!0),(0,r.createElementVNode)("div",Ec,[(0,r.createVNode)(dc),(0,r.createElementVNode)("div",xc,[(0,r.createElementVNode)("button",{onClick:t[0]||(t[0]=function(e){return(0,r.unref)(o).loadLogs()}),id:"reload-logs-button",title:"Reload current results",class:"menu-button"},[(0,r.createVNode)((0,r.unref)(gs),{class:"w-5 h-5"})])]),(0,r.createElementVNode)("div",kc,[(0,r.createVNode)(Qa,{class:"ml-2",id:"desktop-site-settings"})]),(0,r.createElementVNode)("div",Sc,[(0,r.createElementVNode)("button",Oc,[(0,r.createVNode)((0,r.unref)(ys),{class:"w-5 h-5 ml-2",onClick:(0,r.unref)(n).toggleSidebar},null,8,["onClick"])])])])]),(0,r.unref)(c)?((0,r.openBlock)(),(0,r.createElementBlock)("div",Nc,[(0,r.createElementVNode)("div",Pc,[Tc,(0,r.withDirectives)((0,r.createElementVNode)("select",{id:"log-sort-direction","onUpdate:modelValue":t[1]||(t[1]=function(e){return(0,r.unref)(o).direction=e}),class:"select mr-4"},Vc,512),[[r.vModelSelect,(0,r.unref)(o).direction]]),Rc,(0,r.withDirectives)((0,r.createElementVNode)("select",{id:"items-per-page","onUpdate:modelValue":t[2]||(t[2]=function(e){return(0,r.unref)(o).resultsPerPage=e}),class:"select"},Lc,512),[[r.vModelSelect,(0,r.unref)(o).resultsPerPage]])]),(0,r.createElementVNode)("div",{class:"log-item-container h-full overflow-y-auto md:px-4",onScroll:t[5]||(t[5]=function(e){return(0,r.unref)(o).onScroll(e)})},[(0,r.createElementVNode)("div",Ac,[(0,r.createElementVNode)("table",jc,[Bc,(0,r.unref)(o).logs&&(0,r.unref)(o).logs.length>0?((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,{key:0},(0,r.renderList)((0,r.unref)(o).logs,(function(n,a){return(0,r.openBlock)(),(0,r.createElementBlock)("tbody",{key:a,class:(0,r.normalizeClass)([0===a?"first":"","log-group"]),id:"tbody-".concat(a),"data-index":a},[(0,r.createElementVNode)("tr",{onClick:function(e){return(0,r.unref)(o).toggle(a)},class:(0,r.normalizeClass)(["log-item group",n.level_class,(0,r.unref)(o).isOpen(a)?"active":"",(0,r.unref)(o).shouldBeSticky(a)?"sticky z-2":""]),style:(0,r.normalizeStyle)({top:(0,r.unref)(o).stackTops[a]||0})},[(0,r.createElementVNode)("td",Fc,[(0,r.createElementVNode)("div",Dc,[(0,r.createElementVNode)("button",{"aria-expanded":(0,r.unref)(o).isOpen(a),onKeydown:t[3]||(t[3]=function(){return(0,r.unref)(oa)&&(0,r.unref)(oa).apply(void 0,arguments)}),class:"log-level-icon mr-2 opacity-75 w-5 h-5 hidden lg:block group focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-brand-500 rounded-md"},[(0,r.unref)(o).isOpen(a)?(0,r.createCommentVNode)("",!0):((0,r.openBlock)(),(0,r.createElementBlock)("span",$c,"Expand log entry")),(0,r.unref)(o).isOpen(a)?((0,r.openBlock)(),(0,r.createElementBlock)("span",Hc,"Collapse log entry")):(0,r.createCommentVNode)("",!0),(0,r.createElementVNode)("span",zc,["danger"===n.level_class?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(bs),{key:0})):"warning"===n.level_class?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(ws),{key:1})):((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(Cs),{key:2}))]),(0,r.createElementVNode)("span",qc,[(0,r.createVNode)((0,r.unref)(_s),{class:(0,r.normalizeClass)([(0,r.unref)(o).isOpen(a)?"rotate-90":"","transition duration-100"])},null,8,["class"])])],40,Uc),(0,r.createElementVNode)("span",null,(0,r.toDisplayString)(n.level_name),1)])]),(0,r.createElementVNode)("td",Wc,[(0,r.createElementVNode)("span",{class:"hidden lg:inline",innerHTML:(0,r.unref)(Di)(n.datetime,(0,r.unref)(i).query)},null,8,Kc),(0,r.createElementVNode)("span",Gc,(0,r.toDisplayString)(n.time),1)]),(0,r.createElementVNode)("td",{class:"whitespace-nowrap text-gray-500 dark:text-gray-300 dark:opacity-90 hidden lg:table-cell",innerHTML:(0,r.unref)(Di)(n.environment,(0,r.unref)(i).query)},null,8,Zc),(0,r.createElementVNode)("td",{class:"max-w-[1px] w-full truncate text-gray-500 dark:text-gray-300 dark:opacity-90",innerHTML:(0,r.unref)(Di)(n.text,(0,r.unref)(i).query)},null,8,Yc),(0,r.createElementVNode)("td",Jc,[(0,r.createVNode)(yc,{log:n,class:"pr-2 large-screen"},null,8,["log"])])],14,Mc),(0,r.withDirectives)((0,r.createElementVNode)("tr",null,[(0,r.createElementVNode)("td",Qc,[(0,r.createElementVNode)("div",Xc,[(0,r.createElementVNode)("div",eu,[tu,(0,r.createTextVNode)(" "+(0,r.toDisplayString)(n.datetime),1)]),(0,r.createElementVNode)("div",nu,[ru,(0,r.createTextVNode)(" "+(0,r.toDisplayString)(n.environment),1)]),(0,r.createElementVNode)("div",null,[(0,r.createVNode)(yc,{log:n},null,8,["log"])])]),(0,r.createElementVNode)("pre",{class:"log-stack",innerHTML:(0,r.unref)(Di)(n.full_text,(0,r.unref)(i).query)},null,8,ou),n.contexts&&n.contexts.length>0?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:0},[iu,((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(n.contexts,(function(e){return(0,r.openBlock)(),(0,r.createElementBlock)("pre",{class:"log-stack",innerHTML:u(e)},null,8,au)})),256))],64)):(0,r.createCommentVNode)("",!0),n.full_text_incomplete?((0,r.openBlock)(),(0,r.createElementBlock)("div",lu,[(0,r.createTextVNode)(" The contents of this log have been cut short to the first "+(0,r.toDisplayString)(e.LogViewer.max_log_size_formatted)+". The full size of this log entry is ",1),(0,r.createElementVNode)("strong",null,(0,r.toDisplayString)(n.full_text_length_formatted),1)])):(0,r.createCommentVNode)("",!0)])],512),[[r.vShow,(0,r.unref)(o).isOpen(a)]])],10,Ic)})),128)):((0,r.openBlock)(),(0,r.createElementBlock)("tbody",su,[(0,r.createElementVNode)("tr",null,[(0,r.createElementVNode)("td",cu,[(0,r.createElementVNode)("div",uu,[fu,(0,r.createElementVNode)("div",du,[(null===(p=(0,r.unref)(i).query)||void 0===p?void 0:p.length)>0?((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:0,class:"px-3 py-2 border dark:border-gray-700 text-gray-800 dark:text-gray-200 hover:border-brand-600 dark:hover:border-brand-700 rounded-md",onClick:d},"Clear search query ")):(0,r.createCommentVNode)("",!0),(null===(h=(0,r.unref)(i).query)||void 0===h?void 0:h.length)>0&&(0,r.unref)(n).selectedFile?((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:1,class:"px-3 ml-3 py-2 border dark:border-gray-700 text-gray-800 dark:text-gray-200 hover:border-brand-600 dark:hover:border-brand-700 rounded-md",onClick:(0,r.withModifiers)(f,["prevent"])},"Search all files ",8,pu)):(0,r.createCommentVNode)("",!0),(0,r.unref)(l).levelsFound.length>0&&0===(0,r.unref)(l).levelsSelected.length?((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:2,class:"px-3 ml-3 py-2 border dark:border-gray-700 text-gray-800 dark:text-gray-200 hover:border-brand-600 dark:hover:border-brand-700 rounded-md",onClick:t[4]||(t[4]=function(){var e;return(0,r.unref)(l).selectAllLevels&&(e=(0,r.unref)(l)).selectAllLevels.apply(e,arguments)})},"Select all severities ")):(0,r.createCommentVNode)("",!0)])])])])]))])])],32),(0,r.withDirectives)((0,r.createElementVNode)("div",hu,[(0,r.createElementVNode)("div",vu,[(0,r.createVNode)(Zi,{class:"w-14 h-14"})])],512),[[r.vShow,(0,r.unref)(o).loading&&(!(0,r.unref)(o).isMobile||!(0,r.unref)(n).sidebarOpen)]])])):((0,r.openBlock)(),(0,r.createElementBlock)("div",mu,[(0,r.unref)(o).hasMoreResults?((0,r.openBlock)(),(0,r.createElementBlock)("span",gu,"Searching...")):((0,r.openBlock)(),(0,r.createElementBlock)("span",yu,"Select a file or start searching..."))])),(0,r.unref)(c)&&(0,r.unref)(a).hasPages?((0,r.openBlock)(),(0,r.createElementBlock)("div",bu,[(0,r.createElementVNode)("div",wu,[(0,r.createVNode)(Is,{loading:(0,r.unref)(o).loading},null,8,["loading"])]),(0,r.createElementVNode)("div",Cu,[(0,r.createVNode)(Is,{loading:(0,r.unref)(o).loading,short:!0},null,8,["loading"])])])):(0,r.createCommentVNode)("",!0)])])}}},Eu=_u;var xu={width:"4169",height:"913",viewBox:"0 0 4169 913",fill:"none",xmlns:"http://www.w3.org/2000/svg"},ku=[(0,r.createStaticVNode)('',19)];const Su={},Ou=(0,Ki.Z)(Su,[["render",function(e,t){return(0,r.openBlock)(),(0,r.createElementBlock)("svg",xu,ku)}]]);function Nu(){let e=[],t=[],n={enqueue(e){t.push(e)},addEventListener:(e,t,r,o)=>(e.addEventListener(t,r,o),n.add((()=>e.removeEventListener(t,r,o)))),requestAnimationFrame(...e){let t=requestAnimationFrame(...e);n.add((()=>cancelAnimationFrame(t)))},nextFrame(...e){n.requestAnimationFrame((()=>{n.requestAnimationFrame(...e)}))},setTimeout(...e){let t=setTimeout(...e);n.add((()=>clearTimeout(t)))},add(t){e.push(t)},style(e,t,n){let r=e.style.getPropertyValue(t);return Object.assign(e.style,{[t]:n}),this.add((()=>{Object.assign(e.style,{[t]:r})}))},dispose(){for(let t of e.splice(0))t()},async workQueue(){for(let e of t.splice(0))await e()}};return n}function Pu(e,...t){e&&t.length>0&&e.classList.add(...t)}function Tu(e,...t){e&&t.length>0&&e.classList.remove(...t)}var Vu=(e=>(e.Finished="finished",e.Cancelled="cancelled",e))(Vu||{});function Ru(e,t,n,r,o,i){let a=Nu(),l=void 0!==i?function(e){let t={called:!1};return(...n)=>{if(!t.called)return t.called=!0,e(...n)}}(i):()=>{};return Tu(e,...o),Pu(e,...t,...n),a.nextFrame((()=>{Tu(e,...n),Pu(e,...r),a.add(function(e,t){let n=Nu();if(!e)return n.dispose;let{transitionDuration:r,transitionDelay:o}=getComputedStyle(e),[i,a]=[r,o].map((e=>{let[t=0]=e.split(",").filter(Boolean).map((e=>e.includes("ms")?parseFloat(e):1e3*parseFloat(e))).sort(((e,t)=>t-e));return t}));return 0!==i?n.setTimeout((()=>t("finished")),i+a):t("finished"),n.add((()=>t("cancelled"))),n.dispose}(e,(n=>(Tu(e,...r,...t),Pu(e,...o),l(n)))))})),a.add((()=>Tu(e,...t,...n,...r,...o))),a.add((()=>l("cancelled"))),a.dispose}function Lu(e=""){return e.split(" ").filter((e=>e.trim().length>1))}let Au=Symbol("TransitionContext");var ju=(e=>(e.Visible="visible",e.Hidden="hidden",e))(ju||{});let Bu=Symbol("NestingContext");function Iu(e){return"children"in e?Iu(e.children):e.value.filter((({state:e})=>"visible"===e)).length>0}function Mu(e){let t=(0,r.ref)([]),n=(0,r.ref)(!1);function o(r,o=Lr.Hidden){let i=t.value.findIndex((({id:e})=>e===r));-1!==i&&(Tr(o,{[Lr.Unmount](){t.value.splice(i,1)},[Lr.Hidden](){t.value[i].state="hidden"}}),!Iu(t)&&n.value&&(null==e||e()))}return(0,r.onMounted)((()=>n.value=!0)),(0,r.onUnmounted)((()=>n.value=!1)),{children:t,register:function(e){let n=t.value.find((({id:t})=>t===e));return n?"visible"!==n.state&&(n.state="visible"):t.value.push({id:e,state:"visible"}),()=>o(e,Lr.Unmount)},unregister:o}}let Fu=Rr.RenderStrategy,Du=(0,r.defineComponent)({props:{as:{type:[Object,String],default:"div"},show:{type:[Boolean],default:null},unmount:{type:[Boolean],default:!0},appear:{type:[Boolean],default:!1},enter:{type:[String],default:""},enterFrom:{type:[String],default:""},enterTo:{type:[String],default:""},entered:{type:[String],default:""},leave:{type:[String],default:""},leaveFrom:{type:[String],default:""},leaveTo:{type:[String],default:""}},emits:{beforeEnter:()=>!0,afterEnter:()=>!0,beforeLeave:()=>!0,afterLeave:()=>!0},setup(e,{emit:t,attrs:n,slots:o,expose:i}){if(null===(0,r.inject)(Au,null)&&null!==Zr())return()=>(0,r.h)($u,{...e,onBeforeEnter:()=>t("beforeEnter"),onAfterEnter:()=>t("afterEnter"),onBeforeLeave:()=>t("beforeLeave"),onAfterLeave:()=>t("afterLeave")},o);let a=(0,r.ref)(null),l=(0,r.ref)("visible"),s=(0,r.computed)((()=>e.unmount?Lr.Unmount:Lr.Hidden));i({el:a,$el:a});let{show:c,appear:u}=function(){let e=(0,r.inject)(Au,null);if(null===e)throw new Error("A is used but it is missing a parent .");return e}(),{register:f,unregister:d}=function(){let e=(0,r.inject)(Bu,null);if(null===e)throw new Error("A is used but it is missing a parent .");return e}(),p={value:!0},h=Dr(),v={value:!1},m=Mu((()=>{v.value||(l.value="hidden",d(h),t("afterLeave"))}));(0,r.onMounted)((()=>{let e=f(h);(0,r.onUnmounted)(e)})),(0,r.watchEffect)((()=>{if(s.value===Lr.Hidden&&h){if(c&&"visible"!==l.value)return void(l.value="visible");Tr(l.value,{hidden:()=>d(h),visible:()=>f(h)})}}));let g=Lu(e.enter),y=Lu(e.enterFrom),b=Lu(e.enterTo),w=Lu(e.entered),C=Lu(e.leave),_=Lu(e.leaveFrom),E=Lu(e.leaveTo);return(0,r.onMounted)((()=>{(0,r.watchEffect)((()=>{if("visible"===l.value){let e=zr(a);if(e instanceof Comment&&""===e.data)throw new Error("Did you forget to passthrough the `ref` to the actual DOM node?")}}))})),(0,r.onMounted)((()=>{(0,r.watch)([c],((e,n,r)=>{(function(e){let n=p.value&&!u.value,r=zr(a);!r||!(r instanceof HTMLElement)||n||(v.value=!0,c.value&&t("beforeEnter"),c.value||t("beforeLeave"),e(c.value?Ru(r,g,y,b,w,(e=>{v.value=!1,e===Vu.Finished&&t("afterEnter")})):Ru(r,C,_,E,w,(e=>{v.value=!1,e===Vu.Finished&&(Iu(m)||(l.value="hidden",d(h),t("afterLeave")))}))))})(r),p.value=!1}),{immediate:!0})})),(0,r.provide)(Bu,m),Yr((0,r.computed)((()=>Tr(l.value,{visible:Gr.Open,hidden:Gr.Closed})))),()=>{let{appear:t,show:i,enter:s,enterFrom:f,enterTo:d,entered:p,leave:h,leaveFrom:v,leaveTo:m,...b}=e,w={ref:a};return Ar({theirProps:{...b,...u&&c&&qr.isServer?{class:(0,r.normalizeClass)([b.class,...g,...y])}:{}},ourProps:w,slot:{},slots:o,attrs:n,features:Fu,visible:"visible"===l.value,name:"TransitionChild"})}}}),Uu=Du,$u=(0,r.defineComponent)({inheritAttrs:!1,props:{as:{type:[Object,String],default:"div"},show:{type:[Boolean],default:null},unmount:{type:[Boolean],default:!0},appear:{type:[Boolean],default:!1},enter:{type:[String],default:""},enterFrom:{type:[String],default:""},enterTo:{type:[String],default:""},entered:{type:[String],default:""},leave:{type:[String],default:""},leaveFrom:{type:[String],default:""},leaveTo:{type:[String],default:""}},emits:{beforeEnter:()=>!0,afterEnter:()=>!0,beforeLeave:()=>!0,afterLeave:()=>!0},setup(e,{emit:t,attrs:n,slots:o}){let i=Zr(),a=(0,r.computed)((()=>null===e.show&&null!==i?Tr(i.value,{[Gr.Open]:!0,[Gr.Closed]:!1}):e.show));(0,r.watchEffect)((()=>{if(![!0,!1].includes(a.value))throw new Error('A is used but it is missing a `:show="true | false"` prop.')}));let l=(0,r.ref)(a.value?"visible":"hidden"),s=Mu((()=>{l.value="hidden"})),c=(0,r.ref)(!0),u={show:a,appear:(0,r.computed)((()=>e.appear||!c.value))};return(0,r.onMounted)((()=>{(0,r.watchEffect)((()=>{c.value=!1,a.value?l.value="visible":Iu(s)||(l.value="hidden")}))})),(0,r.provide)(Bu,s),(0,r.provide)(Au,u),()=>{let i=Mr(e,["show","appear","unmount","onBeforeEnter","onBeforeLeave","onAfterEnter","onAfterLeave"]),a={unmount:e.unmount};return Ar({ourProps:{...a,as:"template"},theirProps:{},slot:{},slots:{...o,default:()=>[(0,r.h)(Uu,{onBeforeEnter:()=>t("beforeEnter"),onAfterEnter:()=>t("afterEnter"),onBeforeLeave:()=>t("beforeLeave"),onAfterLeave:()=>t("afterLeave"),...n,...a,...i},o.default)]},attrs:{},features:Fu,visible:"visible"===l.value,name:"Transition"})}}});var Hu=(e=>(e[e.Forwards=0]="Forwards",e[e.Backwards=1]="Backwards",e))(Hu||{});function zu(){let e=(0,r.ref)(0);return function(e,t,n){qr.isServer||(0,r.watchEffect)((r=>{window.addEventListener(e,t,n),r((()=>window.removeEventListener(e,t,n)))}))}("keydown",(t=>{"Tab"===t.key&&(e.value=t.shiftKey?1:0)})),e}function qu(e,t,n,o){qr.isServer||(0,r.watchEffect)((r=>{(e=null!=e?e:window).addEventListener(t,n,o),r((()=>e.removeEventListener(t,n,o)))}))}var Wu=(e=>(e[e.None=1]="None",e[e.InitialFocus=2]="InitialFocus",e[e.TabLock=4]="TabLock",e[e.FocusLock=8]="FocusLock",e[e.RestoreFocus=16]="RestoreFocus",e[e.All=30]="All",e))(Wu||{});let Ku=Object.assign((0,r.defineComponent)({name:"FocusTrap",props:{as:{type:[Object,String],default:"div"},initialFocus:{type:Object,default:null},features:{type:Number,default:30},containers:{type:Object,default:(0,r.ref)(new Set)}},inheritAttrs:!1,setup(e,{attrs:t,slots:n,expose:o}){let i=(0,r.ref)(null);o({el:i,$el:i});let a=(0,r.computed)((()=>Wr(i)));!function({ownerDocument:e},t){let n=(0,r.ref)(null);function o(){var t;n.value||(n.value=null==(t=e.value)?void 0:t.activeElement)}function i(){!n.value||(lo(n.value),n.value=null)}(0,r.onMounted)((()=>{(0,r.watch)(t,((e,t)=>{e!==t&&(e?o():i())}),{immediate:!0})})),(0,r.onUnmounted)(i)}({ownerDocument:a},(0,r.computed)((()=>Boolean(16&e.features))));let l=function({ownerDocument:e,container:t,initialFocus:n},o){let i=(0,r.ref)(null),a=(0,r.ref)(!1);return(0,r.onMounted)((()=>a.value=!0)),(0,r.onUnmounted)((()=>a.value=!1)),(0,r.onMounted)((()=>{(0,r.watch)([t,n,o],((r,l)=>{if(r.every(((e,t)=>(null==l?void 0:l[t])===e))||!o.value)return;let s=zr(t);!s||function(e){"function"==typeof queueMicrotask?queueMicrotask(e):Promise.resolve().then(e).catch((e=>setTimeout((()=>{throw e}))))}((()=>{var t,r;if(!a.value)return;let o=zr(n),l=null==(t=e.value)?void 0:t.activeElement;if(o){if(o===l)return void(i.value=l)}else if(s.contains(l))return void(i.value=l);o?lo(o):(fo(s,eo.First|eo.NoScroll),to.Error),i.value=null==(r=e.value)?void 0:r.activeElement}))}),{immediate:!0,flush:"post"})})),i}({ownerDocument:a,container:i,initialFocus:(0,r.computed)((()=>e.initialFocus))},(0,r.computed)((()=>Boolean(2&e.features))));!function({ownerDocument:e,container:t,containers:n,previousActiveElement:r},o){var i;qu(null==(i=e.value)?void 0:i.defaultView,"focus",(e=>{if(!o.value)return;let i=new Set(null==n?void 0:n.value);i.add(t);let a=r.value;if(!a)return;let l=e.target;l&&l instanceof HTMLElement?Gu(i,l)?(r.value=l,lo(l)):(e.preventDefault(),e.stopPropagation(),lo(a)):lo(r.value)}),!0)}({ownerDocument:a,container:i,containers:e.containers,previousActiveElement:l},(0,r.computed)((()=>Boolean(8&e.features))));let s=zu();function c(e){let t=zr(i);t&&Tr(s.value,{[Hu.Forwards]:()=>{fo(t,eo.First,{skipElements:[e.relatedTarget]})},[Hu.Backwards]:()=>{fo(t,eo.Last,{skipElements:[e.relatedTarget]})}})}let u=(0,r.ref)(!1);function f(e){"Tab"===e.key&&(u.value=!0,requestAnimationFrame((()=>{u.value=!1})))}function d(t){var n;let r=new Set(null==(n=e.containers)?void 0:n.value);r.add(i);let o=t.relatedTarget;o instanceof HTMLElement&&"true"!==o.dataset.headlessuiFocusGuard&&(Gu(r,o)||(u.value?fo(zr(i),Tr(s.value,{[Hu.Forwards]:()=>eo.Next,[Hu.Backwards]:()=>eo.Previous})|eo.WrapAround,{relativeTo:t.target}):t.target instanceof HTMLElement&&lo(t.target)))}return()=>{let o={ref:i,onKeydown:f,onFocusout:d},{features:a,initialFocus:l,containers:s,...u}=e;return(0,r.h)(r.Fragment,[Boolean(4&a)&&(0,r.h)(el,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:c,features:Xa.Focusable}),Ar({ourProps:o,theirProps:{...t,...u},slot:{},attrs:t,slots:n,name:"FocusTrap"}),Boolean(4&a)&&(0,r.h)(el,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:c,features:Xa.Focusable})])}}}),{features:Wu});function Gu(e,t){var n;for(let r of e)if(null!=(n=r.value)&&n.contains(t))return!0;return!1}let Zu="body > *",Yu=new Set,Ju=new Map;function Qu(e){e.setAttribute("aria-hidden","true"),e.inert=!0}function Xu(e){let t=Ju.get(e);!t||(null===t["aria-hidden"]?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",t["aria-hidden"]),e.inert=t.inert)}function ef(e,t=(0,r.ref)(!0)){(0,r.watchEffect)((n=>{if(!t.value||!e.value)return;let r=e.value,o=Wr(r);if(o){Yu.add(r);for(let e of Ju.keys())e.contains(r)&&(Xu(e),Ju.delete(e));o.querySelectorAll(Zu).forEach((e=>{if(e instanceof HTMLElement){for(let t of Yu)if(e.contains(t))return;1===Yu.size&&(Ju.set(e,{"aria-hidden":e.getAttribute("aria-hidden"),inert:e.inert}),Qu(e))}})),n((()=>{if(Yu.delete(r),Yu.size>0)o.querySelectorAll(Zu).forEach((e=>{if(e instanceof HTMLElement&&!Ju.has(e)){for(let t of Yu)if(e.contains(t))return;Ju.set(e,{"aria-hidden":e.getAttribute("aria-hidden"),inert:e.inert}),Qu(e)}}));else for(let e of Ju.keys())Xu(e),Ju.delete(e)}))}}))}let tf=Symbol("ForcePortalRootContext");let nf=(0,r.defineComponent)({name:"ForcePortalRoot",props:{as:{type:[Object,String],default:"template"},force:{type:Boolean,default:!1}},setup:(e,{slots:t,attrs:n})=>((0,r.provide)(tf,e.force),()=>{let{force:r,...o}=e;return Ar({theirProps:o,ourProps:{},slot:{},slots:t,attrs:n,name:"ForcePortalRoot"})})});let rf=(0,r.defineComponent)({name:"Portal",props:{as:{type:[Object,String],default:"div"}},setup(e,{slots:t,attrs:n}){let o=(0,r.ref)(null),i=(0,r.computed)((()=>Wr(o))),a=(0,r.inject)(tf,!1),l=(0,r.inject)(of,null),s=(0,r.ref)(!0===a||null==l?function(e){let t=Wr(e);if(!t){if(null===e)return null;throw new Error(`[Headless UI]: Cannot find ownerDocument for contextElement: ${e}`)}let n=t.getElementById("headlessui-portal-root");if(n)return n;let r=t.createElement("div");return r.setAttribute("id","headlessui-portal-root"),t.body.appendChild(r)}(o.value):l.resolveTarget());return(0,r.watchEffect)((()=>{a||null!=l&&(s.value=l.resolveTarget())})),(0,r.onUnmounted)((()=>{var e,t;let n=null==(e=i.value)?void 0:e.getElementById("headlessui-portal-root");!n||s.value===n&&s.value.children.length<=0&&(null==(t=s.value.parentElement)||t.removeChild(s.value))})),()=>{if(null===s.value)return null;let i={ref:o,"data-headlessui-portal":""};return(0,r.h)(r.Teleport,{to:s.value},Ar({ourProps:i,theirProps:e,slot:{},attrs:n,slots:t,name:"Portal"}))}}}),of=Symbol("PortalGroupContext"),af=(0,r.defineComponent)({name:"PortalGroup",props:{as:{type:[Object,String],default:"template"},target:{type:Object,default:null}},setup(e,{attrs:t,slots:n}){let o=(0,r.reactive)({resolveTarget:()=>e.target});return(0,r.provide)(of,o),()=>{let{target:r,...o}=e;return Ar({theirProps:o,ourProps:{},slot:{},attrs:t,slots:n,name:"PortalGroup"})}}}),lf=Symbol("StackContext");var sf=(e=>(e[e.Add=0]="Add",e[e.Remove=1]="Remove",e))(sf||{});function cf({type:e,enabled:t,element:n,onUpdate:o}){let i=(0,r.inject)(lf,(()=>{}));function a(...e){null==o||o(...e),i(...e)}(0,r.onMounted)((()=>{(0,r.watch)(t,((t,r)=>{t?a(0,e,n):!0===r&&a(1,e,n)}),{immediate:!0,flush:"sync"})})),(0,r.onUnmounted)((()=>{t.value&&a(1,e,n)})),(0,r.provide)(lf,a)}let uf=Symbol("DescriptionContext");(0,r.defineComponent)({name:"Description",props:{as:{type:[Object,String],default:"p"},id:{type:String,default:()=>`headlessui-description-${Dr()}`}},setup(e,{attrs:t,slots:n}){let o=function(){let e=(0,r.inject)(uf,null);if(null===e)throw new Error("Missing parent");return e}();return(0,r.onMounted)((()=>(0,r.onUnmounted)(o.register(e.id)))),()=>{let{name:i="Description",slot:a=(0,r.ref)({}),props:l={}}=o,{id:s,...c}=e,u={...Object.entries(l).reduce(((e,[t,n])=>Object.assign(e,{[t]:(0,r.unref)(n)})),{}),id:s};return Ar({ourProps:u,theirProps:c,slot:a.value,attrs:t,slots:n,name:i})}}});function ff(){let e;return{before({doc:t}){var n;let r=t.documentElement;e=(null!=(n=t.defaultView)?n:window).innerWidth-r.clientWidth},after({doc:t,d:n}){let r=t.documentElement,o=r.clientWidth-r.offsetWidth,i=e-o;n.style(r,"paddingRight",`${i}px`)}}}function df(){if(!(/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0))return{};let e;return{before(){e=window.pageYOffset},after({doc:t,d:n,meta:r}){function o(e){return r.containers.flatMap((e=>e())).some((t=>t.contains(e)))}n.style(t.body,"marginTop",`-${e}px`),window.scrollTo(0,0);let i=null;n.addEventListener(t,"click",(e=>{if(e.target instanceof HTMLElement)try{let n=e.target.closest("a");if(!n)return;let{hash:r}=new URL(n.href),a=t.querySelector(r);a&&!o(a)&&(i=a)}catch{}}),!0),n.addEventListener(t,"touchmove",(e=>{e.target instanceof HTMLElement&&!o(e.target)&&e.preventDefault()}),{passive:!1}),n.add((()=>{window.scrollTo(0,window.pageYOffset+e),i&&i.isConnected&&(i.scrollIntoView({block:"nearest"}),i=null)}))}}}function pf(e){let t={};for(let n of e)Object.assign(t,n(t));return t}let hf=function(e,t){let n=e(),r=new Set;return{getSnapshot:()=>n,subscribe:e=>(r.add(e),()=>r.delete(e)),dispatch(e,...o){let i=t[e].call(n,...o);i&&(n=i,r.forEach((e=>e())))}}}((()=>new Map),{PUSH(e,t){var n;let r=null!=(n=this.get(e))?n:{doc:e,count:0,d:Nu(),meta:new Set};return r.count++,r.meta.add(t),this.set(e,r),this},POP(e,t){let n=this.get(e);return n&&(n.count--,n.meta.delete(t)),this},SCROLL_PREVENT({doc:e,d:t,meta:n}){let r={doc:e,d:t,meta:pf(n)},o=[df(),ff(),{before({doc:e,d:t}){t.style(e.documentElement,"overflow","hidden")}}];o.forEach((({before:e})=>null==e?void 0:e(r))),o.forEach((({after:e})=>null==e?void 0:e(r)))},SCROLL_ALLOW({d:e}){e.dispose()},TEARDOWN({doc:e}){this.delete(e)}});function vf(e,t,n){let o=function(e){let t=(0,r.shallowRef)(e.getSnapshot());return(0,r.onUnmounted)(e.subscribe((()=>{t.value=e.getSnapshot()}))),t}(hf),i=(0,r.computed)((()=>{let t=e.value?o.value.get(e.value):void 0;return!!t&&t.count>0}));return(0,r.watch)([e,t],(([e,t],[r],o)=>{if(!e||!t)return;hf.dispatch("PUSH",e,n);let i=!1;o((()=>{i||(hf.dispatch("POP",null!=r?r:e,n),i=!0)}))}),{immediate:!0}),i}hf.subscribe((()=>{let e=hf.getSnapshot(),t=new Map;for(let[n]of e)t.set(n,n.documentElement.style.overflow);for(let n of e.values()){let e="hidden"===t.get(n.doc),r=0!==n.count;(r&&!e||!r&&e)&&hf.dispatch(n.count>0?"SCROLL_PREVENT":"SCROLL_ALLOW",n),0===n.count&&hf.dispatch("TEARDOWN",n)}}));var mf=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(mf||{});let gf=Symbol("DialogContext");function yf(e){let t=(0,r.inject)(gf,null);if(null===t){let t=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,yf),t}return t}let bf="DC8F892D-2EBD-447C-A4C8-A03058436FF4",wf=(0,r.defineComponent)({name:"Dialog",inheritAttrs:!1,props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},open:{type:[Boolean,String],default:bf},initialFocus:{type:Object,default:null},id:{type:String,default:()=>`headlessui-dialog-${Dr()}`}},emits:{close:e=>!0},setup(e,{emit:t,attrs:n,slots:o,expose:i}){var a;let l=(0,r.ref)(!1);(0,r.onMounted)((()=>{l.value=!0}));let s=(0,r.ref)(0),c=Zr(),u=(0,r.computed)((()=>e.open===bf&&null!==c?Tr(c.value,{[Gr.Open]:!0,[Gr.Closed]:!1}):e.open)),f=(0,r.ref)(new Set),d=(0,r.ref)(null),p=(0,r.ref)(null),h=(0,r.computed)((()=>Wr(d)));if(i({el:d,$el:d}),e.open===bf&&null===c)throw new Error("You forgot to provide an `open` prop to the `Dialog`.");if("boolean"!=typeof u.value)throw new Error(`You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${u.value===bf?void 0:e.open}`);let v=(0,r.computed)((()=>l.value&&u.value?0:1)),m=(0,r.computed)((()=>0===v.value)),g=(0,r.computed)((()=>s.value>1)),y=((0,r.inject)(gf,null),(0,r.computed)((()=>g.value?"parent":"leaf")));ef(d,(0,r.computed)((()=>!!g.value&&m.value))),cf({type:"Dialog",enabled:(0,r.computed)((()=>0===v.value)),element:d,onUpdate:(e,t,n)=>{if("Dialog"===t)return Tr(e,{[sf.Add](){f.value.add(n),s.value+=1},[sf.Remove](){f.value.delete(n),s.value-=1}})}});let b=function({slot:e=(0,r.ref)({}),name:t="Description",props:n={}}={}){let o=(0,r.ref)([]);return(0,r.provide)(uf,{register:function(e){return o.value.push(e),()=>{let t=o.value.indexOf(e);-1!==t&&o.value.splice(t,1)}},slot:e,name:t,props:n}),(0,r.computed)((()=>o.value.length>0?o.value.join(" "):void 0))}({name:"DialogDescription",slot:(0,r.computed)((()=>({open:u.value})))}),w=(0,r.ref)(null),C={titleId:w,panelRef:(0,r.ref)(null),dialogState:v,setTitleId(e){w.value!==e&&(w.value=e)},close(){t("close",!1)}};function _(){var e,t,n;return[...Array.from(null!=(t=null==(e=h.value)?void 0:e.querySelectorAll("html > *, body > *, [data-headlessui-portal]"))?t:[]).filter((e=>!(e===document.body||e===document.head||!(e instanceof HTMLElement)||e.contains(zr(p))||C.panelRef.value&&e.contains(C.panelRef.value)))),null!=(n=C.panelRef.value)?n:d.value]}return(0,r.provide)(gf,C),ho((()=>_()),((e,t)=>{C.close(),(0,r.nextTick)((()=>null==t?void 0:t.focus()))}),(0,r.computed)((()=>0===v.value&&!g.value))),qu(null==(a=h.value)?void 0:a.defaultView,"keydown",(e=>{e.defaultPrevented||e.key===Ur.Escape&&0===v.value&&(g.value||(e.preventDefault(),e.stopPropagation(),C.close()))})),vf(h,m,(e=>{var t;return{containers:[...null!=(t=e.containers)?t:[],_]}})),(0,r.watchEffect)((e=>{if(0!==v.value)return;let t=zr(d);if(!t)return;let n=new IntersectionObserver((e=>{for(let t of e)0===t.boundingClientRect.x&&0===t.boundingClientRect.y&&0===t.boundingClientRect.width&&0===t.boundingClientRect.height&&C.close()}));n.observe(t),e((()=>n.disconnect()))})),()=>{let{id:t,open:i,initialFocus:a,...l}=e,s={...n,ref:d,id:t,role:"dialog","aria-modal":0===v.value||void 0,"aria-labelledby":w.value,"aria-describedby":b.value},c={open:0===v.value};return(0,r.h)(nf,{force:!0},(()=>[(0,r.h)(rf,(()=>(0,r.h)(af,{target:d.value},(()=>(0,r.h)(nf,{force:!1},(()=>(0,r.h)(Ku,{initialFocus:a,containers:f,features:m.value?Tr(y.value,{parent:Ku.features.RestoreFocus,leaf:Ku.features.All&~Ku.features.FocusLock}):Ku.features.None},(()=>Ar({ourProps:s,theirProps:l,slot:c,attrs:n,slots:o,visible:0===v.value,features:Rr.RenderStrategy|Rr.Static,name:"Dialog"}))))))))),(0,r.h)(el,{features:Xa.Hidden,ref:p})]))}}}),Cf=((0,r.defineComponent)({name:"DialogOverlay",props:{as:{type:[Object,String],default:"div"},id:{type:String,default:()=>`headlessui-dialog-overlay-${Dr()}`}},setup(e,{attrs:t,slots:n}){let r=yf("DialogOverlay");function o(e){e.target===e.currentTarget&&(e.preventDefault(),e.stopPropagation(),r.close())}return()=>{let{id:i,...a}=e;return Ar({ourProps:{id:i,"aria-hidden":!0,onClick:o},theirProps:a,slot:{open:0===r.dialogState.value},attrs:t,slots:n,name:"DialogOverlay"})}}}),(0,r.defineComponent)({name:"DialogBackdrop",props:{as:{type:[Object,String],default:"div"},id:{type:String,default:()=>`headlessui-dialog-backdrop-${Dr()}`}},inheritAttrs:!1,setup(e,{attrs:t,slots:n,expose:o}){let i=yf("DialogBackdrop"),a=(0,r.ref)(null);return o({el:a,$el:a}),(0,r.onMounted)((()=>{if(null===i.panelRef.value)throw new Error("A component is being used, but a component is missing.")})),()=>{let{id:o,...l}=e,s={id:o,ref:a,"aria-hidden":!0};return(0,r.h)(nf,{force:!0},(()=>(0,r.h)(rf,(()=>Ar({ourProps:s,theirProps:{...t,...l},slot:{open:0===i.dialogState.value},attrs:t,slots:n,name:"DialogBackdrop"})))))}}}),(0,r.defineComponent)({name:"DialogPanel",props:{as:{type:[Object,String],default:"div"},id:{type:String,default:()=>`headlessui-dialog-panel-${Dr()}`}},setup(e,{attrs:t,slots:n,expose:r}){let o=yf("DialogPanel");function i(e){e.stopPropagation()}return r({el:o.panelRef,$el:o.panelRef}),()=>{let{id:r,...a}=e;return Ar({ourProps:{id:r,ref:o.panelRef,onClick:i},theirProps:a,slot:{open:0===o.dialogState.value},attrs:t,slots:n,name:"DialogPanel"})}}})),_f=(0,r.defineComponent)({name:"DialogTitle",props:{as:{type:[Object,String],default:"h2"},id:{type:String,default:()=>`headlessui-dialog-title-${Dr()}`}},setup(e,{attrs:t,slots:n}){let o=yf("DialogTitle");return(0,r.onMounted)((()=>{o.setTitleId(e.id),(0,r.onUnmounted)((()=>o.setTitleId(null)))})),()=>{let{id:r,...i}=e;return Ar({ourProps:{id:r},theirProps:i,slot:{open:0===o.dialogState.value},attrs:t,slots:n,name:"DialogTitle"})}}});var Ef=(0,r.createElementVNode)("div",{class:"fixed inset-0"},null,-1),xf={class:"fixed inset-0 overflow-hidden"},kf={class:"absolute inset-0 overflow-hidden"},Sf={class:"pointer-events-none fixed inset-y-0 right-0 flex max-w-full pl-10"},Of={class:"flex h-full flex-col overflow-y-scroll bg-white py-6 shadow-xl"},Nf={class:"px-4 sm:px-6"},Pf={class:"flex items-start justify-between"},Tf={class:"ml-3 flex h-7 items-center"},Vf=(0,r.createElementVNode)("span",{class:"sr-only"},"Close panel",-1),Rf={class:"relative mt-6 flex-1 px-4 sm:px-6"},Lf={class:"keyboard-shortcut"},Af={class:"shortcut"},jf=(0,r.createElementVNode)("span",{class:"description"},"Select a host",-1),Bf={class:"keyboard-shortcut"},If={class:"shortcut"},Mf=(0,r.createElementVNode)("span",{class:"description"},"Jump to file selection",-1),Ff={class:"keyboard-shortcut"},Df={class:"shortcut"},Uf=(0,r.createElementVNode)("span",{class:"description"},"Jump to logs",-1),$f={class:"keyboard-shortcut"},Hf={class:"shortcut"},zf=(0,r.createElementVNode)("span",{class:"description"},"Severity selection",-1),qf={class:"keyboard-shortcut"},Wf={class:"shortcut"},Kf=(0,r.createElementVNode)("span",{class:"description"},"Settings",-1),Gf={class:"keyboard-shortcut"},Zf={class:"shortcut"},Yf=(0,r.createElementVNode)("span",{class:"description"},"Search",-1),Jf={class:"keyboard-shortcut"},Qf={class:"shortcut"},Xf=(0,r.createElementVNode)("span",{class:"description"},"Refresh logs",-1),ed={class:"keyboard-shortcut"},td={class:"shortcut"},nd=(0,r.createElementVNode)("span",{class:"description"},"Keyboard shortcuts help",-1);const rd={__name:"KeyboardShortcutsOverlay",setup:function(e){var t=Mi();return function(e,n){return(0,r.openBlock)(),(0,r.createBlock)((0,r.unref)($u),{as:"template",show:(0,r.unref)(t).helpSlideOverOpen},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(wf),{as:"div",class:"relative z-20",onClose:n[1]||(n[1]=function(e){return(0,r.unref)(t).helpSlideOverOpen=!1})},{default:(0,r.withCtx)((function(){return[Ef,(0,r.createElementVNode)("div",xf,[(0,r.createElementVNode)("div",kf,[(0,r.createElementVNode)("div",Sf,[(0,r.createVNode)((0,r.unref)(Du),{as:"template",enter:"transform transition ease-in-out duration-200 sm:duration-300","enter-from":"translate-x-full","enter-to":"translate-x-0",leave:"transform transition ease-in-out duration-200 sm:duration-300","leave-from":"translate-x-0","leave-to":"translate-x-full"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(Cf),{class:"pointer-events-auto w-screen max-w-md"},{default:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("div",Of,[(0,r.createElementVNode)("div",Nf,[(0,r.createElementVNode)("div",Pf,[(0,r.createVNode)((0,r.unref)(_f),{class:"text-base font-semibold leading-6 text-gray-900"},{default:(0,r.withCtx)((function(){return[(0,r.createTextVNode)("Keyboard Shortcuts")]})),_:1}),(0,r.createElementVNode)("div",Tf,[(0,r.createElementVNode)("button",{type:"button",class:"rounded-md bg-white text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-brand-500 focus:ring-offset-2",onClick:n[0]||(n[0]=function(e){return(0,r.unref)(t).helpSlideOverOpen=!1})},[Vf,(0,r.createVNode)((0,r.unref)(ko),{class:"h-6 w-6","aria-hidden":"true"})])])])]),(0,r.createElementVNode)("div",Rf,[(0,r.createElementVNode)("div",Lf,[(0,r.createElementVNode)("span",Af,(0,r.toDisplayString)((0,r.unref)(Xi).Hosts),1),jf]),(0,r.createElementVNode)("div",Bf,[(0,r.createElementVNode)("span",If,(0,r.toDisplayString)((0,r.unref)(Xi).Files),1),Mf]),(0,r.createElementVNode)("div",Ff,[(0,r.createElementVNode)("span",Df,(0,r.toDisplayString)((0,r.unref)(Xi).Logs),1),Uf]),(0,r.createElementVNode)("div",$f,[(0,r.createElementVNode)("span",Hf,(0,r.toDisplayString)((0,r.unref)(Xi).Severity),1),zf]),(0,r.createElementVNode)("div",qf,[(0,r.createElementVNode)("span",Wf,(0,r.toDisplayString)((0,r.unref)(Xi).Settings),1),Kf]),(0,r.createElementVNode)("div",Gf,[(0,r.createElementVNode)("span",Zf,(0,r.toDisplayString)((0,r.unref)(Xi).Search),1),Yf]),(0,r.createElementVNode)("div",Jf,[(0,r.createElementVNode)("span",Qf,(0,r.toDisplayString)((0,r.unref)(Xi).Refresh),1),Xf]),(0,r.createElementVNode)("div",ed,[(0,r.createElementVNode)("span",td,(0,r.toDisplayString)((0,r.unref)(Xi).ShortcutHelp),1),nd])])])]})),_:1})]})),_:1})])])])]})),_:1})]})),_:1},8,["show"])}}};function od(e){return od="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},od(e)}function id(){id=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function c(e,t,n,o){var i=t&&t.prototype instanceof d?t:d,a=Object.create(i.prototype),l=new k(o||[]);return r(a,"_invoke",{value:C(e,n,l)}),a}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var f={};function d(){}function p(){}function h(){}var v={};s(v,i,(function(){return this}));var m=Object.getPrototypeOf,g=m&&m(m(S([])));g&&g!==t&&n.call(g,i)&&(v=g);var y=h.prototype=d.prototype=Object.create(v);function b(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function o(r,i,a,l){var s=u(e[r],e,i);if("throw"!==s.type){var c=s.arg,f=c.value;return f&&"object"==od(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){o("next",e,a,l)}),(function(e){o("throw",e,a,l)})):t.resolve(f).then((function(e){c.value=e,a(c)}),(function(e){return o("throw",e,a,l)}))}l(s.arg)}var i;r(this,"_invoke",{value:function(e,n){function r(){return new t((function(t,r){o(e,n,t,r)}))}return i=i?i.then(r,r):r()}})}function C(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return O()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var l=_(a,n);if(l){if(l===f)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=u(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===f)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}function _(e,t){var n=t.method,r=e.iterator[n];if(void 0===r)return t.delegate=null,"throw"===n&&e.iterator.return&&(t.method="return",t.arg=void 0,_(e,t),"throw"===t.method)||"return"!==n&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+n+"' method")),f;var o=u(r,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,f;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function E(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(E,this),this.reset(!0)}function S(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,o=function t(){for(;++r=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=n.call(i,"catchLoc"),s=n.call(i,"finallyLoc");if(l&&s){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;x(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:S(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},e}function ad(e,t,n,r,o,i,a){try{var l=e[i](a),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}var ld={class:"md:pl-88 flex flex-col flex-1 min-h-screen max-h-screen max-w-full"},sd={class:"absolute bottom-4 right-4 flex items-center"},cd={class:"text-xs text-gray-500 dark:text-gray-400 mr-5 -mb-0.5"},ud=(0,r.createElementVNode)("span",{class:"hidden md:inline"},"Memory: ",-1),fd={class:"font-semibold"},dd=(0,r.createElementVNode)("span",{class:"mx-1.5"},"·",-1),pd=(0,r.createElementVNode)("span",{class:"hidden md:inline"},"Duration: ",-1),hd={class:"font-semibold"},vd=(0,r.createElementVNode)("span",{class:"mx-1.5"},"·",-1),md=(0,r.createElementVNode)("span",{class:"hidden md:inline"},"Version: ",-1),gd={class:"font-semibold"},yd={key:0,href:"https://www.buymeacoffee.com/arunas",target:"_blank"};const bd={__name:"Home",setup:function(e){var t=Bo(),n=Mi(),o=Fi(),i=Ri(),a=Li(),l=Pr(),s=Nr();return(0,r.onBeforeMount)((function(){n.syncTheme(),document.addEventListener("keydown",ra)})),(0,r.onBeforeUnmount)((function(){document.removeEventListener("keydown",ra)})),(0,r.onMounted)((function(){setInterval(n.syncTheme,1e3)})),(0,r.watch)((function(){return l.query}),(function(e){o.selectFile(e.file||null),a.setPage(e.page||1),i.setQuery(e.query||""),n.loadLogs()}),{immediate:!0}),(0,r.watch)((function(){return l.query.host}),function(){var e,r=(e=id().mark((function e(r){return id().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.selectHost(r||null),r&&!t.selectedHostIdentifier&&Hi(s,"host",null),o.reset(),e.next=5,o.loadFolders();case 5:n.loadLogs();case 6:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){ad(i,r,o,a,l,"next",e)}function l(e){ad(i,r,o,a,l,"throw",e)}a(void 0)}))});return function(e){return r.apply(this,arguments)}}(),{immediate:!0}),(0,r.onMounted)((function(){window.onresize=function(){n.setViewportDimensions(window.innerWidth,window.innerHeight)}})),function(e,t){var i;return(0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,null,[(0,r.createElementVNode)("div",{class:(0,r.normalizeClass)(["absolute z-20 top-0 bottom-10 bg-gray-100 dark:bg-gray-900 md:left-0 md:flex md:w-88 md:flex-col md:fixed md:inset-y-0",[(0,r.unref)(o).sidebarOpen?"left-0 right-0 md:left-auto md:right-auto":"-left-[200%] right-[200%] md:left-auto md:right-auto"]])},[(0,r.createVNode)(ms)],2),(0,r.createElementVNode)("div",ld,[(0,r.createVNode)(Eu,{class:"pb-16 md:pb-12"})]),(0,r.createElementVNode)("div",sd,[(0,r.createElementVNode)("p",cd,[null!==(i=(0,r.unref)(n).performance)&&void 0!==i&&i.requestTime?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:0},[(0,r.createElementVNode)("span",null,[ud,(0,r.createElementVNode)("span",fd,(0,r.toDisplayString)((0,r.unref)(n).performance.memoryUsage),1)]),dd,(0,r.createElementVNode)("span",null,[pd,(0,r.createElementVNode)("span",hd,(0,r.toDisplayString)((0,r.unref)(n).performance.requestTime),1)]),vd],64)):(0,r.createCommentVNode)("",!0),(0,r.createElementVNode)("span",null,[md,(0,r.createElementVNode)("span",gd,(0,r.toDisplayString)(e.LogViewer.version),1)])]),e.LogViewer.show_support_link?((0,r.openBlock)(),(0,r.createElementBlock)("a",yd,[(0,r.createVNode)(Ou,{class:"h-6 w-auto",title:"Support me by buying me a cup of coffee ❤️"})])):(0,r.createCommentVNode)("",!0)]),(0,r.createVNode)(rd)],64)}}},wd=bd;function Cd(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,o=e}finally{try{if(!s&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return _d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _d(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n""+e)),d=Xt.bind(null,sr),p=Xt.bind(null,cr);function h(e,r){if(r=Qt({},r||c.value),"string"==typeof e){const o=on(n,e,r.path),a=t.resolve({path:o.path},r),l=i.createHref(o.fullPath);return Qt(o,a,{params:p(a.params),hash:cr(o.hash),redirectedFrom:void 0,href:l})}let a;if("path"in e)a=Qt({},e,{path:on(n,e.path,r.path).path});else{const t=Qt({},e.params);for(const e in t)null==t[e]&&delete t[e];a=Qt({},e,{params:d(e.params)}),r.params=d(r.params)}const l=t.resolve(a,r),s=e.hash||"";l.params=f(p(l.params));const u=function(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}(o,Qt({},e,{hash:(h=s,ar(h).replace(nr,"{").replace(or,"}").replace(er,"^")),path:l.path}));var h;const v=i.createHref(u);return Qt({fullPath:u,hash:s,query:o===fr?dr(e.query):e.query||{}},l,{redirectedFrom:void 0,href:v})}function v(e){return"string"==typeof e?on(n,e,c.value.path):Qt({},e)}function m(e,t){if(u!==e)return Nn(8,{from:t,to:e})}function g(e){return b(e)}function y(e){const t=e.matched[e.matched.length-1];if(t&&t.redirect){const{redirect:n}=t;let r="function"==typeof n?n(e):n;return"string"==typeof r&&(r=r.includes("?")||r.includes("#")?r=v(r):{path:r},r.params={}),Qt({query:e.query,hash:e.hash,params:"path"in r?{}:e.params},r)}}function b(e,t){const n=u=h(e),r=c.value,i=e.state,a=e.force,l=!0===e.replace,s=y(n);if(s)return b(Qt(v(s),{state:"object"==typeof s?Qt({},i,s.state):i,force:a,replace:l}),t||n);const f=n;let d;return f.redirectedFrom=t,!a&&function(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&ln(t.matched[r],n.matched[o])&&sn(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}(o,r,n)&&(d=Nn(16,{to:f,from:r}),V(r,r,!0,!1)),(d?Promise.resolve(d):C(f,r)).catch((e=>Pn(e)?Pn(e,2)?e:T(e):P(e,f,r))).then((e=>{if(e){if(Pn(e,2))return b(Qt({replace:l},v(e.to),{state:"object"==typeof e.to?Qt({},i,e.to.state):i,force:a}),t||f)}else e=E(f,r,!0,l,i);return _(f,r,e),e}))}function w(e,t){const n=m(e,t);return n?Promise.reject(n):Promise.resolve()}function C(e,t){let n;const[r,o,i]=function(e,t){const n=[],r=[],o=[],i=Math.max(t.matched.length,e.matched.length);for(let a=0;aln(e,i)))?r.push(i):n.push(i));const l=e.matched[a];l&&(t.matched.find((e=>ln(e,l)))||o.push(l))}return[n,r,o]}(e,t);n=wr(r.reverse(),"beforeRouteLeave",e,t);for(const o of r)o.leaveGuards.forEach((r=>{n.push(br(r,e,t))}));const s=w.bind(null,e,t);return n.push(s),Or(n).then((()=>{n=[];for(const r of a.list())n.push(br(r,e,t));return n.push(s),Or(n)})).then((()=>{n=wr(o,"beforeRouteUpdate",e,t);for(const r of o)r.updateGuards.forEach((r=>{n.push(br(r,e,t))}));return n.push(s),Or(n)})).then((()=>{n=[];for(const r of e.matched)if(r.beforeEnter&&!t.matched.includes(r))if(tn(r.beforeEnter))for(const o of r.beforeEnter)n.push(br(o,e,t));else n.push(br(r.beforeEnter,e,t));return n.push(s),Or(n)})).then((()=>(e.matched.forEach((e=>e.enterCallbacks={})),n=wr(i,"beforeRouteEnter",e,t),n.push(s),Or(n)))).then((()=>{n=[];for(const r of l.list())n.push(br(r,e,t));return n.push(s),Or(n)})).catch((e=>Pn(e,8)?e:Promise.reject(e)))}function _(e,t,n){for(const r of s.list())r(e,t,n)}function E(e,t,n,r,o){const a=m(e,t);if(a)return a;const l=t===kn,s=Yt?history.state:{};n&&(r||l?i.replace(e.fullPath,Qt({scroll:l&&s&&s.scroll},o)):i.push(e.fullPath,o)),c.value=e,V(e,t,n,l),T()}let x;function k(){x||(x=i.listen(((e,t,n)=>{if(!j.listening)return;const r=h(e),o=y(r);if(o)return void b(Qt(o,{replace:!0}),r).catch(en);u=r;const a=c.value;Yt&&function(e,t){bn.set(e,t)}(yn(a.fullPath,n.delta),mn()),C(r,a).catch((e=>Pn(e,12)?e:Pn(e,2)?(b(e.to,r).then((e=>{Pn(e,20)&&!n.delta&&n.type===fn.pop&&i.go(-1,!1)})).catch(en),Promise.reject()):(n.delta&&i.go(-n.delta,!1),P(e,r,a)))).then((e=>{(e=e||E(r,a,!1))&&(n.delta&&!Pn(e,8)?i.go(-n.delta,!1):n.type===fn.pop&&Pn(e,20)&&i.go(-1,!1)),_(r,a,e)})).catch(en)})))}let S,O=yr(),N=yr();function P(e,t,n){T(e);const r=N.list();return r.length&&r.forEach((r=>r(e,t,n))),Promise.reject(e)}function T(e){return S||(S=!e,k(),O.list().forEach((([t,n])=>e?n(e):t())),O.reset()),e}function V(t,n,o,i){const{scrollBehavior:a}=e;if(!Yt||!a)return Promise.resolve();const l=!o&&function(e){const t=bn.get(e);return bn.delete(e),t}(yn(t.fullPath,0))||(i||!o)&&history.state&&history.state.scroll||null;return(0,r.nextTick)().then((()=>a(t,n,l))).then((e=>e&&gn(e))).catch((e=>P(e,t,n)))}const R=e=>i.go(e);let L;const A=new Set,j={currentRoute:c,listening:!0,addRoute:function(e,n){let r,o;return xn(e)?(r=t.getRecordMatcher(e),o=n):o=e,t.addRoute(o,r)},removeRoute:function(e){const n=t.getRecordMatcher(e);n&&t.removeRoute(n)},hasRoute:function(e){return!!t.getRecordMatcher(e)},getRoutes:function(){return t.getRoutes().map((e=>e.record))},resolve:h,options:e,push:g,replace:function(e){return g(Qt(v(e),{replace:!0}))},go:R,back:()=>R(-1),forward:()=>R(1),beforeEach:a.add,beforeResolve:l.add,afterEach:s.add,onError:N.add,isReady:function(){return S&&c.value!==kn?Promise.resolve():new Promise(((e,t)=>{O.add([e,t])}))},install(e){e.component("RouterLink",_r),e.component("RouterView",Sr),e.config.globalProperties.$router=this,Object.defineProperty(e.config.globalProperties,"$route",{enumerable:!0,get:()=>(0,r.unref)(c)}),Yt&&!L&&c.value===kn&&(L=!0,g(i.location).catch((e=>{0})));const t={};for(const e in kn)t[e]=(0,r.computed)((()=>c.value[e]));e.provide(vr,this),e.provide(mr,(0,r.reactive)(t)),e.provide(gr,c);const n=e.unmount;A.add(e),e.unmount=function(){A.delete(e),A.size<1&&(u=kn,x&&x(),x=null,c.value=kn,L=!1,S=!1),n()}}};return j}({routes:[{path:LogViewer.basePath,name:"home",component:wd}],history:En(),base:Pd}),Vd=function(){const e=(0,r.effectScope)(!0),t=e.run((()=>(0,r.ref)({})));let n=[],i=[];const a=(0,r.markRaw)({install(e){v(a),o||(a._a=e,e.provide(m,a),e.config.globalProperties.$pinia=a,w&&W(e,a),i.forEach((e=>n.push(e))),i=[])},use(e){return this._a||o?n.push(e):i.push(e),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return w&&"undefined"!=typeof Proxy&&a.use(Y),a}(),Rd=(0,r.createApp)({router:Td});Rd.use(Td),Rd.use(Vd),Rd.mixin({computed:{LogViewer:function(){return window.LogViewer}}}),Rd.mount("#log-viewer")},742:(e,t)=>{"use strict";t.byteLength=function(e){var t=s(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,i=s(e),a=i[0],l=i[1],c=new o(function(e,t,n){return 3*(t+n)/4-n}(0,a,l)),u=0,f=l>0?a-4:a;for(n=0;n>16&255,c[u++]=t>>8&255,c[u++]=255&t;2===l&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,c[u++]=255&t);1===l&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t);return c},t.fromByteArray=function(e){for(var t,r=e.length,o=r%3,i=[],a=16383,l=0,s=r-o;ls?s:l+a));1===o?(t=e[r-1],i.push(n[t>>2]+n[t<<4&63]+"==")):2===o&&(t=(e[r-2]<<8)+e[r-1],i.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return i.join("")};for(var n=[],r=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,l=i.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function c(e,t,r){for(var o,i,a=[],l=t;l>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return a.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},764:(e,t,n)=>{"use strict";var r=n(742),o=n(645),i=n(826);function a(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function l(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function h(e,t){if(s.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return U(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return $(e).length;default:if(r)return U(e).length;t=(""+t).toLowerCase(),r=!0}}function v(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return T(this,t,n);case"utf8":case"utf-8":return S(this,t,n);case"ascii":return N(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return k(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return V(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function m(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function g(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=s.from(t,r)),s.isBuffer(t))return 0===t.length?-1:y(e,t,n,r,o);if("number"==typeof t)return t&=255,s.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):y(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function y(e,t,n,r,o){var i,a=1,l=e.length,s=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,l/=2,s/=2,n/=2}function c(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var u=-1;for(i=n;il&&(n=l-s),i=n;i>=0;i--){for(var f=!0,d=0;do&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function k(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function S(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:c>223?3:c>191?2:1;if(o+f<=n)switch(f){case 1:c<128&&(u=c);break;case 2:128==(192&(i=e[o+1]))&&(s=(31&c)<<6|63&i)>127&&(u=s);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(s=(15&c)<<12|(63&i)<<6|63&a)>2047&&(s<55296||s>57343)&&(u=s);break;case 4:i=e[o+1],a=e[o+2],l=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&l)&&(s=(15&c)<<18|(63&i)<<12|(63&a)<<6|63&l)>65535&&s<1114112&&(u=s)}null===u?(u=65533,f=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),o+=f}return function(e){var t=e.length;if(t<=O)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},s.prototype.compare=function(e,t,n,r,o){if(!s.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),l=Math.min(i,a),c=this.slice(r,o),u=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return b(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return C(this,e,t,n);case"latin1":case"binary":return _(this,e,t,n);case"base64":return E(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var O=4096;function N(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!s.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function A(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function j(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function B(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function I(e,t,n,r,i){return i||B(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function M(e,t,n,r,i){return i||B(e,0,n,8),o.write(e,t,n,r,52,8),n+8}s.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},s.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},s.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},s.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},s.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},s.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},s.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},s.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},s.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},s.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},s.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},s.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},s.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},s.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},s.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},s.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},s.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},s.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},s.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),s.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},s.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):A(this,e,t,!0),t+2},s.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):A(this,e,t,!1),t+2},s.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):j(this,e,t,!0),t+4},s.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):j(this,e,t,!1),t+4},s.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,l=0;for(this[t]=255&e;++i>0)-l&255;return t+n},s.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,l=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===l&&0!==this[t+i+1]&&(l=1),this[t+i]=(e/a>>0)-l&255;return t+n},s.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),s.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},s.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):A(this,e,t,!0),t+2},s.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):A(this,e,t,!1),t+2},s.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):j(this,e,t,!0),t+4},s.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):j(this,e,t,!1),t+4},s.prototype.writeFloatLE=function(e,t,n){return I(this,e,t,!0,n)},s.prototype.writeFloatBE=function(e,t,n){return I(this,e,t,!1,n)},s.prototype.writeDoubleLE=function(e,t,n){return M(this,e,t,!0,n)},s.prototype.writeDoubleBE=function(e,t,n){return M(this,e,t,!1,n)},s.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!s.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function $(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(F,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function H(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}},645:(e,t)=>{t.read=function(e,t,n,r,o){var i,a,l=8*o-r-1,s=(1<>1,u=-7,f=n?o-1:0,d=n?-1:1,p=e[t+f];for(f+=d,i=p&(1<<-u)-1,p>>=-u,u+=l;u>0;i=256*i+e[t+f],f+=d,u-=8);for(a=i&(1<<-u)-1,i>>=-u,u+=r;u>0;a=256*a+e[t+f],f+=d,u-=8);if(0===i)i=1-c;else{if(i===s)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=c}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,l,s,c=8*i-o-1,u=(1<>1,d=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,h=r?1:-1,v=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(l=isNaN(t)?1:0,a=u):(a=Math.floor(Math.log(t)/Math.LN2),t*(s=Math.pow(2,-a))<1&&(a--,s*=2),(t+=a+f>=1?d/s:d*Math.pow(2,1-f))*s>=2&&(a++,s/=2),a+f>=u?(l=0,a=u):a+f>=1?(l=(t*s-1)*Math.pow(2,o),a+=f):(l=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&l,p+=h,l/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=h,a/=256,c-=8);e[n+p-h]|=128*v}},826:e=>{var t={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==t.call(e)}},486:function(e,t,n){var r;e=n.nmd(e),function(){var o,i=200,a="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",l="Expected a function",s="Invalid `variable` option passed into `_.template`",c="__lodash_hash_undefined__",u=500,f="__lodash_placeholder__",d=1,p=2,h=4,v=1,m=2,g=1,y=2,b=4,w=8,C=16,_=32,E=64,x=128,k=256,S=512,O=30,N="...",P=800,T=16,V=1,R=2,L=1/0,A=9007199254740991,j=17976931348623157e292,B=NaN,I=4294967295,M=I-1,F=I>>>1,D=[["ary",x],["bind",g],["bindKey",y],["curry",w],["curryRight",C],["flip",S],["partial",_],["partialRight",E],["rearg",k]],U="[object Arguments]",$="[object Array]",H="[object AsyncFunction]",z="[object Boolean]",q="[object Date]",W="[object DOMException]",K="[object Error]",G="[object Function]",Z="[object GeneratorFunction]",Y="[object Map]",J="[object Number]",Q="[object Null]",X="[object Object]",ee="[object Promise]",te="[object Proxy]",ne="[object RegExp]",re="[object Set]",oe="[object String]",ie="[object Symbol]",ae="[object Undefined]",le="[object WeakMap]",se="[object WeakSet]",ce="[object ArrayBuffer]",ue="[object DataView]",fe="[object Float32Array]",de="[object Float64Array]",pe="[object Int8Array]",he="[object Int16Array]",ve="[object Int32Array]",me="[object Uint8Array]",ge="[object Uint8ClampedArray]",ye="[object Uint16Array]",be="[object Uint32Array]",we=/\b__p \+= '';/g,Ce=/\b(__p \+=) '' \+/g,_e=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Ee=/&(?:amp|lt|gt|quot|#39);/g,xe=/[&<>"']/g,ke=RegExp(Ee.source),Se=RegExp(xe.source),Oe=/<%-([\s\S]+?)%>/g,Ne=/<%([\s\S]+?)%>/g,Pe=/<%=([\s\S]+?)%>/g,Te=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ve=/^\w*$/,Re=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Le=/[\\^$.*+?()[\]{}|]/g,Ae=RegExp(Le.source),je=/^\s+/,Be=/\s/,Ie=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Me=/\{\n\/\* \[wrapped with (.+)\] \*/,Fe=/,? & /,De=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Ue=/[()=,{}\[\]\/\s]/,$e=/\\(\\)?/g,He=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ze=/\w*$/,qe=/^[-+]0x[0-9a-f]+$/i,We=/^0b[01]+$/i,Ke=/^\[object .+?Constructor\]$/,Ge=/^0o[0-7]+$/i,Ze=/^(?:0|[1-9]\d*)$/,Ye=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Je=/($^)/,Qe=/['\n\r\u2028\u2029\\]/g,Xe="\\ud800-\\udfff",et="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",tt="\\u2700-\\u27bf",nt="a-z\\xdf-\\xf6\\xf8-\\xff",rt="A-Z\\xc0-\\xd6\\xd8-\\xde",ot="\\ufe0e\\ufe0f",it="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",at="['’]",lt="["+Xe+"]",st="["+it+"]",ct="["+et+"]",ut="\\d+",ft="["+tt+"]",dt="["+nt+"]",pt="[^"+Xe+it+ut+tt+nt+rt+"]",ht="\\ud83c[\\udffb-\\udfff]",vt="[^"+Xe+"]",mt="(?:\\ud83c[\\udde6-\\uddff]){2}",gt="[\\ud800-\\udbff][\\udc00-\\udfff]",yt="["+rt+"]",bt="\\u200d",wt="(?:"+dt+"|"+pt+")",Ct="(?:"+yt+"|"+pt+")",_t="(?:['’](?:d|ll|m|re|s|t|ve))?",Et="(?:['’](?:D|LL|M|RE|S|T|VE))?",xt="(?:"+ct+"|"+ht+")"+"?",kt="["+ot+"]?",St=kt+xt+("(?:"+bt+"(?:"+[vt,mt,gt].join("|")+")"+kt+xt+")*"),Ot="(?:"+[ft,mt,gt].join("|")+")"+St,Nt="(?:"+[vt+ct+"?",ct,mt,gt,lt].join("|")+")",Pt=RegExp(at,"g"),Tt=RegExp(ct,"g"),Vt=RegExp(ht+"(?="+ht+")|"+Nt+St,"g"),Rt=RegExp([yt+"?"+dt+"+"+_t+"(?="+[st,yt,"$"].join("|")+")",Ct+"+"+Et+"(?="+[st,yt+wt,"$"].join("|")+")",yt+"?"+wt+"+"+_t,yt+"+"+Et,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ut,Ot].join("|"),"g"),Lt=RegExp("["+bt+Xe+et+ot+"]"),At=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,jt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Bt=-1,It={};It[fe]=It[de]=It[pe]=It[he]=It[ve]=It[me]=It[ge]=It[ye]=It[be]=!0,It[U]=It[$]=It[ce]=It[z]=It[ue]=It[q]=It[K]=It[G]=It[Y]=It[J]=It[X]=It[ne]=It[re]=It[oe]=It[le]=!1;var Mt={};Mt[U]=Mt[$]=Mt[ce]=Mt[ue]=Mt[z]=Mt[q]=Mt[fe]=Mt[de]=Mt[pe]=Mt[he]=Mt[ve]=Mt[Y]=Mt[J]=Mt[X]=Mt[ne]=Mt[re]=Mt[oe]=Mt[ie]=Mt[me]=Mt[ge]=Mt[ye]=Mt[be]=!0,Mt[K]=Mt[G]=Mt[le]=!1;var Ft={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Dt=parseFloat,Ut=parseInt,$t="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,Ht="object"==typeof self&&self&&self.Object===Object&&self,zt=$t||Ht||Function("return this")(),qt=t&&!t.nodeType&&t,Wt=qt&&e&&!e.nodeType&&e,Kt=Wt&&Wt.exports===qt,Gt=Kt&&$t.process,Zt=function(){try{var e=Wt&&Wt.require&&Wt.require("util").types;return e||Gt&&Gt.binding&&Gt.binding("util")}catch(e){}}(),Yt=Zt&&Zt.isArrayBuffer,Jt=Zt&&Zt.isDate,Qt=Zt&&Zt.isMap,Xt=Zt&&Zt.isRegExp,en=Zt&&Zt.isSet,tn=Zt&&Zt.isTypedArray;function nn(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function rn(e,t,n,r){for(var o=-1,i=null==e?0:e.length;++o-1}function un(e,t,n){for(var r=-1,o=null==e?0:e.length;++r-1;);return n}function Ln(e,t){for(var n=e.length;n--&&bn(t,e[n],0)>-1;);return n}var An=xn({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),jn=xn({"&":"&","<":"<",">":">",'"':""","'":"'"});function Bn(e){return"\\"+Ft[e]}function In(e){return Lt.test(e)}function Mn(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}function Fn(e,t){return function(n){return e(t(n))}}function Dn(e,t){for(var n=-1,r=e.length,o=0,i=[];++n",""":'"',"'":"'"});var Kn=function e(t){var n,r=(t=null==t?zt:Kn.defaults(zt.Object(),t,Kn.pick(zt,jt))).Array,Be=t.Date,Xe=t.Error,et=t.Function,tt=t.Math,nt=t.Object,rt=t.RegExp,ot=t.String,it=t.TypeError,at=r.prototype,lt=et.prototype,st=nt.prototype,ct=t["__core-js_shared__"],ut=lt.toString,ft=st.hasOwnProperty,dt=0,pt=(n=/[^.]+$/.exec(ct&&ct.keys&&ct.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",ht=st.toString,vt=ut.call(nt),mt=zt._,gt=rt("^"+ut.call(ft).replace(Le,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),yt=Kt?t.Buffer:o,bt=t.Symbol,wt=t.Uint8Array,Ct=yt?yt.allocUnsafe:o,_t=Fn(nt.getPrototypeOf,nt),Et=nt.create,xt=st.propertyIsEnumerable,kt=at.splice,St=bt?bt.isConcatSpreadable:o,Ot=bt?bt.iterator:o,Nt=bt?bt.toStringTag:o,Vt=function(){try{var e=$i(nt,"defineProperty");return e({},"",{}),e}catch(e){}}(),Lt=t.clearTimeout!==zt.clearTimeout&&t.clearTimeout,Ft=Be&&Be.now!==zt.Date.now&&Be.now,$t=t.setTimeout!==zt.setTimeout&&t.setTimeout,Ht=tt.ceil,qt=tt.floor,Wt=nt.getOwnPropertySymbols,Gt=yt?yt.isBuffer:o,Zt=t.isFinite,mn=at.join,xn=Fn(nt.keys,nt),Gn=tt.max,Zn=tt.min,Yn=Be.now,Jn=t.parseInt,Qn=tt.random,Xn=at.reverse,er=$i(t,"DataView"),tr=$i(t,"Map"),nr=$i(t,"Promise"),rr=$i(t,"Set"),or=$i(t,"WeakMap"),ir=$i(nt,"create"),ar=or&&new or,lr={},sr=ha(er),cr=ha(tr),ur=ha(nr),fr=ha(rr),dr=ha(or),pr=bt?bt.prototype:o,hr=pr?pr.valueOf:o,vr=pr?pr.toString:o;function mr(e){if(Vl(e)&&!wl(e)&&!(e instanceof wr)){if(e instanceof br)return e;if(ft.call(e,"__wrapped__"))return va(e)}return new br(e)}var gr=function(){function e(){}return function(t){if(!Tl(t))return{};if(Et)return Et(t);e.prototype=t;var n=new e;return e.prototype=o,n}}();function yr(){}function br(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=o}function wr(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=I,this.__views__=[]}function Cr(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function Mr(e,t,n,r,i,a){var l,s=t&d,c=t&p,u=t&h;if(n&&(l=i?n(e,r,i,a):n(e)),l!==o)return l;if(!Tl(e))return e;var f=wl(e);if(f){if(l=function(e){var t=e.length,n=new e.constructor(t);t&&"string"==typeof e[0]&&ft.call(e,"index")&&(n.index=e.index,n.input=e.input);return n}(e),!s)return ai(e,l)}else{var v=qi(e),m=v==G||v==Z;if(xl(e))return ei(e,s);if(v==X||v==U||m&&!i){if(l=c||m?{}:Ki(e),!s)return c?function(e,t){return li(e,zi(e),t)}(e,function(e,t){return e&&li(t,ss(t),e)}(l,e)):function(e,t){return li(e,Hi(e),t)}(e,Ar(l,e))}else{if(!Mt[v])return i?e:{};l=function(e,t,n){var r=e.constructor;switch(t){case ce:return ti(e);case z:case q:return new r(+e);case ue:return function(e,t){var n=t?ti(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case fe:case de:case pe:case he:case ve:case me:case ge:case ye:case be:return ni(e,n);case Y:return new r;case J:case oe:return new r(e);case ne:return function(e){var t=new e.constructor(e.source,ze.exec(e));return t.lastIndex=e.lastIndex,t}(e);case re:return new r;case ie:return o=e,hr?nt(hr.call(o)):{}}var o}(e,v,s)}}a||(a=new kr);var g=a.get(e);if(g)return g;a.set(e,l),Bl(e)?e.forEach((function(r){l.add(Mr(r,t,n,r,e,a))})):Rl(e)&&e.forEach((function(r,o){l.set(o,Mr(r,t,n,o,e,a))}));var y=f?o:(u?c?ji:Ai:c?ss:ls)(e);return on(y||e,(function(r,o){y&&(r=e[o=r]),Vr(l,o,Mr(r,t,n,o,e,a))})),l}function Fr(e,t,n){var r=n.length;if(null==e)return!r;for(e=nt(e);r--;){var i=n[r],a=t[i],l=e[i];if(l===o&&!(i in e)||!a(l))return!1}return!0}function Dr(e,t,n){if("function"!=typeof e)throw new it(l);return la((function(){e.apply(o,n)}),t)}function Ur(e,t,n,r){var o=-1,a=cn,l=!0,s=e.length,c=[],u=t.length;if(!s)return c;n&&(t=fn(t,Pn(n))),r?(a=un,l=!1):t.length>=i&&(a=Vn,l=!1,t=new xr(t));e:for(;++o-1},_r.prototype.set=function(e,t){var n=this.__data__,r=Rr(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Er.prototype.clear=function(){this.size=0,this.__data__={hash:new Cr,map:new(tr||_r),string:new Cr}},Er.prototype.delete=function(e){var t=Di(this,e).delete(e);return this.size-=t?1:0,t},Er.prototype.get=function(e){return Di(this,e).get(e)},Er.prototype.has=function(e){return Di(this,e).has(e)},Er.prototype.set=function(e,t){var n=Di(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},xr.prototype.add=xr.prototype.push=function(e){return this.__data__.set(e,c),this},xr.prototype.has=function(e){return this.__data__.has(e)},kr.prototype.clear=function(){this.__data__=new _r,this.size=0},kr.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},kr.prototype.get=function(e){return this.__data__.get(e)},kr.prototype.has=function(e){return this.__data__.has(e)},kr.prototype.set=function(e,t){var n=this.__data__;if(n instanceof _r){var r=n.__data__;if(!tr||r.length0&&n(l)?t>1?Kr(l,t-1,n,r,o):dn(o,l):r||(o[o.length]=l)}return o}var Gr=fi(),Zr=fi(!0);function Yr(e,t){return e&&Gr(e,t,ls)}function Jr(e,t){return e&&Zr(e,t,ls)}function Qr(e,t){return sn(t,(function(t){return Ol(e[t])}))}function Xr(e,t){for(var n=0,r=(t=Yo(t,e)).length;null!=e&&nt}function ro(e,t){return null!=e&&ft.call(e,t)}function oo(e,t){return null!=e&&t in nt(e)}function io(e,t,n){for(var i=n?un:cn,a=e[0].length,l=e.length,s=l,c=r(l),u=1/0,f=[];s--;){var d=e[s];s&&t&&(d=fn(d,Pn(t))),u=Zn(d.length,u),c[s]=!n&&(t||a>=120&&d.length>=120)?new xr(s&&d):o}d=e[0];var p=-1,h=c[0];e:for(;++p=l?s:s*("desc"==n[r]?-1:1)}return e.index-t.index}(e,t,n)}))}function _o(e,t,n){for(var r=-1,o=t.length,i={};++r-1;)l!==e&&kt.call(l,s,1),kt.call(e,s,1);return e}function xo(e,t){for(var n=e?t.length:0,r=n-1;n--;){var o=t[n];if(n==r||o!==i){var i=o;Zi(o)?kt.call(e,o,1):$o(e,o)}}return e}function ko(e,t){return e+qt(Qn()*(t-e+1))}function So(e,t){var n="";if(!e||t<1||t>A)return n;do{t%2&&(n+=e),(t=qt(t/2))&&(e+=e)}while(t);return n}function Oo(e,t){return sa(ra(e,t,Ls),e+"")}function No(e){return Or(ms(e))}function Po(e,t){var n=ms(e);return fa(n,Ir(t,0,n.length))}function To(e,t,n,r){if(!Tl(e))return e;for(var i=-1,a=(t=Yo(t,e)).length,l=a-1,s=e;null!=s&&++ii?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var a=r(i);++o>>1,a=e[i];null!==a&&!Ml(a)&&(n?a<=t:a=i){var u=t?null:Si(e);if(u)return Un(u);l=!1,o=Vn,c=new xr}else c=t?[]:s;e:for(;++r=r?e:Ao(e,t,n)}var Xo=Lt||function(e){return zt.clearTimeout(e)};function ei(e,t){if(t)return e.slice();var n=e.length,r=Ct?Ct(n):new e.constructor(n);return e.copy(r),r}function ti(e){var t=new e.constructor(e.byteLength);return new wt(t).set(new wt(e)),t}function ni(e,t){var n=t?ti(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function ri(e,t){if(e!==t){var n=e!==o,r=null===e,i=e==e,a=Ml(e),l=t!==o,s=null===t,c=t==t,u=Ml(t);if(!s&&!u&&!a&&e>t||a&&l&&c&&!s&&!u||r&&l&&c||!n&&c||!i)return 1;if(!r&&!a&&!u&&e1?n[i-1]:o,l=i>2?n[2]:o;for(a=e.length>3&&"function"==typeof a?(i--,a):o,l&&Yi(n[0],n[1],l)&&(a=i<3?o:a,i=1),t=nt(t);++r-1?i[a?t[l]:l]:o}}function mi(e){return Li((function(t){var n=t.length,r=n,i=br.prototype.thru;for(e&&t.reverse();r--;){var a=t[r];if("function"!=typeof a)throw new it(l);if(i&&!s&&"wrapper"==Ii(a))var s=new br([],!0)}for(r=s?r:n;++r1&&w.reverse(),d&&us))return!1;var u=a.get(e),f=a.get(t);if(u&&f)return u==t&&f==e;var d=-1,p=!0,h=n&m?new xr:o;for(a.set(e,t),a.set(t,e);++d-1&&e%1==0&&e1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace(Ie,"{\n/* [wrapped with "+t+"] */\n")}(r,function(e,t){return on(D,(function(n){var r="_."+n[0];t&n[1]&&!cn(e,r)&&e.push(r)})),e.sort()}(function(e){var t=e.match(Me);return t?t[1].split(Fe):[]}(r),n)))}function ua(e){var t=0,n=0;return function(){var r=Yn(),i=T-(r-n);if(n=r,i>0){if(++t>=P)return arguments[0]}else t=0;return e.apply(o,arguments)}}function fa(e,t){var n=-1,r=e.length,i=r-1;for(t=t===o?r:t;++n1?e[t-1]:o;return n="function"==typeof n?(e.pop(),n):o,ja(e,n)}));function $a(e){var t=mr(e);return t.__chain__=!0,t}function Ha(e,t){return t(e)}var za=Li((function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,i=function(t){return Br(t,e)};return!(t>1||this.__actions__.length)&&r instanceof wr&&Zi(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:Ha,args:[i],thisArg:o}),new br(r,this.__chain__).thru((function(e){return t&&!e.length&&e.push(o),e}))):this.thru(i)}));var qa=si((function(e,t,n){ft.call(e,n)?++e[n]:jr(e,n,1)}));var Wa=vi(ba),Ka=vi(wa);function Ga(e,t){return(wl(e)?on:$r)(e,Fi(t,3))}function Za(e,t){return(wl(e)?an:Hr)(e,Fi(t,3))}var Ya=si((function(e,t,n){ft.call(e,n)?e[n].push(t):jr(e,n,[t])}));var Ja=Oo((function(e,t,n){var o=-1,i="function"==typeof t,a=_l(e)?r(e.length):[];return $r(e,(function(e){a[++o]=i?nn(t,e,n):ao(e,t,n)})),a})),Qa=si((function(e,t,n){jr(e,n,t)}));function Xa(e,t){return(wl(e)?fn:mo)(e,Fi(t,3))}var el=si((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var tl=Oo((function(e,t){if(null==e)return[];var n=t.length;return n>1&&Yi(e,t[0],t[1])?t=[]:n>2&&Yi(t[0],t[1],t[2])&&(t=[t[0]]),Co(e,Kr(t,1),[])})),nl=Ft||function(){return zt.Date.now()};function rl(e,t,n){return t=n?o:t,t=e&&null==t?e.length:t,Ni(e,x,o,o,o,o,t)}function ol(e,t){var n;if("function"!=typeof t)throw new it(l);return e=zl(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=o),n}}var il=Oo((function(e,t,n){var r=g;if(n.length){var o=Dn(n,Mi(il));r|=_}return Ni(e,r,t,n,o)})),al=Oo((function(e,t,n){var r=g|y;if(n.length){var o=Dn(n,Mi(al));r|=_}return Ni(t,r,e,n,o)}));function ll(e,t,n){var r,i,a,s,c,u,f=0,d=!1,p=!1,h=!0;if("function"!=typeof e)throw new it(l);function v(t){var n=r,a=i;return r=i=o,f=t,s=e.apply(a,n)}function m(e){var n=e-u;return u===o||n>=t||n<0||p&&e-f>=a}function g(){var e=nl();if(m(e))return y(e);c=la(g,function(e){var n=t-(e-u);return p?Zn(n,a-(e-f)):n}(e))}function y(e){return c=o,h&&r?v(e):(r=i=o,s)}function b(){var e=nl(),n=m(e);if(r=arguments,i=this,u=e,n){if(c===o)return function(e){return f=e,c=la(g,t),d?v(e):s}(u);if(p)return Xo(c),c=la(g,t),v(u)}return c===o&&(c=la(g,t)),s}return t=Wl(t)||0,Tl(n)&&(d=!!n.leading,a=(p="maxWait"in n)?Gn(Wl(n.maxWait)||0,t):a,h="trailing"in n?!!n.trailing:h),b.cancel=function(){c!==o&&Xo(c),f=0,r=u=i=c=o},b.flush=function(){return c===o?s:y(nl())},b}var sl=Oo((function(e,t){return Dr(e,1,t)})),cl=Oo((function(e,t,n){return Dr(e,Wl(t)||0,n)}));function ul(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new it(l);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(ul.Cache||Er),n}function fl(e){if("function"!=typeof e)throw new it(l);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}ul.Cache=Er;var dl=Jo((function(e,t){var n=(t=1==t.length&&wl(t[0])?fn(t[0],Pn(Fi())):fn(Kr(t,1),Pn(Fi()))).length;return Oo((function(r){for(var o=-1,i=Zn(r.length,n);++o=t})),bl=lo(function(){return arguments}())?lo:function(e){return Vl(e)&&ft.call(e,"callee")&&!xt.call(e,"callee")},wl=r.isArray,Cl=Yt?Pn(Yt):function(e){return Vl(e)&&to(e)==ce};function _l(e){return null!=e&&Pl(e.length)&&!Ol(e)}function El(e){return Vl(e)&&_l(e)}var xl=Gt||Ws,kl=Jt?Pn(Jt):function(e){return Vl(e)&&to(e)==q};function Sl(e){if(!Vl(e))return!1;var t=to(e);return t==K||t==W||"string"==typeof e.message&&"string"==typeof e.name&&!Al(e)}function Ol(e){if(!Tl(e))return!1;var t=to(e);return t==G||t==Z||t==H||t==te}function Nl(e){return"number"==typeof e&&e==zl(e)}function Pl(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=A}function Tl(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Vl(e){return null!=e&&"object"==typeof e}var Rl=Qt?Pn(Qt):function(e){return Vl(e)&&qi(e)==Y};function Ll(e){return"number"==typeof e||Vl(e)&&to(e)==J}function Al(e){if(!Vl(e)||to(e)!=X)return!1;var t=_t(e);if(null===t)return!0;var n=ft.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&ut.call(n)==vt}var jl=Xt?Pn(Xt):function(e){return Vl(e)&&to(e)==ne};var Bl=en?Pn(en):function(e){return Vl(e)&&qi(e)==re};function Il(e){return"string"==typeof e||!wl(e)&&Vl(e)&&to(e)==oe}function Ml(e){return"symbol"==typeof e||Vl(e)&&to(e)==ie}var Fl=tn?Pn(tn):function(e){return Vl(e)&&Pl(e.length)&&!!It[to(e)]};var Dl=Ei(vo),Ul=Ei((function(e,t){return e<=t}));function $l(e){if(!e)return[];if(_l(e))return Il(e)?zn(e):ai(e);if(Ot&&e[Ot])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Ot]());var t=qi(e);return(t==Y?Mn:t==re?Un:ms)(e)}function Hl(e){return e?(e=Wl(e))===L||e===-L?(e<0?-1:1)*j:e==e?e:0:0===e?e:0}function zl(e){var t=Hl(e),n=t%1;return t==t?n?t-n:t:0}function ql(e){return e?Ir(zl(e),0,I):0}function Wl(e){if("number"==typeof e)return e;if(Ml(e))return B;if(Tl(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Tl(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=Nn(e);var n=We.test(e);return n||Ge.test(e)?Ut(e.slice(2),n?2:8):qe.test(e)?B:+e}function Kl(e){return li(e,ss(e))}function Gl(e){return null==e?"":Do(e)}var Zl=ci((function(e,t){if(ea(t)||_l(t))li(t,ls(t),e);else for(var n in t)ft.call(t,n)&&Vr(e,n,t[n])})),Yl=ci((function(e,t){li(t,ss(t),e)})),Jl=ci((function(e,t,n,r){li(t,ss(t),e,r)})),Ql=ci((function(e,t,n,r){li(t,ls(t),e,r)})),Xl=Li(Br);var es=Oo((function(e,t){e=nt(e);var n=-1,r=t.length,i=r>2?t[2]:o;for(i&&Yi(t[0],t[1],i)&&(r=1);++n1),t})),li(e,ji(e),n),r&&(n=Mr(n,d|p|h,Vi));for(var o=t.length;o--;)$o(n,t[o]);return n}));var ds=Li((function(e,t){return null==e?{}:function(e,t){return _o(e,t,(function(t,n){return rs(e,n)}))}(e,t)}));function ps(e,t){if(null==e)return{};var n=fn(ji(e),(function(e){return[e]}));return t=Fi(t),_o(e,n,(function(e,n){return t(e,n[0])}))}var hs=Oi(ls),vs=Oi(ss);function ms(e){return null==e?[]:Tn(e,ls(e))}var gs=pi((function(e,t,n){return t=t.toLowerCase(),e+(n?ys(t):t)}));function ys(e){return Ss(Gl(e).toLowerCase())}function bs(e){return(e=Gl(e))&&e.replace(Ye,An).replace(Tt,"")}var ws=pi((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),Cs=pi((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),_s=di("toLowerCase");var Es=pi((function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}));var xs=pi((function(e,t,n){return e+(n?" ":"")+Ss(t)}));var ks=pi((function(e,t,n){return e+(n?" ":"")+t.toUpperCase()})),Ss=di("toUpperCase");function Os(e,t,n){return e=Gl(e),(t=n?o:t)===o?function(e){return At.test(e)}(e)?function(e){return e.match(Rt)||[]}(e):function(e){return e.match(De)||[]}(e):e.match(t)||[]}var Ns=Oo((function(e,t){try{return nn(e,o,t)}catch(e){return Sl(e)?e:new Xe(e)}})),Ps=Li((function(e,t){return on(t,(function(t){t=pa(t),jr(e,t,il(e[t],e))})),e}));function Ts(e){return function(){return e}}var Vs=mi(),Rs=mi(!0);function Ls(e){return e}function As(e){return fo("function"==typeof e?e:Mr(e,d))}var js=Oo((function(e,t){return function(n){return ao(n,e,t)}})),Bs=Oo((function(e,t){return function(n){return ao(e,n,t)}}));function Is(e,t,n){var r=ls(t),o=Qr(t,r);null!=n||Tl(t)&&(o.length||!r.length)||(n=t,t=e,e=this,o=Qr(t,ls(t)));var i=!(Tl(n)&&"chain"in n&&!n.chain),a=Ol(e);return on(o,(function(n){var r=t[n];e[n]=r,a&&(e.prototype[n]=function(){var t=this.__chain__;if(i||t){var n=e(this.__wrapped__);return(n.__actions__=ai(this.__actions__)).push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,dn([this.value()],arguments))})})),e}function Ms(){}var Fs=wi(fn),Ds=wi(ln),Us=wi(vn);function $s(e){return Ji(e)?En(pa(e)):function(e){return function(t){return Xr(t,e)}}(e)}var Hs=_i(),zs=_i(!0);function qs(){return[]}function Ws(){return!1}var Ks=bi((function(e,t){return e+t}),0),Gs=ki("ceil"),Zs=bi((function(e,t){return e/t}),1),Ys=ki("floor");var Js,Qs=bi((function(e,t){return e*t}),1),Xs=ki("round"),ec=bi((function(e,t){return e-t}),0);return mr.after=function(e,t){if("function"!=typeof t)throw new it(l);return e=zl(e),function(){if(--e<1)return t.apply(this,arguments)}},mr.ary=rl,mr.assign=Zl,mr.assignIn=Yl,mr.assignInWith=Jl,mr.assignWith=Ql,mr.at=Xl,mr.before=ol,mr.bind=il,mr.bindAll=Ps,mr.bindKey=al,mr.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return wl(e)?e:[e]},mr.chain=$a,mr.chunk=function(e,t,n){t=(n?Yi(e,t,n):t===o)?1:Gn(zl(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var a=0,l=0,s=r(Ht(i/t));ai?0:i+n),(r=r===o||r>i?i:zl(r))<0&&(r+=i),r=n>r?0:ql(r);n>>0)?(e=Gl(e))&&("string"==typeof t||null!=t&&!jl(t))&&!(t=Do(t))&&In(e)?Qo(zn(e),0,n):e.split(t,n):[]},mr.spread=function(e,t){if("function"!=typeof e)throw new it(l);return t=null==t?0:Gn(zl(t),0),Oo((function(n){var r=n[t],o=Qo(n,0,t);return r&&dn(o,r),nn(e,this,o)}))},mr.tail=function(e){var t=null==e?0:e.length;return t?Ao(e,1,t):[]},mr.take=function(e,t,n){return e&&e.length?Ao(e,0,(t=n||t===o?1:zl(t))<0?0:t):[]},mr.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?Ao(e,(t=r-(t=n||t===o?1:zl(t)))<0?0:t,r):[]},mr.takeRightWhile=function(e,t){return e&&e.length?zo(e,Fi(t,3),!1,!0):[]},mr.takeWhile=function(e,t){return e&&e.length?zo(e,Fi(t,3)):[]},mr.tap=function(e,t){return t(e),e},mr.throttle=function(e,t,n){var r=!0,o=!0;if("function"!=typeof e)throw new it(l);return Tl(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),ll(e,t,{leading:r,maxWait:t,trailing:o})},mr.thru=Ha,mr.toArray=$l,mr.toPairs=hs,mr.toPairsIn=vs,mr.toPath=function(e){return wl(e)?fn(e,pa):Ml(e)?[e]:ai(da(Gl(e)))},mr.toPlainObject=Kl,mr.transform=function(e,t,n){var r=wl(e),o=r||xl(e)||Fl(e);if(t=Fi(t,4),null==n){var i=e&&e.constructor;n=o?r?new i:[]:Tl(e)&&Ol(i)?gr(_t(e)):{}}return(o?on:Yr)(e,(function(e,r,o){return t(n,e,r,o)})),n},mr.unary=function(e){return rl(e,1)},mr.union=Va,mr.unionBy=Ra,mr.unionWith=La,mr.uniq=function(e){return e&&e.length?Uo(e):[]},mr.uniqBy=function(e,t){return e&&e.length?Uo(e,Fi(t,2)):[]},mr.uniqWith=function(e,t){return t="function"==typeof t?t:o,e&&e.length?Uo(e,o,t):[]},mr.unset=function(e,t){return null==e||$o(e,t)},mr.unzip=Aa,mr.unzipWith=ja,mr.update=function(e,t,n){return null==e?e:Ho(e,t,Zo(n))},mr.updateWith=function(e,t,n,r){return r="function"==typeof r?r:o,null==e?e:Ho(e,t,Zo(n),r)},mr.values=ms,mr.valuesIn=function(e){return null==e?[]:Tn(e,ss(e))},mr.without=Ba,mr.words=Os,mr.wrap=function(e,t){return pl(Zo(t),e)},mr.xor=Ia,mr.xorBy=Ma,mr.xorWith=Fa,mr.zip=Da,mr.zipObject=function(e,t){return Ko(e||[],t||[],Vr)},mr.zipObjectDeep=function(e,t){return Ko(e||[],t||[],To)},mr.zipWith=Ua,mr.entries=hs,mr.entriesIn=vs,mr.extend=Yl,mr.extendWith=Jl,Is(mr,mr),mr.add=Ks,mr.attempt=Ns,mr.camelCase=gs,mr.capitalize=ys,mr.ceil=Gs,mr.clamp=function(e,t,n){return n===o&&(n=t,t=o),n!==o&&(n=(n=Wl(n))==n?n:0),t!==o&&(t=(t=Wl(t))==t?t:0),Ir(Wl(e),t,n)},mr.clone=function(e){return Mr(e,h)},mr.cloneDeep=function(e){return Mr(e,d|h)},mr.cloneDeepWith=function(e,t){return Mr(e,d|h,t="function"==typeof t?t:o)},mr.cloneWith=function(e,t){return Mr(e,h,t="function"==typeof t?t:o)},mr.conformsTo=function(e,t){return null==t||Fr(e,t,ls(t))},mr.deburr=bs,mr.defaultTo=function(e,t){return null==e||e!=e?t:e},mr.divide=Zs,mr.endsWith=function(e,t,n){e=Gl(e),t=Do(t);var r=e.length,i=n=n===o?r:Ir(zl(n),0,r);return(n-=t.length)>=0&&e.slice(n,i)==t},mr.eq=ml,mr.escape=function(e){return(e=Gl(e))&&Se.test(e)?e.replace(xe,jn):e},mr.escapeRegExp=function(e){return(e=Gl(e))&&Ae.test(e)?e.replace(Le,"\\$&"):e},mr.every=function(e,t,n){var r=wl(e)?ln:zr;return n&&Yi(e,t,n)&&(t=o),r(e,Fi(t,3))},mr.find=Wa,mr.findIndex=ba,mr.findKey=function(e,t){return gn(e,Fi(t,3),Yr)},mr.findLast=Ka,mr.findLastIndex=wa,mr.findLastKey=function(e,t){return gn(e,Fi(t,3),Jr)},mr.floor=Ys,mr.forEach=Ga,mr.forEachRight=Za,mr.forIn=function(e,t){return null==e?e:Gr(e,Fi(t,3),ss)},mr.forInRight=function(e,t){return null==e?e:Zr(e,Fi(t,3),ss)},mr.forOwn=function(e,t){return e&&Yr(e,Fi(t,3))},mr.forOwnRight=function(e,t){return e&&Jr(e,Fi(t,3))},mr.get=ns,mr.gt=gl,mr.gte=yl,mr.has=function(e,t){return null!=e&&Wi(e,t,ro)},mr.hasIn=rs,mr.head=_a,mr.identity=Ls,mr.includes=function(e,t,n,r){e=_l(e)?e:ms(e),n=n&&!r?zl(n):0;var o=e.length;return n<0&&(n=Gn(o+n,0)),Il(e)?n<=o&&e.indexOf(t,n)>-1:!!o&&bn(e,t,n)>-1},mr.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var o=null==n?0:zl(n);return o<0&&(o=Gn(r+o,0)),bn(e,t,o)},mr.inRange=function(e,t,n){return t=Hl(t),n===o?(n=t,t=0):n=Hl(n),function(e,t,n){return e>=Zn(t,n)&&e=-A&&e<=A},mr.isSet=Bl,mr.isString=Il,mr.isSymbol=Ml,mr.isTypedArray=Fl,mr.isUndefined=function(e){return e===o},mr.isWeakMap=function(e){return Vl(e)&&qi(e)==le},mr.isWeakSet=function(e){return Vl(e)&&to(e)==se},mr.join=function(e,t){return null==e?"":mn.call(e,t)},mr.kebabCase=ws,mr.last=Sa,mr.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return n!==o&&(i=(i=zl(n))<0?Gn(r+i,0):Zn(i,r-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,i):yn(e,Cn,i,!0)},mr.lowerCase=Cs,mr.lowerFirst=_s,mr.lt=Dl,mr.lte=Ul,mr.max=function(e){return e&&e.length?qr(e,Ls,no):o},mr.maxBy=function(e,t){return e&&e.length?qr(e,Fi(t,2),no):o},mr.mean=function(e){return _n(e,Ls)},mr.meanBy=function(e,t){return _n(e,Fi(t,2))},mr.min=function(e){return e&&e.length?qr(e,Ls,vo):o},mr.minBy=function(e,t){return e&&e.length?qr(e,Fi(t,2),vo):o},mr.stubArray=qs,mr.stubFalse=Ws,mr.stubObject=function(){return{}},mr.stubString=function(){return""},mr.stubTrue=function(){return!0},mr.multiply=Qs,mr.nth=function(e,t){return e&&e.length?wo(e,zl(t)):o},mr.noConflict=function(){return zt._===this&&(zt._=mt),this},mr.noop=Ms,mr.now=nl,mr.pad=function(e,t,n){e=Gl(e);var r=(t=zl(t))?Hn(e):0;if(!t||r>=t)return e;var o=(t-r)/2;return Ci(qt(o),n)+e+Ci(Ht(o),n)},mr.padEnd=function(e,t,n){e=Gl(e);var r=(t=zl(t))?Hn(e):0;return t&&rt){var r=e;e=t,t=r}if(n||e%1||t%1){var i=Qn();return Zn(e+i*(t-e+Dt("1e-"+((i+"").length-1))),t)}return ko(e,t)},mr.reduce=function(e,t,n){var r=wl(e)?pn:kn,o=arguments.length<3;return r(e,Fi(t,4),n,o,$r)},mr.reduceRight=function(e,t,n){var r=wl(e)?hn:kn,o=arguments.length<3;return r(e,Fi(t,4),n,o,Hr)},mr.repeat=function(e,t,n){return t=(n?Yi(e,t,n):t===o)?1:zl(t),So(Gl(e),t)},mr.replace=function(){var e=arguments,t=Gl(e[0]);return e.length<3?t:t.replace(e[1],e[2])},mr.result=function(e,t,n){var r=-1,i=(t=Yo(t,e)).length;for(i||(i=1,e=o);++rA)return[];var n=I,r=Zn(e,I);t=Fi(t),e-=I;for(var o=On(r,t);++n=a)return e;var s=n-Hn(r);if(s<1)return r;var c=l?Qo(l,0,s).join(""):e.slice(0,s);if(i===o)return c+r;if(l&&(s+=c.length-s),jl(i)){if(e.slice(s).search(i)){var u,f=c;for(i.global||(i=rt(i.source,Gl(ze.exec(i))+"g")),i.lastIndex=0;u=i.exec(f);)var d=u.index;c=c.slice(0,d===o?s:d)}}else if(e.indexOf(Do(i),s)!=s){var p=c.lastIndexOf(i);p>-1&&(c=c.slice(0,p))}return c+r},mr.unescape=function(e){return(e=Gl(e))&&ke.test(e)?e.replace(Ee,Wn):e},mr.uniqueId=function(e){var t=++dt;return Gl(e)+t},mr.upperCase=ks,mr.upperFirst=Ss,mr.each=Ga,mr.eachRight=Za,mr.first=_a,Is(mr,(Js={},Yr(mr,(function(e,t){ft.call(mr.prototype,t)||(Js[t]=e)})),Js),{chain:!1}),mr.VERSION="4.17.21",on(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){mr[e].placeholder=mr})),on(["drop","take"],(function(e,t){wr.prototype[e]=function(n){n=n===o?1:Gn(zl(n),0);var r=this.__filtered__&&!t?new wr(this):this.clone();return r.__filtered__?r.__takeCount__=Zn(n,r.__takeCount__):r.__views__.push({size:Zn(n,I),type:e+(r.__dir__<0?"Right":"")}),r},wr.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),on(["filter","map","takeWhile"],(function(e,t){var n=t+1,r=n==V||3==n;wr.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Fi(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}})),on(["head","last"],(function(e,t){var n="take"+(t?"Right":"");wr.prototype[e]=function(){return this[n](1).value()[0]}})),on(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");wr.prototype[e]=function(){return this.__filtered__?new wr(this):this[n](1)}})),wr.prototype.compact=function(){return this.filter(Ls)},wr.prototype.find=function(e){return this.filter(e).head()},wr.prototype.findLast=function(e){return this.reverse().find(e)},wr.prototype.invokeMap=Oo((function(e,t){return"function"==typeof e?new wr(this):this.map((function(n){return ao(n,e,t)}))})),wr.prototype.reject=function(e){return this.filter(fl(Fi(e)))},wr.prototype.slice=function(e,t){e=zl(e);var n=this;return n.__filtered__&&(e>0||t<0)?new wr(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==o&&(n=(t=zl(t))<0?n.dropRight(-t):n.take(t-e)),n)},wr.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},wr.prototype.toArray=function(){return this.take(I)},Yr(wr.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=mr[r?"take"+("last"==t?"Right":""):t],a=r||/^find/.test(t);i&&(mr.prototype[t]=function(){var t=this.__wrapped__,l=r?[1]:arguments,s=t instanceof wr,c=l[0],u=s||wl(t),f=function(e){var t=i.apply(mr,dn([e],l));return r&&d?t[0]:t};u&&n&&"function"==typeof c&&1!=c.length&&(s=u=!1);var d=this.__chain__,p=!!this.__actions__.length,h=a&&!d,v=s&&!p;if(!a&&u){t=v?t:new wr(this);var m=e.apply(t,l);return m.__actions__.push({func:Ha,args:[f],thisArg:o}),new br(m,d)}return h&&v?e.apply(this,l):(m=this.thru(f),h?r?m.value()[0]:m.value():m)})})),on(["pop","push","shift","sort","splice","unshift"],(function(e){var t=at[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);mr.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var o=this.value();return t.apply(wl(o)?o:[],e)}return this[n]((function(n){return t.apply(wl(n)?n:[],e)}))}})),Yr(wr.prototype,(function(e,t){var n=mr[t];if(n){var r=n.name+"";ft.call(lr,r)||(lr[r]=[]),lr[r].push({name:t,func:n})}})),lr[gi(o,y).name]=[{name:"wrapper",func:o}],wr.prototype.clone=function(){var e=new wr(this.__wrapped__);return e.__actions__=ai(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=ai(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=ai(this.__views__),e},wr.prototype.reverse=function(){if(this.__filtered__){var e=new wr(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},wr.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=wl(e),r=t<0,o=n?e.length:0,i=function(e,t,n){var r=-1,o=n.length;for(;++r=this.__values__.length;return{done:e,value:e?o:this.__values__[this.__index__++]}},mr.prototype.plant=function(e){for(var t,n=this;n instanceof yr;){var r=va(n);r.__index__=0,r.__values__=o,t?i.__wrapped__=r:t=r;var i=r;n=n.__wrapped__}return i.__wrapped__=e,t},mr.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof wr){var t=e;return this.__actions__.length&&(t=new wr(this)),(t=t.reverse()).__actions__.push({func:Ha,args:[Ta],thisArg:o}),new br(t,this.__chain__)}return this.thru(Ta)},mr.prototype.toJSON=mr.prototype.valueOf=mr.prototype.value=function(){return qo(this.__wrapped__,this.__actions__)},mr.prototype.first=mr.prototype.head,Ot&&(mr.prototype[Ot]=function(){return this}),mr}();zt._=Kn,(r=function(){return Kn}.call(t,n,t,e))===o||(e.exports=r)}.call(this)},378:()=>{},744:(e,t)=>{"use strict";t.Z=(e,t)=>{const n=e.__vccOpts||e;for(const[e,r]of t)n[e]=r;return n}},821:(e,t,n)=>{"use strict";n.r(t),n.d(t,{BaseTransition:()=>vr,Comment:()=>si,EffectScope:()=>pe,Fragment:()=>ai,KeepAlive:()=>Or,ReactiveEffect:()=>Ne,Static:()=>ci,Suspense:()=>Yn,Teleport:()=>oi,Text:()=>li,Transition:()=>Ja,TransitionGroup:()=>ml,VueElement:()=>za,assertNumber:()=>ln,callWithAsyncErrorHandling:()=>cn,callWithErrorHandling:()=>sn,camelize:()=>ee,capitalize:()=>re,cloneVNode:()=>Ti,compatUtils:()=>ka,compile:()=>Uf,computed:()=>ia,createApp:()=>Gl,createBlock:()=>bi,createCommentVNode:()=>Li,createElementBlock:()=>yi,createElementVNode:()=>Si,createHydrationRenderer:()=>Zo,createPropsRestProxy:()=>ha,createRenderer:()=>Go,createSSRApp:()=>Zl,createSlots:()=>oo,createStaticVNode:()=>Ri,createTextVNode:()=>Vi,createVNode:()=>Oi,customRef:()=>Xt,defineAsyncComponent:()=>xr,defineComponent:()=>_r,defineCustomElement:()=>Ua,defineEmits:()=>la,defineExpose:()=>sa,defineProps:()=>aa,defineSSRCustomElement:()=>$a,devtools:()=>Pn,effect:()=>Te,effectScope:()=>he,getCurrentInstance:()=>Hi,getCurrentScope:()=>me,getTransitionRawChildren:()=>Cr,guardReactiveProps:()=>Pi,h:()=>ma,handleError:()=>un,hydrate:()=>Kl,initCustomFormatter:()=>ba,initDirectivesForSSR:()=>Ql,inject:()=>rr,isMemoSame:()=>Ca,isProxy:()=>Bt,isReactive:()=>Lt,isReadonly:()=>At,isRef:()=>Ht,isRuntimeOnly:()=>Xi,isShallow:()=>jt,isVNode:()=>wi,markRaw:()=>Mt,mergeDefaults:()=>pa,mergeProps:()=>Ii,nextTick:()=>wn,normalizeClass:()=>d,normalizeProps:()=>p,normalizeStyle:()=>l,onActivated:()=>Pr,onBeforeMount:()=>Ir,onBeforeUnmount:()=>Ur,onBeforeUpdate:()=>Fr,onDeactivated:()=>Tr,onErrorCaptured:()=>Wr,onMounted:()=>Mr,onRenderTracked:()=>qr,onRenderTriggered:()=>zr,onScopeDispose:()=>ge,onServerPrefetch:()=>Hr,onUnmounted:()=>$r,onUpdated:()=>Dr,openBlock:()=>di,popScopeId:()=>Dn,provide:()=>nr,proxyRefs:()=>Jt,pushScopeId:()=>Fn,queuePostFlushCb:()=>En,reactive:()=>Nt,readonly:()=>Tt,ref:()=>zt,registerRuntimeCompiler:()=>Qi,render:()=>Wl,renderList:()=>ro,renderSlot:()=>io,resolveComponent:()=>Jr,resolveDirective:()=>eo,resolveDynamicComponent:()=>Xr,resolveFilter:()=>xa,resolveTransitionHooks:()=>gr,setBlockTracking:()=>mi,setDevtoolsHook:()=>Rn,setTransitionHooks:()=>wr,shallowReactive:()=>Pt,shallowReadonly:()=>Vt,shallowRef:()=>qt,ssrContextKey:()=>ga,ssrUtils:()=>Ea,stop:()=>Ve,toDisplayString:()=>_,toHandlerKey:()=>oe,toHandlers:()=>lo,toRaw:()=>It,toRef:()=>nn,toRefs:()=>en,transformVNodeArgs:()=>_i,triggerRef:()=>Gt,unref:()=>Zt,useAttrs:()=>fa,useCssModule:()=>qa,useCssVars:()=>Wa,useSSRContext:()=>ya,useSlots:()=>ua,useTransitionState:()=>pr,vModelCheckbox:()=>xl,vModelDynamic:()=>Vl,vModelRadio:()=>Sl,vModelSelect:()=>Ol,vModelText:()=>El,vShow:()=>Fl,version:()=>_a,warn:()=>an,watch:()=>sr,watchEffect:()=>or,watchPostEffect:()=>ir,watchSyncEffect:()=>ar,withAsyncContext:()=>va,withCtx:()=>$n,withDefaults:()=>ca,withDirectives:()=>Kr,withKeys:()=>Ml,withMemo:()=>wa,withModifiers:()=>Bl,withScopeId:()=>Un});var r={};function o(e,t){const n=Object.create(null),r=e.split(",");for(let e=0;e!!n[e.toLowerCase()]:e=>!!n[e]}n.r(r),n.d(r,{BaseTransition:()=>vr,Comment:()=>si,EffectScope:()=>pe,Fragment:()=>ai,KeepAlive:()=>Or,ReactiveEffect:()=>Ne,Static:()=>ci,Suspense:()=>Yn,Teleport:()=>oi,Text:()=>li,Transition:()=>Ja,TransitionGroup:()=>ml,VueElement:()=>za,assertNumber:()=>ln,callWithAsyncErrorHandling:()=>cn,callWithErrorHandling:()=>sn,camelize:()=>ee,capitalize:()=>re,cloneVNode:()=>Ti,compatUtils:()=>ka,computed:()=>ia,createApp:()=>Gl,createBlock:()=>bi,createCommentVNode:()=>Li,createElementBlock:()=>yi,createElementVNode:()=>Si,createHydrationRenderer:()=>Zo,createPropsRestProxy:()=>ha,createRenderer:()=>Go,createSSRApp:()=>Zl,createSlots:()=>oo,createStaticVNode:()=>Ri,createTextVNode:()=>Vi,createVNode:()=>Oi,customRef:()=>Xt,defineAsyncComponent:()=>xr,defineComponent:()=>_r,defineCustomElement:()=>Ua,defineEmits:()=>la,defineExpose:()=>sa,defineProps:()=>aa,defineSSRCustomElement:()=>$a,devtools:()=>Pn,effect:()=>Te,effectScope:()=>he,getCurrentInstance:()=>Hi,getCurrentScope:()=>me,getTransitionRawChildren:()=>Cr,guardReactiveProps:()=>Pi,h:()=>ma,handleError:()=>un,hydrate:()=>Kl,initCustomFormatter:()=>ba,initDirectivesForSSR:()=>Ql,inject:()=>rr,isMemoSame:()=>Ca,isProxy:()=>Bt,isReactive:()=>Lt,isReadonly:()=>At,isRef:()=>Ht,isRuntimeOnly:()=>Xi,isShallow:()=>jt,isVNode:()=>wi,markRaw:()=>Mt,mergeDefaults:()=>pa,mergeProps:()=>Ii,nextTick:()=>wn,normalizeClass:()=>d,normalizeProps:()=>p,normalizeStyle:()=>l,onActivated:()=>Pr,onBeforeMount:()=>Ir,onBeforeUnmount:()=>Ur,onBeforeUpdate:()=>Fr,onDeactivated:()=>Tr,onErrorCaptured:()=>Wr,onMounted:()=>Mr,onRenderTracked:()=>qr,onRenderTriggered:()=>zr,onScopeDispose:()=>ge,onServerPrefetch:()=>Hr,onUnmounted:()=>$r,onUpdated:()=>Dr,openBlock:()=>di,popScopeId:()=>Dn,provide:()=>nr,proxyRefs:()=>Jt,pushScopeId:()=>Fn,queuePostFlushCb:()=>En,reactive:()=>Nt,readonly:()=>Tt,ref:()=>zt,registerRuntimeCompiler:()=>Qi,render:()=>Wl,renderList:()=>ro,renderSlot:()=>io,resolveComponent:()=>Jr,resolveDirective:()=>eo,resolveDynamicComponent:()=>Xr,resolveFilter:()=>xa,resolveTransitionHooks:()=>gr,setBlockTracking:()=>mi,setDevtoolsHook:()=>Rn,setTransitionHooks:()=>wr,shallowReactive:()=>Pt,shallowReadonly:()=>Vt,shallowRef:()=>qt,ssrContextKey:()=>ga,ssrUtils:()=>Ea,stop:()=>Ve,toDisplayString:()=>_,toHandlerKey:()=>oe,toHandlers:()=>lo,toRaw:()=>It,toRef:()=>nn,toRefs:()=>en,transformVNodeArgs:()=>_i,triggerRef:()=>Gt,unref:()=>Zt,useAttrs:()=>fa,useCssModule:()=>qa,useCssVars:()=>Wa,useSSRContext:()=>ya,useSlots:()=>ua,useTransitionState:()=>pr,vModelCheckbox:()=>xl,vModelDynamic:()=>Vl,vModelRadio:()=>Sl,vModelSelect:()=>Ol,vModelText:()=>El,vShow:()=>Fl,version:()=>_a,warn:()=>an,watch:()=>sr,watchEffect:()=>or,watchPostEffect:()=>ir,watchSyncEffect:()=>ar,withAsyncContext:()=>va,withCtx:()=>$n,withDefaults:()=>ca,withDirectives:()=>Kr,withKeys:()=>Ml,withMemo:()=>wa,withModifiers:()=>Bl,withScopeId:()=>Un});const i={1:"TEXT",2:"CLASS",4:"STYLE",8:"PROPS",16:"FULL_PROPS",32:"HYDRATE_EVENTS",64:"STABLE_FRAGMENT",128:"KEYED_FRAGMENT",256:"UNKEYED_FRAGMENT",512:"NEED_PATCH",1024:"DYNAMIC_SLOTS",2048:"DEV_ROOT_FRAGMENT",[-1]:"HOISTED",[-2]:"BAIL"},a=o("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt");function l(e){if(j(e)){const t={};for(let n=0;n{if(e){const n=e.split(c);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function d(e){let t="";if(U(e))t=e;else if(j(e))for(let n=0;nw(e,t)))}const _=e=>U(e)?e:null==e?"":j(e)||H(e)&&(e.toString===q||!D(e.toString))?JSON.stringify(e,E,2):String(e),E=(e,t)=>t&&t.__v_isRef?E(e,t.value):B(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:I(t)?{[`Set(${t.size})`]:[...t.values()]}:!H(t)||j(t)||G(t)?t:String(t),x={},k=[],S=()=>{},O=()=>!1,N=/^on[^a-z]/,P=e=>N.test(e),T=e=>e.startsWith("onUpdate:"),V=Object.assign,R=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},L=Object.prototype.hasOwnProperty,A=(e,t)=>L.call(e,t),j=Array.isArray,B=e=>"[object Map]"===W(e),I=e=>"[object Set]"===W(e),M=e=>"[object Date]"===W(e),F=e=>"[object RegExp]"===W(e),D=e=>"function"==typeof e,U=e=>"string"==typeof e,$=e=>"symbol"==typeof e,H=e=>null!==e&&"object"==typeof e,z=e=>H(e)&&D(e.then)&&D(e.catch),q=Object.prototype.toString,W=e=>q.call(e),K=e=>W(e).slice(8,-1),G=e=>"[object Object]"===W(e),Z=e=>U(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,Y=o(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),J=o("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),Q=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},X=/-(\w)/g,ee=Q((e=>e.replace(X,((e,t)=>t?t.toUpperCase():"")))),te=/\B([A-Z])/g,ne=Q((e=>e.replace(te,"-$1").toLowerCase())),re=Q((e=>e.charAt(0).toUpperCase()+e.slice(1))),oe=Q((e=>e?`on${re(e)}`:"")),ie=(e,t)=>!Object.is(e,t),ae=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},se=e=>{const t=parseFloat(e);return isNaN(t)?e:t},ce=e=>{const t=U(e)?Number(e):NaN;return isNaN(t)?e:t};let ue;const fe=()=>ue||(ue="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==n.g?n.g:{});let de;class pe{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=de,!e&&de&&(this.index=(de.scopes||(de.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=de;try{return de=this,e()}finally{de=t}}else 0}on(){de=this}off(){de=this.parent}stop(e){if(this._active){let t,n;for(t=0,n=this.effects.length;t{const t=new Set(e);return t.w=0,t.n=0,t},be=e=>(e.w&Ee)>0,we=e=>(e.n&Ee)>0,Ce=new WeakMap;let _e=0,Ee=1;const xe=30;let ke;const Se=Symbol(""),Oe=Symbol("");class Ne{constructor(e,t=null,n){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],this.parent=void 0,ve(this,n)}run(){if(!this.active)return this.fn();let e=ke,t=Re;for(;e;){if(e===this)return;e=e.parent}try{return this.parent=ke,ke=this,Re=!0,Ee=1<<++_e,_e<=xe?(({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{("length"===n||n>=e)&&l.push(t)}))}else switch(void 0!==n&&l.push(a.get(n)),t){case"add":j(e)?Z(n)&&l.push(a.get("length")):(l.push(a.get(Se)),B(e)&&l.push(a.get(Oe)));break;case"delete":j(e)||(l.push(a.get(Se)),B(e)&&l.push(a.get(Oe)));break;case"set":B(e)&&l.push(a.get(Se))}if(1===l.length)l[0]&&Fe(l[0]);else{const e=[];for(const t of l)t&&e.push(...t);Fe(ye(e))}}function Fe(e,t){const n=j(e)?e:[...e];for(const e of n)e.computed&&De(e,t);for(const e of n)e.computed||De(e,t)}function De(e,t){(e!==ke||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const Ue=o("__proto__,__v_isRef,__isVue"),$e=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>"arguments"!==e&&"caller"!==e)).map((e=>Symbol[e])).filter($)),He=Ye(),ze=Ye(!1,!0),qe=Ye(!0),We=Ye(!0,!0),Ke=Ge();function Ge(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=It(this);for(let e=0,t=this.length;e{e[t]=function(...e){Ae();const n=It(this)[t].apply(this,e);return je(),n}})),e}function Ze(e){const t=It(this);return Be(t,0,e),t.hasOwnProperty(e)}function Ye(e=!1,t=!1){return function(n,r,o){if("__v_isReactive"===r)return!e;if("__v_isReadonly"===r)return e;if("__v_isShallow"===r)return t;if("__v_raw"===r&&o===(e?t?Ot:St:t?kt:xt).get(n))return n;const i=j(n);if(!e){if(i&&A(Ke,r))return Reflect.get(Ke,r,o);if("hasOwnProperty"===r)return Ze}const a=Reflect.get(n,r,o);return($(r)?$e.has(r):Ue(r))?a:(e||Be(n,0,r),t?a:Ht(a)?i&&Z(r)?a:a.value:H(a)?e?Tt(a):Nt(a):a)}}function Je(e=!1){return function(t,n,r,o){let i=t[n];if(At(i)&&Ht(i)&&!Ht(r))return!1;if(!e&&(jt(r)||At(r)||(i=It(i),r=It(r)),!j(t)&&Ht(i)&&!Ht(r)))return i.value=r,!0;const a=j(t)&&Z(n)?Number(n)!0,deleteProperty:(e,t)=>!0},et=V({},Qe,{get:ze,set:Je(!0)}),tt=V({},Xe,{get:We}),nt=e=>e,rt=e=>Reflect.getPrototypeOf(e);function ot(e,t,n=!1,r=!1){const o=It(e=e.__v_raw),i=It(t);n||(t!==i&&Be(o,0,t),Be(o,0,i));const{has:a}=rt(o),l=r?nt:n?Dt:Ft;return a.call(o,t)?l(e.get(t)):a.call(o,i)?l(e.get(i)):void(e!==o&&e.get(t))}function it(e,t=!1){const n=this.__v_raw,r=It(n),o=It(e);return t||(e!==o&&Be(r,0,e),Be(r,0,o)),e===o?n.has(e):n.has(e)||n.has(o)}function at(e,t=!1){return e=e.__v_raw,!t&&Be(It(e),0,Se),Reflect.get(e,"size",e)}function lt(e){e=It(e);const t=It(this);return rt(t).has.call(t,e)||(t.add(e),Me(t,"add",e,e)),this}function st(e,t){t=It(t);const n=It(this),{has:r,get:o}=rt(n);let i=r.call(n,e);i||(e=It(e),i=r.call(n,e));const a=o.call(n,e);return n.set(e,t),i?ie(t,a)&&Me(n,"set",e,t):Me(n,"add",e,t),this}function ct(e){const t=It(this),{has:n,get:r}=rt(t);let o=n.call(t,e);o||(e=It(e),o=n.call(t,e));r&&r.call(t,e);const i=t.delete(e);return o&&Me(t,"delete",e,void 0),i}function ut(){const e=It(this),t=0!==e.size,n=e.clear();return t&&Me(e,"clear",void 0,void 0),n}function ft(e,t){return function(n,r){const o=this,i=o.__v_raw,a=It(i),l=t?nt:e?Dt:Ft;return!e&&Be(a,0,Se),i.forEach(((e,t)=>n.call(r,l(e),l(t),o)))}}function dt(e,t,n){return function(...r){const o=this.__v_raw,i=It(o),a=B(i),l="entries"===e||e===Symbol.iterator&&a,s="keys"===e&&a,c=o[e](...r),u=n?nt:t?Dt:Ft;return!t&&Be(i,0,s?Oe:Se),{next(){const{value:e,done:t}=c.next();return t?{value:e,done:t}:{value:l?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}function pt(e){return function(...t){return"delete"!==e&&this}}function ht(){const e={get(e){return ot(this,e)},get size(){return at(this)},has:it,add:lt,set:st,delete:ct,clear:ut,forEach:ft(!1,!1)},t={get(e){return ot(this,e,!1,!0)},get size(){return at(this)},has:it,add:lt,set:st,delete:ct,clear:ut,forEach:ft(!1,!0)},n={get(e){return ot(this,e,!0)},get size(){return at(this,!0)},has(e){return it.call(this,e,!0)},add:pt("add"),set:pt("set"),delete:pt("delete"),clear:pt("clear"),forEach:ft(!0,!1)},r={get(e){return ot(this,e,!0,!0)},get size(){return at(this,!0)},has(e){return it.call(this,e,!0)},add:pt("add"),set:pt("set"),delete:pt("delete"),clear:pt("clear"),forEach:ft(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach((o=>{e[o]=dt(o,!1,!1),n[o]=dt(o,!0,!1),t[o]=dt(o,!1,!0),r[o]=dt(o,!0,!0)})),[e,n,t,r]}const[vt,mt,gt,yt]=ht();function bt(e,t){const n=t?e?yt:gt:e?mt:vt;return(t,r,o)=>"__v_isReactive"===r?!e:"__v_isReadonly"===r?e:"__v_raw"===r?t:Reflect.get(A(n,r)&&r in t?n:t,r,o)}const wt={get:bt(!1,!1)},Ct={get:bt(!1,!0)},_t={get:bt(!0,!1)},Et={get:bt(!0,!0)};const xt=new WeakMap,kt=new WeakMap,St=new WeakMap,Ot=new WeakMap;function Nt(e){return At(e)?e:Rt(e,!1,Qe,wt,xt)}function Pt(e){return Rt(e,!1,et,Ct,kt)}function Tt(e){return Rt(e,!0,Xe,_t,St)}function Vt(e){return Rt(e,!0,tt,Et,Ot)}function Rt(e,t,n,r,o){if(!H(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const i=o.get(e);if(i)return i;const a=(l=e).__v_skip||!Object.isExtensible(l)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}(K(l));var l;if(0===a)return e;const s=new Proxy(e,2===a?r:n);return o.set(e,s),s}function Lt(e){return At(e)?Lt(e.__v_raw):!(!e||!e.__v_isReactive)}function At(e){return!(!e||!e.__v_isReadonly)}function jt(e){return!(!e||!e.__v_isShallow)}function Bt(e){return Lt(e)||At(e)}function It(e){const t=e&&e.__v_raw;return t?It(t):e}function Mt(e){return le(e,"__v_skip",!0),e}const Ft=e=>H(e)?Nt(e):e,Dt=e=>H(e)?Tt(e):e;function Ut(e){Re&&ke&&Ie((e=It(e)).dep||(e.dep=ye()))}function $t(e,t){const n=(e=It(e)).dep;n&&Fe(n)}function Ht(e){return!(!e||!0!==e.__v_isRef)}function zt(e){return Wt(e,!1)}function qt(e){return Wt(e,!0)}function Wt(e,t){return Ht(e)?e:new Kt(e,t)}class Kt{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:It(e),this._value=t?e:Ft(e)}get value(){return Ut(this),this._value}set value(e){const t=this.__v_isShallow||jt(e)||At(e);e=t?e:It(e),ie(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:Ft(e),$t(this))}}function Gt(e){$t(e)}function Zt(e){return Ht(e)?e.value:e}const Yt={get:(e,t,n)=>Zt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Ht(o)&&!Ht(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function Jt(e){return Lt(e)?e:new Proxy(e,Yt)}class Qt{constructor(e){this.dep=void 0,this.__v_isRef=!0;const{get:t,set:n}=e((()=>Ut(this)),(()=>$t(this)));this._get=t,this._set=n}get value(){return this._get()}set value(e){this._set(e)}}function Xt(e){return new Qt(e)}function en(e){const t=j(e)?new Array(e.length):{};for(const n in e)t[n]=nn(e,n);return t}class tn{constructor(e,t,n){this._object=e,this._key=t,this._defaultValue=n,this.__v_isRef=!0}get value(){const e=this._object[this._key];return void 0===e?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return function(e,t){var n;return null===(n=Ce.get(e))||void 0===n?void 0:n.get(t)}(It(this._object),this._key)}}function nn(e,t,n){const r=e[t];return Ht(r)?r:new tn(e,t,n)}var rn;class on{constructor(e,t,n,r){this._setter=t,this.dep=void 0,this.__v_isRef=!0,this[rn]=!1,this._dirty=!0,this.effect=new Ne(e,(()=>{this._dirty||(this._dirty=!0,$t(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=n}get value(){const e=It(this);return Ut(e),!e._dirty&&e._cacheable||(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}rn="__v_isReadonly";function an(e,...t){}function ln(e,t){}function sn(e,t,n,r){let o;try{o=r?e(...r):e()}catch(e){un(e,t,n)}return o}function cn(e,t,n,r){if(D(e)){const o=sn(e,t,n,r);return o&&z(o)&&o.catch((e=>{un(e,t,n)})),o}const o=[];for(let i=0;i>>1;Sn(pn[r])Sn(e)-Sn(t))),gn=0;gnnull==e.id?1/0:e.id,On=(e,t)=>{const n=Sn(e)-Sn(t);if(0===n){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Nn(e){dn=!1,fn=!0,pn.sort(On);try{for(hn=0;hnPn.emit(e,...t))),Tn=[];else if("undefined"!=typeof window&&window.HTMLElement&&!(null===(r=null===(n=window.navigator)||void 0===n?void 0:n.userAgent)||void 0===r?void 0:r.includes("jsdom"))){(t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push((e=>{Rn(e,t)})),setTimeout((()=>{Pn||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,Vn=!0,Tn=[])}),3e3)}else Vn=!0,Tn=[]}function Ln(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||x;let o=n;const i=t.startsWith("update:"),a=i&&t.slice(7);if(a&&a in r){const e=`${"modelValue"===a?"model":a}Modifiers`,{number:t,trim:i}=r[e]||x;i&&(o=n.map((e=>U(e)?e.trim():e))),t&&(o=n.map(se))}let l;let s=r[l=oe(t)]||r[l=oe(ee(t))];!s&&i&&(s=r[l=oe(ne(t))]),s&&cn(s,e,6,o);const c=r[l+"Once"];if(c){if(e.emitted){if(e.emitted[l])return}else e.emitted={};e.emitted[l]=!0,cn(c,e,6,o)}}function An(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(void 0!==o)return o;const i=e.emits;let a={},l=!1;if(!D(e)){const r=e=>{const n=An(e,t,!0);n&&(l=!0,V(a,n))};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}return i||l?(j(i)?i.forEach((e=>a[e]=null)):V(a,i),H(e)&&r.set(e,a),a):(H(e)&&r.set(e,null),null)}function jn(e,t){return!(!e||!P(t))&&(t=t.slice(2).replace(/Once$/,""),A(e,t[0].toLowerCase()+t.slice(1))||A(e,ne(t))||A(e,t))}let Bn=null,In=null;function Mn(e){const t=Bn;return Bn=e,In=e&&e.type.__scopeId||null,t}function Fn(e){In=e}function Dn(){In=null}const Un=e=>$n;function $n(e,t=Bn,n){if(!t)return e;if(e._n)return e;const r=(...n)=>{r._d&&mi(-1);const o=Mn(t);let i;try{i=e(...n)}finally{Mn(o),r._d&&mi(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Hn(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:i,propsOptions:[a],slots:l,attrs:s,emit:c,render:u,renderCache:f,data:d,setupState:p,ctx:h,inheritAttrs:v}=e;let m,g;const y=Mn(e);try{if(4&n.shapeFlag){const e=o||r;m=Ai(u.call(e,e,f,i,p,d,h)),g=s}else{const e=t;0,m=Ai(e.length>1?e(i,{attrs:s,slots:l,emit:c}):e(i,null)),g=t.props?s:qn(s)}}catch(t){ui.length=0,un(t,e,1),m=Oi(si)}let b=m;if(g&&!1!==v){const e=Object.keys(g),{shapeFlag:t}=b;e.length&&7&t&&(a&&e.some(T)&&(g=Wn(g,a)),b=Ti(b,g))}return n.dirs&&(b=Ti(b),b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&(b.transition=n.transition),m=b,Mn(y),m}function zn(e){let t;for(let n=0;n{let t;for(const n in e)("class"===n||"style"===n||P(n))&&((t||(t={}))[n]=e[n]);return t},Wn=(e,t)=>{const n={};for(const r in e)T(r)&&r.slice(9)in t||(n[r]=e[r]);return n};function Kn(e,t,n){const r=Object.keys(t);if(r.length!==Object.keys(e).length)return!0;for(let o=0;oe.__isSuspense,Yn={name:"Suspense",__isSuspense:!0,process(e,t,n,r,o,i,a,l,s,c){null==e?function(e,t,n,r,o,i,a,l,s){const{p:c,o:{createElement:u}}=s,f=u("div"),d=e.suspense=Qn(e,o,r,t,f,n,i,a,l,s);c(null,d.pendingBranch=e.ssContent,f,null,r,d,i,a),d.deps>0?(Jn(e,"onPending"),Jn(e,"onFallback"),c(null,e.ssFallback,t,n,r,null,i,a),tr(d,e.ssFallback)):d.resolve()}(t,n,r,o,i,a,l,s,c):function(e,t,n,r,o,i,a,l,{p:s,um:c,o:{createElement:u}}){const f=t.suspense=e.suspense;f.vnode=t,t.el=e.el;const d=t.ssContent,p=t.ssFallback,{activeBranch:h,pendingBranch:v,isInFallback:m,isHydrating:g}=f;if(v)f.pendingBranch=d,Ci(d,v)?(s(v,d,f.hiddenContainer,null,o,f,i,a,l),f.deps<=0?f.resolve():m&&(s(h,p,n,r,o,null,i,a,l),tr(f,p))):(f.pendingId++,g?(f.isHydrating=!1,f.activeBranch=v):c(v,o,f),f.deps=0,f.effects.length=0,f.hiddenContainer=u("div"),m?(s(null,d,f.hiddenContainer,null,o,f,i,a,l),f.deps<=0?f.resolve():(s(h,p,n,r,o,null,i,a,l),tr(f,p))):h&&Ci(d,h)?(s(h,d,n,r,o,f,i,a,l),f.resolve(!0)):(s(null,d,f.hiddenContainer,null,o,f,i,a,l),f.deps<=0&&f.resolve()));else if(h&&Ci(d,h))s(h,d,n,r,o,f,i,a,l),tr(f,d);else if(Jn(t,"onPending"),f.pendingBranch=d,f.pendingId++,s(null,d,f.hiddenContainer,null,o,f,i,a,l),f.deps<=0)f.resolve();else{const{timeout:e,pendingId:t}=f;e>0?setTimeout((()=>{f.pendingId===t&&f.fallback(p)}),e):0===e&&f.fallback(p)}}(e,t,n,r,o,a,l,s,c)},hydrate:function(e,t,n,r,o,i,a,l,s){const c=t.suspense=Qn(t,r,n,e.parentNode,document.createElement("div"),null,o,i,a,l,!0),u=s(e,c.pendingBranch=t.ssContent,n,c,i,a);0===c.deps&&c.resolve();return u},create:Qn,normalize:function(e){const{shapeFlag:t,children:n}=e,r=32&t;e.ssContent=Xn(r?n.default:n),e.ssFallback=r?Xn(n.fallback):Oi(si)}};function Jn(e,t){const n=e.props&&e.props[t];D(n)&&n()}function Qn(e,t,n,r,o,i,a,l,s,c,u=!1){const{p:f,m:d,um:p,n:h,o:{parentNode:v,remove:m}}=c,g=e.props?ce(e.props.timeout):void 0;const y={vnode:e,parent:t,parentComponent:n,isSVG:a,container:r,hiddenContainer:o,anchor:i,deps:0,pendingId:0,timeout:"number"==typeof g?g:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:u,isUnmounted:!1,effects:[],resolve(e=!1){const{vnode:t,activeBranch:n,pendingBranch:r,pendingId:o,effects:i,parentComponent:a,container:l}=y;if(y.isHydrating)y.isHydrating=!1;else if(!e){const e=n&&r.transition&&"out-in"===r.transition.mode;e&&(n.transition.afterLeave=()=>{o===y.pendingId&&d(r,l,t,0)});let{anchor:t}=y;n&&(t=h(n),p(n,a,y,!0)),e||d(r,l,t,0)}tr(y,r),y.pendingBranch=null,y.isInFallback=!1;let s=y.parent,c=!1;for(;s;){if(s.pendingBranch){s.effects.push(...i),c=!0;break}s=s.parent}c||En(i),y.effects=[],Jn(t,"onResolve")},fallback(e){if(!y.pendingBranch)return;const{vnode:t,activeBranch:n,parentComponent:r,container:o,isSVG:i}=y;Jn(t,"onFallback");const a=h(n),c=()=>{y.isInFallback&&(f(null,e,o,a,r,null,i,l,s),tr(y,e))},u=e.transition&&"out-in"===e.transition.mode;u&&(n.transition.afterLeave=c),y.isInFallback=!0,p(n,r,null,!0),u||c()},move(e,t,n){y.activeBranch&&d(y.activeBranch,e,t,n),y.container=e},next:()=>y.activeBranch&&h(y.activeBranch),registerDep(e,t){const n=!!y.pendingBranch;n&&y.deps++;const r=e.vnode.el;e.asyncDep.catch((t=>{un(t,e,0)})).then((o=>{if(e.isUnmounted||y.isUnmounted||y.pendingId!==e.suspenseId)return;e.asyncResolved=!0;const{vnode:i}=e;Ji(e,o,!1),r&&(i.el=r);const l=!r&&e.subTree.el;t(e,i,v(r||e.subTree.el),r?null:h(e.subTree),y,a,s),l&&m(l),Gn(e,i.el),n&&0==--y.deps&&y.resolve()}))},unmount(e,t){y.isUnmounted=!0,y.activeBranch&&p(y.activeBranch,n,e,t),y.pendingBranch&&p(y.pendingBranch,n,e,t)}};return y}function Xn(e){let t;if(D(e)){const n=vi&&e._c;n&&(e._d=!1,di()),e=e(),n&&(e._d=!0,t=fi,pi())}if(j(e)){const t=zn(e);0,e=t}return e=Ai(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter((t=>t!==e))),e}function er(e,t){t&&t.pendingBranch?j(e)?t.effects.push(...e):t.effects.push(e):En(e)}function tr(e,t){e.activeBranch=t;const{vnode:n,parentComponent:r}=e,o=n.el=t.el;r&&r.subTree===n&&(r.vnode.el=o,Gn(r,o))}function nr(e,t){if($i){let n=$i.provides;const r=$i.parent&&$i.parent.provides;r===n&&(n=$i.provides=Object.create(r)),n[e]=t}else 0}function rr(e,t,n=!1){const r=$i||Bn;if(r){const o=null==r.parent?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&D(t)?t.call(r.proxy):t}else 0}function or(e,t){return cr(e,null,t)}function ir(e,t){return cr(e,null,{flush:"post"})}function ar(e,t){return cr(e,null,{flush:"sync"})}const lr={};function sr(e,t,n){return cr(e,t,n)}function cr(e,t,{immediate:n,deep:r,flush:o,onTrack:i,onTrigger:a}=x){const l=me()===(null==$i?void 0:$i.scope)?$i:null;let s,c,u=!1,f=!1;if(Ht(e)?(s=()=>e.value,u=jt(e)):Lt(e)?(s=()=>e,r=!0):j(e)?(f=!0,u=e.some((e=>Lt(e)||jt(e))),s=()=>e.map((e=>Ht(e)?e.value:Lt(e)?dr(e):D(e)?sn(e,l,2):void 0))):s=D(e)?t?()=>sn(e,l,2):()=>{if(!l||!l.isUnmounted)return c&&c(),cn(e,l,3,[p])}:S,t&&r){const e=s;s=()=>dr(e())}let d,p=e=>{c=g.onStop=()=>{sn(e,l,4)}};if(Zi){if(p=S,t?n&&cn(t,l,3,[s(),f?[]:void 0,p]):s(),"sync"!==o)return S;{const e=ya();d=e.__watcherHandles||(e.__watcherHandles=[])}}let h=f?new Array(e.length).fill(lr):lr;const v=()=>{if(g.active)if(t){const e=g.run();(r||u||(f?e.some(((e,t)=>ie(e,h[t]))):ie(e,h)))&&(c&&c(),cn(t,l,3,[e,h===lr?void 0:f&&h[0]===lr?[]:h,p]),h=e)}else g.run()};let m;v.allowRecurse=!!t,"sync"===o?m=v:"post"===o?m=()=>Ko(v,l&&l.suspense):(v.pre=!0,l&&(v.id=l.uid),m=()=>Cn(v));const g=new Ne(s,m);t?n?v():h=g.run():"post"===o?Ko(g.run.bind(g),l&&l.suspense):g.run();const y=()=>{g.stop(),l&&l.scope&&R(l.scope.effects,g)};return d&&d.push(y),y}function ur(e,t,n){const r=this.proxy,o=U(e)?e.includes(".")?fr(r,e):()=>r[e]:e.bind(r,r);let i;D(t)?i=t:(i=t.handler,n=t);const a=$i;zi(this);const l=cr(o,i.bind(r),n);return a?zi(a):qi(),l}function fr(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e{dr(e,t)}));else if(G(e))for(const n in e)dr(e[n],t);return e}function pr(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Mr((()=>{e.isMounted=!0})),Ur((()=>{e.isUnmounting=!0})),e}const hr=[Function,Array],vr={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:hr,onEnter:hr,onAfterEnter:hr,onEnterCancelled:hr,onBeforeLeave:hr,onLeave:hr,onAfterLeave:hr,onLeaveCancelled:hr,onBeforeAppear:hr,onAppear:hr,onAfterAppear:hr,onAppearCancelled:hr},setup(e,{slots:t}){const n=Hi(),r=pr();let o;return()=>{const i=t.default&&Cr(t.default(),!0);if(!i||!i.length)return;let a=i[0];if(i.length>1){let e=!1;for(const t of i)if(t.type!==si){0,a=t,e=!0;break}}const l=It(e),{mode:s}=l;if(r.isLeaving)return yr(a);const c=br(a);if(!c)return yr(a);const u=gr(c,l,r,n);wr(c,u);const f=n.subTree,d=f&&br(f);let p=!1;const{getTransitionKey:h}=c.type;if(h){const e=h();void 0===o?o=e:e!==o&&(o=e,p=!0)}if(d&&d.type!==si&&(!Ci(c,d)||p)){const e=gr(d,l,r,n);if(wr(d,e),"out-in"===s)return r.isLeaving=!0,e.afterLeave=()=>{r.isLeaving=!1,!1!==n.update.active&&n.update()},yr(a);"in-out"===s&&c.type!==si&&(e.delayLeave=(e,t,n)=>{mr(r,d)[String(d.key)]=d,e._leaveCb=()=>{t(),e._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=n})}return a}}};function mr(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function gr(e,t,n,r){const{appear:o,mode:i,persisted:a=!1,onBeforeEnter:l,onEnter:s,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:f,onLeave:d,onAfterLeave:p,onLeaveCancelled:h,onBeforeAppear:v,onAppear:m,onAfterAppear:g,onAppearCancelled:y}=t,b=String(e.key),w=mr(n,e),C=(e,t)=>{e&&cn(e,r,9,t)},_=(e,t)=>{const n=t[1];C(e,t),j(e)?e.every((e=>e.length<=1))&&n():e.length<=1&&n()},E={mode:i,persisted:a,beforeEnter(t){let r=l;if(!n.isMounted){if(!o)return;r=v||l}t._leaveCb&&t._leaveCb(!0);const i=w[b];i&&Ci(e,i)&&i.el._leaveCb&&i.el._leaveCb(),C(r,[t])},enter(e){let t=s,r=c,i=u;if(!n.isMounted){if(!o)return;t=m||s,r=g||c,i=y||u}let a=!1;const l=e._enterCb=t=>{a||(a=!0,C(t?i:r,[e]),E.delayedLeave&&E.delayedLeave(),e._enterCb=void 0)};t?_(t,[e,l]):l()},leave(t,r){const o=String(e.key);if(t._enterCb&&t._enterCb(!0),n.isUnmounting)return r();C(f,[t]);let i=!1;const a=t._leaveCb=n=>{i||(i=!0,r(),C(n?h:p,[t]),t._leaveCb=void 0,w[o]===e&&delete w[o])};w[o]=e,d?_(d,[t,a]):a()},clone:e=>gr(e,t,n,r)};return E}function yr(e){if(Sr(e))return(e=Ti(e)).children=null,e}function br(e){return Sr(e)?e.children?e.children[0]:void 0:e}function wr(e,t){6&e.shapeFlag&&e.component?wr(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Cr(e,t=!1,n){let r=[],o=0;for(let i=0;i1)for(let e=0;e!!e.type.__asyncLoader;function xr(e){D(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:i,suspensible:a=!0,onError:l}=e;let s,c=null,u=0;const f=()=>{let e;return c||(e=c=t().catch((e=>{if(e=e instanceof Error?e:new Error(String(e)),l)return new Promise(((t,n)=>{l(e,(()=>t((u++,c=null,f()))),(()=>n(e)),u+1)}));throw e})).then((t=>e!==c&&c?c:(t&&(t.__esModule||"Module"===t[Symbol.toStringTag])&&(t=t.default),s=t,t))))};return _r({name:"AsyncComponentWrapper",__asyncLoader:f,get __asyncResolved(){return s},setup(){const e=$i;if(s)return()=>kr(s,e);const t=t=>{c=null,un(t,e,13,!r)};if(a&&e.suspense||Zi)return f().then((t=>()=>kr(t,e))).catch((e=>(t(e),()=>r?Oi(r,{error:e}):null)));const l=zt(!1),u=zt(),d=zt(!!o);return o&&setTimeout((()=>{d.value=!1}),o),null!=i&&setTimeout((()=>{if(!l.value&&!u.value){const e=new Error(`Async component timed out after ${i}ms.`);t(e),u.value=e}}),i),f().then((()=>{l.value=!0,e.parent&&Sr(e.parent.vnode)&&Cn(e.parent.update)})).catch((e=>{t(e),u.value=e})),()=>l.value&&s?kr(s,e):u.value&&r?Oi(r,{error:u.value}):n&&!d.value?Oi(n):void 0}})}function kr(e,t){const{ref:n,props:r,children:o,ce:i}=t.vnode,a=Oi(e,r,o);return a.ref=n,a.ce=i,delete t.vnode.ce,a}const Sr=e=>e.type.__isKeepAlive,Or={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=Hi(),r=n.ctx;if(!r.renderer)return()=>{const e=t.default&&t.default();return e&&1===e.length?e[0]:e};const o=new Map,i=new Set;let a=null;const l=n.suspense,{renderer:{p:s,m:c,um:u,o:{createElement:f}}}=r,d=f("div");function p(e){Lr(e),u(e,n,l,!0)}function h(e){o.forEach(((t,n)=>{const r=ra(t.type);!r||e&&e(r)||v(n)}))}function v(e){const t=o.get(e);a&&Ci(t,a)?a&&Lr(a):p(t),o.delete(e),i.delete(e)}r.activate=(e,t,n,r,o)=>{const i=e.component;c(e,t,n,0,l),s(i.vnode,e,t,n,i,l,r,e.slotScopeIds,o),Ko((()=>{i.isDeactivated=!1,i.a&&ae(i.a);const t=e.props&&e.props.onVnodeMounted;t&&Mi(t,i.parent,e)}),l)},r.deactivate=e=>{const t=e.component;c(e,d,null,1,l),Ko((()=>{t.da&&ae(t.da);const n=e.props&&e.props.onVnodeUnmounted;n&&Mi(n,t.parent,e),t.isDeactivated=!0}),l)},sr((()=>[e.include,e.exclude]),(([e,t])=>{e&&h((t=>Nr(e,t))),t&&h((e=>!Nr(t,e)))}),{flush:"post",deep:!0});let m=null;const g=()=>{null!=m&&o.set(m,Ar(n.subTree))};return Mr(g),Dr(g),Ur((()=>{o.forEach((e=>{const{subTree:t,suspense:r}=n,o=Ar(t);if(e.type!==o.type||e.key!==o.key)p(e);else{Lr(o);const e=o.component.da;e&&Ko(e,r)}}))})),()=>{if(m=null,!t.default)return null;const n=t.default(),r=n[0];if(n.length>1)return a=null,n;if(!(wi(r)&&(4&r.shapeFlag||128&r.shapeFlag)))return a=null,r;let l=Ar(r);const s=l.type,c=ra(Er(l)?l.type.__asyncResolved||{}:s),{include:u,exclude:f,max:d}=e;if(u&&(!c||!Nr(u,c))||f&&c&&Nr(f,c))return a=l,r;const p=null==l.key?s:l.key,h=o.get(p);return l.el&&(l=Ti(l),128&r.shapeFlag&&(r.ssContent=l)),m=p,h?(l.el=h.el,l.component=h.component,l.transition&&wr(l,l.transition),l.shapeFlag|=512,i.delete(p),i.add(p)):(i.add(p),d&&i.size>parseInt(d,10)&&v(i.values().next().value)),l.shapeFlag|=256,a=l,Zn(r.type)?r:l}}};function Nr(e,t){return j(e)?e.some((e=>Nr(e,t))):U(e)?e.split(",").includes(t):!!F(e)&&e.test(t)}function Pr(e,t){Vr(e,"a",t)}function Tr(e,t){Vr(e,"da",t)}function Vr(e,t,n=$i){const r=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(jr(t,r,n),n){let e=n.parent;for(;e&&e.parent;)Sr(e.parent.vnode)&&Rr(r,t,n,e),e=e.parent}}function Rr(e,t,n,r){const o=jr(t,e,r,!0);$r((()=>{R(r[t],o)}),n)}function Lr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function Ar(e){return 128&e.shapeFlag?e.ssContent:e}function jr(e,t,n=$i,r=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...r)=>{if(n.isUnmounted)return;Ae(),zi(n);const o=cn(t,n,e,r);return qi(),je(),o});return r?o.unshift(i):o.push(i),i}}const Br=e=>(t,n=$i)=>(!Zi||"sp"===e)&&jr(e,((...e)=>t(...e)),n),Ir=Br("bm"),Mr=Br("m"),Fr=Br("bu"),Dr=Br("u"),Ur=Br("bum"),$r=Br("um"),Hr=Br("sp"),zr=Br("rtg"),qr=Br("rtc");function Wr(e,t=$i){jr("ec",e,t)}function Kr(e,t){const n=Bn;if(null===n)return e;const r=na(n)||n.proxy,o=e.dirs||(e.dirs=[]);for(let e=0;et(e,n,void 0,i&&i[n])));else{const n=Object.keys(e);o=new Array(n.length);for(let r=0,a=n.length;r{const t=r.fn(...e);return t&&(t.key=r.key),t}:r.fn)}return e}function io(e,t,n={},r,o){if(Bn.isCE||Bn.parent&&Er(Bn.parent)&&Bn.parent.isCE)return"default"!==t&&(n.name=t),Oi("slot",n,r&&r());let i=e[t];i&&i._c&&(i._d=!1),di();const a=i&&ao(i(n)),l=bi(ai,{key:n.key||a&&a.key||`_${t}`},a||(r?r():[]),a&&1===e._?64:-2);return!o&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),i&&i._c&&(i._d=!0),l}function ao(e){return e.some((e=>!wi(e)||e.type!==si&&!(e.type===ai&&!ao(e.children))))?e:null}function lo(e,t){const n={};for(const r in e)n[t&&/[A-Z]/.test(r)?`on:${r}`:oe(r)]=e[r];return n}const so=e=>e?Wi(e)?na(e)||e.proxy:so(e.parent):null,co=V(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>so(e.parent),$root:e=>so(e.root),$emit:e=>e.emit,$options:e=>yo(e),$forceUpdate:e=>e.f||(e.f=()=>Cn(e.update)),$nextTick:e=>e.n||(e.n=wn.bind(e.proxy)),$watch:e=>ur.bind(e)}),uo=(e,t)=>e!==x&&!e.__isScriptSetup&&A(e,t),fo={get({_:e},t){const{ctx:n,setupState:r,data:o,props:i,accessCache:a,type:l,appContext:s}=e;let c;if("$"!==t[0]){const l=a[t];if(void 0!==l)switch(l){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(uo(r,t))return a[t]=1,r[t];if(o!==x&&A(o,t))return a[t]=2,o[t];if((c=e.propsOptions[0])&&A(c,t))return a[t]=3,i[t];if(n!==x&&A(n,t))return a[t]=4,n[t];ho&&(a[t]=0)}}const u=co[t];let f,d;return u?("$attrs"===t&&Be(e,0,t),u(e)):(f=l.__cssModules)&&(f=f[t])?f:n!==x&&A(n,t)?(a[t]=4,n[t]):(d=s.config.globalProperties,A(d,t)?d[t]:void 0)},set({_:e},t,n){const{data:r,setupState:o,ctx:i}=e;return uo(o,t)?(o[t]=n,!0):r!==x&&A(r,t)?(r[t]=n,!0):!A(e.props,t)&&(("$"!==t[0]||!(t.slice(1)in e))&&(i[t]=n,!0))},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:i}},a){let l;return!!n[a]||e!==x&&A(e,a)||uo(t,a)||(l=i[0])&&A(l,a)||A(r,a)||A(co,a)||A(o.config.globalProperties,a)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:A(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};const po=V({},fo,{get(e,t){if(t!==Symbol.unscopables)return fo.get(e,t,e)},has:(e,t)=>"_"!==t[0]&&!a(t)});let ho=!0;function vo(e){const t=yo(e),n=e.proxy,r=e.ctx;ho=!1,t.beforeCreate&&mo(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:a,watch:l,provide:s,inject:c,created:u,beforeMount:f,mounted:d,beforeUpdate:p,updated:h,activated:v,deactivated:m,beforeDestroy:g,beforeUnmount:y,destroyed:b,unmounted:w,render:C,renderTracked:_,renderTriggered:E,errorCaptured:x,serverPrefetch:k,expose:O,inheritAttrs:N,components:P,directives:T,filters:V}=t;if(c&&function(e,t,n=S,r=!1){j(e)&&(e=_o(e));for(const n in e){const o=e[n];let i;i=H(o)?"default"in o?rr(o.from||n,o.default,!0):rr(o.from||n):rr(o),Ht(i)&&r?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:e=>i.value=e}):t[n]=i}}(c,r,null,e.appContext.config.unwrapInjectedRef),a)for(const e in a){const t=a[e];D(t)&&(r[e]=t.bind(n))}if(o){0;const t=o.call(n,n);0,H(t)&&(e.data=Nt(t))}if(ho=!0,i)for(const e in i){const t=i[e],o=D(t)?t.bind(n,n):D(t.get)?t.get.bind(n,n):S;0;const a=!D(t)&&D(t.set)?t.set.bind(n):S,l=ia({get:o,set:a});Object.defineProperty(r,e,{enumerable:!0,configurable:!0,get:()=>l.value,set:e=>l.value=e})}if(l)for(const e in l)go(l[e],r,n,e);if(s){const e=D(s)?s.call(n):s;Reflect.ownKeys(e).forEach((t=>{nr(t,e[t])}))}function R(e,t){j(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(u&&mo(u,e,"c"),R(Ir,f),R(Mr,d),R(Fr,p),R(Dr,h),R(Pr,v),R(Tr,m),R(Wr,x),R(qr,_),R(zr,E),R(Ur,y),R($r,w),R(Hr,k),j(O))if(O.length){const t=e.exposed||(e.exposed={});O.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});C&&e.render===S&&(e.render=C),null!=N&&(e.inheritAttrs=N),P&&(e.components=P),T&&(e.directives=T)}function mo(e,t,n){cn(j(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function go(e,t,n,r){const o=r.includes(".")?fr(n,r):()=>n[r];if(U(e)){const n=t[e];D(n)&&sr(o,n)}else if(D(e))sr(o,e.bind(n));else if(H(e))if(j(e))e.forEach((e=>go(e,t,n,r)));else{const r=D(e.handler)?e.handler.bind(n):t[e.handler];D(r)&&sr(o,r,e)}else 0}function yo(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:a}}=e.appContext,l=i.get(t);let s;return l?s=l:o.length||n||r?(s={},o.length&&o.forEach((e=>bo(s,e,a,!0))),bo(s,t,a)):s=t,H(t)&&i.set(t,s),s}function bo(e,t,n,r=!1){const{mixins:o,extends:i}=t;i&&bo(e,i,n,!0),o&&o.forEach((t=>bo(e,t,n,!0)));for(const o in t)if(r&&"expose"===o);else{const r=wo[o]||n&&n[o];e[o]=r?r(e[o],t[o]):t[o]}return e}const wo={data:Co,props:xo,emits:xo,methods:xo,computed:xo,beforeCreate:Eo,created:Eo,beforeMount:Eo,mounted:Eo,beforeUpdate:Eo,updated:Eo,beforeDestroy:Eo,beforeUnmount:Eo,destroyed:Eo,unmounted:Eo,activated:Eo,deactivated:Eo,errorCaptured:Eo,serverPrefetch:Eo,components:xo,directives:xo,watch:function(e,t){if(!e)return t;if(!t)return e;const n=V(Object.create(null),e);for(const r in t)n[r]=Eo(e[r],t[r]);return n},provide:Co,inject:function(e,t){return xo(_o(e),_o(t))}};function Co(e,t){return t?e?function(){return V(D(e)?e.call(this,this):e,D(t)?t.call(this,this):t)}:t:e}function _o(e){if(j(e)){const t={};for(let n=0;n{s=!0;const[n,r]=Oo(e,t,!0);V(a,n),r&&l.push(...r)};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}if(!i&&!s)return H(e)&&r.set(e,k),k;if(j(i))for(let e=0;e-1,r[1]=n<0||e-1||A(r,"default"))&&l.push(t)}}}}const c=[a,l];return H(e)&&r.set(e,c),c}function No(e){return"$"!==e[0]}function Po(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:null===e?"null":""}function To(e,t){return Po(e)===Po(t)}function Vo(e,t){return j(t)?t.findIndex((t=>To(t,e))):D(t)&&To(t,e)?0:-1}const Ro=e=>"_"===e[0]||"$stable"===e,Lo=e=>j(e)?e.map(Ai):[Ai(e)],Ao=(e,t,n)=>{if(t._n)return t;const r=$n(((...e)=>Lo(t(...e))),n);return r._c=!1,r},jo=(e,t,n)=>{const r=e._ctx;for(const n in e){if(Ro(n))continue;const o=e[n];if(D(o))t[n]=Ao(0,o,r);else if(null!=o){0;const e=Lo(o);t[n]=()=>e}}},Bo=(e,t)=>{const n=Lo(t);e.slots.default=()=>n},Io=(e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=It(t),le(t,"_",n)):jo(t,e.slots={})}else e.slots={},t&&Bo(e,t);le(e.slots,Ei,1)},Mo=(e,t,n)=>{const{vnode:r,slots:o}=e;let i=!0,a=x;if(32&r.shapeFlag){const e=t._;e?n&&1===e?i=!1:(V(o,t),n||1!==e||delete o._):(i=!t.$stable,jo(t,o)),a=t}else t&&(Bo(e,t),a={default:1});if(i)for(const e in o)Ro(e)||e in a||delete o[e]};function Fo(){return{app:null,config:{isNativeTag:O,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Do=0;function Uo(e,t){return function(n,r=null){D(n)||(n=Object.assign({},n)),null==r||H(r)||(r=null);const o=Fo(),i=new Set;let a=!1;const l=o.app={_uid:Do++,_component:n,_props:r,_container:null,_context:o,_instance:null,version:_a,get config(){return o.config},set config(e){0},use:(e,...t)=>(i.has(e)||(e&&D(e.install)?(i.add(e),e.install(l,...t)):D(e)&&(i.add(e),e(l,...t))),l),mixin:e=>(o.mixins.includes(e)||o.mixins.push(e),l),component:(e,t)=>t?(o.components[e]=t,l):o.components[e],directive:(e,t)=>t?(o.directives[e]=t,l):o.directives[e],mount(i,s,c){if(!a){0;const u=Oi(n,r);return u.appContext=o,s&&t?t(u,i):e(u,i,c),a=!0,l._container=i,i.__vue_app__=l,na(u.component)||u.component.proxy}},unmount(){a&&(e(null,l._container),delete l._container.__vue_app__)},provide:(e,t)=>(o.provides[e]=t,l)};return l}}function $o(e,t,n,r,o=!1){if(j(e))return void e.forEach(((e,i)=>$o(e,t&&(j(t)?t[i]:t),n,r,o)));if(Er(r)&&!o)return;const i=4&r.shapeFlag?na(r.component)||r.component.proxy:r.el,a=o?null:i,{i:l,r:s}=e;const c=t&&t.r,u=l.refs===x?l.refs={}:l.refs,f=l.setupState;if(null!=c&&c!==s&&(U(c)?(u[c]=null,A(f,c)&&(f[c]=null)):Ht(c)&&(c.value=null)),D(s))sn(s,l,12,[a,u]);else{const t=U(s),r=Ht(s);if(t||r){const l=()=>{if(e.f){const n=t?A(f,s)?f[s]:u[s]:s.value;o?j(n)&&R(n,i):j(n)?n.includes(i)||n.push(i):t?(u[s]=[i],A(f,s)&&(f[s]=u[s])):(s.value=[i],e.k&&(u[e.k]=s.value))}else t?(u[s]=a,A(f,s)&&(f[s]=a)):r&&(s.value=a,e.k&&(u[e.k]=a))};a?(l.id=-1,Ko(l,n)):l()}else 0}}let Ho=!1;const zo=e=>/svg/.test(e.namespaceURI)&&"foreignObject"!==e.tagName,qo=e=>8===e.nodeType;function Wo(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:i,parentNode:a,remove:l,insert:s,createComment:c}}=e,u=(n,r,l,c,m,g=!1)=>{const y=qo(n)&&"["===n.data,b=()=>h(n,r,l,c,m,y),{type:w,ref:C,shapeFlag:_,patchFlag:E}=r;let x=n.nodeType;r.el=n,-2===E&&(g=!1,r.dynamicChildren=null);let k=null;switch(w){case li:3!==x?""===r.children?(s(r.el=o(""),a(n),n),k=n):k=b():(n.data!==r.children&&(Ho=!0,n.data=r.children),k=i(n));break;case si:k=8!==x||y?b():i(n);break;case ci:if(y&&(x=(n=i(n)).nodeType),1===x||3===x){k=n;const e=!r.children.length;for(let t=0;t{a=a||!!t.dynamicChildren;const{type:s,props:c,patchFlag:u,shapeFlag:f,dirs:p}=t,h="input"===s&&p||"option"===s;if(h||-1!==u){if(p&&Gr(t,null,n,"created"),c)if(h||!a||48&u)for(const t in c)(h&&t.endsWith("value")||P(t)&&!Y(t))&&r(e,t,null,c[t],!1,void 0,n);else c.onClick&&r(e,"onClick",null,c.onClick,!1,void 0,n);let s;if((s=c&&c.onVnodeBeforeMount)&&Mi(s,n,t),p&&Gr(t,null,n,"beforeMount"),((s=c&&c.onVnodeMounted)||p)&&er((()=>{s&&Mi(s,n,t),p&&Gr(t,null,n,"mounted")}),o),16&f&&(!c||!c.innerHTML&&!c.textContent)){let r=d(e.firstChild,t,e,n,o,i,a);for(;r;){Ho=!0;const e=r;r=r.nextSibling,l(e)}}else 8&f&&e.textContent!==t.children&&(Ho=!0,e.textContent=t.children)}return e.nextSibling},d=(e,t,r,o,i,a,l)=>{l=l||!!t.dynamicChildren;const s=t.children,c=s.length;for(let t=0;t{const{slotScopeIds:u}=t;u&&(o=o?o.concat(u):u);const f=a(e),p=d(i(e),t,f,n,r,o,l);return p&&qo(p)&&"]"===p.data?i(t.anchor=p):(Ho=!0,s(t.anchor=c("]"),f,p),p)},h=(e,t,r,o,s,c)=>{if(Ho=!0,t.el=null,c){const t=v(e);for(;;){const n=i(e);if(!n||n===t)break;l(n)}}const u=i(e),f=a(e);return l(e),n(null,t,f,u,r,o,zo(f),s),u},v=e=>{let t=0;for(;e;)if((e=i(e))&&qo(e)&&("["===e.data&&t++,"]"===e.data)){if(0===t)return i(e);t--}return e};return[(e,t)=>{if(!t.hasChildNodes())return n(null,e,t),kn(),void(t._vnode=e);Ho=!1,u(t.firstChild,e,null,null,null),kn(),t._vnode=e},u]}const Ko=er;function Go(e){return Yo(e)}function Zo(e){return Yo(e,Wo)}function Yo(e,t){fe().__VUE__=!0;const{insert:n,remove:r,patchProp:o,createElement:i,createText:a,createComment:l,setText:s,setElementText:c,parentNode:u,nextSibling:f,setScopeId:d=S,insertStaticContent:p}=e,h=(e,t,n,r=null,o=null,i=null,a=!1,l=null,s=!!t.dynamicChildren)=>{if(e===t)return;e&&!Ci(e,t)&&(r=q(e),D(e,o,i,!0),e=null),-2===t.patchFlag&&(s=!1,t.dynamicChildren=null);const{type:c,ref:u,shapeFlag:f}=t;switch(c){case li:v(e,t,n,r);break;case si:m(e,t,n,r);break;case ci:null==e&&g(t,n,r,a);break;case ai:P(e,t,n,r,o,i,a,l,s);break;default:1&f?b(e,t,n,r,o,i,a,l,s):6&f?T(e,t,n,r,o,i,a,l,s):(64&f||128&f)&&c.process(e,t,n,r,o,i,a,l,s,K)}null!=u&&o&&$o(u,e&&e.ref,i,t||e,!t)},v=(e,t,r,o)=>{if(null==e)n(t.el=a(t.children),r,o);else{const n=t.el=e.el;t.children!==e.children&&s(n,t.children)}},m=(e,t,r,o)=>{null==e?n(t.el=l(t.children||""),r,o):t.el=e.el},g=(e,t,n,r)=>{[e.el,e.anchor]=p(e.children,t,n,r,e.el,e.anchor)},y=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=f(e),r(e),e=n;r(t)},b=(e,t,n,r,o,i,a,l,s)=>{a=a||"svg"===t.type,null==e?w(t,n,r,o,i,a,l,s):E(e,t,o,i,a,l,s)},w=(e,t,r,a,l,s,u,f)=>{let d,p;const{type:h,props:v,shapeFlag:m,transition:g,dirs:y}=e;if(d=e.el=i(e.type,s,v&&v.is,v),8&m?c(d,e.children):16&m&&_(e.children,d,null,a,l,s&&"foreignObject"!==h,u,f),y&&Gr(e,null,a,"created"),C(d,e,e.scopeId,u,a),v){for(const t in v)"value"===t||Y(t)||o(d,t,null,v[t],s,e.children,a,l,z);"value"in v&&o(d,"value",null,v.value),(p=v.onVnodeBeforeMount)&&Mi(p,a,e)}y&&Gr(e,null,a,"beforeMount");const b=(!l||l&&!l.pendingBranch)&&g&&!g.persisted;b&&g.beforeEnter(d),n(d,t,r),((p=v&&v.onVnodeMounted)||b||y)&&Ko((()=>{p&&Mi(p,a,e),b&&g.enter(d),y&&Gr(e,null,a,"mounted")}),l)},C=(e,t,n,r,o)=>{if(n&&d(e,n),r)for(let t=0;t{for(let c=s;c{const s=t.el=e.el;let{patchFlag:u,dynamicChildren:f,dirs:d}=t;u|=16&e.patchFlag;const p=e.props||x,h=t.props||x;let v;n&&Jo(n,!1),(v=h.onVnodeBeforeUpdate)&&Mi(v,n,t,e),d&&Gr(t,e,n,"beforeUpdate"),n&&Jo(n,!0);const m=i&&"foreignObject"!==t.type;if(f?O(e.dynamicChildren,f,s,n,r,m,a):l||B(e,t,s,null,n,r,m,a,!1),u>0){if(16&u)N(s,t,p,h,n,r,i);else if(2&u&&p.class!==h.class&&o(s,"class",null,h.class,i),4&u&&o(s,"style",p.style,h.style,i),8&u){const a=t.dynamicProps;for(let t=0;t{v&&Mi(v,n,t,e),d&&Gr(t,e,n,"updated")}),r)},O=(e,t,n,r,o,i,a)=>{for(let l=0;l{if(n!==r){if(n!==x)for(const s in n)Y(s)||s in r||o(e,s,n[s],null,l,t.children,i,a,z);for(const s in r){if(Y(s))continue;const c=r[s],u=n[s];c!==u&&"value"!==s&&o(e,s,u,c,l,t.children,i,a,z)}"value"in r&&o(e,"value",n.value,r.value)}},P=(e,t,r,o,i,l,s,c,u)=>{const f=t.el=e?e.el:a(""),d=t.anchor=e?e.anchor:a("");let{patchFlag:p,dynamicChildren:h,slotScopeIds:v}=t;v&&(c=c?c.concat(v):v),null==e?(n(f,r,o),n(d,r,o),_(t.children,r,d,i,l,s,c,u)):p>0&&64&p&&h&&e.dynamicChildren?(O(e.dynamicChildren,h,r,i,l,s,c),(null!=t.key||i&&t===i.subTree)&&Qo(e,t,!0)):B(e,t,r,d,i,l,s,c,u)},T=(e,t,n,r,o,i,a,l,s)=>{t.slotScopeIds=l,null==e?512&t.shapeFlag?o.ctx.activate(t,n,r,a,s):V(t,n,r,o,i,a,s):R(e,t,s)},V=(e,t,n,r,o,i,a)=>{const l=e.component=Ui(e,r,o);if(Sr(e)&&(l.ctx.renderer=K),Yi(l),l.asyncDep){if(o&&o.registerDep(l,L),!e.el){const e=l.subTree=Oi(si);m(null,e,t,n)}}else L(l,e,t,n,o,i,a)},R=(e,t,n)=>{const r=t.component=e.component;if(function(e,t,n){const{props:r,children:o,component:i}=e,{props:a,children:l,patchFlag:s}=t,c=i.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&s>=0))return!(!o&&!l||l&&l.$stable)||r!==a&&(r?!a||Kn(r,a,c):!!a);if(1024&s)return!0;if(16&s)return r?Kn(r,a,c):!!a;if(8&s){const e=t.dynamicProps;for(let t=0;thn&&pn.splice(t,1)}(r.update),r.update()}else t.el=e.el,r.vnode=t},L=(e,t,n,r,o,i,a)=>{const l=e.effect=new Ne((()=>{if(e.isMounted){let t,{next:n,bu:r,u:l,parent:s,vnode:c}=e,f=n;0,Jo(e,!1),n?(n.el=c.el,j(e,n,a)):n=c,r&&ae(r),(t=n.props&&n.props.onVnodeBeforeUpdate)&&Mi(t,s,n,c),Jo(e,!0);const d=Hn(e);0;const p=e.subTree;e.subTree=d,h(p,d,u(p.el),q(p),e,o,i),n.el=d.el,null===f&&Gn(e,d.el),l&&Ko(l,o),(t=n.props&&n.props.onVnodeUpdated)&&Ko((()=>Mi(t,s,n,c)),o)}else{let a;const{el:l,props:s}=t,{bm:c,m:u,parent:f}=e,d=Er(t);if(Jo(e,!1),c&&ae(c),!d&&(a=s&&s.onVnodeBeforeMount)&&Mi(a,f,t),Jo(e,!0),l&&Z){const n=()=>{e.subTree=Hn(e),Z(l,e.subTree,e,o,null)};d?t.type.__asyncLoader().then((()=>!e.isUnmounted&&n())):n()}else{0;const a=e.subTree=Hn(e);0,h(null,a,n,r,e,o,i),t.el=a.el}if(u&&Ko(u,o),!d&&(a=s&&s.onVnodeMounted)){const e=t;Ko((()=>Mi(a,f,e)),o)}(256&t.shapeFlag||f&&Er(f.vnode)&&256&f.vnode.shapeFlag)&&e.a&&Ko(e.a,o),e.isMounted=!0,t=n=r=null}}),(()=>Cn(s)),e.scope),s=e.update=()=>l.run();s.id=e.uid,Jo(e,!0),s()},j=(e,t,n)=>{t.component=e;const r=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,r){const{props:o,attrs:i,vnode:{patchFlag:a}}=e,l=It(o),[s]=e.propsOptions;let c=!1;if(!(r||a>0)||16&a){let r;ko(e,t,o,i)&&(c=!0);for(const i in l)t&&(A(t,i)||(r=ne(i))!==i&&A(t,r))||(s?!n||void 0===n[i]&&void 0===n[r]||(o[i]=So(s,l,i,void 0,e,!0)):delete o[i]);if(i!==l)for(const e in i)t&&A(t,e)||(delete i[e],c=!0)}else if(8&a){const n=e.vnode.dynamicProps;for(let r=0;r{const u=e&&e.children,f=e?e.shapeFlag:0,d=t.children,{patchFlag:p,shapeFlag:h}=t;if(p>0){if(128&p)return void M(u,d,n,r,o,i,a,l,s);if(256&p)return void I(u,d,n,r,o,i,a,l,s)}8&h?(16&f&&z(u,o,i),d!==u&&c(n,d)):16&f?16&h?M(u,d,n,r,o,i,a,l,s):z(u,o,i,!0):(8&f&&c(n,""),16&h&&_(d,n,r,o,i,a,l,s))},I=(e,t,n,r,o,i,a,l,s)=>{t=t||k;const c=(e=e||k).length,u=t.length,f=Math.min(c,u);let d;for(d=0;du?z(e,o,i,!0,!1,f):_(t,n,r,o,i,a,l,s,f)},M=(e,t,n,r,o,i,a,l,s)=>{let c=0;const u=t.length;let f=e.length-1,d=u-1;for(;c<=f&&c<=d;){const r=e[c],u=t[c]=s?ji(t[c]):Ai(t[c]);if(!Ci(r,u))break;h(r,u,n,null,o,i,a,l,s),c++}for(;c<=f&&c<=d;){const r=e[f],c=t[d]=s?ji(t[d]):Ai(t[d]);if(!Ci(r,c))break;h(r,c,n,null,o,i,a,l,s),f--,d--}if(c>f){if(c<=d){const e=d+1,f=ed)for(;c<=f;)D(e[c],o,i,!0),c++;else{const p=c,v=c,m=new Map;for(c=v;c<=d;c++){const e=t[c]=s?ji(t[c]):Ai(t[c]);null!=e.key&&m.set(e.key,c)}let g,y=0;const b=d-v+1;let w=!1,C=0;const _=new Array(b);for(c=0;c=b){D(r,o,i,!0);continue}let u;if(null!=r.key)u=m.get(r.key);else for(g=v;g<=d;g++)if(0===_[g-v]&&Ci(r,t[g])){u=g;break}void 0===u?D(r,o,i,!0):(_[u-v]=c+1,u>=C?C=u:w=!0,h(r,t[u],n,null,o,i,a,l,s),y++)}const E=w?function(e){const t=e.slice(),n=[0];let r,o,i,a,l;const s=e.length;for(r=0;r>1,e[n[l]]0&&(t[r]=n[i-1]),n[i]=r)}}i=n.length,a=n[i-1];for(;i-- >0;)n[i]=a,a=t[a];return n}(_):k;for(g=E.length-1,c=b-1;c>=0;c--){const e=v+c,f=t[e],d=e+1{const{el:a,type:l,transition:s,children:c,shapeFlag:u}=e;if(6&u)return void F(e.component.subTree,t,r,o);if(128&u)return void e.suspense.move(t,r,o);if(64&u)return void l.move(e,t,r,K);if(l===ai){n(a,t,r);for(let e=0;e{let i;for(;e&&e!==t;)i=f(e),n(e,r,o),e=i;n(t,r,o)})(e,t,r);if(2!==o&&1&u&&s)if(0===o)s.beforeEnter(a),n(a,t,r),Ko((()=>s.enter(a)),i);else{const{leave:e,delayLeave:o,afterLeave:i}=s,l=()=>n(a,t,r),c=()=>{e(a,(()=>{l(),i&&i()}))};o?o(a,l,c):c()}else n(a,t,r)},D=(e,t,n,r=!1,o=!1)=>{const{type:i,props:a,ref:l,children:s,dynamicChildren:c,shapeFlag:u,patchFlag:f,dirs:d}=e;if(null!=l&&$o(l,null,n,e,!0),256&u)return void t.ctx.deactivate(e);const p=1&u&&d,h=!Er(e);let v;if(h&&(v=a&&a.onVnodeBeforeUnmount)&&Mi(v,t,e),6&u)H(e.component,n,r);else{if(128&u)return void e.suspense.unmount(n,r);p&&Gr(e,null,t,"beforeUnmount"),64&u?e.type.remove(e,t,n,o,K,r):c&&(i!==ai||f>0&&64&f)?z(c,t,n,!1,!0):(i===ai&&384&f||!o&&16&u)&&z(s,t,n),r&&U(e)}(h&&(v=a&&a.onVnodeUnmounted)||p)&&Ko((()=>{v&&Mi(v,t,e),p&&Gr(e,null,t,"unmounted")}),n)},U=e=>{const{type:t,el:n,anchor:o,transition:i}=e;if(t===ai)return void $(n,o);if(t===ci)return void y(e);const a=()=>{r(n),i&&!i.persisted&&i.afterLeave&&i.afterLeave()};if(1&e.shapeFlag&&i&&!i.persisted){const{leave:t,delayLeave:r}=i,o=()=>t(n,a);r?r(e.el,a,o):o()}else a()},$=(e,t)=>{let n;for(;e!==t;)n=f(e),r(e),e=n;r(t)},H=(e,t,n)=>{const{bum:r,scope:o,update:i,subTree:a,um:l}=e;r&&ae(r),o.stop(),i&&(i.active=!1,D(a,e,t,n)),l&&Ko(l,t),Ko((()=>{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},z=(e,t,n,r=!1,o=!1,i=0)=>{for(let a=i;a6&e.shapeFlag?q(e.component.subTree):128&e.shapeFlag?e.suspense.next():f(e.anchor||e.el),W=(e,t,n)=>{null==e?t._vnode&&D(t._vnode,null,null,!0):h(t._vnode||null,e,t,null,null,null,n),xn(),kn(),t._vnode=e},K={p:h,um:D,m:F,r:U,mt:V,mc:_,pc:B,pbc:O,n:q,o:e};let G,Z;return t&&([G,Z]=t(K)),{render:W,hydrate:G,createApp:Uo(W,G)}}function Jo({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Qo(e,t,n=!1){const r=e.children,o=t.children;if(j(r)&&j(o))for(let e=0;ee.__isTeleport,ei=e=>e&&(e.disabled||""===e.disabled),ti=e=>"undefined"!=typeof SVGElement&&e instanceof SVGElement,ni=(e,t)=>{const n=e&&e.to;if(U(n)){if(t){const e=t(n);return e}return null}return n};function ri(e,t,n,{o:{insert:r},m:o},i=2){0===i&&r(e.targetAnchor,t,n);const{el:a,anchor:l,shapeFlag:s,children:c,props:u}=e,f=2===i;if(f&&r(a,t,n),(!f||ei(u))&&16&s)for(let e=0;e{16&y&&u(b,e,t,o,i,a,l,s)};g?m(n,c):f&&m(f,d)}else{t.el=e.el;const r=t.anchor=e.anchor,u=t.target=e.target,p=t.targetAnchor=e.targetAnchor,v=ei(e.props),m=v?n:u,y=v?r:p;if(a=a||ti(u),w?(d(e.dynamicChildren,w,m,o,i,a,l),Qo(e,t,!0)):s||f(e,t,m,y,o,i,a,l,!1),g)v||ri(t,n,r,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const e=t.target=ni(t.props,h);e&&ri(t,e,null,c,0)}else v&&ri(t,u,p,c,1)}ii(t)},remove(e,t,n,r,{um:o,o:{remove:i}},a){const{shapeFlag:l,children:s,anchor:c,targetAnchor:u,target:f,props:d}=e;if(f&&i(u),(a||!ei(d))&&(i(c),16&l))for(let e=0;e0?fi||k:null,pi(),vi>0&&fi&&fi.push(e),e}function yi(e,t,n,r,o,i){return gi(Si(e,t,n,r,o,i,!0))}function bi(e,t,n,r,o){return gi(Oi(e,t,n,r,o,!0))}function wi(e){return!!e&&!0===e.__v_isVNode}function Ci(e,t){return e.type===t.type&&e.key===t.key}function _i(e){hi=e}const Ei="__vInternal",xi=({key:e})=>null!=e?e:null,ki=({ref:e,ref_key:t,ref_for:n})=>null!=e?U(e)||Ht(e)||D(e)?{i:Bn,r:e,k:t,f:!!n}:e:null;function Si(e,t=null,n=null,r=0,o=null,i=(e===ai?0:1),a=!1,l=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&xi(t),ref:t&&ki(t),scopeId:In,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Bn};return l?(Bi(s,n),128&i&&e.normalize(s)):n&&(s.shapeFlag|=U(n)?8:16),vi>0&&!a&&fi&&(s.patchFlag>0||6&i)&&32!==s.patchFlag&&fi.push(s),s}const Oi=Ni;function Ni(e,t=null,n=null,r=0,o=null,i=!1){if(e&&e!==Qr||(e=si),wi(e)){const r=Ti(e,t,!0);return n&&Bi(r,n),vi>0&&!i&&fi&&(6&r.shapeFlag?fi[fi.indexOf(e)]=r:fi.push(r)),r.patchFlag|=-2,r}if(oa(e)&&(e=e.__vccOpts),t){t=Pi(t);let{class:e,style:n}=t;e&&!U(e)&&(t.class=d(e)),H(n)&&(Bt(n)&&!j(n)&&(n=V({},n)),t.style=l(n))}return Si(e,t,n,r,o,U(e)?1:Zn(e)?128:Xo(e)?64:H(e)?4:D(e)?2:0,i,!0)}function Pi(e){return e?Bt(e)||Ei in e?V({},e):e:null}function Ti(e,t,n=!1){const{props:r,ref:o,patchFlag:i,children:a}=e,l=t?Ii(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&xi(l),ref:t&&t.ref?n&&o?j(o)?o.concat(ki(t)):[o,ki(t)]:ki(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ai?-1===i?16:16|i:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ti(e.ssContent),ssFallback:e.ssFallback&&Ti(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Vi(e=" ",t=0){return Oi(li,null,e,t)}function Ri(e,t){const n=Oi(ci,null,e);return n.staticCount=t,n}function Li(e="",t=!1){return t?(di(),bi(si,null,e)):Oi(si,null,e)}function Ai(e){return null==e||"boolean"==typeof e?Oi(si):j(e)?Oi(ai,null,e.slice()):"object"==typeof e?ji(e):Oi(li,null,String(e))}function ji(e){return null===e.el&&-1!==e.patchFlag||e.memo?e:Ti(e)}function Bi(e,t){let n=0;const{shapeFlag:r}=e;if(null==t)t=null;else if(j(t))n=16;else if("object"==typeof t){if(65&r){const n=t.default;return void(n&&(n._c&&(n._d=!1),Bi(e,n()),n._c&&(n._d=!0)))}{n=32;const r=t._;r||Ei in t?3===r&&Bn&&(1===Bn.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=Bn}}else D(t)?(t={default:t,_ctx:Bn},n=32):(t=String(t),64&r?(n=16,t=[Vi(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ii(...e){const t={};for(let n=0;n$i||Bn,zi=e=>{$i=e,e.scope.on()},qi=()=>{$i&&$i.scope.off(),$i=null};function Wi(e){return 4&e.vnode.shapeFlag}let Ki,Gi,Zi=!1;function Yi(e,t=!1){Zi=t;const{props:n,children:r}=e.vnode,o=Wi(e);!function(e,t,n,r=!1){const o={},i={};le(i,Ei,1),e.propsDefaults=Object.create(null),ko(e,t,o,i);for(const t in e.propsOptions[0])t in o||(o[t]=void 0);n?e.props=r?o:Pt(o):e.type.props?e.props=o:e.props=i,e.attrs=i}(e,n,o,t),Io(e,r);const i=o?function(e,t){const n=e.type;0;e.accessCache=Object.create(null),e.proxy=Mt(new Proxy(e.ctx,fo)),!1;const{setup:r}=n;if(r){const n=e.setupContext=r.length>1?ta(e):null;zi(e),Ae();const o=sn(r,e,0,[e.props,n]);if(je(),qi(),z(o)){if(o.then(qi,qi),t)return o.then((n=>{Ji(e,n,t)})).catch((t=>{un(t,e,0)}));e.asyncDep=o}else Ji(e,o,t)}else ea(e,t)}(e,t):void 0;return Zi=!1,i}function Ji(e,t,n){D(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:H(t)&&(e.setupState=Jt(t)),ea(e,n)}function Qi(e){Ki=e,Gi=e=>{e.render._rc&&(e.withProxy=new Proxy(e.ctx,po))}}const Xi=()=>!Ki;function ea(e,t,n){const r=e.type;if(!e.render){if(!t&&Ki&&!r.render){const t=r.template||yo(e).template;if(t){0;const{isCustomElement:n,compilerOptions:o}=e.appContext.config,{delimiters:i,compilerOptions:a}=r,l=V(V({isCustomElement:n,delimiters:i},o),a);r.render=Ki(t,l)}}e.render=r.render||S,Gi&&Gi(e)}zi(e),Ae(),vo(e),je(),qi()}function ta(e){const t=t=>{e.exposed=t||{}};let n;return{get attrs(){return n||(n=function(e){return new Proxy(e.attrs,{get:(t,n)=>(Be(e,0,"$attrs"),t[n])})}(e))},slots:e.slots,emit:e.emit,expose:t}}function na(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Jt(Mt(e.exposed)),{get:(t,n)=>n in t?t[n]:n in co?co[n](e):void 0,has:(e,t)=>t in e||t in co}))}function ra(e,t=!0){return D(e)?e.displayName||e.name:e.name||t&&e.__name}function oa(e){return D(e)&&"__vccOpts"in e}const ia=(e,t)=>function(e,t,n=!1){let r,o;const i=D(e);return i?(r=e,o=S):(r=e.get,o=e.set),new on(r,o,i||!o,n)}(e,0,Zi);function aa(){return null}function la(){return null}function sa(e){0}function ca(e,t){return null}function ua(){return da().slots}function fa(){return da().attrs}function da(){const e=Hi();return e.setupContext||(e.setupContext=ta(e))}function pa(e,t){const n=j(e)?e.reduce(((e,t)=>(e[t]={},e)),{}):e;for(const e in t){const r=n[e];r?j(r)||D(r)?n[e]={type:r,default:t[e]}:r.default=t[e]:null===r&&(n[e]={default:t[e]})}return n}function ha(e,t){const n={};for(const r in e)t.includes(r)||Object.defineProperty(n,r,{enumerable:!0,get:()=>e[r]});return n}function va(e){const t=Hi();let n=e();return qi(),z(n)&&(n=n.catch((e=>{throw zi(t),e}))),[n,()=>zi(t)]}function ma(e,t,n){const r=arguments.length;return 2===r?H(t)&&!j(t)?wi(t)?Oi(e,null,[t]):Oi(e,t):Oi(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):3===r&&wi(n)&&(n=[n]),Oi(e,t,n))}const ga=Symbol(""),ya=()=>{{const e=rr(ga);return e}};function ba(){return void 0}function wa(e,t,n,r){const o=n[r];if(o&&Ca(o,e))return o;const i=t();return i.memo=e.slice(),n[r]=i}function Ca(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let e=0;e0&&fi&&fi.push(e),!0}const _a="3.2.47",Ea={createComponentInstance:Ui,setupComponent:Yi,renderComponentRoot:Hn,setCurrentRenderingInstance:Mn,isVNode:wi,normalizeVNode:Ai},xa=null,ka=null,Sa="undefined"!=typeof document?document:null,Oa=Sa&&Sa.createElement("template"),Na={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?Sa.createElementNS("http://www.w3.org/2000/svg",e):Sa.createElement(e,n?{is:n}:void 0);return"select"===e&&r&&null!=r.multiple&&o.setAttribute("multiple",r.multiple),o},createText:e=>Sa.createTextNode(e),createComment:e=>Sa.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Sa.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,i){const a=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),o!==i&&(o=o.nextSibling););else{Oa.innerHTML=r?`${e}`:e;const o=Oa.content;if(r){const e=o.firstChild;for(;e.firstChild;)o.appendChild(e.firstChild);o.removeChild(e)}t.insertBefore(o,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};const Pa=/\s*!important$/;function Ta(e,t,n){if(j(n))n.forEach((n=>Ta(e,t,n)));else if(null==n&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=function(e,t){const n=Ra[t];if(n)return n;let r=ee(t);if("filter"!==r&&r in e)return Ra[t]=r;r=re(r);for(let n=0;n{if(e._vts){if(e._vts<=n.attached)return}else e._vts=Date.now();cn(function(e,t){if(j(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=Fa(),n}(r,o);Aa(e,n,a,l)}else a&&(!function(e,t,n,r){e.removeEventListener(t,n,r)}(e,n,a,l),i[t]=void 0)}}const Ba=/(?:Once|Passive|Capture)$/;let Ia=0;const Ma=Promise.resolve(),Fa=()=>Ia||(Ma.then((()=>Ia=0)),Ia=Date.now());const Da=/^on[a-z]/;function Ua(e,t){const n=_r(e);class r extends za{constructor(e){super(n,e,t)}}return r.def=n,r}const $a=e=>Ua(e,Kl),Ha="undefined"!=typeof HTMLElement?HTMLElement:class{};class za extends Ha{constructor(e,t={},n){super(),this._def=e,this._props=t,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this.shadowRoot&&n?n(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:"open"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,wn((()=>{this._connected||(Wl(null,this.shadowRoot),this._instance=null)}))}_resolveDef(){this._resolved=!0;for(let e=0;e{for(const t of e)this._setAttr(t.attributeName)})).observe(this,{attributes:!0});const e=(e,t=!1)=>{const{props:n,styles:r}=e;let o;if(n&&!j(n))for(const e in n){const t=n[e];(t===Number||t&&t.type===Number)&&(e in this._props&&(this._props[e]=ce(this._props[e])),(o||(o=Object.create(null)))[ee(e)]=!0)}this._numberProps=o,t&&this._resolveProps(e),this._applyStyles(r),this._update()},t=this._def.__asyncLoader;t?t().then((t=>e(t,!0))):e(this._def)}_resolveProps(e){const{props:t}=e,n=j(t)?t:Object.keys(t||{});for(const e of Object.keys(this))"_"!==e[0]&&n.includes(e)&&this._setProp(e,this[e],!0,!1);for(const e of n.map(ee))Object.defineProperty(this,e,{get(){return this._getProp(e)},set(t){this._setProp(e,t)}})}_setAttr(e){let t=this.getAttribute(e);const n=ee(e);this._numberProps&&this._numberProps[n]&&(t=ce(t)),this._setProp(n,t,!1)}_getProp(e){return this._props[e]}_setProp(e,t,n=!0,r=!0){t!==this._props[e]&&(this._props[e]=t,r&&this._instance&&this._update(),n&&(!0===t?this.setAttribute(ne(e),""):"string"==typeof t||"number"==typeof t?this.setAttribute(ne(e),t+""):t||this.removeAttribute(ne(e))))}_update(){Wl(this._createVNode(),this.shadowRoot)}_createVNode(){const e=Oi(this._def,V({},this._props));return this._instance||(e.ce=e=>{this._instance=e,e.isCE=!0;const t=(e,t)=>{this.dispatchEvent(new CustomEvent(e,{detail:t}))};e.emit=(e,...n)=>{t(e,n),ne(e)!==e&&t(ne(e),n)};let n=this;for(;n=n&&(n.parentNode||n.host);)if(n instanceof za){e.parent=n._instance,e.provides=n._instance.provides;break}}),e}_applyStyles(e){e&&e.forEach((e=>{const t=document.createElement("style");t.textContent=e,this.shadowRoot.appendChild(t)}))}}function qa(e="$style"){{const t=Hi();if(!t)return x;const n=t.type.__cssModules;if(!n)return x;const r=n[e];return r||x}}function Wa(e){const t=Hi();if(!t)return;const n=t.ut=(n=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach((e=>Ga(e,n)))},r=()=>{const r=e(t.proxy);Ka(t.subTree,r),n(r)};ir(r),Mr((()=>{const e=new MutationObserver(r);e.observe(t.subTree.el.parentNode,{childList:!0}),$r((()=>e.disconnect()))}))}function Ka(e,t){if(128&e.shapeFlag){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push((()=>{Ka(n.activeBranch,t)}))}for(;e.component;)e=e.component.subTree;if(1&e.shapeFlag&&e.el)Ga(e.el,t);else if(e.type===ai)e.children.forEach((e=>Ka(e,t)));else if(e.type===ci){let{el:n,anchor:r}=e;for(;n&&(Ga(n,t),n!==r);)n=n.nextSibling}}function Ga(e,t){if(1===e.nodeType){const n=e.style;for(const e in t)n.setProperty(`--${e}`,t[e])}}const Za="transition",Ya="animation",Ja=(e,{slots:t})=>ma(vr,nl(e),t);Ja.displayName="Transition";const Qa={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Xa=Ja.props=V({},vr.props,Qa),el=(e,t=[])=>{j(e)?e.forEach((e=>e(...t))):e&&e(...t)},tl=e=>!!e&&(j(e)?e.some((e=>e.length>1)):e.length>1);function nl(e){const t={};for(const n in e)n in Qa||(t[n]=e[n]);if(!1===e.css)return t;const{name:n="v",type:r,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:s=i,appearActiveClass:c=a,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:p=`${n}-leave-to`}=e,h=function(e){if(null==e)return null;if(H(e))return[rl(e.enter),rl(e.leave)];{const t=rl(e);return[t,t]}}(o),v=h&&h[0],m=h&&h[1],{onBeforeEnter:g,onEnter:y,onEnterCancelled:b,onLeave:w,onLeaveCancelled:C,onBeforeAppear:_=g,onAppear:E=y,onAppearCancelled:x=b}=t,k=(e,t,n)=>{il(e,t?u:l),il(e,t?c:a),n&&n()},S=(e,t)=>{e._isLeaving=!1,il(e,f),il(e,p),il(e,d),t&&t()},O=e=>(t,n)=>{const o=e?E:y,a=()=>k(t,e,n);el(o,[t,a]),al((()=>{il(t,e?s:i),ol(t,e?u:l),tl(o)||sl(t,r,v,a)}))};return V(t,{onBeforeEnter(e){el(g,[e]),ol(e,i),ol(e,a)},onBeforeAppear(e){el(_,[e]),ol(e,s),ol(e,c)},onEnter:O(!1),onAppear:O(!0),onLeave(e,t){e._isLeaving=!0;const n=()=>S(e,t);ol(e,f),dl(),ol(e,d),al((()=>{e._isLeaving&&(il(e,f),ol(e,p),tl(w)||sl(e,r,m,n))})),el(w,[e,n])},onEnterCancelled(e){k(e,!1),el(b,[e])},onAppearCancelled(e){k(e,!0),el(x,[e])},onLeaveCancelled(e){S(e),el(C,[e])}})}function rl(e){return ce(e)}function ol(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.add(t))),(e._vtc||(e._vtc=new Set)).add(t)}function il(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.remove(t)));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function al(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let ll=0;function sl(e,t,n,r){const o=e._endId=++ll,i=()=>{o===e._endId&&r()};if(n)return setTimeout(i,n);const{type:a,timeout:l,propCount:s}=cl(e,t);if(!a)return r();const c=a+"end";let u=0;const f=()=>{e.removeEventListener(c,d),i()},d=t=>{t.target===e&&++u>=s&&f()};setTimeout((()=>{u(n[e]||"").split(", "),o=r(`${Za}Delay`),i=r(`${Za}Duration`),a=ul(o,i),l=r(`${Ya}Delay`),s=r(`${Ya}Duration`),c=ul(l,s);let u=null,f=0,d=0;t===Za?a>0&&(u=Za,f=a,d=i.length):t===Ya?c>0&&(u=Ya,f=c,d=s.length):(f=Math.max(a,c),u=f>0?a>c?Za:Ya:null,d=u?u===Za?i.length:s.length:0);return{type:u,timeout:f,propCount:d,hasTransform:u===Za&&/\b(transform|all)(,|$)/.test(r(`${Za}Property`).toString())}}function ul(e,t){for(;e.lengthfl(t)+fl(e[n]))))}function fl(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}function dl(){return document.body.offsetHeight}const pl=new WeakMap,hl=new WeakMap,vl={name:"TransitionGroup",props:V({},Xa,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Hi(),r=pr();let o,i;return Dr((()=>{if(!o.length)return;const t=e.moveClass||`${e.name||"v"}-move`;if(!function(e,t,n){const r=e.cloneNode();e._vtc&&e._vtc.forEach((e=>{e.split(/\s+/).forEach((e=>e&&r.classList.remove(e)))}));n.split(/\s+/).forEach((e=>e&&r.classList.add(e))),r.style.display="none";const o=1===t.nodeType?t:t.parentNode;o.appendChild(r);const{hasTransform:i}=cl(r);return o.removeChild(r),i}(o[0].el,n.vnode.el,t))return;o.forEach(gl),o.forEach(yl);const r=o.filter(bl);dl(),r.forEach((e=>{const n=e.el,r=n.style;ol(n,t),r.transform=r.webkitTransform=r.transitionDuration="";const o=n._moveCb=e=>{e&&e.target!==n||e&&!/transform$/.test(e.propertyName)||(n.removeEventListener("transitionend",o),n._moveCb=null,il(n,t))};n.addEventListener("transitionend",o)}))})),()=>{const a=It(e),l=nl(a);let s=a.tag||ai;o=i,i=t.default?Cr(t.default()):[];for(let e=0;e{const t=e.props["onUpdate:modelValue"]||!1;return j(t)?e=>ae(t,e):t};function Cl(e){e.target.composing=!0}function _l(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const El={created(e,{modifiers:{lazy:t,trim:n,number:r}},o){e._assign=wl(o);const i=r||o.props&&"number"===o.props.type;Aa(e,t?"change":"input",(t=>{if(t.target.composing)return;let r=e.value;n&&(r=r.trim()),i&&(r=se(r)),e._assign(r)})),n&&Aa(e,"change",(()=>{e.value=e.value.trim()})),t||(Aa(e,"compositionstart",Cl),Aa(e,"compositionend",_l),Aa(e,"change",_l))},mounted(e,{value:t}){e.value=null==t?"":t},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:r,number:o}},i){if(e._assign=wl(i),e.composing)return;if(document.activeElement===e&&"range"!==e.type){if(n)return;if(r&&e.value.trim()===t)return;if((o||"number"===e.type)&&se(e.value)===t)return}const a=null==t?"":t;e.value!==a&&(e.value=a)}},xl={deep:!0,created(e,t,n){e._assign=wl(n),Aa(e,"change",(()=>{const t=e._modelValue,n=Pl(e),r=e.checked,o=e._assign;if(j(t)){const e=C(t,n),i=-1!==e;if(r&&!i)o(t.concat(n));else if(!r&&i){const n=[...t];n.splice(e,1),o(n)}}else if(I(t)){const e=new Set(t);r?e.add(n):e.delete(n),o(e)}else o(Tl(e,r))}))},mounted:kl,beforeUpdate(e,t,n){e._assign=wl(n),kl(e,t,n)}};function kl(e,{value:t,oldValue:n},r){e._modelValue=t,j(t)?e.checked=C(t,r.props.value)>-1:I(t)?e.checked=t.has(r.props.value):t!==n&&(e.checked=w(t,Tl(e,!0)))}const Sl={created(e,{value:t},n){e.checked=w(t,n.props.value),e._assign=wl(n),Aa(e,"change",(()=>{e._assign(Pl(e))}))},beforeUpdate(e,{value:t,oldValue:n},r){e._assign=wl(r),t!==n&&(e.checked=w(t,r.props.value))}},Ol={deep:!0,created(e,{value:t,modifiers:{number:n}},r){const o=I(t);Aa(e,"change",(()=>{const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>n?se(Pl(e)):Pl(e)));e._assign(e.multiple?o?new Set(t):t:t[0])})),e._assign=wl(r)},mounted(e,{value:t}){Nl(e,t)},beforeUpdate(e,t,n){e._assign=wl(n)},updated(e,{value:t}){Nl(e,t)}};function Nl(e,t){const n=e.multiple;if(!n||j(t)||I(t)){for(let r=0,o=e.options.length;r-1:o.selected=t.has(i);else if(w(Pl(o),t))return void(e.selectedIndex!==r&&(e.selectedIndex=r))}n||-1===e.selectedIndex||(e.selectedIndex=-1)}}function Pl(e){return"_value"in e?e._value:e.value}function Tl(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Vl={created(e,t,n){Ll(e,t,n,null,"created")},mounted(e,t,n){Ll(e,t,n,null,"mounted")},beforeUpdate(e,t,n,r){Ll(e,t,n,r,"beforeUpdate")},updated(e,t,n,r){Ll(e,t,n,r,"updated")}};function Rl(e,t){switch(e){case"SELECT":return Ol;case"TEXTAREA":return El;default:switch(t){case"checkbox":return xl;case"radio":return Sl;default:return El}}}function Ll(e,t,n,r,o){const i=Rl(e.tagName,n.props&&n.props.type)[o];i&&i(e,t,n,r)}const Al=["ctrl","shift","alt","meta"],jl={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>Al.some((n=>e[`${n}Key`]&&!t.includes(n)))},Bl=(e,t)=>(n,...r)=>{for(let e=0;en=>{if(!("key"in n))return;const r=ne(n.key);return t.some((e=>e===r||Il[e]===r))?e(n):void 0},Fl={beforeMount(e,{value:t},{transition:n}){e._vod="none"===e.style.display?"":e.style.display,n&&t?n.beforeEnter(e):Dl(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),Dl(e,!0),r.enter(e)):r.leave(e,(()=>{Dl(e,!1)})):Dl(e,t))},beforeUnmount(e,{value:t}){Dl(e,t)}};function Dl(e,t){e.style.display=t?e._vod:"none"}const Ul=V({patchProp:(e,t,n,r,o=!1,i,a,l,s)=>{"class"===t?function(e,t,n){const r=e._vtc;r&&(t=(t?[t,...r]:[...r]).join(" ")),null==t?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}(e,r,o):"style"===t?function(e,t,n){const r=e.style,o=U(n);if(n&&!o){if(t&&!U(t))for(const e in t)null==n[e]&&Ta(r,e,"");for(const e in n)Ta(r,e,n[e])}else{const i=r.display;o?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(r.display=i)}}(e,n,r):P(t)?T(t)||ja(e,t,0,r,a):("."===t[0]?(t=t.slice(1),1):"^"===t[0]?(t=t.slice(1),0):function(e,t,n,r){if(r)return"innerHTML"===t||"textContent"===t||!!(t in e&&Da.test(t)&&D(n));if("spellcheck"===t||"draggable"===t||"translate"===t)return!1;if("form"===t)return!1;if("list"===t&&"INPUT"===e.tagName)return!1;if("type"===t&&"TEXTAREA"===e.tagName)return!1;if(Da.test(t)&&U(n))return!1;return t in e}(e,t,r,o))?function(e,t,n,r,o,i,a){if("innerHTML"===t||"textContent"===t)return r&&a(r,o,i),void(e[t]=null==n?"":n);if("value"===t&&"PROGRESS"!==e.tagName&&!e.tagName.includes("-")){e._value=n;const r=null==n?"":n;return e.value===r&&"OPTION"!==e.tagName||(e.value=r),void(null==n&&e.removeAttribute(t))}let l=!1;if(""===n||null==n){const r=typeof e[t];"boolean"===r?n=b(n):null==n&&"string"===r?(n="",l=!0):"number"===r&&(n=0,l=!0)}try{e[t]=n}catch(e){}l&&e.removeAttribute(t)}(e,t,r,i,a,l,s):("true-value"===t?e._trueValue=r:"false-value"===t&&(e._falseValue=r),function(e,t,n,r,o){if(r&&t.startsWith("xlink:"))null==n?e.removeAttributeNS(La,t.slice(6,t.length)):e.setAttributeNS(La,t,n);else{const r=y(t);null==n||r&&!b(n)?e.removeAttribute(t):e.setAttribute(t,r?"":n)}}(e,t,r,o))}},Na);let $l,Hl=!1;function zl(){return $l||($l=Go(Ul))}function ql(){return $l=Hl?$l:Zo(Ul),Hl=!0,$l}const Wl=(...e)=>{zl().render(...e)},Kl=(...e)=>{ql().hydrate(...e)},Gl=(...e)=>{const t=zl().createApp(...e);const{mount:n}=t;return t.mount=e=>{const r=Yl(e);if(!r)return;const o=t._component;D(o)||o.render||o.template||(o.template=r.innerHTML),r.innerHTML="";const i=n(r,!1,r instanceof SVGElement);return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t},Zl=(...e)=>{const t=ql().createApp(...e);const{mount:n}=t;return t.mount=e=>{const t=Yl(e);if(t)return n(t,!0,t instanceof SVGElement)},t};function Yl(e){if(U(e)){return document.querySelector(e)}return e}let Jl=!1;const Ql=()=>{Jl||(Jl=!0,El.getSSRProps=({value:e})=>({value:e}),Sl.getSSRProps=({value:e},t)=>{if(t.props&&w(t.props.value,e))return{checked:!0}},xl.getSSRProps=({value:e},t)=>{if(j(e)){if(t.props&&C(e,t.props.value)>-1)return{checked:!0}}else if(I(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},Vl.getSSRProps=(e,t)=>{if("string"!=typeof t.type)return;const n=Rl(t.type.toUpperCase(),t.props&&t.props.type);return n.getSSRProps?n.getSSRProps(e,t):void 0},Fl.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}})};function Xl(e){throw e}function es(e){}function ts(e,t,n,r){const o=new SyntaxError(String(e));return o.code=e,o.loc=t,o}const ns=Symbol(""),rs=Symbol(""),os=Symbol(""),is=Symbol(""),as=Symbol(""),ls=Symbol(""),ss=Symbol(""),cs=Symbol(""),us=Symbol(""),fs=Symbol(""),ds=Symbol(""),ps=Symbol(""),hs=Symbol(""),vs=Symbol(""),ms=Symbol(""),gs=Symbol(""),ys=Symbol(""),bs=Symbol(""),ws=Symbol(""),Cs=Symbol(""),_s=Symbol(""),Es=Symbol(""),xs=Symbol(""),ks=Symbol(""),Ss=Symbol(""),Os=Symbol(""),Ns=Symbol(""),Ps=Symbol(""),Ts=Symbol(""),Vs=Symbol(""),Rs=Symbol(""),Ls=Symbol(""),As=Symbol(""),js=Symbol(""),Bs=Symbol(""),Is=Symbol(""),Ms=Symbol(""),Fs=Symbol(""),Ds=Symbol(""),Us={[ns]:"Fragment",[rs]:"Teleport",[os]:"Suspense",[is]:"KeepAlive",[as]:"BaseTransition",[ls]:"openBlock",[ss]:"createBlock",[cs]:"createElementBlock",[us]:"createVNode",[fs]:"createElementVNode",[ds]:"createCommentVNode",[ps]:"createTextVNode",[hs]:"createStaticVNode",[vs]:"resolveComponent",[ms]:"resolveDynamicComponent",[gs]:"resolveDirective",[ys]:"resolveFilter",[bs]:"withDirectives",[ws]:"renderList",[Cs]:"renderSlot",[_s]:"createSlots",[Es]:"toDisplayString",[xs]:"mergeProps",[ks]:"normalizeClass",[Ss]:"normalizeStyle",[Os]:"normalizeProps",[Ns]:"guardReactiveProps",[Ps]:"toHandlers",[Ts]:"camelize",[Vs]:"capitalize",[Rs]:"toHandlerKey",[Ls]:"setBlockTracking",[As]:"pushScopeId",[js]:"popScopeId",[Bs]:"withCtx",[Is]:"unref",[Ms]:"isRef",[Fs]:"withMemo",[Ds]:"isMemoSame"};const $s={source:"",start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}};function Hs(e,t,n,r,o,i,a,l=!1,s=!1,c=!1,u=$s){return e&&(l?(e.helper(ls),e.helper(yc(e.inSSR,c))):e.helper(gc(e.inSSR,c)),a&&e.helper(bs)),{type:13,tag:t,props:n,children:r,patchFlag:o,dynamicProps:i,directives:a,isBlock:l,disableTracking:s,isComponent:c,loc:u}}function zs(e,t=$s){return{type:17,loc:t,elements:e}}function qs(e,t=$s){return{type:15,loc:t,properties:e}}function Ws(e,t){return{type:16,loc:$s,key:U(e)?Ks(e,!0):e,value:t}}function Ks(e,t=!1,n=$s,r=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:r}}function Gs(e,t=$s){return{type:8,loc:t,children:e}}function Zs(e,t=[],n=$s){return{type:14,loc:n,callee:e,arguments:t}}function Ys(e,t,n=!1,r=!1,o=$s){return{type:18,params:e,returns:t,newline:n,isSlot:r,loc:o}}function Js(e,t,n,r=!0){return{type:19,test:e,consequent:t,alternate:n,newline:r,loc:$s}}const Qs=e=>4===e.type&&e.isStatic,Xs=(e,t)=>e===t||e===ne(t);function ec(e){return Xs(e,"Teleport")?rs:Xs(e,"Suspense")?os:Xs(e,"KeepAlive")?is:Xs(e,"BaseTransition")?as:void 0}const tc=/^\d|[^\$\w]/,nc=e=>!tc.test(e),rc=/[A-Za-z_$\xA0-\uFFFF]/,oc=/[\.\?\w$\xA0-\uFFFF]/,ic=/\s+[.[]\s*|\s*[.[]\s+/g,ac=e=>{e=e.trim().replace(ic,(e=>e.trim()));let t=0,n=[],r=0,o=0,i=null;for(let a=0;a4===e.key.type&&e.key.content===r))}return n}function Ec(e,t){return`_${t}_${e.replace(/[^\w]/g,((t,n)=>"-"===t?"_":e.charCodeAt(n).toString()))}`}function xc(e,{helper:t,removeHelper:n,inSSR:r}){e.isBlock||(e.isBlock=!0,n(gc(r,e.isComponent)),t(ls),t(yc(r,e.isComponent)))}function kc(e,t){const n=t.options?t.options.compatConfig:t.compatConfig,r=n&&n[e];return"MODE"===e?r||3:r}function Sc(e,t){const n=kc("MODE",t),r=kc(e,t);return 3===n?!0===r:!1!==r}function Oc(e,t,n,...r){return Sc(e,t)}const Nc=/&(gt|lt|amp|apos|quot);/g,Pc={gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},Tc={delimiters:["{{","}}"],getNamespace:()=>0,getTextMode:()=>0,isVoidTag:O,isPreTag:O,isCustomElement:O,decodeEntities:e=>e.replace(Nc,((e,t)=>Pc[t])),onError:Xl,onWarn:es,comments:!1};function Vc(e,t={}){const n=function(e,t){const n=V({},Tc);let r;for(r in t)n[r]=void 0===t[r]?Tc[r]:t[r];return{options:n,column:1,line:1,offset:0,originalSource:e,source:e,inPre:!1,inVPre:!1,onWarn:n.onWarn}}(e,t),r=qc(n);return function(e,t=$s){return{type:0,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:0,temps:0,codegenNode:void 0,loc:t}}(Rc(n,0,[]),Wc(n,r))}function Rc(e,t,n){const r=Kc(n),o=r?r.ns:0,i=[];for(;!Xc(e,t,n);){const a=e.source;let l;if(0===t||1===t)if(!e.inVPre&&Gc(a,e.options.delimiters[0]))l=$c(e,t);else if(0===t&&"<"===a[0])if(1===a.length)Qc(e,5,1);else if("!"===a[1])Gc(a,"\x3c!--")?l=jc(e):Gc(a,""===a[2]){Qc(e,14,2),Zc(e,3);continue}if(/[a-z]/i.test(a[2])){Qc(e,23),Fc(e,1,r);continue}Qc(e,12,2),l=Bc(e)}else/[a-z]/i.test(a[1])?(l=Ic(e,n),Sc("COMPILER_NATIVE_TEMPLATE",e)&&l&&"template"===l.tag&&!l.props.some((e=>7===e.type&&Mc(e.name)))&&(l=l.children)):"?"===a[1]?(Qc(e,21,1),l=Bc(e)):Qc(e,12,1);if(l||(l=Hc(e,t)),j(l))for(let e=0;e/.exec(e.source);if(r){r.index<=3&&Qc(e,0),r[1]&&Qc(e,10),n=e.source.slice(4,r.index);const t=e.source.slice(0,r.index);let o=1,i=0;for(;-1!==(i=t.indexOf("\x3c!--",o));)Zc(e,i-o+1),i+4");return-1===o?(r=e.source.slice(n),Zc(e,e.source.length)):(r=e.source.slice(n,o),Zc(e,o+1)),{type:3,content:r,loc:Wc(e,t)}}function Ic(e,t){const n=e.inPre,r=e.inVPre,o=Kc(t),i=Fc(e,0,o),a=e.inPre&&!n,l=e.inVPre&&!r;if(i.isSelfClosing||e.options.isVoidTag(i.tag))return a&&(e.inPre=!1),l&&(e.inVPre=!1),i;t.push(i);const s=e.options.getTextMode(i,o),c=Rc(e,s,t);t.pop();{const t=i.props.find((e=>6===e.type&&"inline-template"===e.name));if(t&&Oc("COMPILER_INLINE_TEMPLATE",e,t.loc)){const n=Wc(e,i.loc.end);t.value={type:2,content:n.source,loc:n}}}if(i.children=c,eu(e.source,i.tag))Fc(e,1,o);else if(Qc(e,24,0,i.loc.start),0===e.source.length&&"script"===i.tag.toLowerCase()){const t=c[0];t&&Gc(t.loc.source,"\x3c!--")&&Qc(e,8)}return i.loc=Wc(e,i.loc.start),a&&(e.inPre=!1),l&&(e.inVPre=!1),i}const Mc=o("if,else,else-if,for,slot");function Fc(e,t,n){const r=qc(e),o=/^<\/?([a-z][^\t\r\n\f />]*)/i.exec(e.source),i=o[1],a=e.options.getNamespace(i,n);Zc(e,o[0].length),Yc(e);const l=qc(e),s=e.source;e.options.isPreTag(i)&&(e.inPre=!0);let c=Dc(e,t);0===t&&!e.inVPre&&c.some((e=>7===e.type&&"pre"===e.name))&&(e.inVPre=!0,V(e,l),e.source=s,c=Dc(e,t).filter((e=>"v-pre"!==e.name)));let u=!1;if(0===e.source.length?Qc(e,9):(u=Gc(e.source,"/>"),1===t&&u&&Qc(e,4),Zc(e,u?2:1)),1===t)return;let f=0;return e.inVPre||("slot"===i?f=2:"template"===i?c.some((e=>7===e.type&&Mc(e.name)))&&(f=3):function(e,t,n){const r=n.options;if(r.isCustomElement(e))return!1;if("component"===e||/^[A-Z]/.test(e)||ec(e)||r.isBuiltInComponent&&r.isBuiltInComponent(e)||r.isNativeTag&&!r.isNativeTag(e))return!0;for(let e=0;e0&&!Gc(e.source,">")&&!Gc(e.source,"/>");){if(Gc(e.source,"/")){Qc(e,22),Zc(e,1),Yc(e);continue}1===t&&Qc(e,3);const o=Uc(e,r);6===o.type&&o.value&&"class"===o.name&&(o.value.content=o.value.content.replace(/\s+/g," ").trim()),0===t&&n.push(o),/^[^\t\r\n\f />]/.test(e.source)&&Qc(e,15),Yc(e)}return n}function Uc(e,t){const n=qc(e),r=/^[^\t\r\n\f />][^\t\r\n\f />=]*/.exec(e.source)[0];t.has(r)&&Qc(e,2),t.add(r),"="===r[0]&&Qc(e,19);{const t=/["'<]/g;let n;for(;n=t.exec(r);)Qc(e,17,n.index)}let o;Zc(e,r.length),/^[\t\r\n\f ]*=/.test(e.source)&&(Yc(e),Zc(e,1),Yc(e),o=function(e){const t=qc(e);let n;const r=e.source[0],o='"'===r||"'"===r;if(o){Zc(e,1);const t=e.source.indexOf(r);-1===t?n=zc(e,e.source.length,4):(n=zc(e,t,4),Zc(e,1))}else{const t=/^[^\t\r\n\f >]+/.exec(e.source);if(!t)return;const r=/["'<=`]/g;let o;for(;o=r.exec(t[0]);)Qc(e,18,o.index);n=zc(e,t[0].length,4)}return{content:n,isQuoted:o,loc:Wc(e,t)}}(e),o||Qc(e,13));const i=Wc(e,n);if(!e.inVPre&&/^(v-[A-Za-z0-9-]|:|\.|@|#)/.test(r)){const t=/(?:^v-([a-z0-9-]+))?(?:(?::|^\.|^@|^#)(\[[^\]]+\]|[^\.]+))?(.+)?$/i.exec(r);let a,l=Gc(r,"."),s=t[1]||(l||Gc(r,":")?"bind":Gc(r,"@")?"on":"slot");if(t[2]){const o="slot"===s,i=r.lastIndexOf(t[2]),l=Wc(e,Jc(e,n,i),Jc(e,n,i+t[2].length+(o&&t[3]||"").length));let c=t[2],u=!0;c.startsWith("[")?(u=!1,c.endsWith("]")?c=c.slice(1,c.length-1):(Qc(e,27),c=c.slice(1))):o&&(c+=t[3]||""),a={type:4,content:c,isStatic:u,constType:u?3:0,loc:l}}if(o&&o.isQuoted){const e=o.loc;e.start.offset++,e.start.column++,e.end=sc(e.start,o.content),e.source=e.source.slice(1,-1)}const c=t[3]?t[3].slice(1).split("."):[];return l&&c.push("prop"),"bind"===s&&a&&c.includes("sync")&&Oc("COMPILER_V_BIND_SYNC",e,0,a.loc.source)&&(s="model",c.splice(c.indexOf("sync"),1)),{type:7,name:s,exp:o&&{type:4,content:o.content,isStatic:!1,constType:0,loc:o.loc},arg:a,modifiers:c,loc:i}}return!e.inVPre&&Gc(r,"v-")&&Qc(e,26),{type:6,name:r,value:o&&{type:2,content:o.content,loc:o.loc},loc:i}}function $c(e,t){const[n,r]=e.options.delimiters,o=e.source.indexOf(r,n.length);if(-1===o)return void Qc(e,25);const i=qc(e);Zc(e,n.length);const a=qc(e),l=qc(e),s=o-n.length,c=e.source.slice(0,s),u=zc(e,s,t),f=u.trim(),d=u.indexOf(f);d>0&&cc(a,c,d);return cc(l,c,s-(u.length-f.length-d)),Zc(e,r.length),{type:5,content:{type:4,isStatic:!1,constType:0,content:f,loc:Wc(e,a,l)},loc:Wc(e,i)}}function Hc(e,t){const n=3===t?["]]>"]:["<",e.options.delimiters[0]];let r=e.source.length;for(let t=0;to&&(r=o)}const o=qc(e);return{type:2,content:zc(e,r,t),loc:Wc(e,o)}}function zc(e,t,n){const r=e.source.slice(0,t);return Zc(e,t),2!==n&&3!==n&&r.includes("&")?e.options.decodeEntities(r,4===n):r}function qc(e){const{column:t,line:n,offset:r}=e;return{column:t,line:n,offset:r}}function Wc(e,t,n){return{start:t,end:n=n||qc(e),source:e.originalSource.slice(t.offset,n.offset)}}function Kc(e){return e[e.length-1]}function Gc(e,t){return e.startsWith(t)}function Zc(e,t){const{source:n}=e;cc(e,n,t),e.source=n.slice(t)}function Yc(e){const t=/^[\t\r\n\f ]+/.exec(e.source);t&&Zc(e,t[0].length)}function Jc(e,t,n){return sc(t,e.originalSource.slice(t.offset,n),n)}function Qc(e,t,n,r=qc(e)){n&&(r.offset+=n,r.column+=n),e.options.onError(ts(t,{start:r,end:r,source:""}))}function Xc(e,t,n){const r=e.source;switch(t){case 0:if(Gc(r,"=0;--e)if(eu(r,n[e].tag))return!0;break;case 1:case 2:{const e=Kc(n);if(e&&eu(r,e.tag))return!0;break}case 3:if(Gc(r,"]]>"))return!0}return!r}function eu(e,t){return Gc(e,"]/.test(e[2+t.length]||">")}function tu(e,t){ru(e,t,nu(e,e.children[0]))}function nu(e,t){const{children:n}=e;return 1===n.length&&1===t.type&&!mc(t)}function ru(e,t,n=!1){const{children:r}=e,o=r.length;let i=0;for(let e=0;e0){if(e>=2){o.codegenNode.patchFlag="-1",o.codegenNode=t.hoist(o.codegenNode),i++;continue}}else{const e=o.codegenNode;if(13===e.type){const n=cu(e);if((!n||512===n||1===n)&&lu(o,t)>=2){const n=su(o);n&&(e.props=t.hoist(n))}e.dynamicProps&&(e.dynamicProps=t.hoist(e.dynamicProps))}}}if(1===o.type){const e=1===o.tagType;e&&t.scopes.vSlot++,ru(o,t),e&&t.scopes.vSlot--}else if(11===o.type)ru(o,t,1===o.children.length);else if(9===o.type)for(let e=0;e1)for(let o=0;o`_${Us[E.helper(e)]}`,replaceNode(e){E.parent.children[E.childIndex]=E.currentNode=e},removeNode(e){const t=E.parent.children,n=e?t.indexOf(e):E.currentNode?E.childIndex:-1;e&&e!==E.currentNode?E.childIndex>n&&(E.childIndex--,E.onNodeRemoved()):(E.currentNode=null,E.onNodeRemoved()),E.parent.children.splice(n,1)},onNodeRemoved:()=>{},addIdentifiers(e){},removeIdentifiers(e){},hoist(e){U(e)&&(e=Ks(e)),E.hoists.push(e);const t=Ks(`_hoisted_${E.hoists.length}`,!1,e.loc,2);return t.hoisted=e,t},cache:(e,t=!1)=>function(e,t,n=!1){return{type:20,index:e,value:t,isVNode:n,loc:$s}}(E.cached++,e,t)};return E.filters=new Set,E}function fu(e,t){const n=uu(e,t);du(e,n),t.hoistStatic&&tu(e,n),t.ssr||function(e,t){const{helper:n}=t,{children:r}=e;if(1===r.length){const n=r[0];if(nu(e,n)&&n.codegenNode){const r=n.codegenNode;13===r.type&&xc(r,t),e.codegenNode=r}else e.codegenNode=n}else if(r.length>1){let r=64;i[64];0,e.codegenNode=Hs(t,n(ns),void 0,e.children,r+"",void 0,void 0,!0,void 0,!1)}}(e,n),e.helpers=new Set([...n.helpers.keys()]),e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached,e.filters=[...n.filters]}function du(e,t){t.currentNode=e;const{nodeTransforms:n}=t,r=[];for(let o=0;o{n--};for(;nt===e:t=>e.test(t);return(e,r)=>{if(1===e.type){const{props:o}=e;if(3===e.tagType&&o.some(hc))return;const i=[];for(let a=0;a`${Us[e]}: _${Us[e]}`;function mu(e,{mode:t="function",prefixIdentifiers:n="module"===t,sourceMap:r=!1,filename:o="template.vue.html",scopeId:i=null,optimizeImports:a=!1,runtimeGlobalName:l="Vue",runtimeModuleName:s="vue",ssrRuntimeModuleName:c="vue/server-renderer",ssr:u=!1,isTS:f=!1,inSSR:d=!1}){const p={mode:t,prefixIdentifiers:n,sourceMap:r,filename:o,scopeId:i,optimizeImports:a,runtimeGlobalName:l,runtimeModuleName:s,ssrRuntimeModuleName:c,ssr:u,isTS:f,inSSR:d,source:e.loc.source,code:"",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper:e=>`_${Us[e]}`,push(e,t){p.code+=e},indent(){h(++p.indentLevel)},deindent(e=!1){e?--p.indentLevel:h(--p.indentLevel)},newline(){h(p.indentLevel)}};function h(e){p.push("\n"+" ".repeat(e))}return p}function gu(e,t={}){const n=mu(e,t);t.onContextCreated&&t.onContextCreated(n);const{mode:r,push:o,prefixIdentifiers:i,indent:a,deindent:l,newline:s,scopeId:c,ssr:u}=n,f=Array.from(e.helpers),d=f.length>0,p=!i&&"module"!==r,h=n;!function(e,t){const{ssr:n,prefixIdentifiers:r,push:o,newline:i,runtimeModuleName:a,runtimeGlobalName:l,ssrRuntimeModuleName:s}=t,c=l,u=Array.from(e.helpers);if(u.length>0&&(o(`const _Vue = ${c}\n`),e.hoists.length)){o(`const { ${[us,fs,ds,ps,hs].filter((e=>u.includes(e))).map(vu).join(", ")} } = _Vue\n`)}(function(e,t){if(!e.length)return;t.pure=!0;const{push:n,newline:r,helper:o,scopeId:i,mode:a}=t;r();for(let o=0;o0)&&s()),e.directives.length&&(yu(e.directives,"directive",n),e.temps>0&&s()),e.filters&&e.filters.length&&(s(),yu(e.filters,"filter",n),s()),e.temps>0){o("let ");for(let t=0;t0?", ":""}_temp${t}`)}return(e.components.length||e.directives.length||e.temps)&&(o("\n"),s()),u||o("return "),e.codegenNode?Cu(e.codegenNode,n):o("null"),p&&(l(),o("}")),l(),o("}"),{ast:e,code:n.code,preamble:"",map:n.map?n.map.toJSON():void 0}}function yu(e,t,{helper:n,push:r,newline:o,isTS:i}){const a=n("filter"===t?ys:"component"===t?vs:gs);for(let n=0;n3||!1;t.push("["),n&&t.indent(),wu(e,t,n),n&&t.deindent(),t.push("]")}function wu(e,t,n=!1,r=!0){const{push:o,newline:i}=t;for(let a=0;ae||"null"))}([i,a,l,s,c]),t),n(")"),f&&n(")");u&&(n(", "),Cu(u,t),n(")"))}(e,t);break;case 14:!function(e,t){const{push:n,helper:r,pure:o}=t,i=U(e.callee)?e.callee:r(e.callee);o&&n(hu);n(i+"(",e),wu(e.arguments,t),n(")")}(e,t);break;case 15:!function(e,t){const{push:n,indent:r,deindent:o,newline:i}=t,{properties:a}=e;if(!a.length)return void n("{}",e);const l=a.length>1||!1;n(l?"{":"{ "),l&&r();for(let e=0;e "),(s||l)&&(n("{"),r());a?(s&&n("return "),j(a)?bu(a,t):Cu(a,t)):l&&Cu(l,t);(s||l)&&(o(),n("}"));c&&(e.isNonScopedSlot&&n(", undefined, true"),n(")"))}(e,t);break;case 19:!function(e,t){const{test:n,consequent:r,alternate:o,newline:i}=e,{push:a,indent:l,deindent:s,newline:c}=t;if(4===n.type){const e=!nc(n.content);e&&a("("),_u(n,t),e&&a(")")}else a("("),Cu(n,t),a(")");i&&l(),t.indentLevel++,i||a(" "),a("? "),Cu(r,t),t.indentLevel--,i&&c(),i||a(" "),a(": ");const u=19===o.type;u||t.indentLevel++;Cu(o,t),u||t.indentLevel--;i&&s(!0)}(e,t);break;case 20:!function(e,t){const{push:n,helper:r,indent:o,deindent:i,newline:a}=t;n(`_cache[${e.index}] || (`),e.isVNode&&(o(),n(`${r(Ls)}(-1),`),a());n(`_cache[${e.index}] = `),Cu(e.value,t),e.isVNode&&(n(","),a(),n(`${r(Ls)}(1),`),a(),n(`_cache[${e.index}]`),i());n(")")}(e,t);break;case 21:wu(e.body,t,!0,!1)}}function _u(e,t){const{content:n,isStatic:r}=e;t.push(r?JSON.stringify(n):n,e)}function Eu(e,t){for(let n=0;nfunction(e,t,n,r){if(!("else"===t.name||t.exp&&t.exp.content.trim())){const r=t.exp?t.exp.loc:e.loc;n.onError(ts(28,t.loc)),t.exp=Ks("true",!1,r)}0;if("if"===t.name){const o=Su(e,t),i={type:9,loc:e.loc,branches:[o]};if(n.replaceNode(i),r)return r(i,o,!0)}else{const o=n.parent.children;let i=o.indexOf(e);for(;i-- >=-1;){const a=o[i];if(a&&3===a.type)n.removeNode(a);else{if(!a||2!==a.type||a.content.trim().length){if(a&&9===a.type){"else-if"===t.name&&void 0===a.branches[a.branches.length-1].condition&&n.onError(ts(30,e.loc)),n.removeNode();const o=Su(e,t);0,a.branches.push(o);const i=r&&r(a,o,!1);du(o,n),i&&i(),n.currentNode=null}else n.onError(ts(30,e.loc));break}n.removeNode(a)}}}}(e,t,n,((e,t,r)=>{const o=n.parent.children;let i=o.indexOf(e),a=0;for(;i-- >=0;){const e=o[i];e&&9===e.type&&(a+=e.branches.length)}return()=>{if(r)e.codegenNode=Ou(t,a,n);else{const r=function(e){for(;;)if(19===e.type){if(19!==e.alternate.type)return e;e=e.alternate}else 20===e.type&&(e=e.value)}(e.codegenNode);r.alternate=Ou(t,a+e.branches.length-1,n)}}}))));function Su(e,t){const n=3===e.tagType;return{type:10,loc:e.loc,condition:"else"===t.name?void 0:t.exp,children:n&&!uc(e,"for")?e.children:[e],userKey:fc(e,"key"),isTemplateIf:n}}function Ou(e,t,n){return e.condition?Js(e.condition,Nu(e,t,n),Zs(n.helper(ds),['""',"true"])):Nu(e,t,n)}function Nu(e,t,n){const{helper:r}=n,o=Ws("key",Ks(`${t}`,!1,$s,2)),{children:a}=e,l=a[0];if(1!==a.length||1!==l.type){if(1===a.length&&11===l.type){const e=l.codegenNode;return Cc(e,o,n),e}{let t=64;i[64];return Hs(n,r(ns),qs([o]),a,t+"",void 0,void 0,!0,!1,!1,e.loc)}}{const e=l.codegenNode,t=14===(s=e).type&&s.callee===Fs?s.arguments[1].returns:s;return 13===t.type&&xc(t,n),Cc(t,o,n),e}var s}const Pu=pu("for",((e,t,n)=>{const{helper:r,removeHelper:o}=n;return function(e,t,n,r){if(!t.exp)return void n.onError(ts(31,t.loc));const o=Lu(t.exp,n);if(!o)return void n.onError(ts(32,t.loc));const{addIdentifiers:i,removeIdentifiers:a,scopes:l}=n,{source:s,value:c,key:u,index:f}=o,d={type:11,loc:t.loc,source:s,valueAlias:c,keyAlias:u,objectIndexAlias:f,parseResult:o,children:vc(e)?e.children:[e]};n.replaceNode(d),l.vFor++;const p=r&&r(d);return()=>{l.vFor--,p&&p()}}(e,t,n,(t=>{const i=Zs(r(ws),[t.source]),a=vc(e),l=uc(e,"memo"),s=fc(e,"key"),c=s&&(6===s.type?Ks(s.value.content,!0):s.exp),u=s?Ws("key",c):null,f=4===t.source.type&&t.source.constType>0,d=f?64:s?128:256;return t.codegenNode=Hs(n,r(ns),void 0,i,d+"",void 0,void 0,!0,!f,!1,e.loc),()=>{let s;const{children:d}=t;const p=1!==d.length||1!==d[0].type,h=mc(e)?e:a&&1===e.children.length&&mc(e.children[0])?e.children[0]:null;if(h?(s=h.codegenNode,a&&u&&Cc(s,u,n)):p?s=Hs(n,r(ns),u?qs([u]):void 0,e.children,"64",void 0,void 0,!0,void 0,!1):(s=d[0].codegenNode,a&&u&&Cc(s,u,n),s.isBlock!==!f&&(s.isBlock?(o(ls),o(yc(n.inSSR,s.isComponent))):o(gc(n.inSSR,s.isComponent))),s.isBlock=!f,s.isBlock?(r(ls),r(yc(n.inSSR,s.isComponent))):r(gc(n.inSSR,s.isComponent))),l){const e=Ys(ju(t.parseResult,[Ks("_cached")]));e.body={type:21,body:[Gs(["const _memo = (",l.exp,")"]),Gs(["if (_cached",...c?[" && _cached.key === ",c]:[],` && ${n.helperString(Ds)}(_cached, _memo)) return _cached`]),Gs(["const _item = ",s]),Ks("_item.memo = _memo"),Ks("return _item")],loc:$s},i.arguments.push(e,Ks("_cache"),Ks(String(n.cached++)))}else i.arguments.push(Ys(ju(t.parseResult),s,!0))}}))}));const Tu=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Vu=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Ru=/^\(|\)$/g;function Lu(e,t){const n=e.loc,r=e.content,o=r.match(Tu);if(!o)return;const[,i,a]=o,l={source:Au(n,a.trim(),r.indexOf(a,i.length)),value:void 0,key:void 0,index:void 0};let s=i.trim().replace(Ru,"").trim();const c=i.indexOf(s),u=s.match(Vu);if(u){s=s.replace(Vu,"").trim();const e=u[1].trim();let t;if(e&&(t=r.indexOf(e,c+s.length),l.key=Au(n,e,t)),u[2]){const o=u[2].trim();o&&(l.index=Au(n,o,r.indexOf(o,l.key?t+e.length:c+s.length)))}}return s&&(l.value=Au(n,s,c)),l}function Au(e,t,n){return Ks(t,!1,lc(e,n,t.length))}function ju({value:e,key:t,index:n},r=[]){return function(e){let t=e.length;for(;t--&&!e[t];);return e.slice(0,t+1).map(((e,t)=>e||Ks("_".repeat(t+1),!1)))}([e,t,n,...r])}const Bu=Ks("undefined",!1),Iu=(e,t)=>{if(1===e.type&&(1===e.tagType||3===e.tagType)){const n=uc(e,"slot");if(n)return n.exp,t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},Mu=(e,t,n)=>Ys(e,t,!1,!0,t.length?t[0].loc:n);function Fu(e,t,n=Mu){t.helper(Bs);const{children:r,loc:o}=e,i=[],a=[];let l=t.scopes.vSlot>0||t.scopes.vFor>0;const s=uc(e,"slot",!0);if(s){const{arg:e,exp:t}=s;e&&!Qs(e)&&(l=!0),i.push(Ws(e||Ks("default",!0),n(t,r,o)))}let c=!1,u=!1;const f=[],d=new Set;let p=0;for(let e=0;e{const i=n(e,r,o);return t.compatConfig&&(i.isNonScopedSlot=!0),Ws("default",i)};c?f.length&&f.some((e=>$u(e)))&&(u?t.onError(ts(39,f[0].loc)):i.push(e(void 0,f))):i.push(e(void 0,r))}const h=l?2:Uu(e.children)?3:1;let v=qs(i.concat(Ws("_",Ks(h+"",!1))),o);return a.length&&(v=Zs(t.helper(_s),[v,zs(a)])),{slots:v,hasDynamicSlots:l}}function Du(e,t,n){const r=[Ws("name",e),Ws("fn",t)];return null!=n&&r.push(Ws("key",Ks(String(n),!0))),qs(r)}function Uu(e){for(let t=0;tfunction(){if(1!==(e=t.currentNode).type||0!==e.tagType&&1!==e.tagType)return;const{tag:n,props:r}=e,o=1===e.tagType;let i=o?function(e,t,n=!1){let{tag:r}=e;const o=Gu(r),i=fc(e,"is");if(i)if(o||Sc("COMPILER_IS_ON_ELEMENT",t)){const e=6===i.type?i.value&&Ks(i.value.content,!0):i.exp;if(e)return Zs(t.helper(ms),[e])}else 6===i.type&&i.value.content.startsWith("vue:")&&(r=i.value.content.slice(4));const a=!o&&uc(e,"is");if(a&&a.exp)return Zs(t.helper(ms),[a.exp]);const l=ec(r)||t.isBuiltInComponent(r);if(l)return n||t.helper(l),l;return t.helper(vs),t.components.add(r),Ec(r,"component")}(e,t):`"${n}"`;const a=H(i)&&i.callee===ms;let l,s,c,u,f,d,p=0,h=a||i===rs||i===os||!o&&("svg"===n||"foreignObject"===n);if(r.length>0){const n=qu(e,t,void 0,o,a);l=n.props,p=n.patchFlag,f=n.dynamicPropNames;const r=n.directives;d=r&&r.length?zs(r.map((e=>function(e,t){const n=[],r=Hu.get(e);r?n.push(t.helperString(r)):(t.helper(gs),t.directives.add(e.name),n.push(Ec(e.name,"directive")));const{loc:o}=e;e.exp&&n.push(e.exp);e.arg&&(e.exp||n.push("void 0"),n.push(e.arg));if(Object.keys(e.modifiers).length){e.arg||(e.exp||n.push("void 0"),n.push("void 0"));const t=Ks("true",!1,o);n.push(qs(e.modifiers.map((e=>Ws(e,t))),o))}return zs(n,e.loc)}(e,t)))):void 0,n.shouldUseBlock&&(h=!0)}if(e.children.length>0){i===is&&(h=!0,p|=1024);if(o&&i!==rs&&i!==is){const{slots:n,hasDynamicSlots:r}=Fu(e,t);s=n,r&&(p|=1024)}else if(1===e.children.length&&i!==rs){const n=e.children[0],r=n.type,o=5===r||8===r;o&&0===ou(n,t)&&(p|=1),s=o||2===r?n:e.children}else s=e.children}0!==p&&(c=String(p),f&&f.length&&(u=function(e){let t="[";for(let n=0,r=e.length;n0;let p=!1,h=0,v=!1,m=!1,g=!1,y=!1,b=!1,w=!1;const C=[],_=e=>{c.length&&(u.push(qs(Wu(c),l)),c=[]),e&&u.push(e)},E=({key:e,value:n})=>{if(Qs(e)){const i=e.content,a=P(i);if(!a||r&&!o||"onclick"===i.toLowerCase()||"onUpdate:modelValue"===i||Y(i)||(y=!0),a&&Y(i)&&(w=!0),20===n.type||(4===n.type||8===n.type)&&ou(n,t)>0)return;"ref"===i?v=!0:"class"===i?m=!0:"style"===i?g=!0:"key"===i||C.includes(i)||C.push(i),!r||"class"!==i&&"style"!==i||C.includes(i)||C.push(i)}else b=!0};for(let o=0;o0&&c.push(Ws(Ks("ref_for",!0),Ks("true")))),"is"===n&&(Gu(a)||r&&r.content.startsWith("vue:")||Sc("COMPILER_IS_ON_ELEMENT",t)))continue;c.push(Ws(Ks(n,!0,lc(e,0,n.length)),Ks(r?r.content:"",o,r?r.loc:e)))}else{const{name:n,arg:o,exp:h,loc:v}=s,m="bind"===n,g="on"===n;if("slot"===n){r||t.onError(ts(40,v));continue}if("once"===n||"memo"===n)continue;if("is"===n||m&&dc(o,"is")&&(Gu(a)||Sc("COMPILER_IS_ON_ELEMENT",t)))continue;if(g&&i)continue;if((m&&dc(o,"key")||g&&d&&dc(o,"vue:before-update"))&&(p=!0),m&&dc(o,"ref")&&t.scopes.vFor>0&&c.push(Ws(Ks("ref_for",!0),Ks("true"))),!o&&(m||g)){if(b=!0,h)if(m){if(_(),Sc("COMPILER_V_BIND_OBJECT_ORDER",t)){u.unshift(h);continue}u.push(h)}else _({type:14,loc:v,callee:t.helper(Ps),arguments:r?[h]:[h,"true"]});else t.onError(ts(m?34:35,v));continue}const y=t.directiveTransforms[n];if(y){const{props:n,needRuntime:r}=y(s,e,t);!i&&n.forEach(E),g&&o&&!Qs(o)?_(qs(n,l)):c.push(...n),r&&(f.push(s),$(r)&&Hu.set(s,r))}else J(n)||(f.push(s),d&&(p=!0))}}let x;if(u.length?(_(),x=u.length>1?Zs(t.helper(xs),u,l):u[0]):c.length&&(x=qs(Wu(c),l)),b?h|=16:(m&&!r&&(h|=2),g&&!r&&(h|=4),C.length&&(h|=8),y&&(h|=32)),p||0!==h&&32!==h||!(v||w||f.length>0)||(h|=512),!t.inSSR&&x)switch(x.type){case 15:let e=-1,n=-1,r=!1;for(let t=0;t{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))})((e=>e.replace(Zu,((e,t)=>t?t.toUpperCase():"")))),Ju=(e,t)=>{if(mc(e)){const{children:n,loc:r}=e,{slotName:o,slotProps:i}=function(e,t){let n,r='"default"';const o=[];for(let t=0;t0){const{props:r,directives:i}=qu(e,t,o,!1,!1);n=r,i.length&&t.onError(ts(36,i[0].loc))}return{slotName:r,slotProps:n}}(e,t),a=[t.prefixIdentifiers?"_ctx.$slots":"$slots",o,"{}","undefined","true"];let l=2;i&&(a[2]=i,l=3),n.length&&(a[3]=Ys([],n,!1,!1,r),l=4),t.scopeId&&!t.slotted&&(l=5),a.splice(l),e.codegenNode=Zs(t.helper(Cs),a,r)}};const Qu=/^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*(:[^=]+)?=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/,Xu=(e,t,n,r)=>{const{loc:o,modifiers:i,arg:a}=e;let l;if(e.exp||i.length||n.onError(ts(35,o)),4===a.type)if(a.isStatic){let e=a.content;e.startsWith("vue:")&&(e=`vnode-${e.slice(4)}`);l=Ks(0!==t.tagType||e.startsWith("vnode")||!/[A-Z]/.test(e)?oe(ee(e)):`on:${e}`,!0,a.loc)}else l=Gs([`${n.helperString(Rs)}(`,a,")"]);else l=a,l.children.unshift(`${n.helperString(Rs)}(`),l.children.push(")");let s=e.exp;s&&!s.content.trim()&&(s=void 0);let c=n.cacheHandlers&&!s&&!n.inVOnce;if(s){const e=ac(s.content),t=!(e||Qu.test(s.content)),n=s.content.includes(";");0,(t||c&&e)&&(s=Gs([`${t?"$event":"(...args)"} => ${n?"{":"("}`,s,n?"}":")"]))}let u={props:[Ws(l,s||Ks("() => {}",!1,o))]};return r&&(u=r(u)),c&&(u.props[0].value=n.cache(u.props[0].value)),u.props.forEach((e=>e.key.isHandlerKey=!0)),u},ef=(e,t,n)=>{const{exp:r,modifiers:o,loc:i}=e,a=e.arg;return 4!==a.type?(a.children.unshift("("),a.children.push(') || ""')):a.isStatic||(a.content=`${a.content} || ""`),o.includes("camel")&&(4===a.type?a.isStatic?a.content=ee(a.content):a.content=`${n.helperString(Ts)}(${a.content})`:(a.children.unshift(`${n.helperString(Ts)}(`),a.children.push(")"))),n.inSSR||(o.includes("prop")&&tf(a,"."),o.includes("attr")&&tf(a,"^")),!r||4===r.type&&!r.content.trim()?(n.onError(ts(34,i)),{props:[Ws(a,Ks("",!0,i))]}):{props:[Ws(a,r)]}},tf=(e,t)=>{4===e.type?e.isStatic?e.content=t+e.content:e.content=`\`${t}\${${e.content}}\``:(e.children.unshift(`'${t}' + (`),e.children.push(")"))},nf=(e,t)=>{if(0===e.type||1===e.type||11===e.type||10===e.type)return()=>{const n=e.children;let r,o=!1;for(let e=0;e7===e.type&&!t.directiveTransforms[e.name]))||"template"===e.tag)))for(let e=0;e{if(1===e.type&&uc(e,"once",!0)){if(rf.has(e)||t.inVOnce)return;return rf.add(e),t.inVOnce=!0,t.helper(Ls),()=>{t.inVOnce=!1;const e=t.currentNode;e.codegenNode&&(e.codegenNode=t.cache(e.codegenNode,!0))}}},af=(e,t,n)=>{const{exp:r,arg:o}=e;if(!r)return n.onError(ts(41,e.loc)),lf();const i=r.loc.source,a=4===r.type?r.content:i,l=n.bindingMetadata[i];if("props"===l||"props-aliased"===l)return n.onError(ts(44,r.loc)),lf();if(!a.trim()||!ac(a))return n.onError(ts(42,r.loc)),lf();const s=o||Ks("modelValue",!0),c=o?Qs(o)?`onUpdate:${ee(o.content)}`:Gs(['"onUpdate:" + ',o]):"onUpdate:modelValue";let u;u=Gs([`${n.isTS?"($event: any)":"$event"} => ((`,r,") = $event)"]);const f=[Ws(s,e.exp),Ws(c,u)];if(e.modifiers.length&&1===t.tagType){const t=e.modifiers.map((e=>(nc(e)?e:JSON.stringify(e))+": true")).join(", "),n=o?Qs(o)?`${o.content}Modifiers`:Gs([o,' + "Modifiers"']):"modelModifiers";f.push(Ws(n,Ks(`{ ${t} }`,!1,e.loc,2)))}return lf(f)};function lf(e=[]){return{props:e}}const sf=/[\w).+\-_$\]]/,cf=(e,t)=>{Sc("COMPILER_FILTER",t)&&(5===e.type&&uf(e.content,t),1===e.type&&e.props.forEach((e=>{7===e.type&&"for"!==e.name&&e.exp&&uf(e.exp,t)})))};function uf(e,t){if(4===e.type)ff(e,t);else for(let n=0;n=0&&(e=n.charAt(t)," "===e);t--);e&&sf.test(e)||(u=!0)}}else void 0===a?(h=i+1,a=n.slice(0,i).trim()):m();function m(){v.push(n.slice(h,i).trim()),h=i+1}if(void 0===a?a=n.slice(0,i).trim():0!==h&&m(),v.length){for(i=0;i{if(1===e.type){const n=uc(e,"memo");if(!n||pf.has(e))return;return pf.add(e),()=>{const r=e.codegenNode||t.currentNode.codegenNode;r&&13===r.type&&(1!==e.tagType&&xc(r,t),e.codegenNode=Zs(t.helper(Fs),[n.exp,Ys(void 0,r),"_cache",String(t.cached++)]))}}};function vf(e,t={}){const n=t.onError||Xl,r="module"===t.mode;!0===t.prefixIdentifiers?n(ts(47)):r&&n(ts(48));t.cacheHandlers&&n(ts(49)),t.scopeId&&!r&&n(ts(50));const o=U(e)?Vc(e,t):e,[i,a]=[[of,ku,hf,Pu,cf,Ju,zu,Iu,nf],{on:Xu,bind:ef,model:af}];return fu(o,V({},t,{prefixIdentifiers:false,nodeTransforms:[...i,...t.nodeTransforms||[]],directiveTransforms:V({},a,t.directiveTransforms||{})})),gu(o,V({},t,{prefixIdentifiers:false}))}const mf=Symbol(""),gf=Symbol(""),yf=Symbol(""),bf=Symbol(""),wf=Symbol(""),Cf=Symbol(""),_f=Symbol(""),Ef=Symbol(""),xf=Symbol(""),kf=Symbol("");var Sf;let Of;Sf={[mf]:"vModelRadio",[gf]:"vModelCheckbox",[yf]:"vModelText",[bf]:"vModelSelect",[wf]:"vModelDynamic",[Cf]:"withModifiers",[_f]:"withKeys",[Ef]:"vShow",[xf]:"Transition",[kf]:"TransitionGroup"},Object.getOwnPropertySymbols(Sf).forEach((e=>{Us[e]=Sf[e]}));const Nf=o("style,iframe,script,noscript",!0),Pf={isVoidTag:m,isNativeTag:e=>h(e)||v(e),isPreTag:e=>"pre"===e,decodeEntities:function(e,t=!1){return Of||(Of=document.createElement("div")),t?(Of.innerHTML=`
`,Of.children[0].getAttribute("foo")):(Of.innerHTML=e,Of.textContent)},isBuiltInComponent:e=>Xs(e,"Transition")?xf:Xs(e,"TransitionGroup")?kf:void 0,getNamespace(e,t){let n=t?t.ns:0;if(t&&2===n)if("annotation-xml"===t.tag){if("svg"===e)return 1;t.props.some((e=>6===e.type&&"encoding"===e.name&&null!=e.value&&("text/html"===e.value.content||"application/xhtml+xml"===e.value.content)))&&(n=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&"mglyph"!==e&&"malignmark"!==e&&(n=0);else t&&1===n&&("foreignObject"!==t.tag&&"desc"!==t.tag&&"title"!==t.tag||(n=0));if(0===n){if("svg"===e)return 1;if("math"===e)return 2}return n},getTextMode({tag:e,ns:t}){if(0===t){if("textarea"===e||"title"===e)return 1;if(Nf(e))return 2}return 0}},Tf=(e,t)=>{const n=f(e);return Ks(JSON.stringify(n),!1,t,3)};function Vf(e,t){return ts(e,t)}const Rf=o("passive,once,capture"),Lf=o("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),Af=o("left,right"),jf=o("onkeyup,onkeydown,onkeypress",!0),Bf=(e,t)=>Qs(e)&&"onclick"===e.content.toLowerCase()?Ks(t,!0):4!==e.type?Gs(["(",e,`) === "onClick" ? "${t}" : (`,e,")"]):e;const If=(e,t)=>{1!==e.type||0!==e.tagType||"script"!==e.tag&&"style"!==e.tag||(t.onError(Vf(61,e.loc)),t.removeNode())},Mf=[e=>{1===e.type&&e.props.forEach(((t,n)=>{6===t.type&&"style"===t.name&&t.value&&(e.props[n]={type:7,name:"bind",arg:Ks("style",!0,t.loc),exp:Tf(t.value.content,t.loc),modifiers:[],loc:t.loc})}))}],Ff={cloak:()=>({props:[]}),html:(e,t,n)=>{const{exp:r,loc:o}=e;return r||n.onError(Vf(51,o)),t.children.length&&(n.onError(Vf(52,o)),t.children.length=0),{props:[Ws(Ks("innerHTML",!0,o),r||Ks("",!0))]}},text:(e,t,n)=>{const{exp:r,loc:o}=e;return r||n.onError(Vf(53,o)),t.children.length&&(n.onError(Vf(54,o)),t.children.length=0),{props:[Ws(Ks("textContent",!0),r?ou(r,n)>0?r:Zs(n.helperString(Es),[r],o):Ks("",!0))]}},model:(e,t,n)=>{const r=af(e,t,n);if(!r.props.length||1===t.tagType)return r;e.arg&&n.onError(Vf(56,e.arg.loc));const{tag:o}=t,i=n.isCustomElement(o);if("input"===o||"textarea"===o||"select"===o||i){let a=yf,l=!1;if("input"===o||i){const r=fc(t,"type");if(r){if(7===r.type)a=wf;else if(r.value)switch(r.value.content){case"radio":a=mf;break;case"checkbox":a=gf;break;case"file":l=!0,n.onError(Vf(57,e.loc))}}else(function(e){return e.props.some((e=>!(7!==e.type||"bind"!==e.name||e.arg&&4===e.arg.type&&e.arg.isStatic)))})(t)&&(a=wf)}else"select"===o&&(a=bf);l||(r.needRuntime=n.helper(a))}else n.onError(Vf(55,e.loc));return r.props=r.props.filter((e=>!(4===e.key.type&&"modelValue"===e.key.content))),r},on:(e,t,n)=>Xu(e,t,n,(t=>{const{modifiers:r}=e;if(!r.length)return t;let{key:o,value:i}=t.props[0];const{keyModifiers:a,nonKeyModifiers:l,eventOptionModifiers:s}=((e,t,n,r)=>{const o=[],i=[],a=[];for(let r=0;r{const{exp:r,loc:o}=e;return r||n.onError(Vf(59,o)),{props:[],needRuntime:n.helper(Ef)}}};const Df=Object.create(null);function Uf(e,t){if(!U(e)){if(!e.nodeType)return S;e=e.innerHTML}const n=e,o=Df[n];if(o)return o;if("#"===e[0]){const t=document.querySelector(e);0,e=t?t.innerHTML:""}const i=V({hoistStatic:!0,onError:void 0,onWarn:S},t);i.isCustomElement||"undefined"==typeof customElements||(i.isCustomElement=e=>!!customElements.get(e));const{code:a}=function(e,t={}){return vf(e,V({},Pf,t,{nodeTransforms:[If,...Mf,...t.nodeTransforms||[]],directiveTransforms:V({},Ff,t.directiveTransforms||{}),transformHoist:null}))}(e,i);const l=new Function("Vue",a)(r);return l._rc=!0,Df[n]=l}Qi(Uf)}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={id:e,loaded:!1,exports:{}};return t[e].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.m=t,e=[],r.O=(t,n,o,i)=>{if(!n){var a=1/0;for(u=0;u=i)&&Object.keys(r.O).every((e=>r.O[e](n[s])))?n.splice(s--,1):(l=!1,i0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,o,i]},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e={260:0,143:0};r.O.j=t=>0===e[t];var t=(t,n)=>{var o,i,[a,l,s]=n,c=0;if(a.some((t=>0!==e[t]))){for(o in l)r.o(l,o)&&(r.m[o]=l[o]);if(s)var u=s(r)}for(t&&t(n);cr(500)));var o=r.O(void 0,[143],(()=>r(378)));o=r.O(o)})(); \ No newline at end of file +(()=>{var e,t={514:(e,t,n)=>{"use strict";var r={};n.r(r),n.d(r,{BaseTransition:()=>Er,BaseTransitionPropsValidators:()=>Or,Comment:()=>Ri,EffectScope:()=>de,Fragment:()=>Ai,KeepAlive:()=>Br,ReactiveEffect:()=>Pe,Static:()=>Li,Suspense:()=>rr,Teleport:()=>Pi,Text:()=>ji,Transition:()=>Ys,TransitionGroup:()=>Ul,VueElement:()=>Al,assertNumber:()=>sn,callWithAsyncErrorHandling:()=>an,callWithErrorHandling:()=>ln,camelize:()=>F,capitalize:()=>D,cloneVNode:()=>es,compatUtils:()=>Vs,computed:()=>Rs,createApp:()=>ma,createBlock:()=>Hi,createCommentVNode:()=>rs,createElementBlock:()=>Vi,createElementVNode:()=>Ji,createHydrationRenderer:()=>yi,createPropsRestProxy:()=>Ao,createRenderer:()=>mi,createSSRApp:()=>ya,createSlots:()=>so,createStaticVNode:()=>ns,createTextVNode:()=>ts,createVNode:()=>Qi,customRef:()=>Qt,defineAsyncComponent:()=>Fr,defineComponent:()=>Lr,defineCustomElement:()=>Cl,defineEmits:()=>mo,defineExpose:()=>yo,defineModel:()=>_o,defineOptions:()=>bo,defineProps:()=>go,defineSSRCustomElement:()=>Pl,defineSlots:()=>wo,devtools:()=>Pn,effect:()=>Ae,effectScope:()=>he,getCurrentInstance:()=>ds,getCurrentScope:()=>ge,getTransitionRawChildren:()=>Rr,guardReactiveProps:()=>Xi,h:()=>Ls,handleError:()=>un,hasInjectionContext:()=>Jo,hydrate:()=>ga,initCustomFormatter:()=>Ns,initDirectivesForSSR:()=>_a,inject:()=>Yo,isMemoSame:()=>Ds,isProxy:()=>Lt,isReactive:()=>At,isReadonly:()=>jt,isRef:()=>Ut,isRuntimeOnly:()=>Es,isShallow:()=>Rt,isVNode:()=>zi,markRaw:()=>Ft,mergeDefaults:()=>Po,mergeModels:()=>To,mergeProps:()=>ls,nextTick:()=>bn,normalizeClass:()=>ee,normalizeProps:()=>te,normalizeStyle:()=>Y,onActivated:()=>$r,onBeforeMount:()=>Yr,onBeforeUnmount:()=>Xr,onBeforeUpdate:()=>Qr,onDeactivated:()=>Vr,onErrorCaptured:()=>oo,onMounted:()=>Jr,onRenderTracked:()=>ro,onRenderTriggered:()=>no,onScopeDispose:()=>me,onServerPrefetch:()=>to,onUnmounted:()=>eo,onUpdated:()=>Zr,openBlock:()=>Ni,popScopeId:()=>Bn,provide:()=>Go,proxyRefs:()=>Yt,pushScopeId:()=>Dn,queuePostFlushCb:()=>xn,reactive:()=>kt,readonly:()=>Ct,ref:()=>$t,registerRuntimeCompiler:()=>ks,render:()=>va,renderList:()=>io,renderSlot:()=>lo,resolveComponent:()=>Jn,resolveDirective:()=>Xn,resolveDynamicComponent:()=>Zn,resolveFilter:()=>$s,resolveTransitionHooks:()=>Pr,setBlockTracking:()=>Ui,setDevtoolsHook:()=>jn,setTransitionHooks:()=>jr,shallowReactive:()=>Et,shallowReadonly:()=>Pt,shallowRef:()=>Vt,ssrContextKey:()=>Is,ssrUtils:()=>Us,stop:()=>je,toDisplayString:()=>ce,toHandlerKey:()=>B,toHandlers:()=>uo,toRaw:()=>It,toRef:()=>tn,toRefs:()=>Zt,toValue:()=>Kt,transformVNodeArgs:()=>Wi,triggerRef:()=>qt,unref:()=>Wt,useAttrs:()=>Oo,useCssModule:()=>jl,useCssVars:()=>Rl,useModel:()=>ko,useSSRContext:()=>Fs,useSlots:()=>So,useTransitionState:()=>xr,vModelCheckbox:()=>Yl,vModelDynamic:()=>na,vModelRadio:()=>Ql,vModelSelect:()=>Zl,vModelText:()=>Gl,vShow:()=>pl,version:()=>Bs,warn:()=>on,watch:()=>dr,watchEffect:()=>ur,watchPostEffect:()=>cr,watchSyncEffect:()=>fr,withAsyncContext:()=>jo,withCtx:()=>$n,withDefaults:()=>xo,withDirectives:()=>yr,withKeys:()=>ua,withMemo:()=>Ms,withModifiers:()=>la,withScopeId:()=>Un});var o={};function i(e,t){const n=Object.create(null),r=e.split(",");for(let e=0;e!!n[e.toLowerCase()]:e=>!!n[e]}n.r(o),n.d(o,{hasBrowserEnv:()=>dh,hasStandardBrowserEnv:()=>hh,hasStandardBrowserWebWorkerEnv:()=>gh});const s={},l=[],a=()=>{},u=()=>!1,c=/^on[^a-z]/,f=e=>c.test(e),p=e=>e.startsWith("onUpdate:"),d=Object.assign,h=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},v=Object.prototype.hasOwnProperty,g=(e,t)=>v.call(e,t),m=Array.isArray,y=e=>"[object Map]"===C(e),b=e=>"[object Set]"===C(e),w=e=>"[object Date]"===C(e),_=e=>"function"==typeof e,x=e=>"string"==typeof e,S=e=>"symbol"==typeof e,O=e=>null!==e&&"object"==typeof e,k=e=>(O(e)||_(e))&&_(e.then)&&_(e.catch),E=Object.prototype.toString,C=e=>E.call(e),P=e=>C(e).slice(8,-1),T=e=>"[object Object]"===C(e),A=e=>x(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,j=i(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),R=i("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),L=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},I=/-(\w)/g,F=L((e=>e.replace(I,((e,t)=>t?t.toUpperCase():"")))),N=/\B([A-Z])/g,M=L((e=>e.replace(N,"-$1").toLowerCase())),D=L((e=>e.charAt(0).toUpperCase()+e.slice(1))),B=L((e=>e?`on${D(e)}`:"")),U=(e,t)=>!Object.is(e,t),$=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},H=e=>{const t=parseFloat(e);return isNaN(t)?e:t},z=e=>{const t=x(e)?Number(e):NaN;return isNaN(t)?e:t};let q;const W=()=>q||(q="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==n.g?n.g:{});const K={1:"TEXT",2:"CLASS",4:"STYLE",8:"PROPS",16:"FULL_PROPS",32:"HYDRATE_EVENTS",64:"STABLE_FRAGMENT",128:"KEYED_FRAGMENT",256:"UNKEYED_FRAGMENT",512:"NEED_PATCH",1024:"DYNAMIC_SLOTS",2048:"DEV_ROOT_FRAGMENT",[-1]:"HOISTED",[-2]:"BAIL"},G=i("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console");function Y(e){if(m(e)){const t={};for(let n=0;n{if(e){const n=e.split(Q);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function ee(e){let t="";if(x(e))t=e;else if(m(e))for(let n=0;nae(e,t)))}const ce=e=>x(e)?e:null==e?"":m(e)||O(e)&&(e.toString===E||!_(e.toString))?JSON.stringify(e,fe,2):String(e),fe=(e,t)=>t&&t.__v_isRef?fe(e,t.value):y(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:b(t)?{[`Set(${t.size})`]:[...t.values()]}:!O(t)||m(t)||T(t)?t:String(t);let pe;class de{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=pe,!e&&pe&&(this.index=(pe.scopes||(pe.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=pe;try{return pe=this,e()}finally{pe=t}}else 0}on(){pe=this}off(){pe=this.parent}stop(e){if(this._active){let t,n;for(t=0,n=this.effects.length;t{const t=new Set(e);return t.w=0,t.n=0,t},be=e=>(e.w&Se)>0,we=e=>(e.n&Se)>0,_e=new WeakMap;let xe=0,Se=1;const Oe=30;let ke;const Ee=Symbol(""),Ce=Symbol("");class Pe{constructor(e,t=null,n){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],this.parent=void 0,ve(this,n)}run(){if(!this.active)return this.fn();let e=ke,t=Re;for(;e;){if(e===this)return;e=e.parent}try{return this.parent=ke,ke=this,Re=!0,Se=1<<++xe,xe<=Oe?(({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{("length"===n||!S(n)&&n>=e)&&l.push(t)}))}else switch(void 0!==n&&l.push(s.get(n)),t){case"add":m(e)?A(n)&&l.push(s.get("length")):(l.push(s.get(Ee)),y(e)&&l.push(s.get(Ce)));break;case"delete":m(e)||(l.push(s.get(Ee)),y(e)&&l.push(s.get(Ce)));break;case"set":y(e)&&l.push(s.get(Ee))}if(1===l.length)l[0]&&Be(l[0]);else{const e=[];for(const t of l)t&&e.push(...t);Be(ye(e))}}function Be(e,t){const n=m(e)?e:[...e];for(const e of n)e.computed&&Ue(e,t);for(const e of n)e.computed||Ue(e,t)}function Ue(e,t){(e!==ke||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const $e=i("__proto__,__v_isRef,__isVue"),Ve=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>"arguments"!==e&&"caller"!==e)).map((e=>Symbol[e])).filter(S)),He=ze();function ze(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=It(this);for(let e=0,t=this.length;e{e[t]=function(...e){Ie();const n=It(this)[t].apply(this,e);return Fe(),n}})),e}function qe(e){const t=It(this);return Ne(t,0,e),t.hasOwnProperty(e)}class We{constructor(e=!1,t=!1){this._isReadonly=e,this._shallow=t}get(e,t,n){const r=this._isReadonly,o=this._shallow;if("__v_isReactive"===t)return!r;if("__v_isReadonly"===t)return r;if("__v_isShallow"===t)return o;if("__v_raw"===t&&n===(r?o?Ot:St:o?xt:_t).get(e))return e;const i=m(e);if(!r){if(i&&g(He,t))return Reflect.get(He,t,n);if("hasOwnProperty"===t)return qe}const s=Reflect.get(e,t,n);return(S(t)?Ve.has(t):$e(t))?s:(r||Ne(e,0,t),o?s:Ut(s)?i&&A(t)?s:s.value:O(s)?r?Ct(s):kt(s):s)}}class Ke extends We{constructor(e=!1){super(!1,e)}set(e,t,n,r){let o=e[t];if(jt(o)&&Ut(o)&&!Ut(n))return!1;if(!this._shallow&&(Rt(n)||jt(n)||(o=It(o),n=It(n)),!m(e)&&Ut(o)&&!Ut(n)))return o.value=n,!0;const i=m(e)&&A(t)?Number(t)e,et=e=>Reflect.getPrototypeOf(e);function tt(e,t,n=!1,r=!1){const o=It(e=e.__v_raw),i=It(t);n||(U(t,i)&&Ne(o,0,t),Ne(o,0,i));const{has:s}=et(o),l=r?Xe:n?Mt:Nt;return s.call(o,t)?l(e.get(t)):s.call(o,i)?l(e.get(i)):void(e!==o&&e.get(t))}function nt(e,t=!1){const n=this.__v_raw,r=It(n),o=It(e);return t||(U(e,o)&&Ne(r,0,e),Ne(r,0,o)),e===o?n.has(e):n.has(e)||n.has(o)}function rt(e,t=!1){return e=e.__v_raw,!t&&Ne(It(e),0,Ee),Reflect.get(e,"size",e)}function ot(e){e=It(e);const t=It(this);return et(t).has.call(t,e)||(t.add(e),De(t,"add",e,e)),this}function it(e,t){t=It(t);const n=It(this),{has:r,get:o}=et(n);let i=r.call(n,e);i||(e=It(e),i=r.call(n,e));const s=o.call(n,e);return n.set(e,t),i?U(t,s)&&De(n,"set",e,t):De(n,"add",e,t),this}function st(e){const t=It(this),{has:n,get:r}=et(t);let o=n.call(t,e);o||(e=It(e),o=n.call(t,e));r&&r.call(t,e);const i=t.delete(e);return o&&De(t,"delete",e,void 0),i}function lt(){const e=It(this),t=0!==e.size,n=e.clear();return t&&De(e,"clear",void 0,void 0),n}function at(e,t){return function(n,r){const o=this,i=o.__v_raw,s=It(i),l=t?Xe:e?Mt:Nt;return!e&&Ne(s,0,Ee),i.forEach(((e,t)=>n.call(r,l(e),l(t),o)))}}function ut(e,t,n){return function(...r){const o=this.__v_raw,i=It(o),s=y(i),l="entries"===e||e===Symbol.iterator&&s,a="keys"===e&&s,u=o[e](...r),c=n?Xe:t?Mt:Nt;return!t&&Ne(i,0,a?Ce:Ee),{next(){const{value:e,done:t}=u.next();return t?{value:e,done:t}:{value:l?[c(e[0]),c(e[1])]:c(e),done:t}},[Symbol.iterator](){return this}}}}function ct(e){return function(...t){return"delete"!==e&&this}}function ft(){const e={get(e){return tt(this,e)},get size(){return rt(this)},has:nt,add:ot,set:it,delete:st,clear:lt,forEach:at(!1,!1)},t={get(e){return tt(this,e,!1,!0)},get size(){return rt(this)},has:nt,add:ot,set:it,delete:st,clear:lt,forEach:at(!1,!0)},n={get(e){return tt(this,e,!0)},get size(){return rt(this,!0)},has(e){return nt.call(this,e,!0)},add:ct("add"),set:ct("set"),delete:ct("delete"),clear:ct("clear"),forEach:at(!0,!1)},r={get(e){return tt(this,e,!0,!0)},get size(){return rt(this,!0)},has(e){return nt.call(this,e,!0)},add:ct("add"),set:ct("set"),delete:ct("delete"),clear:ct("clear"),forEach:at(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach((o=>{e[o]=ut(o,!1,!1),n[o]=ut(o,!0,!1),t[o]=ut(o,!1,!0),r[o]=ut(o,!0,!0)})),[e,n,t,r]}const[pt,dt,ht,vt]=ft();function gt(e,t){const n=t?e?vt:ht:e?dt:pt;return(t,r,o)=>"__v_isReactive"===r?!e:"__v_isReadonly"===r?e:"__v_raw"===r?t:Reflect.get(g(n,r)&&r in t?n:t,r,o)}const mt={get:gt(!1,!1)},yt={get:gt(!1,!0)},bt={get:gt(!0,!1)},wt={get:gt(!0,!0)};const _t=new WeakMap,xt=new WeakMap,St=new WeakMap,Ot=new WeakMap;function kt(e){return jt(e)?e:Tt(e,!1,Ye,mt,_t)}function Et(e){return Tt(e,!1,Qe,yt,xt)}function Ct(e){return Tt(e,!0,Je,bt,St)}function Pt(e){return Tt(e,!0,Ze,wt,Ot)}function Tt(e,t,n,r,o){if(!O(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const i=o.get(e);if(i)return i;const s=function(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}(P(e))}(e);if(0===s)return e;const l=new Proxy(e,2===s?r:n);return o.set(e,l),l}function At(e){return jt(e)?At(e.__v_raw):!(!e||!e.__v_isReactive)}function jt(e){return!(!e||!e.__v_isReadonly)}function Rt(e){return!(!e||!e.__v_isShallow)}function Lt(e){return At(e)||jt(e)}function It(e){const t=e&&e.__v_raw;return t?It(t):e}function Ft(e){return V(e,"__v_skip",!0),e}const Nt=e=>O(e)?kt(e):e,Mt=e=>O(e)?Ct(e):e;function Dt(e){Re&&ke&&Me((e=It(e)).dep||(e.dep=ye()))}function Bt(e,t){const n=(e=It(e)).dep;n&&Be(n)}function Ut(e){return!(!e||!0!==e.__v_isRef)}function $t(e){return Ht(e,!1)}function Vt(e){return Ht(e,!0)}function Ht(e,t){return Ut(e)?e:new zt(e,t)}class zt{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:It(e),this._value=t?e:Nt(e)}get value(){return Dt(this),this._value}set value(e){const t=this.__v_isShallow||Rt(e)||jt(e);e=t?e:It(e),U(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:Nt(e),Bt(this))}}function qt(e){Bt(e)}function Wt(e){return Ut(e)?e.value:e}function Kt(e){return _(e)?e():Wt(e)}const Gt={get:(e,t,n)=>Wt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Ut(o)&&!Ut(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function Yt(e){return At(e)?e:new Proxy(e,Gt)}class Jt{constructor(e){this.dep=void 0,this.__v_isRef=!0;const{get:t,set:n}=e((()=>Dt(this)),(()=>Bt(this)));this._get=t,this._set=n}get value(){return this._get()}set value(e){this._set(e)}}function Qt(e){return new Jt(e)}function Zt(e){const t=m(e)?new Array(e.length):{};for(const n in e)t[n]=nn(e,n);return t}class Xt{constructor(e,t,n){this._object=e,this._key=t,this._defaultValue=n,this.__v_isRef=!0}get value(){const e=this._object[this._key];return void 0===e?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return function(e,t){var n;return null==(n=_e.get(e))?void 0:n.get(t)}(It(this._object),this._key)}}class en{constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function tn(e,t,n){return Ut(e)?e:_(e)?new en(e):O(e)&&arguments.length>1?nn(e,t,n):$t(e)}function nn(e,t,n){const r=e[t];return Ut(r)?r:new Xt(e,t,n)}class rn{constructor(e,t,n,r){this._setter=t,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new Pe(e,(()=>{this._dirty||(this._dirty=!0,Bt(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=n}get value(){const e=It(this);return Dt(e),!e._dirty&&e._cacheable||(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}function on(e,...t){}function sn(e,t){}function ln(e,t,n,r){let o;try{o=r?e(...r):e()}catch(e){un(e,t,n)}return o}function an(e,t,n,r){if(_(e)){const o=ln(e,t,n,r);return o&&k(o)&&o.catch((e=>{un(e,t,n)})),o}const o=[];for(let i=0;i>>1,o=pn[r],i=kn(o);ikn(e)-kn(t))),gn=0;gnnull==e.id?1/0:e.id,En=(e,t)=>{const n=kn(e)-kn(t);if(0===n){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Cn(e){fn=!1,cn=!0,pn.sort(En);try{for(dn=0;dnPn.emit(e,...t))),Tn=[];else if("undefined"!=typeof window&&window.HTMLElement&&!(null==(r=null==(n=window.navigator)?void 0:n.userAgent)?void 0:r.includes("jsdom"))){(t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push((e=>{jn(e,t)})),setTimeout((()=>{Pn||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,An=!0,Tn=[])}),3e3)}else An=!0,Tn=[]}function Rn(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||s;let o=n;const i=t.startsWith("update:"),l=i&&t.slice(7);if(l&&l in r){const e=`${"modelValue"===l?"model":l}Modifiers`,{number:t,trim:i}=r[e]||s;i&&(o=n.map((e=>x(e)?e.trim():e))),t&&(o=n.map(H))}let a;let u=r[a=B(t)]||r[a=B(F(t))];!u&&i&&(u=r[a=B(M(t))]),u&&an(u,e,6,o);const c=r[a+"Once"];if(c){if(e.emitted){if(e.emitted[a])return}else e.emitted={};e.emitted[a]=!0,an(c,e,6,o)}}function Ln(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(void 0!==o)return o;const i=e.emits;let s={},l=!1;if(!_(e)){const r=e=>{const n=Ln(e,t,!0);n&&(l=!0,d(s,n))};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}return i||l?(m(i)?i.forEach((e=>s[e]=null)):d(s,i),O(e)&&r.set(e,s),s):(O(e)&&r.set(e,null),null)}function In(e,t){return!(!e||!f(t))&&(t=t.slice(2).replace(/Once$/,""),g(e,t[0].toLowerCase()+t.slice(1))||g(e,M(t))||g(e,t))}let Fn=null,Nn=null;function Mn(e){const t=Fn;return Fn=e,Nn=e&&e.type.__scopeId||null,t}function Dn(e){Nn=e}function Bn(){Nn=null}const Un=e=>$n;function $n(e,t=Fn,n){if(!t)return e;if(e._n)return e;const r=(...n)=>{r._d&&Ui(-1);const o=Mn(t);let i;try{i=e(...n)}finally{Mn(o),r._d&&Ui(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Vn(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:i,propsOptions:[s],slots:l,attrs:a,emit:u,render:c,renderCache:f,data:d,setupState:h,ctx:v,inheritAttrs:g}=e;let m,y;const b=Mn(e);try{if(4&n.shapeFlag){const e=o||r;m=os(c.call(e,e,f,i,h,d,v)),y=a}else{const e=t;0,m=os(e.length>1?e(i,{attrs:a,slots:l,emit:u}):e(i,null)),y=t.props?a:zn(a)}}catch(t){Ii.length=0,un(t,e,1),m=Qi(Ri)}let w=m;if(y&&!1!==g){const e=Object.keys(y),{shapeFlag:t}=w;e.length&&7&t&&(s&&e.some(p)&&(y=qn(y,s)),w=es(w,y))}return n.dirs&&(w=es(w),w.dirs=w.dirs?w.dirs.concat(n.dirs):n.dirs),n.transition&&(w.transition=n.transition),m=w,Mn(b),m}function Hn(e){let t;for(let n=0;n{let t;for(const n in e)("class"===n||"style"===n||f(n))&&((t||(t={}))[n]=e[n]);return t},qn=(e,t)=>{const n={};for(const r in e)p(r)&&r.slice(9)in t||(n[r]=e[r]);return n};function Wn(e,t,n){const r=Object.keys(t);if(r.length!==Object.keys(e).length)return!0;for(let o=0;oe.__isSuspense,rr={name:"Suspense",__isSuspense:!0,process(e,t,n,r,o,i,s,l,a,u){null==e?function(e,t,n,r,o,i,s,l,a){const{p:u,o:{createElement:c}}=a,f=c("div"),p=e.suspense=ir(e,o,r,t,f,n,i,s,l,a);u(null,p.pendingBranch=e.ssContent,f,null,r,p,i,s),p.deps>0?(or(e,"onPending"),or(e,"onFallback"),u(null,e.ssFallback,t,n,r,null,i,s),ar(p,e.ssFallback)):p.resolve(!1,!0)}(t,n,r,o,i,s,l,a,u):function(e,t,n,r,o,i,s,l,{p:a,um:u,o:{createElement:c}}){const f=t.suspense=e.suspense;f.vnode=t,t.el=e.el;const p=t.ssContent,d=t.ssFallback,{activeBranch:h,pendingBranch:v,isInFallback:g,isHydrating:m}=f;if(v)f.pendingBranch=p,qi(p,v)?(a(v,p,f.hiddenContainer,null,o,f,i,s,l),f.deps<=0?f.resolve():g&&(a(h,d,n,r,o,null,i,s,l),ar(f,d))):(f.pendingId++,m?(f.isHydrating=!1,f.activeBranch=v):u(v,o,f),f.deps=0,f.effects.length=0,f.hiddenContainer=c("div"),g?(a(null,p,f.hiddenContainer,null,o,f,i,s,l),f.deps<=0?f.resolve():(a(h,d,n,r,o,null,i,s,l),ar(f,d))):h&&qi(p,h)?(a(h,p,n,r,o,f,i,s,l),f.resolve(!0)):(a(null,p,f.hiddenContainer,null,o,f,i,s,l),f.deps<=0&&f.resolve()));else if(h&&qi(p,h))a(h,p,n,r,o,f,i,s,l),ar(f,p);else if(or(t,"onPending"),f.pendingBranch=p,f.pendingId++,a(null,p,f.hiddenContainer,null,o,f,i,s,l),f.deps<=0)f.resolve();else{const{timeout:e,pendingId:t}=f;e>0?setTimeout((()=>{f.pendingId===t&&f.fallback(d)}),e):0===e&&f.fallback(d)}}(e,t,n,r,o,s,l,a,u)},hydrate:function(e,t,n,r,o,i,s,l,a){const u=t.suspense=ir(t,r,n,e.parentNode,document.createElement("div"),null,o,i,s,l,!0),c=a(e,u.pendingBranch=t.ssContent,n,u,i,s);0===u.deps&&u.resolve(!1,!0);return c},create:ir,normalize:function(e){const{shapeFlag:t,children:n}=e,r=32&t;e.ssContent=sr(r?n.default:n),e.ssFallback=r?sr(n.fallback):Qi(Ri)}};function or(e,t){const n=e.props&&e.props[t];_(n)&&n()}function ir(e,t,n,r,o,i,s,l,a,u,c=!1){const{p:f,m:p,um:d,n:h,o:{parentNode:v,remove:g}}=u;let m;const y=function(e){var t;return null!=(null==(t=e.props)?void 0:t.suspensible)&&!1!==e.props.suspensible}(e);y&&(null==t?void 0:t.pendingBranch)&&(m=t.pendingId,t.deps++);const b=e.props?z(e.props.timeout):void 0;const w={vnode:e,parent:t,parentComponent:n,isSVG:s,container:r,hiddenContainer:o,anchor:i,deps:0,pendingId:0,timeout:"number"==typeof b?b:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:c,isUnmounted:!1,effects:[],resolve(e=!1,n=!1){const{vnode:r,activeBranch:o,pendingBranch:i,pendingId:s,effects:l,parentComponent:a,container:u}=w;let c=!1;if(w.isHydrating)w.isHydrating=!1;else if(!e){c=o&&i.transition&&"out-in"===i.transition.mode,c&&(o.transition.afterLeave=()=>{s===w.pendingId&&(p(i,u,e,0),xn(l))});let{anchor:e}=w;o&&(e=h(o),d(o,a,w,!0)),c||p(i,u,e,0)}ar(w,i),w.pendingBranch=null,w.isInFallback=!1;let f=w.parent,v=!1;for(;f;){if(f.pendingBranch){f.effects.push(...l),v=!0;break}f=f.parent}v||c||xn(l),w.effects=[],y&&t&&t.pendingBranch&&m===t.pendingId&&(t.deps--,0!==t.deps||n||t.resolve()),or(r,"onResolve")},fallback(e){if(!w.pendingBranch)return;const{vnode:t,activeBranch:n,parentComponent:r,container:o,isSVG:i}=w;or(t,"onFallback");const s=h(n),u=()=>{w.isInFallback&&(f(null,e,o,s,r,null,i,l,a),ar(w,e))},c=e.transition&&"out-in"===e.transition.mode;c&&(n.transition.afterLeave=u),w.isInFallback=!0,d(n,r,null,!0),c||u()},move(e,t,n){w.activeBranch&&p(w.activeBranch,e,t,n),w.container=e},next:()=>w.activeBranch&&h(w.activeBranch),registerDep(e,t){const n=!!w.pendingBranch;n&&w.deps++;const r=e.vnode.el;e.asyncDep.catch((t=>{un(t,e,0)})).then((o=>{if(e.isUnmounted||w.isUnmounted||w.pendingId!==e.suspenseId)return;e.asyncResolved=!0;const{vnode:i}=e;Os(e,o,!1),r&&(i.el=r);const l=!r&&e.subTree.el;t(e,i,v(r||e.subTree.el),r?null:h(e.subTree),w,s,a),l&&g(l),Kn(e,i.el),n&&0==--w.deps&&w.resolve()}))},unmount(e,t){w.isUnmounted=!0,w.activeBranch&&d(w.activeBranch,n,e,t),w.pendingBranch&&d(w.pendingBranch,n,e,t)}};return w}function sr(e){let t;if(_(e)){const n=Bi&&e._c;n&&(e._d=!1,Ni()),e=e(),n&&(e._d=!0,t=Fi,Mi())}if(m(e)){const t=Hn(e);0,e=t}return e=os(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter((t=>t!==e))),e}function lr(e,t){t&&t.pendingBranch?m(e)?t.effects.push(...e):t.effects.push(e):xn(e)}function ar(e,t){e.activeBranch=t;const{vnode:n,parentComponent:r}=e,o=n.el=t.el;r&&r.subTree===n&&(r.vnode.el=o,Kn(r,o))}function ur(e,t){return hr(e,null,t)}function cr(e,t){return hr(e,null,{flush:"post"})}function fr(e,t){return hr(e,null,{flush:"sync"})}const pr={};function dr(e,t,n){return hr(e,t,n)}function hr(e,t,{immediate:n,deep:r,flush:o,onTrack:i,onTrigger:l}=s){var u;const c=ge()===(null==(u=ps)?void 0:u.scope)?ps:null;let f,p,d=!1,v=!1;if(Ut(e)?(f=()=>e.value,d=Rt(e)):At(e)?(f=()=>e,r=!0):m(e)?(v=!0,d=e.some((e=>At(e)||Rt(e))),f=()=>e.map((e=>Ut(e)?e.value:At(e)?mr(e):_(e)?ln(e,c,2):void 0))):f=_(e)?t?()=>ln(e,c,2):()=>{if(!c||!c.isUnmounted)return p&&p(),an(e,c,3,[y])}:a,t&&r){const e=f;f=()=>mr(e())}let g,y=e=>{p=S.onStop=()=>{ln(e,c,4)}};if(xs){if(y=a,t?n&&an(t,c,3,[f(),v?[]:void 0,y]):f(),"sync"!==o)return a;{const e=Fs();g=e.__watcherHandles||(e.__watcherHandles=[])}}let b=v?new Array(e.length).fill(pr):pr;const w=()=>{if(S.active)if(t){const e=S.run();(r||d||(v?e.some(((e,t)=>U(e,b[t]))):U(e,b)))&&(p&&p(),an(t,c,3,[e,b===pr?void 0:v&&b[0]===pr?[]:b,y]),b=e)}else S.run()};let x;w.allowRecurse=!!t,"sync"===o?x=w:"post"===o?x=()=>gi(w,c&&c.suspense):(w.pre=!0,c&&(w.id=c.uid),x=()=>wn(w));const S=new Pe(f,x);t?n?w():b=S.run():"post"===o?gi(S.run.bind(S),c&&c.suspense):S.run();const O=()=>{S.stop(),c&&c.scope&&h(c.scope.effects,S)};return g&&g.push(O),O}function vr(e,t,n){const r=this.proxy,o=x(e)?e.includes(".")?gr(r,e):()=>r[e]:e.bind(r,r);let i;_(t)?i=t:(i=t.handler,n=t);const s=ps;ms(this);const l=hr(o,i.bind(r),n);return s?ms(s):ys(),l}function gr(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e{mr(e,t)}));else if(T(e))for(const n in e)mr(e[n],t);return e}function yr(e,t){const n=Fn;if(null===n)return e;const r=Ts(n)||n.proxy,o=e.dirs||(e.dirs=[]);for(let e=0;e{e.isMounted=!0})),Xr((()=>{e.isUnmounting=!0})),e}const Sr=[Function,Array],Or={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Sr,onEnter:Sr,onAfterEnter:Sr,onEnterCancelled:Sr,onBeforeLeave:Sr,onLeave:Sr,onAfterLeave:Sr,onLeaveCancelled:Sr,onBeforeAppear:Sr,onAppear:Sr,onAfterAppear:Sr,onAppearCancelled:Sr},kr={name:"BaseTransition",props:Or,setup(e,{slots:t}){const n=ds(),r=xr();let o;return()=>{const i=t.default&&Rr(t.default(),!0);if(!i||!i.length)return;let s=i[0];if(i.length>1){let e=!1;for(const t of i)if(t.type!==Ri){0,s=t,e=!0;break}}const l=It(e),{mode:a}=l;if(r.isLeaving)return Tr(s);const u=Ar(s);if(!u)return Tr(s);const c=Pr(u,l,r,n);jr(u,c);const f=n.subTree,p=f&&Ar(f);let d=!1;const{getTransitionKey:h}=u.type;if(h){const e=h();void 0===o?o=e:e!==o&&(o=e,d=!0)}if(p&&p.type!==Ri&&(!qi(u,p)||d)){const e=Pr(p,l,r,n);if(jr(p,e),"out-in"===a)return r.isLeaving=!0,e.afterLeave=()=>{r.isLeaving=!1,!1!==n.update.active&&n.update()},Tr(s);"in-out"===a&&u.type!==Ri&&(e.delayLeave=(e,t,n)=>{Cr(r,p)[String(p.key)]=p,e[wr]=()=>{t(),e[wr]=void 0,delete c.delayedLeave},c.delayedLeave=n})}return s}}},Er=kr;function Cr(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Pr(e,t,n,r){const{appear:o,mode:i,persisted:s=!1,onBeforeEnter:l,onEnter:a,onAfterEnter:u,onEnterCancelled:c,onBeforeLeave:f,onLeave:p,onAfterLeave:d,onLeaveCancelled:h,onBeforeAppear:v,onAppear:g,onAfterAppear:y,onAppearCancelled:b}=t,w=String(e.key),_=Cr(n,e),x=(e,t)=>{e&&an(e,r,9,t)},S=(e,t)=>{const n=t[1];x(e,t),m(e)?e.every((e=>e.length<=1))&&n():e.length<=1&&n()},O={mode:i,persisted:s,beforeEnter(t){let r=l;if(!n.isMounted){if(!o)return;r=v||l}t[wr]&&t[wr](!0);const i=_[w];i&&qi(e,i)&&i.el[wr]&&i.el[wr](),x(r,[t])},enter(e){let t=a,r=u,i=c;if(!n.isMounted){if(!o)return;t=g||a,r=y||u,i=b||c}let s=!1;const l=e[_r]=t=>{s||(s=!0,x(t?i:r,[e]),O.delayedLeave&&O.delayedLeave(),e[_r]=void 0)};t?S(t,[e,l]):l()},leave(t,r){const o=String(e.key);if(t[_r]&&t[_r](!0),n.isUnmounting)return r();x(f,[t]);let i=!1;const s=t[wr]=n=>{i||(i=!0,r(),x(n?h:d,[t]),t[wr]=void 0,_[o]===e&&delete _[o])};_[o]=e,p?S(p,[t,s]):s()},clone:e=>Pr(e,t,n,r)};return O}function Tr(e){if(Mr(e))return(e=es(e)).children=null,e}function Ar(e){return Mr(e)?e.children?e.children[0]:void 0:e}function jr(e,t){6&e.shapeFlag&&e.component?jr(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Rr(e,t=!1,n){let r=[],o=0;for(let i=0;i1)for(let e=0;ed({name:e.name},t,{setup:e}))():e}const Ir=e=>!!e.type.__asyncLoader;function Fr(e){_(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:i,suspensible:s=!0,onError:l}=e;let a,u=null,c=0;const f=()=>{let e;return u||(e=u=t().catch((e=>{if(e=e instanceof Error?e:new Error(String(e)),l)return new Promise(((t,n)=>{l(e,(()=>t((c++,u=null,f()))),(()=>n(e)),c+1)}));throw e})).then((t=>e!==u&&u?u:(t&&(t.__esModule||"Module"===t[Symbol.toStringTag])&&(t=t.default),a=t,t))))};return Lr({name:"AsyncComponentWrapper",__asyncLoader:f,get __asyncResolved(){return a},setup(){const e=ps;if(a)return()=>Nr(a,e);const t=t=>{u=null,un(t,e,13,!r)};if(s&&e.suspense||xs)return f().then((t=>()=>Nr(t,e))).catch((e=>(t(e),()=>r?Qi(r,{error:e}):null)));const l=$t(!1),c=$t(),p=$t(!!o);return o&&setTimeout((()=>{p.value=!1}),o),null!=i&&setTimeout((()=>{if(!l.value&&!c.value){const e=new Error(`Async component timed out after ${i}ms.`);t(e),c.value=e}}),i),f().then((()=>{l.value=!0,e.parent&&Mr(e.parent.vnode)&&wn(e.parent.update)})).catch((e=>{t(e),c.value=e})),()=>l.value&&a?Nr(a,e):c.value&&r?Qi(r,{error:c.value}):n&&!p.value?Qi(n):void 0}})}function Nr(e,t){const{ref:n,props:r,children:o,ce:i}=t.vnode,s=Qi(e,r,o);return s.ref=n,s.ce=i,delete t.vnode.ce,s}const Mr=e=>e.type.__isKeepAlive,Dr={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=ds(),r=n.ctx;if(!r.renderer)return()=>{const e=t.default&&t.default();return e&&1===e.length?e[0]:e};const o=new Map,i=new Set;let s=null;const l=n.suspense,{renderer:{p:a,m:u,um:c,o:{createElement:f}}}=r,p=f("div");function d(e){qr(e),c(e,n,l,!0)}function h(e){o.forEach(((t,n)=>{const r=As(t.type);!r||e&&e(r)||v(n)}))}function v(e){const t=o.get(e);s&&qi(t,s)?s&&qr(s):d(t),o.delete(e),i.delete(e)}r.activate=(e,t,n,r,o)=>{const i=e.component;u(e,t,n,0,l),a(i.vnode,e,t,n,i,l,r,e.slotScopeIds,o),gi((()=>{i.isDeactivated=!1,i.a&&$(i.a);const t=e.props&&e.props.onVnodeMounted;t&&as(t,i.parent,e)}),l)},r.deactivate=e=>{const t=e.component;u(e,p,null,1,l),gi((()=>{t.da&&$(t.da);const n=e.props&&e.props.onVnodeUnmounted;n&&as(n,t.parent,e),t.isDeactivated=!0}),l)},dr((()=>[e.include,e.exclude]),(([e,t])=>{e&&h((t=>Ur(e,t))),t&&h((e=>!Ur(t,e)))}),{flush:"post",deep:!0});let g=null;const m=()=>{null!=g&&o.set(g,Wr(n.subTree))};return Jr(m),Zr(m),Xr((()=>{o.forEach((e=>{const{subTree:t,suspense:r}=n,o=Wr(t);if(e.type!==o.type||e.key!==o.key)d(e);else{qr(o);const e=o.component.da;e&&gi(e,r)}}))})),()=>{if(g=null,!t.default)return null;const n=t.default(),r=n[0];if(n.length>1)return s=null,n;if(!(zi(r)&&(4&r.shapeFlag||128&r.shapeFlag)))return s=null,r;let l=Wr(r);const a=l.type,u=As(Ir(l)?l.type.__asyncResolved||{}:a),{include:c,exclude:f,max:p}=e;if(c&&(!u||!Ur(c,u))||f&&u&&Ur(f,u))return s=l,r;const d=null==l.key?a:l.key,h=o.get(d);return l.el&&(l=es(l),128&r.shapeFlag&&(r.ssContent=l)),g=d,h?(l.el=h.el,l.component=h.component,l.transition&&jr(l,l.transition),l.shapeFlag|=512,i.delete(d),i.add(d)):(i.add(d),p&&i.size>parseInt(p,10)&&v(i.values().next().value)),l.shapeFlag|=256,s=l,nr(r.type)?r:l}}},Br=Dr;function Ur(e,t){return m(e)?e.some((e=>Ur(e,t))):x(e)?e.split(",").includes(t):"[object RegExp]"===C(e)&&e.test(t)}function $r(e,t){Hr(e,"a",t)}function Vr(e,t){Hr(e,"da",t)}function Hr(e,t,n=ps){const r=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(Kr(t,r,n),n){let e=n.parent;for(;e&&e.parent;)Mr(e.parent.vnode)&&zr(r,t,n,e),e=e.parent}}function zr(e,t,n,r){const o=Kr(t,e,r,!0);eo((()=>{h(r[t],o)}),n)}function qr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function Wr(e){return 128&e.shapeFlag?e.ssContent:e}function Kr(e,t,n=ps,r=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...r)=>{if(n.isUnmounted)return;Ie(),ms(n);const o=an(t,n,e,r);return ys(),Fe(),o});return r?o.unshift(i):o.push(i),i}}const Gr=e=>(t,n=ps)=>(!xs||"sp"===e)&&Kr(e,((...e)=>t(...e)),n),Yr=Gr("bm"),Jr=Gr("m"),Qr=Gr("bu"),Zr=Gr("u"),Xr=Gr("bum"),eo=Gr("um"),to=Gr("sp"),no=Gr("rtg"),ro=Gr("rtc");function oo(e,t=ps){Kr("ec",e,t)}function io(e,t,n,r){let o;const i=n&&n[r];if(m(e)||x(e)){o=new Array(e.length);for(let n=0,r=e.length;nt(e,n,void 0,i&&i[n])));else{const n=Object.keys(e);o=new Array(n.length);for(let r=0,s=n.length;r{const t=r.fn(...e);return t&&(t.key=r.key),t}:r.fn)}return e}function lo(e,t,n={},r,o){if(Fn.isCE||Fn.parent&&Ir(Fn.parent)&&Fn.parent.isCE)return"default"!==t&&(n.name=t),Qi("slot",n,r&&r());let i=e[t];i&&i._c&&(i._d=!1),Ni();const s=i&&ao(i(n)),l=Hi(Ai,{key:n.key||s&&s.key||`_${t}`},s||(r?r():[]),s&&1===e._?64:-2);return!o&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),i&&i._c&&(i._d=!0),l}function ao(e){return e.some((e=>!zi(e)||e.type!==Ri&&!(e.type===Ai&&!ao(e.children))))?e:null}function uo(e,t){const n={};for(const r in e)n[t&&/[A-Z]/.test(r)?`on:${r}`:B(r)]=e[r];return n}const co=e=>e?bs(e)?Ts(e)||e.proxy:co(e.parent):null,fo=d(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>co(e.parent),$root:e=>co(e.root),$emit:e=>e.emit,$options:e=>No(e),$forceUpdate:e=>e.f||(e.f=()=>wn(e.update)),$nextTick:e=>e.n||(e.n=bn.bind(e.proxy)),$watch:e=>vr.bind(e)}),po=(e,t)=>e!==s&&!e.__isScriptSetup&&g(e,t),ho={get({_:e},t){const{ctx:n,setupState:r,data:o,props:i,accessCache:l,type:a,appContext:u}=e;let c;if("$"!==t[0]){const a=l[t];if(void 0!==a)switch(a){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(po(r,t))return l[t]=1,r[t];if(o!==s&&g(o,t))return l[t]=2,o[t];if((c=e.propsOptions[0])&&g(c,t))return l[t]=3,i[t];if(n!==s&&g(n,t))return l[t]=4,n[t];Ro&&(l[t]=0)}}const f=fo[t];let p,d;return f?("$attrs"===t&&Ne(e,0,t),f(e)):(p=a.__cssModules)&&(p=p[t])?p:n!==s&&g(n,t)?(l[t]=4,n[t]):(d=u.config.globalProperties,g(d,t)?d[t]:void 0)},set({_:e},t,n){const{data:r,setupState:o,ctx:i}=e;return po(o,t)?(o[t]=n,!0):r!==s&&g(r,t)?(r[t]=n,!0):!g(e.props,t)&&(("$"!==t[0]||!(t.slice(1)in e))&&(i[t]=n,!0))},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:i}},l){let a;return!!n[l]||e!==s&&g(e,l)||po(t,l)||(a=i[0])&&g(a,l)||g(r,l)||g(fo,l)||g(o.config.globalProperties,l)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:g(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};const vo=d({},ho,{get(e,t){if(t!==Symbol.unscopables)return ho.get(e,t,e)},has:(e,t)=>"_"!==t[0]&&!G(t)});function go(){return null}function mo(){return null}function yo(e){0}function bo(e){0}function wo(){return null}function _o(){0}function xo(e,t){return null}function So(){return Eo().slots}function Oo(){return Eo().attrs}function ko(e,t,n){const r=ds();if(n&&n.local){const n=$t(e[t]);return dr((()=>e[t]),(e=>n.value=e)),dr(n,(n=>{n!==e[t]&&r.emit(`update:${t}`,n)})),n}return{__v_isRef:!0,get value(){return e[t]},set value(e){r.emit(`update:${t}`,e)}}}function Eo(){const e=ds();return e.setupContext||(e.setupContext=Ps(e))}function Co(e){return m(e)?e.reduce(((e,t)=>(e[t]=null,e)),{}):e}function Po(e,t){const n=Co(e);for(const e in t){if(e.startsWith("__skip"))continue;let r=n[e];r?m(r)||_(r)?r=n[e]={type:r,default:t[e]}:r.default=t[e]:null===r&&(r=n[e]={default:t[e]}),r&&t[`__skip_${e}`]&&(r.skipFactory=!0)}return n}function To(e,t){return e&&t?m(e)&&m(t)?e.concat(t):d({},Co(e),Co(t)):e||t}function Ao(e,t){const n={};for(const r in e)t.includes(r)||Object.defineProperty(n,r,{enumerable:!0,get:()=>e[r]});return n}function jo(e){const t=ds();let n=e();return ys(),k(n)&&(n=n.catch((e=>{throw ms(t),e}))),[n,()=>ms(t)]}let Ro=!0;function Lo(e){const t=No(e),n=e.proxy,r=e.ctx;Ro=!1,t.beforeCreate&&Io(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:s,watch:l,provide:u,inject:c,created:f,beforeMount:p,mounted:d,beforeUpdate:h,updated:v,activated:g,deactivated:y,beforeDestroy:b,beforeUnmount:w,destroyed:x,unmounted:S,render:k,renderTracked:E,renderTriggered:C,errorCaptured:P,serverPrefetch:T,expose:A,inheritAttrs:j,components:R,directives:L,filters:I}=t;if(c&&function(e,t,n=a){m(e)&&(e=Uo(e));for(const n in e){const r=e[n];let o;o=O(r)?"default"in r?Yo(r.from||n,r.default,!0):Yo(r.from||n):Yo(r),Ut(o)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>o.value,set:e=>o.value=e}):t[n]=o}}(c,r,null),s)for(const e in s){const t=s[e];_(t)&&(r[e]=t.bind(n))}if(o){0;const t=o.call(n,n);0,O(t)&&(e.data=kt(t))}if(Ro=!0,i)for(const e in i){const t=i[e],o=_(t)?t.bind(n,n):_(t.get)?t.get.bind(n,n):a;0;const s=!_(t)&&_(t.set)?t.set.bind(n):a,l=Rs({get:o,set:s});Object.defineProperty(r,e,{enumerable:!0,configurable:!0,get:()=>l.value,set:e=>l.value=e})}if(l)for(const e in l)Fo(l[e],r,n,e);if(u){const e=_(u)?u.call(n):u;Reflect.ownKeys(e).forEach((t=>{Go(t,e[t])}))}function F(e,t){m(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(f&&Io(f,e,"c"),F(Yr,p),F(Jr,d),F(Qr,h),F(Zr,v),F($r,g),F(Vr,y),F(oo,P),F(ro,E),F(no,C),F(Xr,w),F(eo,S),F(to,T),m(A))if(A.length){const t=e.exposed||(e.exposed={});A.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});k&&e.render===a&&(e.render=k),null!=j&&(e.inheritAttrs=j),R&&(e.components=R),L&&(e.directives=L)}function Io(e,t,n){an(m(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function Fo(e,t,n,r){const o=r.includes(".")?gr(n,r):()=>n[r];if(x(e)){const n=t[e];_(n)&&dr(o,n)}else if(_(e))dr(o,e.bind(n));else if(O(e))if(m(e))e.forEach((e=>Fo(e,t,n,r)));else{const r=_(e.handler)?e.handler.bind(n):t[e.handler];_(r)&&dr(o,r,e)}else 0}function No(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:s}}=e.appContext,l=i.get(t);let a;return l?a=l:o.length||n||r?(a={},o.length&&o.forEach((e=>Mo(a,e,s,!0))),Mo(a,t,s)):a=t,O(t)&&i.set(t,a),a}function Mo(e,t,n,r=!1){const{mixins:o,extends:i}=t;i&&Mo(e,i,n,!0),o&&o.forEach((t=>Mo(e,t,n,!0)));for(const o in t)if(r&&"expose"===o);else{const r=Do[o]||n&&n[o];e[o]=r?r(e[o],t[o]):t[o]}return e}const Do={data:Bo,props:Ho,emits:Ho,methods:Vo,computed:Vo,beforeCreate:$o,created:$o,beforeMount:$o,mounted:$o,beforeUpdate:$o,updated:$o,beforeDestroy:$o,beforeUnmount:$o,destroyed:$o,unmounted:$o,activated:$o,deactivated:$o,errorCaptured:$o,serverPrefetch:$o,components:Vo,directives:Vo,watch:function(e,t){if(!e)return t;if(!t)return e;const n=d(Object.create(null),e);for(const r in t)n[r]=$o(e[r],t[r]);return n},provide:Bo,inject:function(e,t){return Vo(Uo(e),Uo(t))}};function Bo(e,t){return t?e?function(){return d(_(e)?e.call(this,this):e,_(t)?t.call(this,this):t)}:t:e}function Uo(e){if(m(e)){const t={};for(let n=0;n(i.has(e)||(e&&_(e.install)?(i.add(e),e.install(l,...t)):_(e)&&(i.add(e),e(l,...t))),l),mixin:e=>(o.mixins.includes(e)||o.mixins.push(e),l),component:(e,t)=>t?(o.components[e]=t,l):o.components[e],directive:(e,t)=>t?(o.directives[e]=t,l):o.directives[e],mount(i,a,u){if(!s){0;const c=Qi(n,r);return c.appContext=o,a&&t?t(c,i):e(c,i,u),s=!0,l._container=i,i.__vue_app__=l,Ts(c.component)||c.component.proxy}},unmount(){s&&(e(null,l._container),delete l._container.__vue_app__)},provide:(e,t)=>(o.provides[e]=t,l),runWithContext(e){Ko=l;try{return e()}finally{Ko=null}}};return l}}let Ko=null;function Go(e,t){if(ps){let n=ps.provides;const r=ps.parent&&ps.parent.provides;r===n&&(n=ps.provides=Object.create(r)),n[e]=t}else 0}function Yo(e,t,n=!1){const r=ps||Fn;if(r||Ko){const o=r?null==r.parent?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides:Ko._context.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&_(t)?t.call(r&&r.proxy):t}else 0}function Jo(){return!!(ps||Fn||Ko)}function Qo(e,t,n,r){const[o,i]=e.propsOptions;let l,a=!1;if(t)for(let s in t){if(j(s))continue;const u=t[s];let c;o&&g(o,c=F(s))?i&&i.includes(c)?(l||(l={}))[c]=u:n[c]=u:In(e.emitsOptions,s)||s in r&&u===r[s]||(r[s]=u,a=!0)}if(i){const t=It(n),r=l||s;for(let s=0;s{c=!0;const[n,r]=Xo(e,t,!0);d(a,n),r&&u.push(...r)};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}if(!i&&!c)return O(e)&&r.set(e,l),l;if(m(i))for(let e=0;e-1,r[1]=n<0||e-1||g(r,"default"))&&u.push(t)}}}}const f=[a,u];return O(e)&&r.set(e,f),f}function ei(e){return"$"!==e[0]}function ti(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:null===e?"null":""}function ni(e,t){return ti(e)===ti(t)}function ri(e,t){return m(t)?t.findIndex((t=>ni(t,e))):_(t)&&ni(t,e)?0:-1}const oi=e=>"_"===e[0]||"$stable"===e,ii=e=>m(e)?e.map(os):[os(e)],si=(e,t,n)=>{if(t._n)return t;const r=$n(((...e)=>ii(t(...e))),n);return r._c=!1,r},li=(e,t,n)=>{const r=e._ctx;for(const n in e){if(oi(n))continue;const o=e[n];if(_(o))t[n]=si(0,o,r);else if(null!=o){0;const e=ii(o);t[n]=()=>e}}},ai=(e,t)=>{const n=ii(t);e.slots.default=()=>n},ui=(e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=It(t),V(t,"_",n)):li(t,e.slots={})}else e.slots={},t&&ai(e,t);V(e.slots,Ki,1)},ci=(e,t,n)=>{const{vnode:r,slots:o}=e;let i=!0,l=s;if(32&r.shapeFlag){const e=t._;e?n&&1===e?i=!1:(d(o,t),n||1!==e||delete o._):(i=!t.$stable,li(t,o)),l=t}else t&&(ai(e,t),l={default:1});if(i)for(const e in o)oi(e)||null!=l[e]||delete o[e]};function fi(e,t,n,r,o=!1){if(m(e))return void e.forEach(((e,i)=>fi(e,t&&(m(t)?t[i]:t),n,r,o)));if(Ir(r)&&!o)return;const i=4&r.shapeFlag?Ts(r.component)||r.component.proxy:r.el,l=o?null:i,{i:a,r:u}=e;const c=t&&t.r,f=a.refs===s?a.refs={}:a.refs,p=a.setupState;if(null!=c&&c!==u&&(x(c)?(f[c]=null,g(p,c)&&(p[c]=null)):Ut(c)&&(c.value=null)),_(u))ln(u,a,12,[l,f]);else{const t=x(u),r=Ut(u);if(t||r){const s=()=>{if(e.f){const n=t?g(p,u)?p[u]:f[u]:u.value;o?m(n)&&h(n,i):m(n)?n.includes(i)||n.push(i):t?(f[u]=[i],g(p,u)&&(p[u]=f[u])):(u.value=[i],e.k&&(f[e.k]=u.value))}else t?(f[u]=l,g(p,u)&&(p[u]=l)):r&&(u.value=l,e.k&&(f[e.k]=l))};l?(s.id=-1,gi(s,n)):s()}else 0}}let pi=!1;const di=e=>/svg/.test(e.namespaceURI)&&"foreignObject"!==e.tagName,hi=e=>8===e.nodeType;function vi(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:i,parentNode:s,remove:l,insert:a,createComment:u}}=e,c=(n,r,l,u,f,b=!1)=>{const w=hi(n)&&"["===n.data,_=()=>v(n,r,l,u,f,w),{type:x,ref:S,shapeFlag:O,patchFlag:k}=r;let E=n.nodeType;r.el=n,-2===k&&(b=!1,r.dynamicChildren=null);let C=null;switch(x){case ji:3!==E?""===r.children?(a(r.el=o(""),s(n),n),C=n):C=_():(n.data!==r.children&&(pi=!0,n.data=r.children),C=i(n));break;case Ri:y(n)?(C=i(n),m(r.el=n.content.firstChild,n,l)):C=8!==E||w?_():i(n);break;case Li:if(w&&(E=(n=i(n)).nodeType),1===E||3===E){C=n;const e=!r.children.length;for(let t=0;t{s=s||!!t.dynamicChildren;const{type:a,props:u,patchFlag:c,shapeFlag:p,dirs:h,transition:v}=t,g="input"===a&&h||"option"===a;if(g||-1!==c){if(h&&br(t,null,n,"created"),u)if(g||!s||48&c)for(const t in u)(g&&t.endsWith("value")||f(t)&&!j(t))&&r(e,t,null,u[t],!1,void 0,n);else u.onClick&&r(e,"onClick",null,u.onClick,!1,void 0,n);let a;(a=u&&u.onVnodeBeforeMount)&&as(a,n,t);let b=!1;if(y(e)){b=_i(o,v)&&n&&n.vnode.props&&n.vnode.props.appear;const r=e.content.firstChild;b&&v.beforeEnter(r),m(r,e,n),t.el=e=r}if(h&&br(t,null,n,"beforeMount"),((a=u&&u.onVnodeMounted)||h||b)&&lr((()=>{a&&as(a,n,t),b&&v.enter(e),h&&br(t,null,n,"mounted")}),o),16&p&&(!u||!u.innerHTML&&!u.textContent)){let r=d(e.firstChild,t,e,n,o,i,s);for(;r;){pi=!0;const e=r;r=r.nextSibling,l(e)}}else 8&p&&e.textContent!==t.children&&(pi=!0,e.textContent=t.children)}return e.nextSibling},d=(e,t,r,o,i,s,l)=>{l=l||!!t.dynamicChildren;const a=t.children,u=a.length;for(let t=0;t{const{slotScopeIds:c}=t;c&&(o=o?o.concat(c):c);const f=s(e),p=d(i(e),t,f,n,r,o,l);return p&&hi(p)&&"]"===p.data?i(t.anchor=p):(pi=!0,a(t.anchor=u("]"),f,p),p)},v=(e,t,r,o,a,u)=>{if(pi=!0,t.el=null,u){const t=g(e);for(;;){const n=i(e);if(!n||n===t)break;l(n)}}const c=i(e),f=s(e);return l(e),n(null,t,f,c,r,o,di(f),a),c},g=(e,t="[",n="]")=>{let r=0;for(;e;)if((e=i(e))&&hi(e)&&(e.data===t&&r++,e.data===n)){if(0===r)return i(e);r--}return e},m=(e,t,n)=>{const r=t.parentNode;r&&r.replaceChild(e,t);let o=n;for(;o;)o.vnode.el===t&&(o.vnode.el=o.subTree.el=e),o=o.parent},y=e=>1===e.nodeType&&"template"===e.tagName.toLowerCase();return[(e,t)=>{if(!t.hasChildNodes())return n(null,e,t),On(),void(t._vnode=e);pi=!1,c(t.firstChild,e,null,null,null),On(),t._vnode=e},c]}const gi=lr;function mi(e){return bi(e)}function yi(e){return bi(e,vi)}function bi(e,t){W().__VUE__=!0;const{insert:n,remove:r,patchProp:o,createElement:i,createText:u,createComment:c,setText:f,setElementText:p,parentNode:d,nextSibling:h,setScopeId:v=a,insertStaticContent:m}=e,y=(e,t,n,r=null,o=null,i=null,s=!1,l=null,a=!!t.dynamicChildren)=>{if(e===t)return;e&&!qi(e,t)&&(r=J(e),z(e,o,i,!0),e=null),-2===t.patchFlag&&(a=!1,t.dynamicChildren=null);const{type:u,ref:c,shapeFlag:f}=t;switch(u){case ji:b(e,t,n,r);break;case Ri:w(e,t,n,r);break;case Li:null==e&&_(t,n,r,s);break;case Ai:A(e,t,n,r,o,i,s,l,a);break;default:1&f?S(e,t,n,r,o,i,s,l,a):6&f?R(e,t,n,r,o,i,s,l,a):(64&f||128&f)&&u.process(e,t,n,r,o,i,s,l,a,Z)}null!=c&&o&&fi(c,e&&e.ref,i,t||e,!t)},b=(e,t,r,o)=>{if(null==e)n(t.el=u(t.children),r,o);else{const n=t.el=e.el;t.children!==e.children&&f(n,t.children)}},w=(e,t,r,o)=>{null==e?n(t.el=c(t.children||""),r,o):t.el=e.el},_=(e,t,n,r)=>{[e.el,e.anchor]=m(e.children,t,n,r,e.el,e.anchor)},x=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=h(e),r(e),e=n;r(t)},S=(e,t,n,r,o,i,s,l,a)=>{s=s||"svg"===t.type,null==e?O(t,n,r,o,i,s,l,a):C(e,t,o,i,s,l,a)},O=(e,t,r,s,l,a,u,c)=>{let f,d;const{type:h,props:v,shapeFlag:g,transition:m,dirs:y}=e;if(f=e.el=i(e.type,a,v&&v.is,v),8&g?p(f,e.children):16&g&&E(e.children,f,null,s,l,a&&"foreignObject"!==h,u,c),y&&br(e,null,s,"created"),k(f,e,e.scopeId,u,s),v){for(const t in v)"value"===t||j(t)||o(f,t,null,v[t],a,e.children,s,l,Y);"value"in v&&o(f,"value",null,v.value),(d=v.onVnodeBeforeMount)&&as(d,s,e)}y&&br(e,null,s,"beforeMount");const b=_i(l,m);b&&m.beforeEnter(f),n(f,t,r),((d=v&&v.onVnodeMounted)||b||y)&&gi((()=>{d&&as(d,s,e),b&&m.enter(f),y&&br(e,null,s,"mounted")}),l)},k=(e,t,n,r,o)=>{if(n&&v(e,n),r)for(let t=0;t{for(let u=a;u{const u=t.el=e.el;let{patchFlag:c,dynamicChildren:f,dirs:d}=t;c|=16&e.patchFlag;const h=e.props||s,v=t.props||s;let g;n&&wi(n,!1),(g=v.onVnodeBeforeUpdate)&&as(g,n,t,e),d&&br(t,e,n,"beforeUpdate"),n&&wi(n,!0);const m=i&&"foreignObject"!==t.type;if(f?P(e.dynamicChildren,f,u,n,r,m,l):a||B(e,t,u,null,n,r,m,l,!1),c>0){if(16&c)T(u,t,h,v,n,r,i);else if(2&c&&h.class!==v.class&&o(u,"class",null,v.class,i),4&c&&o(u,"style",h.style,v.style,i),8&c){const s=t.dynamicProps;for(let t=0;t{g&&as(g,n,t,e),d&&br(t,e,n,"updated")}),r)},P=(e,t,n,r,o,i,s)=>{for(let l=0;l{if(n!==r){if(n!==s)for(const s in n)j(s)||s in r||o(e,s,n[s],null,a,t.children,i,l,Y);for(const s in r){if(j(s))continue;const u=r[s],c=n[s];u!==c&&"value"!==s&&o(e,s,c,u,a,t.children,i,l,Y)}"value"in r&&o(e,"value",n.value,r.value)}},A=(e,t,r,o,i,s,l,a,c)=>{const f=t.el=e?e.el:u(""),p=t.anchor=e?e.anchor:u("");let{patchFlag:d,dynamicChildren:h,slotScopeIds:v}=t;v&&(a=a?a.concat(v):v),null==e?(n(f,r,o),n(p,r,o),E(t.children,r,p,i,s,l,a,c)):d>0&&64&d&&h&&e.dynamicChildren?(P(e.dynamicChildren,h,r,i,s,l,a),(null!=t.key||i&&t===i.subTree)&&xi(e,t,!0)):B(e,t,r,p,i,s,l,a,c)},R=(e,t,n,r,o,i,s,l,a)=>{t.slotScopeIds=l,null==e?512&t.shapeFlag?o.ctx.activate(t,n,r,s,a):L(t,n,r,o,i,s,a):I(e,t,a)},L=(e,t,n,r,o,i,s)=>{const l=e.component=fs(e,r,o);if(Mr(e)&&(l.ctx.renderer=Z),Ss(l),l.asyncDep){if(o&&o.registerDep(l,N),!e.el){const e=l.subTree=Qi(Ri);w(null,e,t,n)}}else N(l,e,t,n,o,i,s)},I=(e,t,n)=>{const r=t.component=e.component;if(function(e,t,n){const{props:r,children:o,component:i}=e,{props:s,children:l,patchFlag:a}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&a>=0))return!(!o&&!l||l&&l.$stable)||r!==s&&(r?!s||Wn(r,s,u):!!s);if(1024&a)return!0;if(16&a)return r?Wn(r,s,u):!!s;if(8&a){const e=t.dynamicProps;for(let t=0;tdn&&pn.splice(t,1)}(r.update),r.update()}else t.el=e.el,r.vnode=t},N=(e,t,n,r,o,i,s)=>{const l=e.effect=new Pe((()=>{if(e.isMounted){let t,{next:n,bu:r,u:l,parent:a,vnode:u}=e,c=n;0,wi(e,!1),n?(n.el=u.el,D(e,n,s)):n=u,r&&$(r),(t=n.props&&n.props.onVnodeBeforeUpdate)&&as(t,a,n,u),wi(e,!0);const f=Vn(e);0;const p=e.subTree;e.subTree=f,y(p,f,d(p.el),J(p),e,o,i),n.el=f.el,null===c&&Kn(e,f.el),l&&gi(l,o),(t=n.props&&n.props.onVnodeUpdated)&&gi((()=>as(t,a,n,u)),o)}else{let s;const{el:l,props:a}=t,{bm:u,m:c,parent:f}=e,p=Ir(t);if(wi(e,!1),u&&$(u),!p&&(s=a&&a.onVnodeBeforeMount)&&as(s,f,t),wi(e,!0),l&&ee){const n=()=>{e.subTree=Vn(e),ee(l,e.subTree,e,o,null)};p?t.type.__asyncLoader().then((()=>!e.isUnmounted&&n())):n()}else{0;const s=e.subTree=Vn(e);0,y(null,s,n,r,e,o,i),t.el=s.el}if(c&&gi(c,o),!p&&(s=a&&a.onVnodeMounted)){const e=t;gi((()=>as(s,f,e)),o)}(256&t.shapeFlag||f&&Ir(f.vnode)&&256&f.vnode.shapeFlag)&&e.a&&gi(e.a,o),e.isMounted=!0,t=n=r=null}}),(()=>wn(a)),e.scope),a=e.update=()=>l.run();a.id=e.uid,wi(e,!0),a()},D=(e,t,n)=>{t.component=e;const r=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,r){const{props:o,attrs:i,vnode:{patchFlag:s}}=e,l=It(o),[a]=e.propsOptions;let u=!1;if(!(r||s>0)||16&s){let r;Qo(e,t,o,i)&&(u=!0);for(const i in l)t&&(g(t,i)||(r=M(i))!==i&&g(t,r))||(a?!n||void 0===n[i]&&void 0===n[r]||(o[i]=Zo(a,l,i,void 0,e,!0)):delete o[i]);if(i!==l)for(const e in i)t&&g(t,e)||(delete i[e],u=!0)}else if(8&s){const n=e.vnode.dynamicProps;for(let r=0;r{const u=e&&e.children,c=e?e.shapeFlag:0,f=t.children,{patchFlag:d,shapeFlag:h}=t;if(d>0){if(128&d)return void V(u,f,n,r,o,i,s,l,a);if(256&d)return void U(u,f,n,r,o,i,s,l,a)}8&h?(16&c&&Y(u,o,i),f!==u&&p(n,f)):16&c?16&h?V(u,f,n,r,o,i,s,l,a):Y(u,o,i,!0):(8&c&&p(n,""),16&h&&E(f,n,r,o,i,s,l,a))},U=(e,t,n,r,o,i,s,a,u)=>{t=t||l;const c=(e=e||l).length,f=t.length,p=Math.min(c,f);let d;for(d=0;df?Y(e,o,i,!0,!1,p):E(t,n,r,o,i,s,a,u,p)},V=(e,t,n,r,o,i,s,a,u)=>{let c=0;const f=t.length;let p=e.length-1,d=f-1;for(;c<=p&&c<=d;){const r=e[c],l=t[c]=u?is(t[c]):os(t[c]);if(!qi(r,l))break;y(r,l,n,null,o,i,s,a,u),c++}for(;c<=p&&c<=d;){const r=e[p],l=t[d]=u?is(t[d]):os(t[d]);if(!qi(r,l))break;y(r,l,n,null,o,i,s,a,u),p--,d--}if(c>p){if(c<=d){const e=d+1,l=ed)for(;c<=p;)z(e[c],o,i,!0),c++;else{const h=c,v=c,g=new Map;for(c=v;c<=d;c++){const e=t[c]=u?is(t[c]):os(t[c]);null!=e.key&&g.set(e.key,c)}let m,b=0;const w=d-v+1;let _=!1,x=0;const S=new Array(w);for(c=0;c=w){z(r,o,i,!0);continue}let l;if(null!=r.key)l=g.get(r.key);else for(m=v;m<=d;m++)if(0===S[m-v]&&qi(r,t[m])){l=m;break}void 0===l?z(r,o,i,!0):(S[l-v]=c+1,l>=x?x=l:_=!0,y(r,t[l],n,null,o,i,s,a,u),b++)}const O=_?function(e){const t=e.slice(),n=[0];let r,o,i,s,l;const a=e.length;for(r=0;r>1,e[n[l]]0&&(t[r]=n[i-1]),n[i]=r)}}i=n.length,s=n[i-1];for(;i-- >0;)n[i]=s,s=t[s];return n}(S):l;for(m=O.length-1,c=w-1;c>=0;c--){const e=v+c,l=t[e],p=e+1{const{el:s,type:l,transition:a,children:u,shapeFlag:c}=e;if(6&c)return void H(e.component.subTree,t,r,o);if(128&c)return void e.suspense.move(t,r,o);if(64&c)return void l.move(e,t,r,Z);if(l===Ai){n(s,t,r);for(let e=0;e{let i;for(;e&&e!==t;)i=h(e),n(e,r,o),e=i;n(t,r,o)})(e,t,r);if(2!==o&&1&c&&a)if(0===o)a.beforeEnter(s),n(s,t,r),gi((()=>a.enter(s)),i);else{const{leave:e,delayLeave:o,afterLeave:i}=a,l=()=>n(s,t,r),u=()=>{e(s,(()=>{l(),i&&i()}))};o?o(s,l,u):u()}else n(s,t,r)},z=(e,t,n,r=!1,o=!1)=>{const{type:i,props:s,ref:l,children:a,dynamicChildren:u,shapeFlag:c,patchFlag:f,dirs:p}=e;if(null!=l&&fi(l,null,n,e,!0),256&c)return void t.ctx.deactivate(e);const d=1&c&&p,h=!Ir(e);let v;if(h&&(v=s&&s.onVnodeBeforeUnmount)&&as(v,t,e),6&c)G(e.component,n,r);else{if(128&c)return void e.suspense.unmount(n,r);d&&br(e,null,t,"beforeUnmount"),64&c?e.type.remove(e,t,n,o,Z,r):u&&(i!==Ai||f>0&&64&f)?Y(u,t,n,!1,!0):(i===Ai&&384&f||!o&&16&c)&&Y(a,t,n),r&&q(e)}(h&&(v=s&&s.onVnodeUnmounted)||d)&&gi((()=>{v&&as(v,t,e),d&&br(e,null,t,"unmounted")}),n)},q=e=>{const{type:t,el:n,anchor:o,transition:i}=e;if(t===Ai)return void K(n,o);if(t===Li)return void x(e);const s=()=>{r(n),i&&!i.persisted&&i.afterLeave&&i.afterLeave()};if(1&e.shapeFlag&&i&&!i.persisted){const{leave:t,delayLeave:r}=i,o=()=>t(n,s);r?r(e.el,s,o):o()}else s()},K=(e,t)=>{let n;for(;e!==t;)n=h(e),r(e),e=n;r(t)},G=(e,t,n)=>{const{bum:r,scope:o,update:i,subTree:s,um:l}=e;r&&$(r),o.stop(),i&&(i.active=!1,z(s,e,t,n)),l&&gi(l,t),gi((()=>{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},Y=(e,t,n,r=!1,o=!1,i=0)=>{for(let s=i;s6&e.shapeFlag?J(e.component.subTree):128&e.shapeFlag?e.suspense.next():h(e.anchor||e.el),Q=(e,t,n)=>{null==e?t._vnode&&z(t._vnode,null,null,!0):y(t._vnode||null,e,t,null,null,null,n),Sn(),On(),t._vnode=e},Z={p:y,um:z,m:H,r:q,mt:L,mc:E,pc:B,pbc:P,n:J,o:e};let X,ee;return t&&([X,ee]=t(Z)),{render:Q,hydrate:X,createApp:Wo(Q,X)}}function wi({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function _i(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function xi(e,t,n=!1){const r=e.children,o=t.children;if(m(r)&&m(o))for(let e=0;ee&&(e.disabled||""===e.disabled),Oi=e=>"undefined"!=typeof SVGElement&&e instanceof SVGElement,ki=(e,t)=>{const n=e&&e.to;if(x(n)){if(t){const e=t(n);return e}return null}return n},Ei={__isTeleport:!0,process(e,t,n,r,o,i,s,l,a,u){const{mc:c,pc:f,pbc:p,o:{insert:d,querySelector:h,createText:v,createComment:g}}=u,m=Si(t.props);let{shapeFlag:y,children:b,dynamicChildren:w}=t;if(null==e){const e=t.el=v(""),u=t.anchor=v("");d(e,n,r),d(u,n,r);const f=t.target=ki(t.props,h),p=t.targetAnchor=v("");f&&(d(p,f),s=s||Oi(f));const g=(e,t)=>{16&y&&c(b,e,t,o,i,s,l,a)};m?g(n,u):f&&g(f,p)}else{t.el=e.el;const r=t.anchor=e.anchor,c=t.target=e.target,d=t.targetAnchor=e.targetAnchor,v=Si(e.props),g=v?n:c,y=v?r:d;if(s=s||Oi(c),w?(p(e.dynamicChildren,w,g,o,i,s,l),xi(e,t,!0)):a||f(e,t,g,y,o,i,s,l,!1),m)v?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Ci(t,n,r,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const e=t.target=ki(t.props,h);e&&Ci(t,e,null,u,0)}else v&&Ci(t,c,d,u,1)}Ti(t)},remove(e,t,n,r,{um:o,o:{remove:i}},s){const{shapeFlag:l,children:a,anchor:u,targetAnchor:c,target:f,props:p}=e;if(f&&i(c),s&&i(u),16&l){const e=s||!Si(p);for(let r=0;r0?Fi||l:null,Mi(),Bi>0&&Fi&&Fi.push(e),e}function Vi(e,t,n,r,o,i){return $i(Ji(e,t,n,r,o,i,!0))}function Hi(e,t,n,r,o){return $i(Qi(e,t,n,r,o,!0))}function zi(e){return!!e&&!0===e.__v_isVNode}function qi(e,t){return e.type===t.type&&e.key===t.key}function Wi(e){Di=e}const Ki="__vInternal",Gi=({key:e})=>null!=e?e:null,Yi=({ref:e,ref_key:t,ref_for:n})=>("number"==typeof e&&(e=""+e),null!=e?x(e)||Ut(e)||_(e)?{i:Fn,r:e,k:t,f:!!n}:e:null);function Ji(e,t=null,n=null,r=0,o=null,i=(e===Ai?0:1),s=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Gi(t),ref:t&&Yi(t),scopeId:Nn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Fn};return l?(ss(a,n),128&i&&e.normalize(a)):n&&(a.shapeFlag|=x(n)?8:16),Bi>0&&!s&&Fi&&(a.patchFlag>0||6&i)&&32!==a.patchFlag&&Fi.push(a),a}const Qi=Zi;function Zi(e,t=null,n=null,r=0,o=null,i=!1){if(e&&e!==Qn||(e=Ri),zi(e)){const r=es(e,t,!0);return n&&ss(r,n),Bi>0&&!i&&Fi&&(6&r.shapeFlag?Fi[Fi.indexOf(e)]=r:Fi.push(r)),r.patchFlag|=-2,r}if(js(e)&&(e=e.__vccOpts),t){t=Xi(t);let{class:e,style:n}=t;e&&!x(e)&&(t.class=ee(e)),O(n)&&(Lt(n)&&!m(n)&&(n=d({},n)),t.style=Y(n))}return Ji(e,t,n,r,o,x(e)?1:nr(e)?128:(e=>e.__isTeleport)(e)?64:O(e)?4:_(e)?2:0,i,!0)}function Xi(e){return e?Lt(e)||Ki in e?d({},e):e:null}function es(e,t,n=!1){const{props:r,ref:o,patchFlag:i,children:s}=e,l=t?ls(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Gi(l),ref:t&&t.ref?n&&o?m(o)?o.concat(Yi(t)):[o,Yi(t)]:Yi(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:s,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ai?-1===i?16:16|i:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&es(e.ssContent),ssFallback:e.ssFallback&&es(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function ts(e=" ",t=0){return Qi(ji,null,e,t)}function ns(e,t){const n=Qi(Li,null,e);return n.staticCount=t,n}function rs(e="",t=!1){return t?(Ni(),Hi(Ri,null,e)):Qi(Ri,null,e)}function os(e){return null==e||"boolean"==typeof e?Qi(Ri):m(e)?Qi(Ai,null,e.slice()):"object"==typeof e?is(e):Qi(ji,null,String(e))}function is(e){return null===e.el&&-1!==e.patchFlag||e.memo?e:es(e)}function ss(e,t){let n=0;const{shapeFlag:r}=e;if(null==t)t=null;else if(m(t))n=16;else if("object"==typeof t){if(65&r){const n=t.default;return void(n&&(n._c&&(n._d=!1),ss(e,n()),n._c&&(n._d=!0)))}{n=32;const r=t._;r||Ki in t?3===r&&Fn&&(1===Fn.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=Fn}}else _(t)?(t={default:t,_ctx:Fn},n=32):(t=String(t),64&r?(n=16,t=[ts(t)]):n=8);e.children=t,e.shapeFlag|=n}function ls(...e){const t={};for(let n=0;nps||Fn;let hs,vs,gs="__VUE_INSTANCE_SETTERS__";(vs=W()[gs])||(vs=W()[gs]=[]),vs.push((e=>ps=e)),hs=e=>{vs.length>1?vs.forEach((t=>t(e))):vs[0](e)};const ms=e=>{hs(e),e.scope.on()},ys=()=>{ps&&ps.scope.off(),hs(null)};function bs(e){return 4&e.vnode.shapeFlag}let ws,_s,xs=!1;function Ss(e,t=!1){xs=t;const{props:n,children:r}=e.vnode,o=bs(e);!function(e,t,n,r=!1){const o={},i={};V(i,Ki,1),e.propsDefaults=Object.create(null),Qo(e,t,o,i);for(const t in e.propsOptions[0])t in o||(o[t]=void 0);n?e.props=r?o:Et(o):e.type.props?e.props=o:e.props=i,e.attrs=i}(e,n,o,t),ui(e,r);const i=o?function(e,t){const n=e.type;0;e.accessCache=Object.create(null),e.proxy=Ft(new Proxy(e.ctx,ho)),!1;const{setup:r}=n;if(r){const n=e.setupContext=r.length>1?Ps(e):null;ms(e),Ie();const o=ln(r,e,0,[e.props,n]);if(Fe(),ys(),k(o)){if(o.then(ys,ys),t)return o.then((n=>{Os(e,n,t)})).catch((t=>{un(t,e,0)}));e.asyncDep=o}else Os(e,o,t)}else Cs(e,t)}(e,t):void 0;return xs=!1,i}function Os(e,t,n){_(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:O(t)&&(e.setupState=Yt(t)),Cs(e,n)}function ks(e){ws=e,_s=e=>{e.render._rc&&(e.withProxy=new Proxy(e.ctx,vo))}}const Es=()=>!ws;function Cs(e,t,n){const r=e.type;if(!e.render){if(!t&&ws&&!r.render){const t=r.template||No(e).template;if(t){0;const{isCustomElement:n,compilerOptions:o}=e.appContext.config,{delimiters:i,compilerOptions:s}=r,l=d(d({isCustomElement:n,delimiters:i},o),s);r.render=ws(t,l)}}e.render=r.render||a,_s&&_s(e)}ms(e),Ie();try{Lo(e)}finally{Fe(),ys()}}function Ps(e){const t=t=>{e.exposed=t||{}};return{get attrs(){return function(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get:(t,n)=>(Ne(e,0,"$attrs"),t[n])}))}(e)},slots:e.slots,emit:e.emit,expose:t}}function Ts(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Yt(Ft(e.exposed)),{get:(t,n)=>n in t?t[n]:n in fo?fo[n](e):void 0,has:(e,t)=>t in e||t in fo}))}function As(e,t=!0){return _(e)?e.displayName||e.name:e.name||t&&e.__name}function js(e){return _(e)&&"__vccOpts"in e}const Rs=(e,t)=>function(e,t,n=!1){let r,o;const i=_(e);return i?(r=e,o=a):(r=e.get,o=e.set),new rn(r,o,i||!o,n)}(e,0,xs);function Ls(e,t,n){const r=arguments.length;return 2===r?O(t)&&!m(t)?zi(t)?Qi(e,null,[t]):Qi(e,t):Qi(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):3===r&&zi(n)&&(n=[n]),Qi(e,t,n))}const Is=Symbol.for("v-scx"),Fs=()=>{{const e=Yo(Is);return e}};function Ns(){return void 0}function Ms(e,t,n,r){const o=n[r];if(o&&Ds(o,e))return o;const i=t();return i.memo=e.slice(),n[r]=i}function Ds(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let e=0;e0&&Fi&&Fi.push(e),!0}const Bs="3.3.8",Us={createComponentInstance:fs,setupComponent:Ss,renderComponentRoot:Vn,setCurrentRenderingInstance:Mn,isVNode:zi,normalizeVNode:os},$s=null,Vs=null,Hs="undefined"!=typeof document?document:null,zs=Hs&&Hs.createElement("template"),qs={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?Hs.createElementNS("http://www.w3.org/2000/svg",e):Hs.createElement(e,n?{is:n}:void 0);return"select"===e&&r&&null!=r.multiple&&o.setAttribute("multiple",r.multiple),o},createText:e=>Hs.createTextNode(e),createComment:e=>Hs.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Hs.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,i){const s=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),o!==i&&(o=o.nextSibling););else{zs.innerHTML=r?`${e}`:e;const o=zs.content;if(r){const e=o.firstChild;for(;e.firstChild;)o.appendChild(e.firstChild);o.removeChild(e)}t.insertBefore(o,n)}return[s?s.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ws="transition",Ks="animation",Gs=Symbol("_vtc"),Ys=(e,{slots:t})=>Ls(Er,el(e),t);Ys.displayName="Transition";const Js={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Qs=Ys.props=d({},Or,Js),Zs=(e,t=[])=>{m(e)?e.forEach((e=>e(...t))):e&&e(...t)},Xs=e=>!!e&&(m(e)?e.some((e=>e.length>1)):e.length>1);function el(e){const t={};for(const n in e)n in Js||(t[n]=e[n]);if(!1===e.css)return t;const{name:n="v",type:r,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:s=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=i,appearActiveClass:u=s,appearToClass:c=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,v=function(e){if(null==e)return null;if(O(e))return[tl(e.enter),tl(e.leave)];{const t=tl(e);return[t,t]}}(o),g=v&&v[0],m=v&&v[1],{onBeforeEnter:y,onEnter:b,onEnterCancelled:w,onLeave:_,onLeaveCancelled:x,onBeforeAppear:S=y,onAppear:k=b,onAppearCancelled:E=w}=t,C=(e,t,n)=>{rl(e,t?c:l),rl(e,t?u:s),n&&n()},P=(e,t)=>{e._isLeaving=!1,rl(e,f),rl(e,h),rl(e,p),t&&t()},T=e=>(t,n)=>{const o=e?k:b,s=()=>C(t,e,n);Zs(o,[t,s]),ol((()=>{rl(t,e?a:i),nl(t,e?c:l),Xs(o)||sl(t,r,g,s)}))};return d(t,{onBeforeEnter(e){Zs(y,[e]),nl(e,i),nl(e,s)},onBeforeAppear(e){Zs(S,[e]),nl(e,a),nl(e,u)},onEnter:T(!1),onAppear:T(!0),onLeave(e,t){e._isLeaving=!0;const n=()=>P(e,t);nl(e,f),cl(),nl(e,p),ol((()=>{e._isLeaving&&(rl(e,f),nl(e,h),Xs(_)||sl(e,r,m,n))})),Zs(_,[e,n])},onEnterCancelled(e){C(e,!1),Zs(w,[e])},onAppearCancelled(e){C(e,!0),Zs(E,[e])},onLeaveCancelled(e){P(e),Zs(x,[e])}})}function tl(e){return z(e)}function nl(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.add(t))),(e[Gs]||(e[Gs]=new Set)).add(t)}function rl(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.remove(t)));const n=e[Gs];n&&(n.delete(t),n.size||(e[Gs]=void 0))}function ol(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let il=0;function sl(e,t,n,r){const o=e._endId=++il,i=()=>{o===e._endId&&r()};if(n)return setTimeout(i,n);const{type:s,timeout:l,propCount:a}=ll(e,t);if(!s)return r();const u=s+"end";let c=0;const f=()=>{e.removeEventListener(u,p),i()},p=t=>{t.target===e&&++c>=a&&f()};setTimeout((()=>{c(n[e]||"").split(", "),o=r(`${Ws}Delay`),i=r(`${Ws}Duration`),s=al(o,i),l=r(`${Ks}Delay`),a=r(`${Ks}Duration`),u=al(l,a);let c=null,f=0,p=0;t===Ws?s>0&&(c=Ws,f=s,p=i.length):t===Ks?u>0&&(c=Ks,f=u,p=a.length):(f=Math.max(s,u),c=f>0?s>u?Ws:Ks:null,p=c?c===Ws?i.length:a.length:0);return{type:c,timeout:f,propCount:p,hasTransform:c===Ws&&/\b(transform|all)(,|$)/.test(r(`${Ws}Property`).toString())}}function al(e,t){for(;e.lengthul(t)+ul(e[n]))))}function ul(e){return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","."))}function cl(){return document.body.offsetHeight}const fl=Symbol("_vod"),pl={beforeMount(e,{value:t},{transition:n}){e[fl]="none"===e.style.display?"":e.style.display,n&&t?n.beforeEnter(e):dl(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),dl(e,!0),r.enter(e)):r.leave(e,(()=>{dl(e,!1)})):dl(e,t))},beforeUnmount(e,{value:t}){dl(e,t)}};function dl(e,t){e.style.display=t?e[fl]:"none"}const hl=/\s*!important$/;function vl(e,t,n){if(m(n))n.forEach((n=>vl(e,t,n)));else if(null==n&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=function(e,t){const n=ml[t];if(n)return n;let r=F(t);if("filter"!==r&&r in e)return ml[t]=r;r=D(r);for(let n=0;n{if(e._vts){if(e._vts<=n.attached)return}else e._vts=Date.now();an(function(e,t){if(m(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=kl(),n}(r,o);bl(e,n,s,l)}else s&&(!function(e,t,n,r){e.removeEventListener(t,n,r)}(e,n,s,l),i[t]=void 0)}}const xl=/(?:Once|Passive|Capture)$/;let Sl=0;const Ol=Promise.resolve(),kl=()=>Sl||(Ol.then((()=>Sl=0)),Sl=Date.now());const El=/^on[a-z]/;function Cl(e,t){const n=Lr(e);class r extends Al{constructor(e){super(n,e,t)}}return r.def=n,r}const Pl=e=>Cl(e,ga),Tl="undefined"!=typeof HTMLElement?HTMLElement:class{};class Al extends Tl{constructor(e,t={},n){super(),this._def=e,this._props=t,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this._ob=null,this.shadowRoot&&n?n(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:"open"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,this._ob&&(this._ob.disconnect(),this._ob=null),bn((()=>{this._connected||(va(null,this.shadowRoot),this._instance=null)}))}_resolveDef(){this._resolved=!0;for(let e=0;e{for(const t of e)this._setAttr(t.attributeName)})),this._ob.observe(this,{attributes:!0});const e=(e,t=!1)=>{const{props:n,styles:r}=e;let o;if(n&&!m(n))for(const e in n){const t=n[e];(t===Number||t&&t.type===Number)&&(e in this._props&&(this._props[e]=z(this._props[e])),(o||(o=Object.create(null)))[F(e)]=!0)}this._numberProps=o,t&&this._resolveProps(e),this._applyStyles(r),this._update()},t=this._def.__asyncLoader;t?t().then((t=>e(t,!0))):e(this._def)}_resolveProps(e){const{props:t}=e,n=m(t)?t:Object.keys(t||{});for(const e of Object.keys(this))"_"!==e[0]&&n.includes(e)&&this._setProp(e,this[e],!0,!1);for(const e of n.map(F))Object.defineProperty(this,e,{get(){return this._getProp(e)},set(t){this._setProp(e,t)}})}_setAttr(e){let t=this.getAttribute(e);const n=F(e);this._numberProps&&this._numberProps[n]&&(t=z(t)),this._setProp(n,t,!1)}_getProp(e){return this._props[e]}_setProp(e,t,n=!0,r=!0){t!==this._props[e]&&(this._props[e]=t,r&&this._instance&&this._update(),n&&(!0===t?this.setAttribute(M(e),""):"string"==typeof t||"number"==typeof t?this.setAttribute(M(e),t+""):t||this.removeAttribute(M(e))))}_update(){va(this._createVNode(),this.shadowRoot)}_createVNode(){const e=Qi(this._def,d({},this._props));return this._instance||(e.ce=e=>{this._instance=e,e.isCE=!0;const t=(e,t)=>{this.dispatchEvent(new CustomEvent(e,{detail:t}))};e.emit=(e,...n)=>{t(e,n),M(e)!==e&&t(M(e),n)};let n=this;for(;n=n&&(n.parentNode||n.host);)if(n instanceof Al){e.parent=n._instance,e.provides=n._instance.provides;break}}),e}_applyStyles(e){e&&e.forEach((e=>{const t=document.createElement("style");t.textContent=e,this.shadowRoot.appendChild(t)}))}}function jl(e="$style"){{const t=ds();if(!t)return s;const n=t.type.__cssModules;if(!n)return s;const r=n[e];return r||s}}function Rl(e){const t=ds();if(!t)return;const n=t.ut=(n=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach((e=>Il(e,n)))},r=()=>{const r=e(t.proxy);Ll(t.subTree,r),n(r)};cr(r),Jr((()=>{const e=new MutationObserver(r);e.observe(t.subTree.el.parentNode,{childList:!0}),eo((()=>e.disconnect()))}))}function Ll(e,t){if(128&e.shapeFlag){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push((()=>{Ll(n.activeBranch,t)}))}for(;e.component;)e=e.component.subTree;if(1&e.shapeFlag&&e.el)Il(e.el,t);else if(e.type===Ai)e.children.forEach((e=>Ll(e,t)));else if(e.type===Li){let{el:n,anchor:r}=e;for(;n&&(Il(n,t),n!==r);)n=n.nextSibling}}function Il(e,t){if(1===e.nodeType){const n=e.style;for(const e in t)n.setProperty(`--${e}`,t[e])}}const Fl=new WeakMap,Nl=new WeakMap,Ml=Symbol("_moveCb"),Dl=Symbol("_enterCb"),Bl={name:"TransitionGroup",props:d({},Qs,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=ds(),r=xr();let o,i;return Zr((()=>{if(!o.length)return;const t=e.moveClass||`${e.name||"v"}-move`;if(!function(e,t,n){const r=e.cloneNode(),o=e[Gs];o&&o.forEach((e=>{e.split(/\s+/).forEach((e=>e&&r.classList.remove(e)))}));n.split(/\s+/).forEach((e=>e&&r.classList.add(e))),r.style.display="none";const i=1===t.nodeType?t:t.parentNode;i.appendChild(r);const{hasTransform:s}=ll(r);return i.removeChild(r),s}(o[0].el,n.vnode.el,t))return;o.forEach($l),o.forEach(Vl);const r=o.filter(Hl);cl(),r.forEach((e=>{const n=e.el,r=n.style;nl(n,t),r.transform=r.webkitTransform=r.transitionDuration="";const o=n[Ml]=e=>{e&&e.target!==n||e&&!/transform$/.test(e.propertyName)||(n.removeEventListener("transitionend",o),n[Ml]=null,rl(n,t))};n.addEventListener("transitionend",o)}))})),()=>{const s=It(e),l=el(s);let a=s.tag||Ai;o=i,i=t.default?Rr(t.default()):[];for(let e=0;e{const t=e.props["onUpdate:modelValue"]||!1;return m(t)?e=>$(t,e):t};function ql(e){e.target.composing=!0}function Wl(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Kl=Symbol("_assign"),Gl={created(e,{modifiers:{lazy:t,trim:n,number:r}},o){e[Kl]=zl(o);const i=r||o.props&&"number"===o.props.type;bl(e,t?"change":"input",(t=>{if(t.target.composing)return;let r=e.value;n&&(r=r.trim()),i&&(r=H(r)),e[Kl](r)})),n&&bl(e,"change",(()=>{e.value=e.value.trim()})),t||(bl(e,"compositionstart",ql),bl(e,"compositionend",Wl),bl(e,"change",Wl))},mounted(e,{value:t}){e.value=null==t?"":t},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:r,number:o}},i){if(e[Kl]=zl(i),e.composing)return;if(document.activeElement===e&&"range"!==e.type){if(n)return;if(r&&e.value.trim()===t)return;if((o||"number"===e.type)&&H(e.value)===t)return}const s=null==t?"":t;e.value!==s&&(e.value=s)}},Yl={deep:!0,created(e,t,n){e[Kl]=zl(n),bl(e,"change",(()=>{const t=e._modelValue,n=ea(e),r=e.checked,o=e[Kl];if(m(t)){const e=ue(t,n),i=-1!==e;if(r&&!i)o(t.concat(n));else if(!r&&i){const n=[...t];n.splice(e,1),o(n)}}else if(b(t)){const e=new Set(t);r?e.add(n):e.delete(n),o(e)}else o(ta(e,r))}))},mounted:Jl,beforeUpdate(e,t,n){e[Kl]=zl(n),Jl(e,t,n)}};function Jl(e,{value:t,oldValue:n},r){e._modelValue=t,m(t)?e.checked=ue(t,r.props.value)>-1:b(t)?e.checked=t.has(r.props.value):t!==n&&(e.checked=ae(t,ta(e,!0)))}const Ql={created(e,{value:t},n){e.checked=ae(t,n.props.value),e[Kl]=zl(n),bl(e,"change",(()=>{e[Kl](ea(e))}))},beforeUpdate(e,{value:t,oldValue:n},r){e[Kl]=zl(r),t!==n&&(e.checked=ae(t,r.props.value))}},Zl={deep:!0,created(e,{value:t,modifiers:{number:n}},r){const o=b(t);bl(e,"change",(()=>{const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>n?H(ea(e)):ea(e)));e[Kl](e.multiple?o?new Set(t):t:t[0])})),e[Kl]=zl(r)},mounted(e,{value:t}){Xl(e,t)},beforeUpdate(e,t,n){e[Kl]=zl(n)},updated(e,{value:t}){Xl(e,t)}};function Xl(e,t){const n=e.multiple;if(!n||m(t)||b(t)){for(let r=0,o=e.options.length;r-1:o.selected=t.has(i);else if(ae(ea(o),t))return void(e.selectedIndex!==r&&(e.selectedIndex=r))}n||-1===e.selectedIndex||(e.selectedIndex=-1)}}function ea(e){return"_value"in e?e._value:e.value}function ta(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const na={created(e,t,n){oa(e,t,n,null,"created")},mounted(e,t,n){oa(e,t,n,null,"mounted")},beforeUpdate(e,t,n,r){oa(e,t,n,r,"beforeUpdate")},updated(e,t,n,r){oa(e,t,n,r,"updated")}};function ra(e,t){switch(e){case"SELECT":return Zl;case"TEXTAREA":return Gl;default:switch(t){case"checkbox":return Yl;case"radio":return Ql;default:return Gl}}}function oa(e,t,n,r,o){const i=ra(e.tagName,n.props&&n.props.type)[o];i&&i(e,t,n,r)}const ia=["ctrl","shift","alt","meta"],sa={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>ia.some((n=>e[`${n}Key`]&&!t.includes(n)))},la=(e,t)=>(n,...r)=>{for(let e=0;en=>{if(!("key"in n))return;const r=M(n.key);return t.some((e=>e===r||aa[e]===r))?e(n):void 0},ca=d({patchProp:(e,t,n,r,o=!1,i,s,l,a)=>{"class"===t?function(e,t,n){const r=e[Gs];r&&(t=(t?[t,...r]:[...r]).join(" ")),null==t?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}(e,r,o):"style"===t?function(e,t,n){const r=e.style,o=x(n);if(n&&!o){if(t&&!x(t))for(const e in t)null==n[e]&&vl(r,e,"");for(const e in n)vl(r,e,n[e])}else{const i=r.display;o?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),fl in e&&(r.display=i)}}(e,n,r):f(t)?p(t)||_l(e,t,0,r,s):("."===t[0]?(t=t.slice(1),1):"^"===t[0]?(t=t.slice(1),0):function(e,t,n,r){if(r)return"innerHTML"===t||"textContent"===t||!!(t in e&&El.test(t)&&_(n));if("spellcheck"===t||"draggable"===t||"translate"===t)return!1;if("form"===t)return!1;if("list"===t&&"INPUT"===e.tagName)return!1;if("type"===t&&"TEXTAREA"===e.tagName)return!1;if(El.test(t)&&x(n))return!1;return t in e}(e,t,r,o))?function(e,t,n,r,o,i,s){if("innerHTML"===t||"textContent"===t)return r&&s(r,o,i),void(e[t]=null==n?"":n);const l=e.tagName;if("value"===t&&"PROGRESS"!==l&&!l.includes("-")){e._value=n;const r=null==n?"":n;return("OPTION"===l?e.getAttribute("value"):e.value)!==r&&(e.value=r),void(null==n&&e.removeAttribute(t))}let a=!1;if(""===n||null==n){const r=typeof e[t];"boolean"===r?n=le(n):null==n&&"string"===r?(n="",a=!0):"number"===r&&(n=0,a=!0)}try{e[t]=n}catch(e){}a&&e.removeAttribute(t)}(e,t,r,i,s,l,a):("true-value"===t?e._trueValue=r:"false-value"===t&&(e._falseValue=r),function(e,t,n,r,o){if(r&&t.startsWith("xlink:"))null==n?e.removeAttributeNS(yl,t.slice(6,t.length)):e.setAttributeNS(yl,t,n);else{const r=se(t);null==n||r&&!le(n)?e.removeAttribute(t):e.setAttribute(t,r?"":n)}}(e,t,r,o))}},qs);let fa,pa=!1;function da(){return fa||(fa=mi(ca))}function ha(){return fa=pa?fa:yi(ca),pa=!0,fa}const va=(...e)=>{da().render(...e)},ga=(...e)=>{ha().hydrate(...e)},ma=(...e)=>{const t=da().createApp(...e);const{mount:n}=t;return t.mount=e=>{const r=ba(e);if(!r)return;const o=t._component;_(o)||o.render||o.template||(o.template=r.innerHTML),r.innerHTML="";const i=n(r,!1,r instanceof SVGElement);return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t},ya=(...e)=>{const t=ha().createApp(...e);const{mount:n}=t;return t.mount=e=>{const t=ba(e);if(t)return n(t,!0,t instanceof SVGElement)},t};function ba(e){if(x(e)){return document.querySelector(e)}return e}let wa=!1;const _a=()=>{wa||(wa=!0,Gl.getSSRProps=({value:e})=>({value:e}),Ql.getSSRProps=({value:e},t)=>{if(t.props&&ae(t.props.value,e))return{checked:!0}},Yl.getSSRProps=({value:e},t)=>{if(m(e)){if(t.props&&ue(e,t.props.value)>-1)return{checked:!0}}else if(b(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},na.getSSRProps=(e,t)=>{if("string"!=typeof t.type)return;const n=ra(t.type.toUpperCase(),t.props&&t.props.type);return n.getSSRProps?n.getSSRProps(e,t):void 0},pl.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}})};function xa(e){throw e}function Sa(e){}function Oa(e,t,n,r){const o=new SyntaxError(String(e));return o.code=e,o.loc=t,o}const ka=Symbol(""),Ea=Symbol(""),Ca=Symbol(""),Pa=Symbol(""),Ta=Symbol(""),Aa=Symbol(""),ja=Symbol(""),Ra=Symbol(""),La=Symbol(""),Ia=Symbol(""),Fa=Symbol(""),Na=Symbol(""),Ma=Symbol(""),Da=Symbol(""),Ba=Symbol(""),Ua=Symbol(""),$a=Symbol(""),Va=Symbol(""),Ha=Symbol(""),za=Symbol(""),qa=Symbol(""),Wa=Symbol(""),Ka=Symbol(""),Ga=Symbol(""),Ya=Symbol(""),Ja=Symbol(""),Qa=Symbol(""),Za=Symbol(""),Xa=Symbol(""),eu=Symbol(""),tu=Symbol(""),nu=Symbol(""),ru=Symbol(""),ou=Symbol(""),iu=Symbol(""),su=Symbol(""),lu=Symbol(""),au=Symbol(""),uu=Symbol(""),cu={[ka]:"Fragment",[Ea]:"Teleport",[Ca]:"Suspense",[Pa]:"KeepAlive",[Ta]:"BaseTransition",[Aa]:"openBlock",[ja]:"createBlock",[Ra]:"createElementBlock",[La]:"createVNode",[Ia]:"createElementVNode",[Fa]:"createCommentVNode",[Na]:"createTextVNode",[Ma]:"createStaticVNode",[Da]:"resolveComponent",[Ba]:"resolveDynamicComponent",[Ua]:"resolveDirective",[$a]:"resolveFilter",[Va]:"withDirectives",[Ha]:"renderList",[za]:"renderSlot",[qa]:"createSlots",[Wa]:"toDisplayString",[Ka]:"mergeProps",[Ga]:"normalizeClass",[Ya]:"normalizeStyle",[Ja]:"normalizeProps",[Qa]:"guardReactiveProps",[Za]:"toHandlers",[Xa]:"camelize",[eu]:"capitalize",[tu]:"toHandlerKey",[nu]:"setBlockTracking",[ru]:"pushScopeId",[ou]:"popScopeId",[iu]:"withCtx",[su]:"unref",[lu]:"isRef",[au]:"withMemo",[uu]:"isMemoSame"};const fu={source:"",start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}};function pu(e,t,n,r,o,i,s,l=!1,a=!1,u=!1,c=fu){return e&&(l?(e.helper(Aa),e.helper(xu(e.inSSR,u))):e.helper(_u(e.inSSR,u)),s&&e.helper(Va)),{type:13,tag:t,props:n,children:r,patchFlag:o,dynamicProps:i,directives:s,isBlock:l,disableTracking:a,isComponent:u,loc:c}}function du(e,t=fu){return{type:17,loc:t,elements:e}}function hu(e,t=fu){return{type:15,loc:t,properties:e}}function vu(e,t){return{type:16,loc:fu,key:x(e)?gu(e,!0):e,value:t}}function gu(e,t=!1,n=fu,r=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:r}}function mu(e,t=fu){return{type:8,loc:t,children:e}}function yu(e,t=[],n=fu){return{type:14,loc:n,callee:e,arguments:t}}function bu(e,t=void 0,n=!1,r=!1,o=fu){return{type:18,params:e,returns:t,newline:n,isSlot:r,loc:o}}function wu(e,t,n,r=!0){return{type:19,test:e,consequent:t,alternate:n,newline:r,loc:fu}}function _u(e,t){return e||t?La:Ia}function xu(e,t){return e||t?ja:Ra}function Su(e,{helper:t,removeHelper:n,inSSR:r}){e.isBlock||(e.isBlock=!0,n(_u(r,e.isComponent)),t(Aa),t(xu(r,e.isComponent)))}const Ou=e=>4===e.type&&e.isStatic,ku=(e,t)=>e===t||e===M(t);function Eu(e){return ku(e,"Teleport")?Ea:ku(e,"Suspense")?Ca:ku(e,"KeepAlive")?Pa:ku(e,"BaseTransition")?Ta:void 0}const Cu=/^\d|[^\$\w]/,Pu=e=>!Cu.test(e),Tu=/[A-Za-z_$\xA0-\uFFFF]/,Au=/[\.\?\w$\xA0-\uFFFF]/,ju=/\s+[.[]\s*|\s*[.[]\s+/g,Ru=e=>{e=e.trim().replace(ju,(e=>e.trim()));let t=0,n=[],r=0,o=0,i=null;for(let s=0;s4===e.key.type&&e.key.content===r))}return n}function Ku(e,t){return`_${t}_${e.replace(/[^\w]/g,((t,n)=>"-"===t?"_":e.charCodeAt(n).toString()))}`}function Gu(e,t){const n=t.options?t.options.compatConfig:t.compatConfig,r=n&&n[e];return"MODE"===e?r||3:r}function Yu(e,t){const n=Gu("MODE",t),r=Gu(e,t);return 3===n?!0===r:!1!==r}function Ju(e,t,n,...r){return Yu(e,t)}const Qu=/&(gt|lt|amp|apos|quot);/g,Zu={gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},Xu={delimiters:["{{","}}"],getNamespace:()=>0,getTextMode:()=>0,isVoidTag:u,isPreTag:u,isCustomElement:u,decodeEntities:e=>e.replace(Qu,((e,t)=>Zu[t])),onError:xa,onWarn:Sa,comments:!1};function ec(e,t={}){const n=function(e,t){const n=d({},Xu);let r;for(r in t)n[r]=void 0===t[r]?Xu[r]:t[r];return{options:n,column:1,line:1,offset:0,originalSource:e,source:e,inPre:!1,inVPre:!1,onWarn:n.onWarn}}(e,t),r=hc(n);return function(e,t=fu){return{type:0,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:0,temps:0,codegenNode:void 0,loc:t}}(tc(n,0,[]),vc(n,r))}function tc(e,t,n){const r=gc(n),o=r?r.ns:0,i=[];for(;!xc(e,t,n);){const s=e.source;let l;if(0===t||1===t)if(!e.inVPre&&mc(s,e.options.delimiters[0]))l=fc(e,t);else if(0===t&&"<"===s[0])if(1===s.length)_c(e,5,1);else if("!"===s[1])mc(s,"\x3c!--")?l=oc(e):mc(s,""===s[2]){_c(e,14,2),yc(e,3);continue}if(/[a-z]/i.test(s[2])){_c(e,23),ac(e,1,r);continue}_c(e,12,2),l=ic(e)}else/[a-z]/i.test(s[1])?(l=sc(e,n),Yu("COMPILER_NATIVE_TEMPLATE",e)&&l&&"template"===l.tag&&!l.props.some((e=>7===e.type&&lc(e.name)))&&(l=l.children)):"?"===s[1]?(_c(e,21,1),l=ic(e)):_c(e,12,1);if(l||(l=pc(e,t)),m(l))for(let e=0;e/.exec(e.source);if(r){r.index<=3&&_c(e,0),r[1]&&_c(e,10),n=e.source.slice(4,r.index);const t=e.source.slice(0,r.index);let o=1,i=0;for(;-1!==(i=t.indexOf("\x3c!--",o));)yc(e,i-o+1),i+4");return-1===o?(r=e.source.slice(n),yc(e,e.source.length)):(r=e.source.slice(n,o),yc(e,o+1)),{type:3,content:r,loc:vc(e,t)}}function sc(e,t){const n=e.inPre,r=e.inVPre,o=gc(t),i=ac(e,0,o),s=e.inPre&&!n,l=e.inVPre&&!r;if(i.isSelfClosing||e.options.isVoidTag(i.tag))return s&&(e.inPre=!1),l&&(e.inVPre=!1),i;t.push(i);const a=e.options.getTextMode(i,o),u=tc(e,a,t);t.pop();{const t=i.props.find((e=>6===e.type&&"inline-template"===e.name));if(t&&Ju("COMPILER_INLINE_TEMPLATE",e,t.loc)){const n=vc(e,i.loc.end);t.value={type:2,content:n.source,loc:n}}}if(i.children=u,Sc(e.source,i.tag))ac(e,1,o);else if(_c(e,24,0,i.loc.start),0===e.source.length&&"script"===i.tag.toLowerCase()){const t=u[0];t&&mc(t.loc.source,"\x3c!--")&&_c(e,8)}return i.loc=vc(e,i.loc.start),s&&(e.inPre=!1),l&&(e.inVPre=!1),i}const lc=i("if,else,else-if,for,slot");function ac(e,t,n){const r=hc(e),o=/^<\/?([a-z][^\t\r\n\f />]*)/i.exec(e.source),i=o[1],s=e.options.getNamespace(i,n);yc(e,o[0].length),bc(e);const l=hc(e),a=e.source;e.options.isPreTag(i)&&(e.inPre=!0);let u=uc(e,t);0===t&&!e.inVPre&&u.some((e=>7===e.type&&"pre"===e.name))&&(e.inVPre=!0,d(e,l),e.source=a,u=uc(e,t).filter((e=>"v-pre"!==e.name)));let c=!1;if(0===e.source.length?_c(e,9):(c=mc(e.source,"/>"),1===t&&c&&_c(e,4),yc(e,c?2:1)),1===t)return;let f=0;return e.inVPre||("slot"===i?f=2:"template"===i?u.some((e=>7===e.type&&lc(e.name)))&&(f=3):function(e,t,n){const r=n.options;if(r.isCustomElement(e))return!1;if("component"===e||/^[A-Z]/.test(e)||Eu(e)||r.isBuiltInComponent&&r.isBuiltInComponent(e)||r.isNativeTag&&!r.isNativeTag(e))return!0;for(let e=0;e0&&!mc(e.source,">")&&!mc(e.source,"/>");){if(mc(e.source,"/")){_c(e,22),yc(e,1),bc(e);continue}1===t&&_c(e,3);const o=cc(e,r);6===o.type&&o.value&&"class"===o.name&&(o.value.content=o.value.content.replace(/\s+/g," ").trim()),0===t&&n.push(o),/^[^\t\r\n\f />]/.test(e.source)&&_c(e,15),bc(e)}return n}function cc(e,t){var n;const r=hc(e),o=/^[^\t\r\n\f />][^\t\r\n\f />=]*/.exec(e.source)[0];t.has(o)&&_c(e,2),t.add(o),"="===o[0]&&_c(e,19);{const t=/["'<]/g;let n;for(;n=t.exec(o);)_c(e,17,n.index)}let i;yc(e,o.length),/^[\t\r\n\f ]*=/.test(e.source)&&(bc(e),yc(e,1),bc(e),i=function(e){const t=hc(e);let n;const r=e.source[0],o='"'===r||"'"===r;if(o){yc(e,1);const t=e.source.indexOf(r);-1===t?n=dc(e,e.source.length,4):(n=dc(e,t,4),yc(e,1))}else{const t=/^[^\t\r\n\f >]+/.exec(e.source);if(!t)return;const r=/["'<=`]/g;let o;for(;o=r.exec(t[0]);)_c(e,18,o.index);n=dc(e,t[0].length,4)}return{content:n,isQuoted:o,loc:vc(e,t)}}(e),i||_c(e,13));const s=vc(e,r);if(!e.inVPre&&/^(v-[A-Za-z0-9-]|:|\.|@|#)/.test(o)){const t=/(?:^v-([a-z0-9-]+))?(?:(?::|^\.|^@|^#)(\[[^\]]+\]|[^\.]+))?(.+)?$/i.exec(o);let l,a=mc(o,"."),u=t[1]||(a||mc(o,":")?"bind":mc(o,"@")?"on":"slot");if(t[2]){const i="slot"===u,s=o.lastIndexOf(t[2],o.length-((null==(n=t[3])?void 0:n.length)||0)),a=vc(e,wc(e,r,s),wc(e,r,s+t[2].length+(i&&t[3]||"").length));let c=t[2],f=!0;c.startsWith("[")?(f=!1,c.endsWith("]")?c=c.slice(1,c.length-1):(_c(e,27),c=c.slice(1))):i&&(c+=t[3]||""),l={type:4,content:c,isStatic:f,constType:f?3:0,loc:a}}if(i&&i.isQuoted){const e=i.loc;e.start.offset++,e.start.column++,e.end=Iu(e.start,i.content),e.source=e.source.slice(1,-1)}const c=t[3]?t[3].slice(1).split("."):[];return a&&c.push("prop"),"bind"===u&&l&&c.includes("sync")&&Ju("COMPILER_V_BIND_SYNC",e,0,l.loc.source)&&(u="model",c.splice(c.indexOf("sync"),1)),{type:7,name:u,exp:i&&{type:4,content:i.content,isStatic:!1,constType:0,loc:i.loc},arg:l,modifiers:c,loc:s}}return!e.inVPre&&mc(o,"v-")&&_c(e,26),{type:6,name:o,value:i&&{type:2,content:i.content,loc:i.loc},loc:s}}function fc(e,t){const[n,r]=e.options.delimiters,o=e.source.indexOf(r,n.length);if(-1===o)return void _c(e,25);const i=hc(e);yc(e,n.length);const s=hc(e),l=hc(e),a=o-n.length,u=e.source.slice(0,a),c=dc(e,a,t),f=c.trim(),p=c.indexOf(f);p>0&&Fu(s,u,p);return Fu(l,u,a-(c.length-f.length-p)),yc(e,r.length),{type:5,content:{type:4,isStatic:!1,constType:0,content:f,loc:vc(e,s,l)},loc:vc(e,i)}}function pc(e,t){const n=3===t?["]]>"]:["<",e.options.delimiters[0]];let r=e.source.length;for(let t=0;to&&(r=o)}const o=hc(e);return{type:2,content:dc(e,r,t),loc:vc(e,o)}}function dc(e,t,n){const r=e.source.slice(0,t);return yc(e,t),2!==n&&3!==n&&r.includes("&")?e.options.decodeEntities(r,4===n):r}function hc(e){const{column:t,line:n,offset:r}=e;return{column:t,line:n,offset:r}}function vc(e,t,n){return{start:t,end:n=n||hc(e),source:e.originalSource.slice(t.offset,n.offset)}}function gc(e){return e[e.length-1]}function mc(e,t){return e.startsWith(t)}function yc(e,t){const{source:n}=e;Fu(e,n,t),e.source=n.slice(t)}function bc(e){const t=/^[\t\r\n\f ]+/.exec(e.source);t&&yc(e,t[0].length)}function wc(e,t,n){return Iu(t,e.originalSource.slice(t.offset,n),n)}function _c(e,t,n,r=hc(e)){n&&(r.offset+=n,r.column+=n),e.options.onError(Oa(t,{start:r,end:r,source:""}))}function xc(e,t,n){const r=e.source;switch(t){case 0:if(mc(r,"=0;--e)if(Sc(r,n[e].tag))return!0;break;case 1:case 2:{const e=gc(n);if(e&&Sc(r,e.tag))return!0;break}case 3:if(mc(r,"]]>"))return!0}return!r}function Sc(e,t){return mc(e,"]/.test(e[2+t.length]||">")}function Oc(e,t){Ec(e,t,kc(e,e.children[0]))}function kc(e,t){const{children:n}=e;return 1===n.length&&1===t.type&&!Vu(t)}function Ec(e,t,n=!1){const{children:r}=e,o=r.length;let i=0;for(let e=0;e0){if(e>=2){o.codegenNode.patchFlag="-1",o.codegenNode=t.hoist(o.codegenNode),i++;continue}}else{const e=o.codegenNode;if(13===e.type){const n=Rc(e);if((!n||512===n||1===n)&&Ac(o,t)>=2){const n=jc(o);n&&(e.props=t.hoist(n))}e.dynamicProps&&(e.dynamicProps=t.hoist(e.dynamicProps))}}}if(1===o.type){const e=1===o.tagType;e&&t.scopes.vSlot++,Ec(o,t),e&&t.scopes.vSlot--}else if(11===o.type)Ec(o,t,1===o.children.length);else if(9===o.type)for(let e=0;e1)for(let o=0;o`_${cu[C.helper(e)]}`,replaceNode(e){C.parent.children[C.childIndex]=C.currentNode=e},removeNode(e){const t=C.parent.children,n=e?t.indexOf(e):C.currentNode?C.childIndex:-1;e&&e!==C.currentNode?C.childIndex>n&&(C.childIndex--,C.onNodeRemoved()):(C.currentNode=null,C.onNodeRemoved()),C.parent.children.splice(n,1)},onNodeRemoved:()=>{},addIdentifiers(e){},removeIdentifiers(e){},hoist(e){x(e)&&(e=gu(e)),C.hoists.push(e);const t=gu(`_hoisted_${C.hoists.length}`,!1,e.loc,2);return t.hoisted=e,t},cache:(e,t=!1)=>function(e,t,n=!1){return{type:20,index:e,value:t,isVNode:n,loc:fu}}(C.cached++,e,t)};return C.filters=new Set,C}function Ic(e,t){const n=Lc(e,t);Fc(e,n),t.hoistStatic&&Oc(e,n),t.ssr||function(e,t){const{helper:n}=t,{children:r}=e;if(1===r.length){const n=r[0];if(kc(e,n)&&n.codegenNode){const r=n.codegenNode;13===r.type&&Su(r,t),e.codegenNode=r}else e.codegenNode=n}else if(r.length>1){let r=64;K[64];0,e.codegenNode=pu(t,n(ka),void 0,e.children,r+"",void 0,void 0,!0,void 0,!1)}}(e,n),e.helpers=new Set([...n.helpers.keys()]),e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached,e.filters=[...n.filters]}function Fc(e,t){t.currentNode=e;const{nodeTransforms:n}=t,r=[];for(let o=0;o{n--};for(;nt===e:t=>e.test(t);return(e,r)=>{if(1===e.type){const{props:o}=e;if(3===e.tagType&&o.some(Uu))return;const i=[];for(let s=0;s`${cu[e]}: _${cu[e]}`;function Bc(e,{mode:t="function",prefixIdentifiers:n="module"===t,sourceMap:r=!1,filename:o="template.vue.html",scopeId:i=null,optimizeImports:s=!1,runtimeGlobalName:l="Vue",runtimeModuleName:a="vue",ssrRuntimeModuleName:u="vue/server-renderer",ssr:c=!1,isTS:f=!1,inSSR:p=!1}){const d={mode:t,prefixIdentifiers:n,sourceMap:r,filename:o,scopeId:i,optimizeImports:s,runtimeGlobalName:l,runtimeModuleName:a,ssrRuntimeModuleName:u,ssr:c,isTS:f,inSSR:p,source:e.loc.source,code:"",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper:e=>`_${cu[e]}`,push(e,t){d.code+=e},indent(){h(++d.indentLevel)},deindent(e=!1){e?--d.indentLevel:h(--d.indentLevel)},newline(){h(d.indentLevel)}};function h(e){d.push("\n"+" ".repeat(e))}return d}function Uc(e,t={}){const n=Bc(e,t);t.onContextCreated&&t.onContextCreated(n);const{mode:r,push:o,prefixIdentifiers:i,indent:s,deindent:l,newline:a,scopeId:u,ssr:c}=n,f=Array.from(e.helpers),p=f.length>0,d=!i&&"module"!==r,h=n;!function(e,t){const{ssr:n,prefixIdentifiers:r,push:o,newline:i,runtimeModuleName:s,runtimeGlobalName:l,ssrRuntimeModuleName:a}=t,u=l,c=Array.from(e.helpers);if(c.length>0&&(o(`const _Vue = ${u}\n`),e.hoists.length)){o(`const { ${[La,Ia,Fa,Na,Ma].filter((e=>c.includes(e))).map(Dc).join(", ")} } = _Vue\n`)}(function(e,t){if(!e.length)return;t.pure=!0;const{push:n,newline:r,helper:o,scopeId:i,mode:s}=t;r();for(let o=0;o0)&&a()),e.directives.length&&($c(e.directives,"directive",n),e.temps>0&&a()),e.filters&&e.filters.length&&(a(),$c(e.filters,"filter",n),a()),e.temps>0){o("let ");for(let t=0;t0?", ":""}_temp${t}`)}return(e.components.length||e.directives.length||e.temps)&&(o("\n"),a()),c||o("return "),e.codegenNode?zc(e.codegenNode,n):o("null"),d&&(l(),o("}")),l(),o("}"),{ast:e,code:n.code,preamble:"",map:n.map?n.map.toJSON():void 0}}function $c(e,t,{helper:n,push:r,newline:o,isTS:i}){const s=n("filter"===t?$a:"component"===t?Da:Ua);for(let n=0;n3||!1;t.push("["),n&&t.indent(),Hc(e,t,n),n&&t.deindent(),t.push("]")}function Hc(e,t,n=!1,r=!0){const{push:o,newline:i}=t;for(let s=0;se||"null"))}([i,s,l,a,u]),t),n(")"),f&&n(")");c&&(n(", "),zc(c,t),n(")"))}(e,t);break;case 14:!function(e,t){const{push:n,helper:r,pure:o}=t,i=x(e.callee)?e.callee:r(e.callee);o&&n(Mc);n(i+"(",e),Hc(e.arguments,t),n(")")}(e,t);break;case 15:!function(e,t){const{push:n,indent:r,deindent:o,newline:i}=t,{properties:s}=e;if(!s.length)return void n("{}",e);const l=s.length>1||!1;n(l?"{":"{ "),l&&r();for(let e=0;e "),(a||l)&&(n("{"),r());s?(a&&n("return "),m(s)?Vc(s,t):zc(s,t)):l&&zc(l,t);(a||l)&&(o(),n("}"));u&&(e.isNonScopedSlot&&n(", undefined, true"),n(")"))}(e,t);break;case 19:!function(e,t){const{test:n,consequent:r,alternate:o,newline:i}=e,{push:s,indent:l,deindent:a,newline:u}=t;if(4===n.type){const e=!Pu(n.content);e&&s("("),qc(n,t),e&&s(")")}else s("("),zc(n,t),s(")");i&&l(),t.indentLevel++,i||s(" "),s("? "),zc(r,t),t.indentLevel--,i&&u(),i||s(" "),s(": ");const c=19===o.type;c||t.indentLevel++;zc(o,t),c||t.indentLevel--;i&&a(!0)}(e,t);break;case 20:!function(e,t){const{push:n,helper:r,indent:o,deindent:i,newline:s}=t;n(`_cache[${e.index}] || (`),e.isVNode&&(o(),n(`${r(nu)}(-1),`),s());n(`_cache[${e.index}] = `),zc(e.value,t),e.isVNode&&(n(","),s(),n(`${r(nu)}(1),`),s(),n(`_cache[${e.index}]`),i());n(")")}(e,t);break;case 21:Hc(e.body,t,!0,!1)}}function qc(e,t){const{content:n,isStatic:r}=e;t.push(r?JSON.stringify(n):n,e)}function Wc(e,t){for(let n=0;nfunction(e,t,n,r){if(!("else"===t.name||t.exp&&t.exp.content.trim())){const r=t.exp?t.exp.loc:e.loc;n.onError(Oa(28,t.loc)),t.exp=gu("true",!1,r)}0;if("if"===t.name){const o=Yc(e,t),i={type:9,loc:e.loc,branches:[o]};if(n.replaceNode(i),r)return r(i,o,!0)}else{const o=n.parent.children;let i=o.indexOf(e);for(;i-- >=-1;){const s=o[i];if(s&&3===s.type)n.removeNode(s);else{if(!s||2!==s.type||s.content.trim().length){if(s&&9===s.type){"else-if"===t.name&&void 0===s.branches[s.branches.length-1].condition&&n.onError(Oa(30,e.loc)),n.removeNode();const o=Yc(e,t);0,s.branches.push(o);const i=r&&r(s,o,!1);Fc(o,n),i&&i(),n.currentNode=null}else n.onError(Oa(30,e.loc));break}n.removeNode(s)}}}}(e,t,n,((e,t,r)=>{const o=n.parent.children;let i=o.indexOf(e),s=0;for(;i-- >=0;){const e=o[i];e&&9===e.type&&(s+=e.branches.length)}return()=>{if(r)e.codegenNode=Jc(t,s,n);else{const r=function(e){for(;;)if(19===e.type){if(19!==e.alternate.type)return e;e=e.alternate}else 20===e.type&&(e=e.value)}(e.codegenNode);r.alternate=Jc(t,s+e.branches.length-1,n)}}}))));function Yc(e,t){const n=3===e.tagType;return{type:10,loc:e.loc,condition:"else"===t.name?void 0:t.exp,children:n&&!Nu(e,"for")?e.children:[e],userKey:Mu(e,"key"),isTemplateIf:n}}function Jc(e,t,n){return e.condition?wu(e.condition,Qc(e,t,n),yu(n.helper(Fa),['""',"true"])):Qc(e,t,n)}function Qc(e,t,n){const{helper:r}=n,o=vu("key",gu(`${t}`,!1,fu,2)),{children:i}=e,s=i[0];if(1!==i.length||1!==s.type){if(1===i.length&&11===s.type){const e=s.codegenNode;return qu(e,o,n),e}{let t=64;K[64];return pu(n,r(ka),hu([o]),i,t+"",void 0,void 0,!0,!1,!1,e.loc)}}{const e=s.codegenNode,t=14===(l=e).type&&l.callee===au?l.arguments[1].returns:l;return 13===t.type&&Su(t,n),qu(t,o,n),e}var l}const Zc=Nc("for",((e,t,n)=>{const{helper:r,removeHelper:o}=n;return function(e,t,n,r){if(!t.exp)return void n.onError(Oa(31,t.loc));const o=nf(t.exp,n);if(!o)return void n.onError(Oa(32,t.loc));const{addIdentifiers:i,removeIdentifiers:s,scopes:l}=n,{source:a,value:u,key:c,index:f}=o,p={type:11,loc:t.loc,source:a,valueAlias:u,keyAlias:c,objectIndexAlias:f,parseResult:o,children:$u(e)?e.children:[e]};n.replaceNode(p),l.vFor++;const d=r&&r(p);return()=>{l.vFor--,d&&d()}}(e,t,n,(t=>{const i=yu(r(Ha),[t.source]),s=$u(e),l=Nu(e,"memo"),a=Mu(e,"key"),u=a&&(6===a.type?gu(a.value.content,!0):a.exp),c=a?vu("key",u):null,f=4===t.source.type&&t.source.constType>0,p=f?64:a?128:256;return t.codegenNode=pu(n,r(ka),void 0,i,p+"",void 0,void 0,!0,!f,!1,e.loc),()=>{let a;const{children:p}=t;const d=1!==p.length||1!==p[0].type,h=Vu(e)?e:s&&1===e.children.length&&Vu(e.children[0])?e.children[0]:null;if(h?(a=h.codegenNode,s&&c&&qu(a,c,n)):d?a=pu(n,r(ka),c?hu([c]):void 0,e.children,"64",void 0,void 0,!0,void 0,!1):(a=p[0].codegenNode,s&&c&&qu(a,c,n),a.isBlock!==!f&&(a.isBlock?(o(Aa),o(xu(n.inSSR,a.isComponent))):o(_u(n.inSSR,a.isComponent))),a.isBlock=!f,a.isBlock?(r(Aa),r(xu(n.inSSR,a.isComponent))):r(_u(n.inSSR,a.isComponent))),l){const e=bu(of(t.parseResult,[gu("_cached")]));e.body={type:21,body:[mu(["const _memo = (",l.exp,")"]),mu(["if (_cached",...u?[" && _cached.key === ",u]:[],` && ${n.helperString(uu)}(_cached, _memo)) return _cached`]),mu(["const _item = ",a]),gu("_item.memo = _memo"),gu("return _item")],loc:fu},i.arguments.push(e,gu("_cache"),gu(String(n.cached++)))}else i.arguments.push(bu(of(t.parseResult),a,!0))}}))}));const Xc=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,ef=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,tf=/^\(|\)$/g;function nf(e,t){const n=e.loc,r=e.content,o=r.match(Xc);if(!o)return;const[,i,s]=o,l={source:rf(n,s.trim(),r.indexOf(s,i.length)),value:void 0,key:void 0,index:void 0};let a=i.trim().replace(tf,"").trim();const u=i.indexOf(a),c=a.match(ef);if(c){a=a.replace(ef,"").trim();const e=c[1].trim();let t;if(e&&(t=r.indexOf(e,u+a.length),l.key=rf(n,e,t)),c[2]){const o=c[2].trim();o&&(l.index=rf(n,o,r.indexOf(o,l.key?t+e.length:u+a.length)))}}return a&&(l.value=rf(n,a,u)),l}function rf(e,t,n){return gu(t,!1,Lu(e,n,t.length))}function of({value:e,key:t,index:n},r=[]){return function(e){let t=e.length;for(;t--&&!e[t];);return e.slice(0,t+1).map(((e,t)=>e||gu("_".repeat(t+1),!1)))}([e,t,n,...r])}const sf=gu("undefined",!1),lf=(e,t)=>{if(1===e.type&&(1===e.tagType||3===e.tagType)){const n=Nu(e,"slot");if(n)return n.exp,t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},af=(e,t,n,r)=>bu(e,n,!1,!0,n.length?n[0].loc:r);function uf(e,t,n=af){t.helper(iu);const{children:r,loc:o}=e,i=[],s=[];let l=t.scopes.vSlot>0||t.scopes.vFor>0;const a=Nu(e,"slot",!0);if(a){const{arg:e,exp:t}=a;e&&!Ou(e)&&(l=!0),i.push(vu(e||gu("default",!0),n(t,void 0,r,o)))}let u=!1,c=!1;const f=[],p=new Set;let d=0;for(let e=0;e{const i=n(e,void 0,r,o);return t.compatConfig&&(i.isNonScopedSlot=!0),vu("default",i)};u?f.length&&f.some((e=>pf(e)))&&(c?t.onError(Oa(39,f[0].loc)):i.push(e(void 0,f))):i.push(e(void 0,r))}const h=l?2:ff(e.children)?3:1;let v=hu(i.concat(vu("_",gu(h+"",!1))),o);return s.length&&(v=yu(t.helper(qa),[v,du(s)])),{slots:v,hasDynamicSlots:l}}function cf(e,t,n){const r=[vu("name",e),vu("fn",t)];return null!=n&&r.push(vu("key",gu(String(n),!0))),hu(r)}function ff(e){for(let t=0;tfunction(){if(1!==(e=t.currentNode).type||0!==e.tagType&&1!==e.tagType)return;const{tag:n,props:r}=e,o=1===e.tagType;let i=o?function(e,t,n=!1){let{tag:r}=e;const o=yf(r),i=Mu(e,"is");if(i)if(o||Yu("COMPILER_IS_ON_ELEMENT",t)){const e=6===i.type?i.value&&gu(i.value.content,!0):i.exp;if(e)return yu(t.helper(Ba),[e])}else 6===i.type&&i.value.content.startsWith("vue:")&&(r=i.value.content.slice(4));const s=!o&&Nu(e,"is");if(s&&s.exp)return yu(t.helper(Ba),[s.exp]);const l=Eu(r)||t.isBuiltInComponent(r);if(l)return n||t.helper(l),l;return t.helper(Da),t.components.add(r),Ku(r,"component")}(e,t):`"${n}"`;const s=O(i)&&i.callee===Ba;let l,a,u,c,f,p,d=0,h=s||i===Ea||i===Ca||!o&&("svg"===n||"foreignObject"===n);if(r.length>0){const n=vf(e,t,void 0,o,s);l=n.props,d=n.patchFlag,f=n.dynamicPropNames;const r=n.directives;p=r&&r.length?du(r.map((e=>function(e,t){const n=[],r=df.get(e);r?n.push(t.helperString(r)):(t.helper(Ua),t.directives.add(e.name),n.push(Ku(e.name,"directive")));const{loc:o}=e;e.exp&&n.push(e.exp);e.arg&&(e.exp||n.push("void 0"),n.push(e.arg));if(Object.keys(e.modifiers).length){e.arg||(e.exp||n.push("void 0"),n.push("void 0"));const t=gu("true",!1,o);n.push(hu(e.modifiers.map((e=>vu(e,t))),o))}return du(n,e.loc)}(e,t)))):void 0,n.shouldUseBlock&&(h=!0)}if(e.children.length>0){i===Pa&&(h=!0,d|=1024);if(o&&i!==Ea&&i!==Pa){const{slots:n,hasDynamicSlots:r}=uf(e,t);a=n,r&&(d|=1024)}else if(1===e.children.length&&i!==Ea){const n=e.children[0],r=n.type,o=5===r||8===r;o&&0===Cc(n,t)&&(d|=1),a=o||2===r?n:e.children}else a=e.children}0!==d&&(u=String(d),f&&f.length&&(c=function(e){let t="[";for(let n=0,r=e.length;n0;let h=!1,v=0,g=!1,m=!1,y=!1,b=!1,w=!1,_=!1;const x=[],O=e=>{u.length&&(c.push(hu(gf(u),l)),u=[]),e&&c.push(e)},k=({key:e,value:n})=>{if(Ou(e)){const i=e.content,s=f(i);if(!s||r&&!o||"onclick"===i.toLowerCase()||"onUpdate:modelValue"===i||j(i)||(b=!0),s&&j(i)&&(_=!0),20===n.type||(4===n.type||8===n.type)&&Cc(n,t)>0)return;"ref"===i?g=!0:"class"===i?m=!0:"style"===i?y=!0:"key"===i||x.includes(i)||x.push(i),!r||"class"!==i&&"style"!==i||x.includes(i)||x.push(i)}else w=!0};for(let o=0;o0&&u.push(vu(gu("ref_for",!0),gu("true")))),"is"===n&&(yf(s)||r&&r.content.startsWith("vue:")||Yu("COMPILER_IS_ON_ELEMENT",t)))continue;u.push(vu(gu(n,!0,Lu(e,0,n.length)),gu(r?r.content:"",o,r?r.loc:e)))}else{const{name:n,arg:o,exp:f,loc:v}=a,g="bind"===n,m="on"===n;if("slot"===n){r||t.onError(Oa(40,v));continue}if("once"===n||"memo"===n)continue;if("is"===n||g&&Du(o,"is")&&(yf(s)||Yu("COMPILER_IS_ON_ELEMENT",t)))continue;if(m&&i)continue;if((g&&Du(o,"key")||m&&d&&Du(o,"vue:before-update"))&&(h=!0),g&&Du(o,"ref")&&t.scopes.vFor>0&&u.push(vu(gu("ref_for",!0),gu("true"))),!o&&(g||m)){if(w=!0,f)if(g){if(O(),Yu("COMPILER_V_BIND_OBJECT_ORDER",t)){c.unshift(f);continue}c.push(f)}else O({type:14,loc:v,callee:t.helper(Za),arguments:r?[f]:[f,"true"]});else t.onError(Oa(g?34:35,v));continue}const y=t.directiveTransforms[n];if(y){const{props:n,needRuntime:r}=y(a,e,t);!i&&n.forEach(k),m&&o&&!Ou(o)?O(hu(n,l)):u.push(...n),r&&(p.push(a),S(r)&&df.set(a,r))}else R(n)||(p.push(a),d&&(h=!0))}}let E;if(c.length?(O(),E=c.length>1?yu(t.helper(Ka),c,l):c[0]):u.length&&(E=hu(gf(u),l)),w?v|=16:(m&&!r&&(v|=2),y&&!r&&(v|=4),x.length&&(v|=8),b&&(v|=32)),h||0!==v&&32!==v||!(g||_||p.length>0)||(v|=512),!t.inSSR&&E)switch(E.type){case 15:let e=-1,n=-1,r=!1;for(let t=0;t{if(Vu(e)){const{children:n,loc:r}=e,{slotName:o,slotProps:i}=function(e,t){let n,r='"default"';const o=[];for(let t=0;t0){const{props:r,directives:i}=vf(e,t,o,!1,!1);n=r,i.length&&t.onError(Oa(36,i[0].loc))}return{slotName:r,slotProps:n}}(e,t),s=[t.prefixIdentifiers?"_ctx.$slots":"$slots",o,"{}","undefined","true"];let l=2;i&&(s[2]=i,l=3),n.length&&(s[3]=bu([],n,!1,!1,r),l=4),t.scopeId&&!t.slotted&&(l=5),s.splice(l),e.codegenNode=yu(t.helper(za),s,r)}};const wf=/^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*(:[^=]+)?=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/,_f=(e,t,n,r)=>{const{loc:o,modifiers:i,arg:s}=e;let l;if(e.exp||i.length||n.onError(Oa(35,o)),4===s.type)if(s.isStatic){let e=s.content;0,e.startsWith("vue:")&&(e=`vnode-${e.slice(4)}`);l=gu(0!==t.tagType||e.startsWith("vnode")||!/[A-Z]/.test(e)?B(F(e)):`on:${e}`,!0,s.loc)}else l=mu([`${n.helperString(tu)}(`,s,")"]);else l=s,l.children.unshift(`${n.helperString(tu)}(`),l.children.push(")");let a=e.exp;a&&!a.content.trim()&&(a=void 0);let u=n.cacheHandlers&&!a&&!n.inVOnce;if(a){const e=Ru(a.content),t=!(e||wf.test(a.content)),n=a.content.includes(";");0,(t||u&&e)&&(a=mu([`${t?"$event":"(...args)"} => ${n?"{":"("}`,a,n?"}":")"]))}let c={props:[vu(l,a||gu("() => {}",!1,o))]};return r&&(c=r(c)),u&&(c.props[0].value=n.cache(c.props[0].value)),c.props.forEach((e=>e.key.isHandlerKey=!0)),c},xf=(e,t,n)=>{const{exp:r,modifiers:o,loc:i}=e,s=e.arg;return 4!==s.type?(s.children.unshift("("),s.children.push(') || ""')):s.isStatic||(s.content=`${s.content} || ""`),o.includes("camel")&&(4===s.type?s.isStatic?s.content=F(s.content):s.content=`${n.helperString(Xa)}(${s.content})`:(s.children.unshift(`${n.helperString(Xa)}(`),s.children.push(")"))),n.inSSR||(o.includes("prop")&&Sf(s,"."),o.includes("attr")&&Sf(s,"^")),!r||4===r.type&&!r.content.trim()?(n.onError(Oa(34,i)),{props:[vu(s,gu("",!0,i))]}):{props:[vu(s,r)]}},Sf=(e,t)=>{4===e.type?e.isStatic?e.content=t+e.content:e.content=`\`${t}\${${e.content}}\``:(e.children.unshift(`'${t}' + (`),e.children.push(")"))},Of=(e,t)=>{if(0===e.type||1===e.type||11===e.type||10===e.type)return()=>{const n=e.children;let r,o=!1;for(let e=0;e7===e.type&&!t.directiveTransforms[e.name]))||"template"===e.tag)))for(let e=0;e{if(1===e.type&&Nu(e,"once",!0)){if(kf.has(e)||t.inVOnce||t.inSSR)return;return kf.add(e),t.inVOnce=!0,t.helper(nu),()=>{t.inVOnce=!1;const e=t.currentNode;e.codegenNode&&(e.codegenNode=t.cache(e.codegenNode,!0))}}},Cf=(e,t,n)=>{const{exp:r,arg:o}=e;if(!r)return n.onError(Oa(41,e.loc)),Pf();const i=r.loc.source,s=4===r.type?r.content:i,l=n.bindingMetadata[i];if("props"===l||"props-aliased"===l)return n.onError(Oa(44,r.loc)),Pf();if(!s.trim()||!Ru(s))return n.onError(Oa(42,r.loc)),Pf();const a=o||gu("modelValue",!0),u=o?Ou(o)?`onUpdate:${F(o.content)}`:mu(['"onUpdate:" + ',o]):"onUpdate:modelValue";let c;c=mu([`${n.isTS?"($event: any)":"$event"} => ((`,r,") = $event)"]);const f=[vu(a,e.exp),vu(u,c)];if(e.modifiers.length&&1===t.tagType){const t=e.modifiers.map((e=>(Pu(e)?e:JSON.stringify(e))+": true")).join(", "),n=o?Ou(o)?`${o.content}Modifiers`:mu([o,' + "Modifiers"']):"modelModifiers";f.push(vu(n,gu(`{ ${t} }`,!1,e.loc,2)))}return Pf(f)};function Pf(e=[]){return{props:e}}const Tf=/[\w).+\-_$\]]/,Af=(e,t)=>{Yu("COMPILER_FILTER",t)&&(5===e.type&&jf(e.content,t),1===e.type&&e.props.forEach((e=>{7===e.type&&"for"!==e.name&&e.exp&&jf(e.exp,t)})))};function jf(e,t){if(4===e.type)Rf(e,t);else for(let n=0;n=0&&(e=n.charAt(t)," "===e);t--);e&&Tf.test(e)||(c=!0)}}else void 0===s?(h=i+1,s=n.slice(0,i).trim()):g();function g(){v.push(n.slice(h,i).trim()),h=i+1}if(void 0===s?s=n.slice(0,i).trim():0!==h&&g(),v.length){for(i=0;i{if(1===e.type){const n=Nu(e,"memo");if(!n||If.has(e))return;return If.add(e),()=>{const r=e.codegenNode||t.currentNode.codegenNode;r&&13===r.type&&(1!==e.tagType&&Su(r,t),e.codegenNode=yu(t.helper(au),[n.exp,bu(void 0,r),"_cache",String(t.cached++)]))}}};function Nf(e,t={}){const n=t.onError||xa,r="module"===t.mode;!0===t.prefixIdentifiers?n(Oa(47)):r&&n(Oa(48));t.cacheHandlers&&n(Oa(49)),t.scopeId&&!r&&n(Oa(50));const o=x(e)?ec(e,t):e,[i,s]=[[Ef,Gc,Ff,Zc,Af,bf,hf,lf,Of],{on:_f,bind:xf,model:Cf}];return Ic(o,d({},t,{prefixIdentifiers:false,nodeTransforms:[...i,...t.nodeTransforms||[]],directiveTransforms:d({},s,t.directiveTransforms||{})})),Uc(o,d({},t,{prefixIdentifiers:false}))}const Mf=Symbol(""),Df=Symbol(""),Bf=Symbol(""),Uf=Symbol(""),$f=Symbol(""),Vf=Symbol(""),Hf=Symbol(""),zf=Symbol(""),qf=Symbol(""),Wf=Symbol("");var Kf;let Gf;Kf={[Mf]:"vModelRadio",[Df]:"vModelCheckbox",[Bf]:"vModelText",[Uf]:"vModelSelect",[$f]:"vModelDynamic",[Vf]:"withModifiers",[Hf]:"withKeys",[zf]:"vShow",[qf]:"Transition",[Wf]:"TransitionGroup"},Object.getOwnPropertySymbols(Kf).forEach((e=>{cu[e]=Kf[e]}));const Yf=i("style,iframe,script,noscript",!0),Jf={isVoidTag:oe,isNativeTag:e=>ne(e)||re(e),isPreTag:e=>"pre"===e,decodeEntities:function(e,t=!1){return Gf||(Gf=document.createElement("div")),t?(Gf.innerHTML=`
`,Gf.children[0].getAttribute("foo")):(Gf.innerHTML=e,Gf.textContent)},isBuiltInComponent:e=>ku(e,"Transition")?qf:ku(e,"TransitionGroup")?Wf:void 0,getNamespace(e,t){let n=t?t.ns:0;if(t&&2===n)if("annotation-xml"===t.tag){if("svg"===e)return 1;t.props.some((e=>6===e.type&&"encoding"===e.name&&null!=e.value&&("text/html"===e.value.content||"application/xhtml+xml"===e.value.content)))&&(n=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&"mglyph"!==e&&"malignmark"!==e&&(n=0);else t&&1===n&&("foreignObject"!==t.tag&&"desc"!==t.tag&&"title"!==t.tag||(n=0));if(0===n){if("svg"===e)return 1;if("math"===e)return 2}return n},getTextMode({tag:e,ns:t}){if(0===t){if("textarea"===e||"title"===e)return 1;if(Yf(e))return 2}return 0}},Qf=(e,t)=>{const n=X(e);return gu(JSON.stringify(n),!1,t,3)};function Zf(e,t){return Oa(e,t)}const Xf=i("passive,once,capture"),ep=i("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),tp=i("left,right"),np=i("onkeyup,onkeydown,onkeypress",!0),rp=(e,t)=>Ou(e)&&"onclick"===e.content.toLowerCase()?gu(t,!0):4!==e.type?mu(["(",e,`) === "onClick" ? "${t}" : (`,e,")"]):e;const op=(e,t)=>{1!==e.type||0!==e.tagType||"script"!==e.tag&&"style"!==e.tag||t.removeNode()},ip=[e=>{1===e.type&&e.props.forEach(((t,n)=>{6===t.type&&"style"===t.name&&t.value&&(e.props[n]={type:7,name:"bind",arg:gu("style",!0,t.loc),exp:Qf(t.value.content,t.loc),modifiers:[],loc:t.loc})}))}],sp={cloak:()=>({props:[]}),html:(e,t,n)=>{const{exp:r,loc:o}=e;return r||n.onError(Zf(53,o)),t.children.length&&(n.onError(Zf(54,o)),t.children.length=0),{props:[vu(gu("innerHTML",!0,o),r||gu("",!0))]}},text:(e,t,n)=>{const{exp:r,loc:o}=e;return r||n.onError(Zf(55,o)),t.children.length&&(n.onError(Zf(56,o)),t.children.length=0),{props:[vu(gu("textContent",!0),r?Cc(r,n)>0?r:yu(n.helperString(Wa),[r],o):gu("",!0))]}},model:(e,t,n)=>{const r=Cf(e,t,n);if(!r.props.length||1===t.tagType)return r;e.arg&&n.onError(Zf(58,e.arg.loc));const{tag:o}=t,i=n.isCustomElement(o);if("input"===o||"textarea"===o||"select"===o||i){let s=Bf,l=!1;if("input"===o||i){const r=Mu(t,"type");if(r){if(7===r.type)s=$f;else if(r.value)switch(r.value.content){case"radio":s=Mf;break;case"checkbox":s=Df;break;case"file":l=!0,n.onError(Zf(59,e.loc))}}else(function(e){return e.props.some((e=>!(7!==e.type||"bind"!==e.name||e.arg&&4===e.arg.type&&e.arg.isStatic)))})(t)&&(s=$f)}else"select"===o&&(s=Uf);l||(r.needRuntime=n.helper(s))}else n.onError(Zf(57,e.loc));return r.props=r.props.filter((e=>!(4===e.key.type&&"modelValue"===e.key.content))),r},on:(e,t,n)=>_f(e,t,n,(t=>{const{modifiers:r}=e;if(!r.length)return t;let{key:o,value:i}=t.props[0];const{keyModifiers:s,nonKeyModifiers:l,eventOptionModifiers:a}=((e,t,n,r)=>{const o=[],i=[],s=[];for(let r=0;r{const{exp:r,loc:o}=e;return r||n.onError(Zf(61,o)),{props:[],needRuntime:n.helper(zf)}}};const lp=Object.create(null);ks((function(e,t){if(!x(e)){if(!e.nodeType)return a;e=e.innerHTML}const n=e,o=lp[n];if(o)return o;if("#"===e[0]){const t=document.querySelector(e);0,e=t?t.innerHTML:""}const i=d({hoistStatic:!0,onError:void 0,onWarn:a},t);i.isCustomElement||"undefined"==typeof customElements||(i.isCustomElement=e=>!!customElements.get(e));const{code:s}=function(e,t={}){return Nf(e,d({},Jf,t,{nodeTransforms:[op,...ip,...t.nodeTransforms||[]],directiveTransforms:d({},sp,t.directiveTransforms||{}),transformHoist:null}))}(e,i),l=new Function("Vue",s)(r);return l._rc=!0,lp[n]=l}));var ap=!1;function up(e,t,n){return Array.isArray(e)?(e.length=Math.max(e.length,t),e.splice(t,1,n),n):(e[t]=n,n)}function cp(){return"undefined"!=typeof navigator&&"undefined"!=typeof window?window:void 0!==n.g?n.g:{}}const fp="function"==typeof Proxy,pp="devtools-plugin:setup";let dp,hp,vp;function gp(){return function(){var e;return void 0!==dp||("undefined"!=typeof window&&window.performance?(dp=!0,hp=window.performance):void 0!==n.g&&(null===(e=n.g.perf_hooks)||void 0===e?void 0:e.performance)?(dp=!0,hp=n.g.perf_hooks.performance):dp=!1),dp}()?hp.now():Date.now()}class mp{constructor(e,t){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=e,this.hook=t;const n={};if(e.settings)for(const t in e.settings){const r=e.settings[t];n[t]=r.defaultValue}const r=`__vue-devtools-plugin-settings__${e.id}`;let o=Object.assign({},n);try{const e=localStorage.getItem(r),t=JSON.parse(e);Object.assign(o,t)}catch(e){}this.fallbacks={getSettings:()=>o,setSettings(e){try{localStorage.setItem(r,JSON.stringify(e))}catch(e){}o=e},now:()=>gp()},t&&t.on("plugin:settings:set",((e,t)=>{e===this.plugin.id&&this.fallbacks.setSettings(t)})),this.proxiedOn=new Proxy({},{get:(e,t)=>this.target?this.target.on[t]:(...e)=>{this.onQueue.push({method:t,args:e})}}),this.proxiedTarget=new Proxy({},{get:(e,t)=>this.target?this.target[t]:"on"===t?this.proxiedOn:Object.keys(this.fallbacks).includes(t)?(...e)=>(this.targetQueue.push({method:t,args:e,resolve:()=>{}}),this.fallbacks[t](...e)):(...e)=>new Promise((n=>{this.targetQueue.push({method:t,args:e,resolve:n})}))})}async setRealTarget(e){this.target=e;for(const e of this.onQueue)this.target.on[e.method](...e.args);for(const e of this.targetQueue)e.resolve(await this.target[e.method](...e.args))}}function yp(e,t){const n=e,r=cp(),o=cp().__VUE_DEVTOOLS_GLOBAL_HOOK__,i=fp&&n.enableEarlyProxy;if(!o||!r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__&&i){const e=i?new mp(n,o):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:e}),e&&t(e.proxiedTarget)}else o.emit(pp,e,t)}const bp=e=>vp=e,wp=Symbol();function _p(e){return e&&"object"==typeof e&&"[object Object]"===Object.prototype.toString.call(e)&&"function"!=typeof e.toJSON}var xp;!function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"}(xp||(xp={}));const Sp="undefined"!=typeof window,Op=!1,kp=(()=>"object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:"object"==typeof globalThis?globalThis:{HTMLElement:null})();function Ep(e,t,n){const r=new XMLHttpRequest;r.open("GET",e),r.responseType="blob",r.onload=function(){jp(r.response,t,n)},r.onerror=function(){},r.send()}function Cp(e){const t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return t.status>=200&&t.status<=299}function Pp(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(t){const n=document.createEvent("MouseEvents");n.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(n)}}const Tp="object"==typeof navigator?navigator:{userAgent:""},Ap=(()=>/Macintosh/.test(Tp.userAgent)&&/AppleWebKit/.test(Tp.userAgent)&&!/Safari/.test(Tp.userAgent))(),jp=Sp?"undefined"!=typeof HTMLAnchorElement&&"download"in HTMLAnchorElement.prototype&&!Ap?function(e,t="download",n){const r=document.createElement("a");r.download=t,r.rel="noopener","string"==typeof e?(r.href=e,r.origin!==location.origin?Cp(r.href)?Ep(e,t,n):(r.target="_blank",Pp(r)):Pp(r)):(r.href=URL.createObjectURL(e),setTimeout((function(){URL.revokeObjectURL(r.href)}),4e4),setTimeout((function(){Pp(r)}),0))}:"msSaveOrOpenBlob"in Tp?function(e,t="download",n){if("string"==typeof e)if(Cp(e))Ep(e,t,n);else{const t=document.createElement("a");t.href=e,t.target="_blank",setTimeout((function(){Pp(t)}))}else navigator.msSaveOrOpenBlob(function(e,{autoBom:t=!1}={}){return t&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e}(e,n),t)}:function(e,t,n,r){(r=r||open("","_blank"))&&(r.document.title=r.document.body.innerText="downloading...");if("string"==typeof e)return Ep(e,t,n);const o="application/octet-stream"===e.type,i=/constructor/i.test(String(kp.HTMLElement))||"safari"in kp,s=/CriOS\/[\d]+/.test(navigator.userAgent);if((s||o&&i||Ap)&&"undefined"!=typeof FileReader){const t=new FileReader;t.onloadend=function(){let e=t.result;if("string"!=typeof e)throw r=null,new Error("Wrong reader.result type");e=s?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),r?r.location.href=e:location.assign(e),r=null},t.readAsDataURL(e)}else{const t=URL.createObjectURL(e);r?r.location.assign(t):location.href=t,r=null,setTimeout((function(){URL.revokeObjectURL(t)}),4e4)}}:()=>{};function Rp(e,t){"function"==typeof __VUE_DEVTOOLS_TOAST__&&__VUE_DEVTOOLS_TOAST__("🍍 "+e,t)}function Lp(e){return"_a"in e&&"install"in e}function Ip(){if(!("clipboard"in navigator))return Rp("Your browser doesn't support the Clipboard API","error"),!0}function Fp(e){return!!(e instanceof Error&&e.message.toLowerCase().includes("document is not focused"))&&(Rp('You need to activate the "Emulate a focused page" setting in the "Rendering" panel of devtools.',"warn"),!0)}let Np;async function Mp(e){try{const t=(Np||(Np=document.createElement("input"),Np.type="file",Np.accept=".json"),function(){return new Promise(((e,t)=>{Np.onchange=async()=>{const t=Np.files;if(!t)return e(null);const n=t.item(0);return e(n?{text:await n.text(),file:n}:null)},Np.oncancel=()=>e(null),Np.onerror=t,Np.click()}))}),n=await t();if(!n)return;const{text:r,file:o}=n;Dp(e,JSON.parse(r)),Rp(`Global state imported from "${o.name}".`)}catch(e){Rp("Failed to import the state from JSON. Check the console for more details.","error")}}function Dp(e,t){for(const n in t){const r=e.state.value[n];r?Object.assign(r,t[n]):e.state.value[n]=t[n]}}function Bp(e){return{_custom:{display:e}}}const Up="🍍 Pinia (root)",$p="_root";function Vp(e){return Lp(e)?{id:$p,label:Up}:{id:e.$id,label:e.$id}}function Hp(e){return e?Array.isArray(e)?e.reduce(((e,t)=>(e.keys.push(t.key),e.operations.push(t.type),e.oldValue[t.key]=t.oldValue,e.newValue[t.key]=t.newValue,e)),{oldValue:{},keys:[],operations:[],newValue:{}}):{operation:Bp(e.type),key:Bp(e.key),oldValue:e.oldValue,newValue:e.newValue}:{}}function zp(e){switch(e){case xp.direct:return"mutation";case xp.patchFunction:case xp.patchObject:return"$patch";default:return"unknown"}}let qp=!0;const Wp=[],Kp="pinia:mutations",Gp="pinia",{assign:Yp}=Object,Jp=e=>"🍍 "+e;function Qp(e,t){yp({id:"dev.esm.pinia",label:"Pinia 🍍",logo:"https://pinia.vuejs.org/logo.svg",packageName:"pinia",homepage:"https://pinia.vuejs.org",componentStateTypes:Wp,app:e},(n=>{"function"!=typeof n.now&&Rp("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),n.addTimelineLayer({id:Kp,label:"Pinia 🍍",color:15064968}),n.addInspector({id:Gp,label:"Pinia 🍍",icon:"storage",treeFilterPlaceholder:"Search stores",actions:[{icon:"content_copy",action:()=>{!async function(e){if(!Ip())try{await navigator.clipboard.writeText(JSON.stringify(e.state.value)),Rp("Global state copied to clipboard.")}catch(e){if(Fp(e))return;Rp("Failed to serialize the state. Check the console for more details.","error")}}(t)},tooltip:"Serialize and copy the state"},{icon:"content_paste",action:async()=>{await async function(e){if(!Ip())try{Dp(e,JSON.parse(await navigator.clipboard.readText())),Rp("Global state pasted from clipboard.")}catch(e){if(Fp(e))return;Rp("Failed to deserialize the state from clipboard. Check the console for more details.","error")}}(t),n.sendInspectorTree(Gp),n.sendInspectorState(Gp)},tooltip:"Replace the state with the content of your clipboard"},{icon:"save",action:()=>{!async function(e){try{jp(new Blob([JSON.stringify(e.state.value)],{type:"text/plain;charset=utf-8"}),"pinia-state.json")}catch(e){Rp("Failed to export the state as JSON. Check the console for more details.","error")}}(t)},tooltip:"Save the state as a JSON file"},{icon:"folder_open",action:async()=>{await Mp(t),n.sendInspectorTree(Gp),n.sendInspectorState(Gp)},tooltip:"Import the state from a JSON file"}],nodeActions:[{icon:"restore",tooltip:'Reset the state (with "$reset")',action:e=>{const n=t._s.get(e);n?"function"!=typeof n.$reset?Rp(`Cannot reset "${e}" store because it doesn't have a "$reset" method implemented.`,"warn"):(n.$reset(),Rp(`Store "${e}" reset.`)):Rp(`Cannot reset "${e}" store because it wasn't found.`,"warn")}}]}),n.on.inspectComponent(((e,t)=>{const n=e.componentInstance&&e.componentInstance.proxy;if(n&&n._pStores){const t=e.componentInstance.proxy._pStores;Object.values(t).forEach((t=>{e.instanceData.state.push({type:Jp(t.$id),key:"state",editable:!0,value:t._isOptionsAPI?{_custom:{value:It(t.$state),actions:[{icon:"restore",tooltip:"Reset the state of this store",action:()=>t.$reset()}]}}:Object.keys(t.$state).reduce(((e,n)=>(e[n]=t.$state[n],e)),{})}),t._getters&&t._getters.length&&e.instanceData.state.push({type:Jp(t.$id),key:"getters",editable:!1,value:t._getters.reduce(((e,n)=>{try{e[n]=t[n]}catch(t){e[n]=t}return e}),{})})}))}})),n.on.getInspectorTree((n=>{if(n.app===e&&n.inspectorId===Gp){let e=[t];e=e.concat(Array.from(t._s.values())),n.rootNodes=(n.filter?e.filter((e=>"$id"in e?e.$id.toLowerCase().includes(n.filter.toLowerCase()):Up.toLowerCase().includes(n.filter.toLowerCase()))):e).map(Vp)}})),n.on.getInspectorState((n=>{if(n.app===e&&n.inspectorId===Gp){const e=n.nodeId===$p?t:t._s.get(n.nodeId);if(!e)return;e&&(n.state=function(e){if(Lp(e)){const t=Array.from(e._s.keys()),n=e._s,r={state:t.map((t=>({editable:!0,key:t,value:e.state.value[t]}))),getters:t.filter((e=>n.get(e)._getters)).map((e=>{const t=n.get(e);return{editable:!1,key:e,value:t._getters.reduce(((e,n)=>(e[n]=t[n],e)),{})}}))};return r}const t={state:Object.keys(e.$state).map((t=>({editable:!0,key:t,value:e.$state[t]})))};return e._getters&&e._getters.length&&(t.getters=e._getters.map((t=>({editable:!1,key:t,value:e[t]})))),e._customProperties.size&&(t.customProperties=Array.from(e._customProperties).map((t=>({editable:!0,key:t,value:e[t]})))),t}(e))}})),n.on.editInspectorState(((n,r)=>{if(n.app===e&&n.inspectorId===Gp){const e=n.nodeId===$p?t:t._s.get(n.nodeId);if(!e)return Rp(`store "${n.nodeId}" not found`,"error");const{path:r}=n;Lp(e)?r.unshift("state"):1===r.length&&e._customProperties.has(r[0])&&!(r[0]in e.$state)||r.unshift("$state"),qp=!1,n.set(e,r,n.state.value),qp=!0}})),n.on.editComponentState((e=>{if(e.type.startsWith("🍍")){const n=e.type.replace(/^🍍\s*/,""),r=t._s.get(n);if(!r)return Rp(`store "${n}" not found`,"error");const{path:o}=e;if("state"!==o[0])return Rp(`Invalid path for store "${n}":\n${o}\nOnly state can be modified.`);o[0]="$state",qp=!1,e.set(r,o,e.state.value),qp=!0}}))}))}let Zp,Xp=0;function ed(e,t,n){const r=t.reduce(((t,n)=>(t[n]=It(e)[n],t)),{});for(const t in r)e[t]=function(){const o=Xp,i=n?new Proxy(e,{get:(...e)=>(Zp=o,Reflect.get(...e)),set:(...e)=>(Zp=o,Reflect.set(...e))}):e;Zp=o;const s=r[t].apply(i,arguments);return Zp=void 0,s}}function td({app:e,store:t,options:n}){if(t.$id.startsWith("__hot:"))return;t._isOptionsAPI=!!n.state,ed(t,Object.keys(n.actions),t._isOptionsAPI);const r=t._hotUpdate;It(t)._hotUpdate=function(e){r.apply(this,arguments),ed(t,Object.keys(e._hmrPayload.actions),!!t._isOptionsAPI)},function(e,t){Wp.includes(Jp(t.$id))||Wp.push(Jp(t.$id)),yp({id:"dev.esm.pinia",label:"Pinia 🍍",logo:"https://pinia.vuejs.org/logo.svg",packageName:"pinia",homepage:"https://pinia.vuejs.org",componentStateTypes:Wp,app:e,settings:{logStoreChanges:{label:"Notify about new/deleted stores",type:"boolean",defaultValue:!0}}},(e=>{const n="function"==typeof e.now?e.now.bind(e):Date.now;t.$onAction((({after:r,onError:o,name:i,args:s})=>{const l=Xp++;e.addTimelineEvent({layerId:Kp,event:{time:n(),title:"🛫 "+i,subtitle:"start",data:{store:Bp(t.$id),action:Bp(i),args:s},groupId:l}}),r((r=>{Zp=void 0,e.addTimelineEvent({layerId:Kp,event:{time:n(),title:"🛬 "+i,subtitle:"end",data:{store:Bp(t.$id),action:Bp(i),args:s,result:r},groupId:l}})})),o((r=>{Zp=void 0,e.addTimelineEvent({layerId:Kp,event:{time:n(),logType:"error",title:"💥 "+i,subtitle:"end",data:{store:Bp(t.$id),action:Bp(i),args:s,error:r},groupId:l}})}))}),!0),t._customProperties.forEach((r=>{dr((()=>Wt(t[r])),((t,o)=>{e.notifyComponentUpdate(),e.sendInspectorState(Gp),qp&&e.addTimelineEvent({layerId:Kp,event:{time:n(),title:"Change",subtitle:r,data:{newValue:t,oldValue:o},groupId:Zp}})}),{deep:!0})})),t.$subscribe((({events:r,type:o},i)=>{if(e.notifyComponentUpdate(),e.sendInspectorState(Gp),!qp)return;const s={time:n(),title:zp(o),data:Yp({store:Bp(t.$id)},Hp(r)),groupId:Zp};o===xp.patchFunction?s.subtitle="⤵️":o===xp.patchObject?s.subtitle="🧩":r&&!Array.isArray(r)&&(s.subtitle=r.type),r&&(s.data["rawEvent(s)"]={_custom:{display:"DebuggerEvent",type:"object",tooltip:"raw DebuggerEvent[]",value:r}}),e.addTimelineEvent({layerId:Kp,event:s})}),{detached:!0,flush:"sync"});const r=t._hotUpdate;t._hotUpdate=Ft((o=>{r(o),e.addTimelineEvent({layerId:Kp,event:{time:n(),title:"🔥 "+t.$id,subtitle:"HMR update",data:{store:Bp(t.$id),info:Bp("HMR update")}}}),e.notifyComponentUpdate(),e.sendInspectorTree(Gp),e.sendInspectorState(Gp)}));const{$dispose:o}=t;t.$dispose=()=>{o(),e.notifyComponentUpdate(),e.sendInspectorTree(Gp),e.sendInspectorState(Gp),e.getSettings().logStoreChanges&&Rp(`Disposed "${t.$id}" store 🗑`)},e.notifyComponentUpdate(),e.sendInspectorTree(Gp),e.sendInspectorState(Gp),e.getSettings().logStoreChanges&&Rp(`"${t.$id}" store installed 🆕`)}))}(e,t)}const nd=()=>{};function rd(e,t,n,r=nd){e.push(t);const o=()=>{const n=e.indexOf(t);n>-1&&(e.splice(n,1),r())};return!n&&ge()&&me(o),o}function od(e,...t){e.slice().forEach((e=>{e(...t)}))}const id=e=>e();function sd(e,t){e instanceof Map&&t instanceof Map&&t.forEach(((t,n)=>e.set(n,t))),e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const r=t[n],o=e[n];_p(o)&&_p(r)&&e.hasOwnProperty(n)&&!Ut(r)&&!At(r)?e[n]=sd(o,r):e[n]=r}return e}const ld=Symbol(),ad=new WeakMap;const{assign:ud}=Object;function cd(e){return!(!Ut(e)||!e.effect)}function fd(e,t,n={},r,o,i){let s;const l=ud({actions:{}},n);const a={deep:!0};let u,c;let f,p=[],d=[];const h=r.state.value[e];i||h||(ap?up(r.state.value,e,{}):r.state.value[e]={});const v=$t({});let g;function m(t){let n;u=c=!1,"function"==typeof t?(t(r.state.value[e]),n={type:xp.patchFunction,storeId:e,events:f}):(sd(r.state.value[e],t),n={type:xp.patchObject,payload:t,storeId:e,events:f});const o=g=Symbol();bn().then((()=>{g===o&&(u=!0)})),c=!0,od(p,n,r.state.value[e])}const y=i?function(){const{state:e}=n,t=e?e():{};this.$patch((e=>{ud(e,t)}))}:nd;function b(t,n){return function(){bp(r);const o=Array.from(arguments),i=[],s=[];let l;od(d,{args:o,name:t,store:x,after:function(e){i.push(e)},onError:function(e){s.push(e)}});try{l=n.apply(this&&this.$id===e?this:x,o)}catch(e){throw od(s,e),e}return l instanceof Promise?l.then((e=>(od(i,e),e))).catch((e=>(od(s,e),Promise.reject(e)))):(od(i,l),l)}}const w=Ft({actions:{},getters:{},state:[],hotState:v}),_={_p:r,$id:e,$onAction:rd.bind(null,d),$patch:m,$reset:y,$subscribe(t,n={}){const o=rd(p,t,n.detached,(()=>i())),i=s.run((()=>dr((()=>r.state.value[e]),(r=>{("sync"===n.flush?c:u)&&t({storeId:e,type:xp.direct,events:f},r)}),ud({},a,n))));return o},$dispose:function(){s.stop(),p=[],d=[],r._s.delete(e)}};ap&&(_._r=!1);const x=kt(Op?ud({_hmrPayload:w,_customProperties:Ft(new Set)},_):_);r._s.set(e,x);const S=(r._a&&r._a.runWithContext||id)((()=>r._e.run((()=>(s=he()).run(t)))));for(const t in S){const n=S[t];if(Ut(n)&&!cd(n)||At(n))i||(!h||(O=n,ap?ad.has(O):_p(O)&&O.hasOwnProperty(ld))||(Ut(n)?n.value=h[t]:sd(n,h[t])),ap?up(r.state.value[e],t,n):r.state.value[e][t]=n);else if("function"==typeof n){const e=b(t,n);ap?up(S,t,e):S[t]=e,l.actions[t]=n}else 0}var O;if(ap?Object.keys(S).forEach((e=>{up(x,e,S[e])})):(ud(x,S),ud(It(x),S)),Object.defineProperty(x,"$state",{get:()=>r.state.value[e],set:e=>{m((t=>{ud(t,e)}))}}),Op){const e={writable:!0,configurable:!0,enumerable:!1};["_p","_hmrPayload","_getters","_customProperties"].forEach((t=>{Object.defineProperty(x,t,ud({value:x[t]},e))}))}return ap&&(x._r=!0),r._p.forEach((e=>{if(Op){const t=s.run((()=>e({store:x,app:r._a,pinia:r,options:l})));Object.keys(t||{}).forEach((e=>x._customProperties.add(e))),ud(x,t)}else ud(x,s.run((()=>e({store:x,app:r._a,pinia:r,options:l}))))})),h&&i&&n.hydrate&&n.hydrate(x.$state,h),u=!0,c=!0,x}function pd(e,t,n){let r,o;const i="function"==typeof t;function s(e,n){const s=Jo();(e=e||(s?Yo(wp,null):null))&&bp(e),(e=vp)._s.has(r)||(i?fd(r,t,o,e):function(e,t,n,r){const{state:o,actions:i,getters:s}=t,l=n.state.value[e];let a;a=fd(e,(function(){l||(ap?up(n.state.value,e,o?o():{}):n.state.value[e]=o?o():{});const t=Zt(n.state.value[e]);return ud(t,i,Object.keys(s||{}).reduce(((t,r)=>(t[r]=Ft(Rs((()=>{bp(n);const t=n._s.get(e);if(!ap||t._r)return s[r].call(t,t)}))),t)),{}))}),t,n,0,!0)}(r,o,e));return e._s.get(r)}return"string"==typeof e?(r=e,o=i?n:t):(o=e,r=e.id),s.$id=r,s}function dd(e,t){return function(){return e.apply(t,arguments)}}const{toString:hd}=Object.prototype,{getPrototypeOf:vd}=Object,gd=(md=Object.create(null),e=>{const t=hd.call(e);return md[t]||(md[t]=t.slice(8,-1).toLowerCase())});var md;const yd=e=>(e=e.toLowerCase(),t=>gd(t)===e),bd=e=>t=>typeof t===e,{isArray:wd}=Array,_d=bd("undefined");const xd=yd("ArrayBuffer");const Sd=bd("string"),Od=bd("function"),kd=bd("number"),Ed=e=>null!==e&&"object"==typeof e,Cd=e=>{if("object"!==gd(e))return!1;const t=vd(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},Pd=yd("Date"),Td=yd("File"),Ad=yd("Blob"),jd=yd("FileList"),Rd=yd("URLSearchParams");function Ld(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),wd(e))for(r=0,o=e.length;r0;)if(r=n[o],t===r.toLowerCase())return r;return null}const Fd="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Nd=e=>!_d(e)&&e!==Fd;const Md=(Dd="undefined"!=typeof Uint8Array&&vd(Uint8Array),e=>Dd&&e instanceof Dd);var Dd;const Bd=yd("HTMLFormElement"),Ud=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),$d=yd("RegExp"),Vd=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};Ld(n,((n,o)=>{let i;!1!==(i=t(n,o,e))&&(r[o]=i||n)})),Object.defineProperties(e,r)},Hd="abcdefghijklmnopqrstuvwxyz",zd="0123456789",qd={DIGIT:zd,ALPHA:Hd,ALPHA_DIGIT:Hd+Hd.toUpperCase()+zd};const Wd=yd("AsyncFunction"),Kd={isArray:wd,isArrayBuffer:xd,isBuffer:function(e){return null!==e&&!_d(e)&&null!==e.constructor&&!_d(e.constructor)&&Od(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||Od(e.append)&&("formdata"===(t=gd(e))||"object"===t&&Od(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&xd(e.buffer),t},isString:Sd,isNumber:kd,isBoolean:e=>!0===e||!1===e,isObject:Ed,isPlainObject:Cd,isUndefined:_d,isDate:Pd,isFile:Td,isBlob:Ad,isRegExp:$d,isFunction:Od,isStream:e=>Ed(e)&&Od(e.pipe),isURLSearchParams:Rd,isTypedArray:Md,isFileList:jd,forEach:Ld,merge:function e(){const{caseless:t}=Nd(this)&&this||{},n={},r=(r,o)=>{const i=t&&Id(n,o)||o;Cd(n[i])&&Cd(r)?n[i]=e(n[i],r):Cd(r)?n[i]=e({},r):wd(r)?n[i]=r.slice():n[i]=r};for(let e=0,t=arguments.length;e(Ld(t,((t,r)=>{n&&Od(t)?e[r]=dd(t,n):e[r]=t}),{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,i,s;const l={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)s=o[i],r&&!r(s,e,t)||l[s]||(t[s]=e[s],l[s]=!0);e=!1!==n&&vd(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:gd,kindOfTest:yd,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(wd(e))return e;let t=e.length;if(!kd(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:Bd,hasOwnProperty:Ud,hasOwnProp:Ud,reduceDescriptors:Vd,freezeMethods:e=>{Vd(e,((t,n)=>{if(Od(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];Od(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return wd(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:Id,global:Fd,isContextDefined:Nd,ALPHABET:qd,generateString:(e=16,t=qd.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n},isSpecCompliantForm:function(e){return!!(e&&Od(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(Ed(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[r]=e;const o=wd(e)?[]:{};return Ld(e,((e,t)=>{const i=n(e,r+1);!_d(i)&&(o[t]=i)})),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:Wd,isThenable:e=>e&&(Ed(e)||Od(e))&&Od(e.then)&&Od(e.catch)};function Gd(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}Kd.inherits(Gd,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Kd.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const Yd=Gd.prototype,Jd={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{Jd[e]={value:e}})),Object.defineProperties(Gd,Jd),Object.defineProperty(Yd,"isAxiosError",{value:!0}),Gd.from=(e,t,n,r,o,i)=>{const s=Object.create(Yd);return Kd.toFlatObject(e,s,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),Gd.call(s,e.message,t,n,r,o),s.cause=e,s.name=e.name,i&&Object.assign(s,i),s};const Qd=Gd;var Zd=n(764).lW;function Xd(e){return Kd.isPlainObject(e)||Kd.isArray(e)}function eh(e){return Kd.endsWith(e,"[]")?e.slice(0,-2):e}function th(e,t,n){return e?e.concat(t).map((function(e,t){return e=eh(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const nh=Kd.toFlatObject(Kd,{},null,(function(e){return/^is[A-Z]/.test(e)}));const rh=function(e,t,n){if(!Kd.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=Kd.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!Kd.isUndefined(t[e])}))).metaTokens,o=n.visitor||u,i=n.dots,s=n.indexes,l=(n.Blob||"undefined"!=typeof Blob&&Blob)&&Kd.isSpecCompliantForm(t);if(!Kd.isFunction(o))throw new TypeError("visitor must be a function");function a(e){if(null===e)return"";if(Kd.isDate(e))return e.toISOString();if(!l&&Kd.isBlob(e))throw new Qd("Blob is not supported. Use a Buffer instead.");return Kd.isArrayBuffer(e)||Kd.isTypedArray(e)?l&&"function"==typeof Blob?new Blob([e]):Zd.from(e):e}function u(e,n,o){let l=e;if(e&&!o&&"object"==typeof e)if(Kd.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(Kd.isArray(e)&&function(e){return Kd.isArray(e)&&!e.some(Xd)}(e)||(Kd.isFileList(e)||Kd.endsWith(n,"[]"))&&(l=Kd.toArray(e)))return n=eh(n),l.forEach((function(e,r){!Kd.isUndefined(e)&&null!==e&&t.append(!0===s?th([n],r,i):null===s?n:n+"[]",a(e))})),!1;return!!Xd(e)||(t.append(th(o,n,i),a(e)),!1)}const c=[],f=Object.assign(nh,{defaultVisitor:u,convertValue:a,isVisitable:Xd});if(!Kd.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!Kd.isUndefined(n)){if(-1!==c.indexOf(n))throw Error("Circular reference detected in "+r.join("."));c.push(n),Kd.forEach(n,(function(n,i){!0===(!(Kd.isUndefined(n)||null===n)&&o.call(t,n,Kd.isString(i)?i.trim():i,r,f))&&e(n,r?r.concat(i):[i])})),c.pop()}}(e),t};function oh(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function ih(e,t){this._pairs=[],e&&rh(e,this,t)}const sh=ih.prototype;sh.append=function(e,t){this._pairs.push([e,t])},sh.toString=function(e){const t=e?function(t){return e.call(this,t,oh)}:oh;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};const lh=ih;function ah(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function uh(e,t,n){if(!t)return e;const r=n&&n.encode||ah,o=n&&n.serialize;let i;if(i=o?o(t,n):Kd.isURLSearchParams(t)?t.toString():new lh(t,n).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}const ch=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Kd.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},fh={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ph={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:lh,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},dh="undefined"!=typeof window&&"undefined"!=typeof document,hh=(vh="undefined"!=typeof navigator&&navigator.product,dh&&["ReactNative","NativeScript","NS"].indexOf(vh)<0);var vh;const gh="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,mh={...o,...ph};const yh=function(e){function t(e,n,r,o){let i=e[o++];const s=Number.isFinite(+i),l=o>=e.length;if(i=!i&&Kd.isArray(r)?r.length:i,l)return Kd.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!s;r[i]&&Kd.isObject(r[i])||(r[i]=[]);return t(e,n,r[i],o)&&Kd.isArray(r[i])&&(r[i]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let i;for(r=0;r{t(function(e){return Kd.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null};const bh={transitional:fh,adapter:["xhr","http"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=Kd.isObject(e);o&&Kd.isHTMLForm(e)&&(e=new FormData(e));if(Kd.isFormData(e))return r&&r?JSON.stringify(yh(e)):e;if(Kd.isArrayBuffer(e)||Kd.isBuffer(e)||Kd.isStream(e)||Kd.isFile(e)||Kd.isBlob(e))return e;if(Kd.isArrayBufferView(e))return e.buffer;if(Kd.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return rh(e,new mh.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return mh.isNode&&Kd.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((i=Kd.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return rh(i?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(Kd.isString(e))try{return(t||JSON.parse)(e),Kd.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||bh.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(e&&Kd.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw Qd.from(e,Qd.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:mh.classes.FormData,Blob:mh.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Kd.forEach(["delete","get","head","post","put","patch"],(e=>{bh.headers[e]={}}));const wh=bh,_h=Kd.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),xh=Symbol("internals");function Sh(e){return e&&String(e).trim().toLowerCase()}function Oh(e){return!1===e||null==e?e:Kd.isArray(e)?e.map(Oh):String(e)}function kh(e,t,n,r,o){return Kd.isFunction(r)?r.call(this,t,n):(o&&(t=n),Kd.isString(t)?Kd.isString(r)?-1!==t.indexOf(r):Kd.isRegExp(r)?r.test(t):void 0:void 0)}class Eh{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=Sh(t);if(!o)throw new Error("header name must be a non-empty string");const i=Kd.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=Oh(e))}const i=(e,t)=>Kd.forEach(e,((e,n)=>o(e,n,t)));return Kd.isPlainObject(e)||e instanceof this.constructor?i(e,t):Kd.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?i((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&_h[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t):null!=e&&o(t,e,n),this}get(e,t){if(e=Sh(e)){const n=Kd.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(Kd.isFunction(t))return t.call(this,e,n);if(Kd.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Sh(e)){const n=Kd.findKey(this,e);return!(!n||void 0===this[n]||t&&!kh(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=Sh(e)){const o=Kd.findKey(n,e);!o||t&&!kh(0,n[o],o,t)||(delete n[o],r=!0)}}return Kd.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!kh(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return Kd.forEach(this,((r,o)=>{const i=Kd.findKey(n,o);if(i)return t[i]=Oh(r),void delete t[o];const s=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();s!==o&&delete t[o],t[s]=Oh(r),n[s]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return Kd.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&Kd.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[xh]=this[xh]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=Sh(e);t[r]||(!function(e,t){const n=Kd.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return Kd.isArray(e)?e.forEach(r):r(e),this}}Eh.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),Kd.reduceDescriptors(Eh.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),Kd.freezeMethods(Eh);const Ch=Eh;function Ph(e,t){const n=this||wh,r=t||n,o=Ch.from(r.headers);let i=r.data;return Kd.forEach(e,(function(e){i=e.call(n,i,o.normalize(),t?t.status:void 0)})),o.normalize(),i}function Th(e){return!(!e||!e.__CANCEL__)}function Ah(e,t,n){Qd.call(this,null==e?"canceled":e,Qd.ERR_CANCELED,t,n),this.name="CanceledError"}Kd.inherits(Ah,Qd,{__CANCEL__:!0});const jh=Ah;const Rh=mh.hasStandardBrowserEnv?{write(e,t,n,r,o,i){const s=[e+"="+encodeURIComponent(t)];Kd.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),Kd.isString(r)&&s.push("path="+r),Kd.isString(o)&&s.push("domain="+o),!0===i&&s.push("secure"),document.cookie=s.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Lh(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Ih=mh.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let n;function r(n){let r=n;return e&&(t.setAttribute("href",r),r=t.href),t.setAttribute("href",r),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=r(window.location.href),function(e){const t=Kd.isString(e)?r(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0};const Fh=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,i=0,s=0;return t=void 0!==t?t:1e3,function(l){const a=Date.now(),u=r[s];o||(o=a),n[i]=l,r[i]=a;let c=s,f=0;for(;c!==i;)f+=n[c++],c%=e;if(i=(i+1)%e,i===s&&(s=(s+1)%e),a-o{const i=o.loaded,s=o.lengthComputable?o.total:void 0,l=i-n,a=r(l);n=i;const u={loaded:i,total:s,progress:s?i/s:void 0,bytes:l,rate:a||void 0,estimated:a&&s&&i<=s?(s-i)/a:void 0,event:o};u[t?"download":"upload"]=!0,e(u)}}const Mh="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){let r=e.data;const o=Ch.from(e.headers).normalize();let i,s,{responseType:l,withXSRFToken:a}=e;function u(){e.cancelToken&&e.cancelToken.unsubscribe(i),e.signal&&e.signal.removeEventListener("abort",i)}if(Kd.isFormData(r))if(mh.hasStandardBrowserEnv||mh.hasStandardBrowserWebWorkerEnv)o.setContentType(!1);else if(!1!==(s=o.getContentType())){const[e,...t]=s?s.split(";").map((e=>e.trim())).filter(Boolean):[];o.setContentType([e||"multipart/form-data",...t].join("; "))}let c=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",n=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.set("Authorization","Basic "+btoa(t+":"+n))}const f=Lh(e.baseURL,e.url);function p(){if(!c)return;const r=Ch.from("getAllResponseHeaders"in c&&c.getAllResponseHeaders());!function(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new Qd("Request failed with status code "+n.status,[Qd.ERR_BAD_REQUEST,Qd.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}((function(e){t(e),u()}),(function(e){n(e),u()}),{data:l&&"text"!==l&&"json"!==l?c.response:c.responseText,status:c.status,statusText:c.statusText,headers:r,config:e,request:c}),c=null}if(c.open(e.method.toUpperCase(),uh(f,e.params,e.paramsSerializer),!0),c.timeout=e.timeout,"onloadend"in c?c.onloadend=p:c.onreadystatechange=function(){c&&4===c.readyState&&(0!==c.status||c.responseURL&&0===c.responseURL.indexOf("file:"))&&setTimeout(p)},c.onabort=function(){c&&(n(new Qd("Request aborted",Qd.ECONNABORTED,e,c)),c=null)},c.onerror=function(){n(new Qd("Network Error",Qd.ERR_NETWORK,e,c)),c=null},c.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const r=e.transitional||fh;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new Qd(t,r.clarifyTimeoutError?Qd.ETIMEDOUT:Qd.ECONNABORTED,e,c)),c=null},mh.hasStandardBrowserEnv&&(a&&Kd.isFunction(a)&&(a=a(e)),a||!1!==a&&Ih(f))){const t=e.xsrfHeaderName&&e.xsrfCookieName&&Rh.read(e.xsrfCookieName);t&&o.set(e.xsrfHeaderName,t)}void 0===r&&o.setContentType(null),"setRequestHeader"in c&&Kd.forEach(o.toJSON(),(function(e,t){c.setRequestHeader(t,e)})),Kd.isUndefined(e.withCredentials)||(c.withCredentials=!!e.withCredentials),l&&"json"!==l&&(c.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&c.addEventListener("progress",Nh(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&c.upload&&c.upload.addEventListener("progress",Nh(e.onUploadProgress)),(e.cancelToken||e.signal)&&(i=t=>{c&&(n(!t||t.type?new jh(null,e,c):t),c.abort(),c=null)},e.cancelToken&&e.cancelToken.subscribe(i),e.signal&&(e.signal.aborted?i():e.signal.addEventListener("abort",i)));const d=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(f);d&&-1===mh.protocols.indexOf(d)?n(new Qd("Unsupported protocol "+d+":",Qd.ERR_BAD_REQUEST,e)):c.send(r||null)}))},Dh={http:null,xhr:Mh};Kd.forEach(Dh,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Bh=e=>`- ${e}`,Uh=e=>Kd.isFunction(e)||null===e||!1===e,$h=e=>{e=Kd.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let i=0;i`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));let n=t?e.length>1?"since :\n"+e.map(Bh).join("\n"):" "+Bh(e[0]):"as no adapter specified";throw new Qd("There is no suitable adapter to dispatch the request "+n,"ERR_NOT_SUPPORT")}return r};function Vh(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new jh(null,e)}function Hh(e){Vh(e),e.headers=Ch.from(e.headers),e.data=Ph.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return $h(e.adapter||wh.adapter)(e).then((function(t){return Vh(e),t.data=Ph.call(e,e.transformResponse,t),t.headers=Ch.from(t.headers),t}),(function(t){return Th(t)||(Vh(e),t&&t.response&&(t.response.data=Ph.call(e,e.transformResponse,t.response),t.response.headers=Ch.from(t.response.headers))),Promise.reject(t)}))}const zh=e=>e instanceof Ch?e.toJSON():e;function qh(e,t){t=t||{};const n={};function r(e,t,n){return Kd.isPlainObject(e)&&Kd.isPlainObject(t)?Kd.merge.call({caseless:n},e,t):Kd.isPlainObject(t)?Kd.merge({},t):Kd.isArray(t)?t.slice():t}function o(e,t,n){return Kd.isUndefined(t)?Kd.isUndefined(e)?void 0:r(void 0,e,n):r(e,t,n)}function i(e,t){if(!Kd.isUndefined(t))return r(void 0,t)}function s(e,t){return Kd.isUndefined(t)?Kd.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function l(n,o,i){return i in t?r(n,o):i in e?r(void 0,n):void 0}const a={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:l,headers:(e,t)=>o(zh(e),zh(t),!0)};return Kd.forEach(Object.keys(Object.assign({},e,t)),(function(r){const i=a[r]||o,s=i(e[r],t[r],r);Kd.isUndefined(s)&&i!==l||(n[r]=s)})),n}const Wh="1.6.2",Kh={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Kh[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Gh={};Kh.transitional=function(e,t,n){return(r,o,i)=>{if(!1===e)throw new Qd(function(e,t){return"[Axios v1.6.2] Transitional option '"+e+"'"+t+(n?". "+n:"")}(o," has been removed"+(t?" in "+t:"")),Qd.ERR_DEPRECATED);return t&&!Gh[o]&&(Gh[o]=!0),!e||e(r,o,i)}};const Yh={assertOptions:function(e,t,n){if("object"!=typeof e)throw new Qd("options must be an object",Qd.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const i=r[o],s=t[i];if(s){const t=e[i],n=void 0===t||s(t,i,e);if(!0!==n)throw new Qd("option "+i+" must be "+n,Qd.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new Qd("Unknown option "+i,Qd.ERR_BAD_OPTION)}},validators:Kh},Jh=Yh.validators;class Qh{constructor(e){this.defaults=e,this.interceptors={request:new ch,response:new ch}}request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=qh(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&Yh.assertOptions(n,{silentJSONParsing:Jh.transitional(Jh.boolean),forcedJSONParsing:Jh.transitional(Jh.boolean),clarifyTimeoutError:Jh.transitional(Jh.boolean)},!1),null!=r&&(Kd.isFunction(r)?t.paramsSerializer={serialize:r}:Yh.assertOptions(r,{encode:Jh.function,serialize:Jh.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let i=o&&Kd.merge(o.common,o[t.method]);o&&Kd.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=Ch.concat(i,o);const s=[];let l=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(l=l&&e.synchronous,s.unshift(e.fulfilled,e.rejected))}));const a=[];let u;this.interceptors.response.forEach((function(e){a.push(e.fulfilled,e.rejected)}));let c,f=0;if(!l){const e=[Hh.bind(this),void 0];for(e.unshift.apply(e,s),e.push.apply(e,a),c=e.length,u=Promise.resolve(t);f{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new jh(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;const t=new Xh((function(t){e=t}));return{token:t,cancel:e}}}const ev=Xh;const tv={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(tv).forEach((([e,t])=>{tv[t]=e}));const nv=tv;const rv=function e(t){const n=new Zh(t),r=dd(Zh.prototype.request,n);return Kd.extend(r,Zh.prototype,n,{allOwnKeys:!0}),Kd.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(qh(t,n))},r}(wh);rv.Axios=Zh,rv.CanceledError=jh,rv.CancelToken=ev,rv.isCancel=Th,rv.VERSION=Wh,rv.toFormData=rh,rv.AxiosError=Qd,rv.Cancel=rv.CanceledError,rv.all=function(e){return Promise.all(e)},rv.spread=function(e){return function(t){return e.apply(null,t)}},rv.isAxiosError=function(e){return Kd.isObject(e)&&!0===e.isAxiosError},rv.mergeConfig=qh,rv.AxiosHeaders=Ch,rv.formToJSON=e=>yh(Kd.isHTMLForm(e)?new FormData(e):e),rv.getAdapter=$h,rv.HttpStatusCode=nv,rv.default=rv;const ov=rv,iv="undefined"!=typeof window;function sv(e){return e.__esModule||"Module"===e[Symbol.toStringTag]}const lv=Object.assign;function av(e,t){const n={};for(const r in t){const o=t[r];n[r]=cv(o)?o.map(e):e(o)}return n}const uv=()=>{},cv=Array.isArray;const fv=/\/$/,pv=e=>e.replace(fv,"");function dv(e,t,n="/"){let r,o={},i="",s="";const l=t.indexOf("#");let a=t.indexOf("?");return l=0&&(a=-1),a>-1&&(r=t.slice(0,a),i=t.slice(a+1,l>-1?l:t.length),o=e(i)),l>-1&&(r=r||t.slice(0,l),s=t.slice(l,t.length)),r=function(e,t){if(e.startsWith("/"))return e;0;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];".."!==o&&"."!==o||r.push("");let i,s,l=n.length-1;for(i=0;i1&&l--}return n.slice(0,l).join("/")+"/"+r.slice(i-(i===r.length?1:0)).join("/")}(null!=r?r:t,n),{fullPath:r+(i&&"?")+i+s,path:r,query:o,hash:s}}function hv(e,t){return t&&e.toLowerCase().startsWith(t.toLowerCase())?e.slice(t.length)||"/":e}function vv(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function gv(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!mv(e[n],t[n]))return!1;return!0}function mv(e,t){return cv(e)?yv(e,t):cv(t)?yv(t,e):e===t}function yv(e,t){return cv(t)?e.length===t.length&&e.every(((e,n)=>e===t[n])):1===e.length&&e[0]===t}var bv,wv;!function(e){e.pop="pop",e.push="push"}(bv||(bv={})),function(e){e.back="back",e.forward="forward",e.unknown=""}(wv||(wv={}));function _v(e){if(!e)if(iv){const t=document.querySelector("base");e=(e=t&&t.getAttribute("href")||"/").replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return"/"!==e[0]&&"#"!==e[0]&&(e="/"+e),pv(e)}const xv=/^[^#]+#/;function Sv(e,t){return e.replace(xv,"#")+t}const Ov=()=>({left:window.pageXOffset,top:window.pageYOffset});function kv(e){let t;if("el"in e){const n=e.el,r="string"==typeof n&&n.startsWith("#");0;const o="string"==typeof n?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=function(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(null!=t.left?t.left:window.pageXOffset,null!=t.top?t.top:window.pageYOffset)}function Ev(e,t){return(history.state?history.state.position-t:-1)+e}const Cv=new Map;let Pv=()=>location.protocol+"//"+location.host;function Tv(e,t){const{pathname:n,search:r,hash:o}=t,i=e.indexOf("#");if(i>-1){let t=o.includes(e.slice(i))?e.slice(i).length:1,n=o.slice(t);return"/"!==n[0]&&(n="/"+n),hv(n,"")}return hv(n,e)+r+o}function Av(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?Ov():null}}function jv(e){const t=function(e){const{history:t,location:n}=window,r={value:Tv(e,n)},o={value:t.state};function i(r,i,s){const l=e.indexOf("#"),a=l>-1?(n.host&&document.querySelector("base")?e:e.slice(l))+r:Pv()+e+r;try{t[s?"replaceState":"pushState"](i,"",a),o.value=i}catch(e){n[s?"replace":"assign"](a)}}return o.value||i(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0),{location:r,state:o,push:function(e,n){const s=lv({},o.value,t.state,{forward:e,scroll:Ov()});i(s.current,s,!0),i(e,lv({},Av(r.value,e,null),{position:s.position+1},n),!1),r.value=e},replace:function(e,n){i(e,lv({},t.state,Av(o.value.back,e,o.value.forward,!0),n,{position:o.value.position}),!0),r.value=e}}}(e=_v(e)),n=function(e,t,n,r){let o=[],i=[],s=null;const l=({state:i})=>{const l=Tv(e,location),a=n.value,u=t.value;let c=0;if(i){if(n.value=l,t.value=i,s&&s===a)return void(s=null);c=u?i.position-u.position:0}else r(l);o.forEach((e=>{e(n.value,a,{delta:c,type:bv.pop,direction:c?c>0?wv.forward:wv.back:wv.unknown})}))};function a(){const{history:e}=window;e.state&&e.replaceState(lv({},e.state,{scroll:Ov()}),"")}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",a,{passive:!0}),{pauseListeners:function(){s=n.value},listen:function(e){o.push(e);const t=()=>{const t=o.indexOf(e);t>-1&&o.splice(t,1)};return i.push(t),t},destroy:function(){for(const e of i)e();i=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",a)}}}(e,t.state,t.location,t.replace);const r=lv({location:"",base:e,go:function(e,t=!0){t||n.pauseListeners(),history.go(e)},createHref:Sv.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Rv(e){return"string"==typeof e||"symbol"==typeof e}const Lv={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Iv=Symbol("");var Fv;!function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"}(Fv||(Fv={}));function Nv(e,t){return lv(new Error,{type:e,[Iv]:!0},t)}function Mv(e,t){return e instanceof Error&&Iv in e&&(null==t||!!(e.type&t))}const Dv="[^/]+?",Bv={sensitive:!1,strict:!1,start:!0,end:!0},Uv=/[.+*?^${}()[\]/\\]/g;function $v(e,t){let n=0;for(;nt.length?1===t.length&&80===t[0]?1:-1:0}function Vv(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const zv={type:0,value:""},qv=/[a-zA-Z0-9_]/;function Wv(e,t,n){const r=function(e,t){const n=lv({},Bv,t),r=[];let o=n.start?"^":"";const i=[];for(const t of e){const e=t.length?[]:[90];n.strict&&!t.length&&(o+="/");for(let r=0;r1&&("*"===l||"+"===l)&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:u,regexp:c,repeatable:"*"===l||"+"===l,optional:"*"===l||"?"===l})):t("Invalid state to consume buffer"),u="")}function p(){u+=l}for(;a{i(p)}:uv}function i(e){if(Rv(e)){const t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(i),t.alias.forEach(i))}else{const t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(i),e.alias.forEach(i))}}function s(e){let t=0;for(;t=0&&(e.record.path!==n[t].record.path||!Xv(e,n[t]));)t++;n.splice(t,0,e),e.record.name&&!Jv(e)&&r.set(e.record.name,e)}return t=Zv({strict:!1,end:!0,sensitive:!1},t),e.forEach((e=>o(e))),{addRoute:o,resolve:function(e,t){let o,i,s,l={};if("name"in e&&e.name){if(o=r.get(e.name),!o)throw Nv(1,{location:e});0,s=o.record.name,l=lv(Gv(t.params,o.keys.filter((e=>!e.optional)).map((e=>e.name))),e.params&&Gv(e.params,o.keys.map((e=>e.name)))),i=o.stringify(l)}else if("path"in e)i=e.path,o=n.find((e=>e.re.test(i))),o&&(l=o.parse(i),s=o.record.name);else{if(o=t.name?r.get(t.name):n.find((e=>e.re.test(t.path))),!o)throw Nv(1,{location:e,currentLocation:t});s=o.record.name,l=lv({},t.params,e.params),i=o.stringify(l)}const a=[];let u=o;for(;u;)a.unshift(u.record),u=u.parent;return{name:s,path:i,params:l,matched:a,meta:Qv(a)}},removeRoute:i,getRoutes:function(){return n},getRecordMatcher:function(e){return r.get(e)}}}function Gv(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function Yv(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]="object"==typeof n?n[r]:n;return t}function Jv(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Qv(e){return e.reduce(((e,t)=>lv(e,t.meta)),{})}function Zv(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function Xv(e,t){return t.children.some((t=>t===e||Xv(e,t)))}const eg=/#/g,tg=/&/g,ng=/\//g,rg=/=/g,og=/\?/g,ig=/\+/g,sg=/%5B/g,lg=/%5D/g,ag=/%5E/g,ug=/%60/g,cg=/%7B/g,fg=/%7C/g,pg=/%7D/g,dg=/%20/g;function hg(e){return encodeURI(""+e).replace(fg,"|").replace(sg,"[").replace(lg,"]")}function vg(e){return hg(e).replace(ig,"%2B").replace(dg,"+").replace(eg,"%23").replace(tg,"%26").replace(ug,"`").replace(cg,"{").replace(pg,"}").replace(ag,"^")}function gg(e){return null==e?"":function(e){return hg(e).replace(eg,"%23").replace(og,"%3F")}(e).replace(ng,"%2F")}function mg(e){try{return decodeURIComponent(""+e)}catch(e){}return""+e}function yg(e){const t={};if(""===e||"?"===e)return t;const n=("?"===e[0]?e.slice(1):e).split("&");for(let e=0;ee&&vg(e))):[r&&vg(r)];o.forEach((e=>{void 0!==e&&(t+=(t.length?"&":"")+n,null!=e&&(t+="="+e))}))}return t}function wg(e){const t={};for(const n in e){const r=e[n];void 0!==r&&(t[n]=cv(r)?r.map((e=>null==e?null:""+e)):null==r?r:""+r)}return t}const _g=Symbol(""),xg=Symbol(""),Sg=Symbol(""),Og=Symbol(""),kg=Symbol("");function Eg(){let e=[];return{add:function(t){return e.push(t),()=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)}},list:()=>e.slice(),reset:function(){e=[]}}}function Cg(e,t,n,r,o){const i=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise(((s,l)=>{const a=e=>{var a;!1===e?l(Nv(4,{from:n,to:t})):e instanceof Error?l(e):"string"==typeof(a=e)||a&&"object"==typeof a?l(Nv(2,{from:t,to:e})):(i&&r.enterCallbacks[o]===i&&"function"==typeof e&&i.push(e),s())},u=e.call(r&&r.instances[o],t,n,a);let c=Promise.resolve(u);e.length<3&&(c=c.then(a)),c.catch((e=>l(e)))}))}function Pg(e,t,n,r){const o=[];for(const s of e){0;for(const e in s.components){let l=s.components[e];if("beforeRouteEnter"===t||s.instances[e])if("object"==typeof(i=l)||"displayName"in i||"props"in i||"__vccOpts"in i){const i=(l.__vccOpts||l)[t];i&&o.push(Cg(i,n,r,s,e))}else{let i=l();0,o.push((()=>i.then((o=>{if(!o)return Promise.reject(new Error(`Couldn't resolve component "${e}" at "${s.path}"`));const i=sv(o)?o.default:o;s.components[e]=i;const l=(i.__vccOpts||i)[t];return l&&Cg(l,n,r,s,e)()}))))}}}var i;return o}function Tg(e){const t=Yo(Sg),n=Yo(Og),r=Rs((()=>t.resolve(Wt(e.to)))),o=Rs((()=>{const{matched:e}=r.value,{length:t}=e,o=e[t-1],i=n.matched;if(!o||!i.length)return-1;const s=i.findIndex(vv.bind(null,o));if(s>-1)return s;const l=jg(e[t-2]);return t>1&&jg(o)===l&&i[i.length-1].path!==l?i.findIndex(vv.bind(null,e[t-2])):s})),i=Rs((()=>o.value>-1&&function(e,t){for(const n in t){const r=t[n],o=e[n];if("string"==typeof r){if(r!==o)return!1}else if(!cv(o)||o.length!==r.length||r.some(((e,t)=>e!==o[t])))return!1}return!0}(n.params,r.value.params))),s=Rs((()=>o.value>-1&&o.value===n.matched.length-1&&gv(n.params,r.value.params)));return{route:r,href:Rs((()=>r.value.href)),isActive:i,isExactActive:s,navigate:function(n={}){return function(e){if(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)return;if(e.defaultPrevented)return;if(void 0!==e.button&&0!==e.button)return;if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}e.preventDefault&&e.preventDefault();return!0}(n)?t[Wt(e.replace)?"replace":"push"](Wt(e.to)).catch(uv):Promise.resolve()}}}const Ag=Lr({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Tg,setup(e,{slots:t}){const n=kt(Tg(e)),{options:r}=Yo(Sg),o=Rs((()=>({[Rg(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Rg(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive})));return()=>{const r=t.default&&t.default(n);return e.custom?r:Ls("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},r)}}});function jg(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Rg=(e,t,n)=>null!=e?e:null!=t?t:n;function Lg(e,t){if(!e)return null;const n=e(t);return 1===n.length?n[0]:n}const Ig=Lr({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Yo(kg),o=Rs((()=>e.route||r.value)),i=Yo(xg,0),s=Rs((()=>{let e=Wt(i);const{matched:t}=o.value;let n;for(;(n=t[e])&&!n.components;)e++;return e})),l=Rs((()=>o.value.matched[s.value]));Go(xg,Rs((()=>s.value+1))),Go(_g,l),Go(kg,o);const a=$t();return dr((()=>[a.value,l.value,e.name]),(([e,t,n],[r,o,i])=>{t&&(t.instances[n]=e,o&&o!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=o.leaveGuards),t.updateGuards.size||(t.updateGuards=o.updateGuards))),!e||!t||o&&vv(t,o)&&r||(t.enterCallbacks[n]||[]).forEach((t=>t(e)))}),{flush:"post"}),()=>{const r=o.value,i=e.name,s=l.value,u=s&&s.components[i];if(!u)return Lg(n.default,{Component:u,route:r});const c=s.props[i],f=c?!0===c?r.params:"function"==typeof c?c(r):c:null,p=Ls(u,lv({},f,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(s.instances[i]=null)},ref:a}));return Lg(n.default,{Component:p,route:r})||p}}});function Fg(){return Yo(Sg)}function Ng(){return Yo(Og)}function Mg(e,t,...n){if(e in t){let r=t[e];return"function"==typeof r?r(...n):r}let r=new Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(t).map((e=>`"${e}"`)).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,Mg),r}var Dg=(e=>(e[e.None=0]="None",e[e.RenderStrategy=1]="RenderStrategy",e[e.Static=2]="Static",e))(Dg||{}),Bg=(e=>(e[e.Unmount=0]="Unmount",e[e.Hidden=1]="Hidden",e))(Bg||{});function Ug({visible:e=!0,features:t=0,ourProps:n,theirProps:r,...o}){var i;let s=Hg(r,n),l=Object.assign(o,{props:s});if(e||2&t&&s.static)return $g(l);if(1&t){return Mg(null==(i=s.unmount)||i?0:1,{0:()=>null,1:()=>$g({...o,props:{...s,hidden:!0,style:{display:"none"}}})})}return $g(l)}function $g({props:e,attrs:t,slots:n,slot:r,name:o}){var i,s;let{as:l,...a}=zg(e,["unmount","static"]),u=null==(i=n.default)?void 0:i.call(n,r),c={};if(r){let e=!1,t=[];for(let[n,o]of Object.entries(r))"boolean"==typeof o&&(e=!0),!0===o&&t.push(n);e&&(c["data-headlessui-state"]=t.join(" "))}if("template"===l){if(u=Vg(null!=u?u:[]),Object.keys(a).length>0||Object.keys(t).length>0){let[e,...n]=null!=u?u:[];if(!function(e){return null!=e&&("string"==typeof e.type||"object"==typeof e.type||"function"==typeof e.type)}(e)||n.length>0)throw new Error(['Passing props on "template"!',"",`The current component <${o} /> is rendering a "template".`,"However we need to passthrough the following props:",Object.keys(a).concat(Object.keys(t)).map((e=>e.trim())).filter(((e,t,n)=>n.indexOf(e)===t)).sort(((e,t)=>e.localeCompare(t))).map((e=>` - ${e}`)).join("\n"),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "template".',"Render a single element as the child so that we can forward the props onto that element."].map((e=>` - ${e}`)).join("\n")].join("\n"));let r=Hg(null!=(s=e.props)?s:{},a),i=es(e,r);for(let e in r)e.startsWith("on")&&(i.props||(i.props={}),i.props[e]=r[e]);return i}return Array.isArray(u)&&1===u.length?u[0]:u}return Ls(l,Object.assign({},a,c),{default:()=>u})}function Vg(e){return e.flatMap((e=>e.type===Ai?Vg(e.children):[e]))}function Hg(...e){if(0===e.length)return{};if(1===e.length)return e[0];let t={},n={};for(let r of e)for(let e in r)e.startsWith("on")&&"function"==typeof r[e]?(null!=n[e]||(n[e]=[]),n[e].push(r[e])):t[e]=r[e];if(t.disabled||t["aria-disabled"])return Object.assign(t,Object.fromEntries(Object.keys(n).map((e=>[e,void 0]))));for(let e in n)Object.assign(t,{[e](t,...r){let o=n[e];for(let e of o){if(t instanceof Event&&t.defaultPrevented)return;e(t,...r)}}});return t}function zg(e,t=[]){let n=Object.assign({},e);for(let e of t)e in n&&delete n[e];return n}let qg=0;function Wg(){return++qg}var Kg=(e=>(e.Space=" ",e.Enter="Enter",e.Escape="Escape",e.Backspace="Backspace",e.Delete="Delete",e.ArrowLeft="ArrowLeft",e.ArrowUp="ArrowUp",e.ArrowRight="ArrowRight",e.ArrowDown="ArrowDown",e.Home="Home",e.End="End",e.PageUp="PageUp",e.PageDown="PageDown",e.Tab="Tab",e))(Kg||{});var Gg=(e=>(e[e.First=0]="First",e[e.Previous=1]="Previous",e[e.Next=2]="Next",e[e.Last=3]="Last",e[e.Specific=4]="Specific",e[e.Nothing=5]="Nothing",e))(Gg||{});function Yg(e,t){let n=t.resolveItems();if(n.length<=0)return null;let r=t.resolveActiveIndex(),o=null!=r?r:-1,i=(()=>{switch(e.focus){case 0:return n.findIndex((e=>!t.resolveDisabled(e)));case 1:{let e=n.slice().reverse().findIndex(((e,n,r)=>!(-1!==o&&r.length-n-1>=o)&&!t.resolveDisabled(e)));return-1===e?e:n.length-1-e}case 2:return n.findIndex(((e,n)=>!(n<=o)&&!t.resolveDisabled(e)));case 3:{let e=n.slice().reverse().findIndex((e=>!t.resolveDisabled(e)));return-1===e?e:n.length-1-e}case 4:return n.findIndex((n=>t.resolveId(n)===e.id));case 5:return null;default:!function(e){throw new Error("Unexpected object: "+e)}(e)}})();return-1===i?r:i}function Jg(e){var t;return null==e||null==e.value?null:null!=(t=e.value.$el)?t:e.value}var Qg=Object.defineProperty,Zg=(e,t,n)=>(((e,t,n)=>{t in e?Qg(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n})(e,"symbol"!=typeof t?t+"":t,n),n);let Xg=new class{constructor(){Zg(this,"current",this.detect()),Zg(this,"currentId",0)}set(e){this.current!==e&&(this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return"server"===this.current}get isClient(){return"client"===this.current}detect(){return"undefined"==typeof window||"undefined"==typeof document?"server":"client"}};function em(e){if(Xg.isServer)return null;if(e instanceof Node)return e.ownerDocument;if(null!=e&&e.hasOwnProperty("value")){let t=Jg(e);if(t)return t.ownerDocument}return document}let tm=Symbol("Context");var nm=(e=>(e[e.Open=1]="Open",e[e.Closed=2]="Closed",e[e.Closing=4]="Closing",e[e.Opening=8]="Opening",e))(nm||{});function rm(){return Yo(tm,null)}function om(e){Go(tm,e)}function im(e,t){if(e)return e;let n=null!=t?t:"button";return"string"==typeof n&&"button"===n.toLowerCase()?"button":void 0}function sm(e,t){let n=$t(im(e.value.type,e.value.as));return Jr((()=>{n.value=im(e.value.type,e.value.as)})),ur((()=>{var e;n.value||Jg(t)&&Jg(t)instanceof HTMLButtonElement&&(null==(e=Jg(t))||!e.hasAttribute("type"))&&(n.value="button")})),n}let lm=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map((e=>`${e}:not([tabindex='-1'])`)).join(",");var am=(e=>(e[e.First=1]="First",e[e.Previous=2]="Previous",e[e.Next=4]="Next",e[e.Last=8]="Last",e[e.WrapAround=16]="WrapAround",e[e.NoScroll=32]="NoScroll",e))(am||{}),um=(e=>(e[e.Error=0]="Error",e[e.Overflow=1]="Overflow",e[e.Success=2]="Success",e[e.Underflow=3]="Underflow",e))(um||{}),cm=(e=>(e[e.Previous=-1]="Previous",e[e.Next=1]="Next",e))(cm||{});function fm(e=document.body){return null==e?[]:Array.from(e.querySelectorAll(lm)).sort(((e,t)=>Math.sign((e.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER))))}var pm=(e=>(e[e.Strict=0]="Strict",e[e.Loose=1]="Loose",e))(pm||{});function dm(e,t=0){var n;return e!==(null==(n=em(e))?void 0:n.body)&&Mg(t,{0:()=>e.matches(lm),1(){let t=e;for(;null!==t;){if(t.matches(lm))return!0;t=t.parentElement}return!1}})}function hm(e){let t=em(e);bn((()=>{t&&!dm(t.activeElement,0)&&gm(e)}))}var vm=(e=>(e[e.Keyboard=0]="Keyboard",e[e.Mouse=1]="Mouse",e))(vm||{});function gm(e){null==e||e.focus({preventScroll:!0})}"undefined"!=typeof window&&"undefined"!=typeof document&&(document.addEventListener("keydown",(e=>{e.metaKey||e.altKey||e.ctrlKey||(document.documentElement.dataset.headlessuiFocusVisible="")}),!0),document.addEventListener("click",(e=>{1===e.detail?delete document.documentElement.dataset.headlessuiFocusVisible:0===e.detail&&(document.documentElement.dataset.headlessuiFocusVisible="")}),!0));let mm=["textarea","input"].join(",");function ym(e,t=(e=>e)){return e.slice().sort(((e,n)=>{let r=t(e),o=t(n);if(null===r||null===o)return 0;let i=r.compareDocumentPosition(o);return i&Node.DOCUMENT_POSITION_FOLLOWING?-1:i&Node.DOCUMENT_POSITION_PRECEDING?1:0}))}function bm(e,t,{sorted:n=!0,relativeTo:r=null,skipElements:o=[]}={}){var i;let s=null!=(i=Array.isArray(e)?e.length>0?e[0].ownerDocument:document:null==e?void 0:e.ownerDocument)?i:document,l=Array.isArray(e)?n?ym(e):e:fm(e);o.length>0&&l.length>1&&(l=l.filter((e=>!o.includes(e)))),r=null!=r?r:s.activeElement;let a,u=(()=>{if(5&t)return 1;if(10&t)return-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),c=(()=>{if(1&t)return 0;if(2&t)return Math.max(0,l.indexOf(r))-1;if(4&t)return Math.max(0,l.indexOf(r))+1;if(8&t)return l.length-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),f=32&t?{preventScroll:!0}:{},p=0,d=l.length;do{if(p>=d||p+d<=0)return 0;let e=c+p;if(16&t)e=(e+d)%d;else{if(e<0)return 3;if(e>=d)return 1}a=l[e],null==a||a.focus(f),p+=u}while(a!==s.activeElement);return 6&t&&function(e){var t,n;return null!=(n=null==(t=null==e?void 0:e.matches)?void 0:t.call(e,mm))&&n}(a)&&a.select(),2}function wm(e,t,n){Xg.isServer||ur((r=>{document.addEventListener(e,t,n),r((()=>document.removeEventListener(e,t,n)))}))}function _m(e,t,n){Xg.isServer||ur((r=>{window.addEventListener(e,t,n),r((()=>window.removeEventListener(e,t,n)))}))}function xm(e,t,n=Rs((()=>!0))){function r(r,o){if(!n.value||r.defaultPrevented)return;let i=o(r);if(null===i||!i.getRootNode().contains(i))return;let s=function e(t){return"function"==typeof t?e(t()):Array.isArray(t)||t instanceof Set?t:[t]}(e);for(let e of s){if(null===e)continue;let t=e instanceof HTMLElement?e:Jg(e);if(null!=t&&t.contains(i)||r.composed&&r.composedPath().includes(t))return}return!dm(i,pm.Loose)&&-1!==i.tabIndex&&r.preventDefault(),t(r,i)}let o=$t(null);wm("pointerdown",(e=>{var t,r;n.value&&(o.value=(null==(r=null==(t=e.composedPath)?void 0:t.call(e))?void 0:r[0])||e.target)}),!0),wm("mousedown",(e=>{var t,r;n.value&&(o.value=(null==(r=null==(t=e.composedPath)?void 0:t.call(e))?void 0:r[0])||e.target)}),!0),wm("click",(e=>{o.value&&(r(e,(()=>o.value)),o.value=null)}),!0),wm("touchend",(e=>r(e,(()=>e.target instanceof HTMLElement?e.target:null))),!0),_m("blur",(e=>r(e,(()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null))),!0)}function Sm(e){return[e.screenX,e.screenY]}function Om(){let e=$t([-1,-1]);return{wasMoved(t){let n=Sm(t);return(e.value[0]!==n[0]||e.value[1]!==n[1])&&(e.value=n,!0)},update(t){e.value=Sm(t)}}}let km=/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g;function Em(e){var t,n;let r=null!=(t=e.innerText)?t:"",o=e.cloneNode(!0);if(!(o instanceof HTMLElement))return r;let i=!1;for(let e of o.querySelectorAll('[hidden],[aria-hidden],[role="img"]'))e.remove(),i=!0;let s=i?null!=(n=o.innerText)?n:"":r;return km.test(s)&&(s=s.replace(km,"")),s}function Cm(e){let t=$t(""),n=$t("");return()=>{let r=Jg(e);if(!r)return"";let o=r.innerText;if(t.value===o)return n.value;let i=function(e){let t=e.getAttribute("aria-label");if("string"==typeof t)return t.trim();let n=e.getAttribute("aria-labelledby");if(n){let e=n.split(" ").map((e=>{let t=document.getElementById(e);if(t){let e=t.getAttribute("aria-label");return"string"==typeof e?e.trim():Em(t).trim()}return null})).filter(Boolean);if(e.length>0)return e.join(", ")}return Em(e).trim()}(r).trim().toLowerCase();return t.value=o,n.value=i,i}}var Pm=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(Pm||{}),Tm=(e=>(e[e.Pointer=0]="Pointer",e[e.Other=1]="Other",e))(Tm||{});let Am=Symbol("MenuContext");function jm(e){let t=Yo(Am,null);if(null===t){let t=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,jm),t}return t}let Rm=Lr({name:"Menu",props:{as:{type:[Object,String],default:"template"}},setup(e,{slots:t,attrs:n}){let r=$t(1),o=$t(null),i=$t(null),s=$t([]),l=$t(""),a=$t(null),u=$t(1);function c(e=(e=>e)){let t=null!==a.value?s.value[a.value]:null,n=ym(e(s.value.slice()),(e=>Jg(e.dataRef.domRef))),r=t?n.indexOf(t):null;return-1===r&&(r=null),{items:n,activeItemIndex:r}}let f={menuState:r,buttonRef:o,itemsRef:i,items:s,searchQuery:l,activeItemIndex:a,activationTrigger:u,closeMenu:()=>{r.value=1,a.value=null},openMenu:()=>r.value=0,goToItem(e,t,n){let r=c(),o=Yg(e===Gg.Specific?{focus:Gg.Specific,id:t}:{focus:e},{resolveItems:()=>r.items,resolveActiveIndex:()=>r.activeItemIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.disabled});l.value="",a.value=o,u.value=null!=n?n:1,s.value=r.items},search(e){let t=""!==l.value?0:1;l.value+=e.toLowerCase();let n=(null!==a.value?s.value.slice(a.value+t).concat(s.value.slice(0,a.value+t)):s.value).find((e=>e.dataRef.textValue.startsWith(l.value)&&!e.dataRef.disabled)),r=n?s.value.indexOf(n):-1;-1===r||r===a.value||(a.value=r,u.value=1)},clearSearch(){l.value=""},registerItem(e,t){let n=c((n=>[...n,{id:e,dataRef:t}]));s.value=n.items,a.value=n.activeItemIndex,u.value=1},unregisterItem(e){let t=c((t=>{let n=t.findIndex((t=>t.id===e));return-1!==n&&t.splice(n,1),t}));s.value=t.items,a.value=t.activeItemIndex,u.value=1}};return xm([o,i],((e,t)=>{var n;f.closeMenu(),dm(t,pm.Loose)||(e.preventDefault(),null==(n=Jg(o))||n.focus())}),Rs((()=>0===r.value))),Go(Am,f),om(Rs((()=>Mg(r.value,{0:nm.Open,1:nm.Closed})))),()=>{let o={open:0===r.value,close:f.closeMenu};return Ug({ourProps:{},theirProps:e,slot:o,slots:t,attrs:n,name:"Menu"})}}}),Lm=Lr({name:"MenuButton",props:{disabled:{type:Boolean,default:!1},as:{type:[Object,String],default:"button"},id:{type:String,default:()=>`headlessui-menu-button-${Wg()}`}},setup(e,{attrs:t,slots:n,expose:r}){let o=jm("MenuButton");function i(e){switch(e.key){case Kg.Space:case Kg.Enter:case Kg.ArrowDown:e.preventDefault(),e.stopPropagation(),o.openMenu(),bn((()=>{var e;null==(e=Jg(o.itemsRef))||e.focus({preventScroll:!0}),o.goToItem(Gg.First)}));break;case Kg.ArrowUp:e.preventDefault(),e.stopPropagation(),o.openMenu(),bn((()=>{var e;null==(e=Jg(o.itemsRef))||e.focus({preventScroll:!0}),o.goToItem(Gg.Last)}))}}function s(e){if(e.key===Kg.Space)e.preventDefault()}function l(t){e.disabled||(0===o.menuState.value?(o.closeMenu(),bn((()=>{var e;return null==(e=Jg(o.buttonRef))?void 0:e.focus({preventScroll:!0})}))):(t.preventDefault(),o.openMenu(),function(e){requestAnimationFrame((()=>requestAnimationFrame(e)))}((()=>{var e;return null==(e=Jg(o.itemsRef))?void 0:e.focus({preventScroll:!0})}))))}r({el:o.buttonRef,$el:o.buttonRef});let a=sm(Rs((()=>({as:e.as,type:t.type}))),o.buttonRef);return()=>{var r;let u={open:0===o.menuState.value},{id:c,...f}=e;return Ug({ourProps:{ref:o.buttonRef,id:c,type:a.value,"aria-haspopup":"menu","aria-controls":null==(r=Jg(o.itemsRef))?void 0:r.id,"aria-expanded":0===o.menuState.value,onKeydown:i,onKeyup:s,onClick:l},theirProps:f,slot:u,attrs:t,slots:n,name:"MenuButton"})}}}),Im=Lr({name:"MenuItems",props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:()=>`headlessui-menu-items-${Wg()}`}},setup(e,{attrs:t,slots:n,expose:r}){let o=jm("MenuItems"),i=$t(null);function s(e){var t;switch(i.value&&clearTimeout(i.value),e.key){case Kg.Space:if(""!==o.searchQuery.value)return e.preventDefault(),e.stopPropagation(),o.search(e.key);case Kg.Enter:if(e.preventDefault(),e.stopPropagation(),null!==o.activeItemIndex.value){null==(t=Jg(o.items.value[o.activeItemIndex.value].dataRef.domRef))||t.click()}o.closeMenu(),hm(Jg(o.buttonRef));break;case Kg.ArrowDown:return e.preventDefault(),e.stopPropagation(),o.goToItem(Gg.Next);case Kg.ArrowUp:return e.preventDefault(),e.stopPropagation(),o.goToItem(Gg.Previous);case Kg.Home:case Kg.PageUp:return e.preventDefault(),e.stopPropagation(),o.goToItem(Gg.First);case Kg.End:case Kg.PageDown:return e.preventDefault(),e.stopPropagation(),o.goToItem(Gg.Last);case Kg.Escape:e.preventDefault(),e.stopPropagation(),o.closeMenu(),bn((()=>{var e;return null==(e=Jg(o.buttonRef))?void 0:e.focus({preventScroll:!0})}));break;case Kg.Tab:e.preventDefault(),e.stopPropagation(),o.closeMenu(),bn((()=>function(e,t){return bm(fm(),t,{relativeTo:e})}(Jg(o.buttonRef),e.shiftKey?am.Previous:am.Next)));break;default:1===e.key.length&&(o.search(e.key),i.value=setTimeout((()=>o.clearSearch()),350))}}function l(e){if(e.key===Kg.Space)e.preventDefault()}r({el:o.itemsRef,$el:o.itemsRef}),function({container:e,accept:t,walk:n,enabled:r}){ur((()=>{let o=e.value;if(!o||void 0!==r&&!r.value)return;let i=em(e);if(!i)return;let s=Object.assign((e=>t(e)),{acceptNode:t}),l=i.createTreeWalker(o,NodeFilter.SHOW_ELEMENT,s,!1);for(;l.nextNode();)n(l.currentNode)}))}({container:Rs((()=>Jg(o.itemsRef))),enabled:Rs((()=>0===o.menuState.value)),accept:e=>"menuitem"===e.getAttribute("role")?NodeFilter.FILTER_REJECT:e.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT,walk(e){e.setAttribute("role","none")}});let a=rm(),u=Rs((()=>null!==a?(a.value&nm.Open)===nm.Open:0===o.menuState.value));return()=>{var r,i;let a={open:0===o.menuState.value},{id:c,...f}=e;return Ug({ourProps:{"aria-activedescendant":null===o.activeItemIndex.value||null==(r=o.items.value[o.activeItemIndex.value])?void 0:r.id,"aria-labelledby":null==(i=Jg(o.buttonRef))?void 0:i.id,id:c,onKeydown:s,onKeyup:l,role:"menu",tabIndex:0,ref:o.itemsRef},theirProps:f,slot:a,attrs:t,slots:n,features:Dg.RenderStrategy|Dg.Static,visible:u.value,name:"MenuItems"})}}}),Fm=Lr({name:"MenuItem",inheritAttrs:!1,props:{as:{type:[Object,String],default:"template"},disabled:{type:Boolean,default:!1},id:{type:String,default:()=>`headlessui-menu-item-${Wg()}`}},setup(e,{slots:t,attrs:n,expose:r}){let o=jm("MenuItem"),i=$t(null);r({el:i,$el:i});let s=Rs((()=>null!==o.activeItemIndex.value&&o.items.value[o.activeItemIndex.value].id===e.id)),l=Cm(i),a=Rs((()=>({disabled:e.disabled,get textValue(){return l()},domRef:i})));function u(t){if(e.disabled)return t.preventDefault();o.closeMenu(),hm(Jg(o.buttonRef))}function c(){if(e.disabled)return o.goToItem(Gg.Nothing);o.goToItem(Gg.Specific,e.id)}Jr((()=>o.registerItem(e.id,a))),eo((()=>o.unregisterItem(e.id))),ur((()=>{0===o.menuState.value&&s.value&&0!==o.activationTrigger.value&&bn((()=>{var e,t;return null==(t=null==(e=Jg(i))?void 0:e.scrollIntoView)?void 0:t.call(e,{block:"nearest"})}))}));let f=Om();function p(e){f.update(e)}function d(t){f.wasMoved(t)&&(e.disabled||s.value||o.goToItem(Gg.Specific,e.id,0))}function h(t){f.wasMoved(t)&&(e.disabled||s.value&&o.goToItem(Gg.Nothing))}return()=>{let{disabled:r}=e,l={active:s.value,disabled:r,close:o.closeMenu},{id:a,...f}=e;return Ug({ourProps:{id:a,ref:i,role:"menuitem",tabIndex:!0===r?void 0:-1,"aria-disabled":!0===r||void 0,disabled:void 0,onClick:u,onFocus:c,onPointerenter:p,onMouseenter:p,onPointermove:d,onMousemove:d,onPointerleave:h,onMouseleave:h},theirProps:{...n,...f},slot:l,attrs:n,slots:t,name:"MenuItem"})}}});function Nm(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18L18 6M6 6l12 12"})])}function Mm(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18"})])}function Dm(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"})])}function Bm(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0"})])}function Um(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M2.25 12.75V12A2.25 2.25 0 014.5 9.75h15A2.25 2.25 0 0121.75 12v.75m-8.69-6.44l-2.12-2.12a1.5 1.5 0 00-1.061-.44H4.5A2.25 2.25 0 002.25 6v12a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9a2.25 2.25 0 00-2.25-2.25h-5.379a1.5 1.5 0 01-1.06-.44z"})])}function $m(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M3.75 9.776c.112-.017.227-.026.344-.026h15.812c.117 0 .232.009.344.026m-16.5 0a2.25 2.25 0 00-1.883 2.542l.857 6a2.25 2.25 0 002.227 1.932H19.05a2.25 2.25 0 002.227-1.932l.857-6a2.25 2.25 0 00-1.883-2.542m-16.5 0V6A2.25 2.25 0 016 3.75h3.879a1.5 1.5 0 011.06.44l2.122 2.12a1.5 1.5 0 001.06.44H18A2.25 2.25 0 0120.25 9v.776"})])}function Vm(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M8.25 4.5l7.5 7.5-7.5 7.5"})])}function Hm(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 6.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 12.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 18.75a.75.75 0 110-1.5.75.75 0 010 1.5z"})])}function zm(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"})])}function qm(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"})])}var Wm=pd({id:"hosts",state:function(){return{selectedHostIdentifier:null}},getters:{supportsHosts:function(){return LogViewer.supports_hosts},hosts:function(){return LogViewer.hosts||[]},hasRemoteHosts:function(){return this.hosts.some((function(e){return e.is_remote}))},selectedHost:function(){var e=this;return this.hosts.find((function(t){return t.identifier===e.selectedHostIdentifier}))},localHost:function(){return this.hosts.find((function(e){return!e.is_remote}))},hostQueryParam:function(){return this.selectedHost&&this.selectedHost.is_remote?this.selectedHost.identifier:void 0}},actions:{selectHost:function(e){var t;this.supportsHosts||(e=null),"string"==typeof e&&(e=this.hosts.find((function(t){return t.identifier===e}))),e||(e=this.hosts.find((function(e){return!e.is_remote}))),this.selectedHostIdentifier=(null===(t=e)||void 0===t?void 0:t.identifier)||null}}});var Km;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;const Gm="undefined"!=typeof window,Ym=(Object.prototype.toString,e=>"function"==typeof e),Jm=e=>"string"==typeof e,Qm=()=>{};Gm&&(null==(Km=null==window?void 0:window.navigator)?void 0:Km.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function Zm(e){return"function"==typeof e?e():Wt(e)}function Xm(e,t){return function(...n){return new Promise(((r,o)=>{Promise.resolve(e((()=>t.apply(this,n)),{fn:t,thisArg:this,args:n})).then(r).catch(o)}))}}const ey=e=>e();function ty(e){return!!ge()&&(me(e),!0)}Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;var ny=Object.getOwnPropertySymbols,ry=Object.prototype.hasOwnProperty,oy=Object.prototype.propertyIsEnumerable,iy=(e,t)=>{var n={};for(var r in e)ry.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&ny)for(var r of ny(e))t.indexOf(r)<0&&oy.call(e,r)&&(n[r]=e[r]);return n};function sy(e,t,n={}){const r=n,{eventFilter:o=ey}=r,i=iy(r,["eventFilter"]);return dr(e,Xm(o,t),i)}Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;var ly=Object.defineProperty,ay=Object.defineProperties,uy=Object.getOwnPropertyDescriptors,cy=Object.getOwnPropertySymbols,fy=Object.prototype.hasOwnProperty,py=Object.prototype.propertyIsEnumerable,dy=(e,t,n)=>t in e?ly(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,hy=(e,t)=>{for(var n in t||(t={}))fy.call(t,n)&&dy(e,n,t[n]);if(cy)for(var n of cy(t))py.call(t,n)&&dy(e,n,t[n]);return e},vy=(e,t)=>ay(e,uy(t)),gy=(e,t)=>{var n={};for(var r in e)fy.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&cy)for(var r of cy(e))t.indexOf(r)<0&&py.call(e,r)&&(n[r]=e[r]);return n};function my(e,t,n={}){const r=n,{eventFilter:o}=r,i=gy(r,["eventFilter"]),{eventFilter:s,pause:l,resume:a,isActive:u}=function(e=ey){const t=$t(!0);return{isActive:Ct(t),pause:function(){t.value=!1},resume:function(){t.value=!0},eventFilter:(...n)=>{t.value&&e(...n)}}}(o);return{stop:sy(e,t,vy(hy({},i),{eventFilter:s})),pause:l,resume:a,isActive:u}}Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;function yy(e){var t;const n=Zm(e);return null!=(t=null==n?void 0:n.$el)?t:n}const by=Gm?window:void 0;Gm&&window.document,Gm&&window.navigator,Gm&&window.location;function wy(...e){let t,n,r,o;if(Jm(e[0])||Array.isArray(e[0])?([n,r,o]=e,t=by):[t,n,r,o]=e,!t)return Qm;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const i=[],s=()=>{i.forEach((e=>e())),i.length=0},l=dr((()=>[yy(t),Zm(o)]),(([e,t])=>{s(),e&&i.push(...n.flatMap((n=>r.map((r=>((e,t,n,r)=>(e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)))(e,n,r,t))))))}),{immediate:!0,flush:"post"}),a=()=>{l(),s()};return ty(a),a}Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;const _y="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},xy="__vueuse_ssr_handlers__";_y[xy]=_y[xy]||{};const Sy=_y[xy];function Oy(e,t){return Sy[e]||t}function ky(e){return null==e?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":"boolean"==typeof e?"boolean":"string"==typeof e?"string":"object"==typeof e?"object":Number.isNaN(e)?"any":"number"}var Ey=Object.defineProperty,Cy=Object.getOwnPropertySymbols,Py=Object.prototype.hasOwnProperty,Ty=Object.prototype.propertyIsEnumerable,Ay=(e,t,n)=>t in e?Ey(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,jy=(e,t)=>{for(var n in t||(t={}))Py.call(t,n)&&Ay(e,n,t[n]);if(Cy)for(var n of Cy(t))Ty.call(t,n)&&Ay(e,n,t[n]);return e};const Ry={boolean:{read:e=>"true"===e,write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Ly="vueuse-storage";function Iy(e,t,n,r={}){var o;const{flush:i="pre",deep:s=!0,listenToStorageChanges:l=!0,writeDefaults:a=!0,mergeDefaults:u=!1,shallow:c,window:f=by,eventFilter:p,onError:d=(e=>{})}=r,h=(c?Vt:$t)(t);if(!n)try{n=Oy("getDefaultStorage",(()=>{var e;return null==(e=by)?void 0:e.localStorage}))()}catch(e){d(e)}if(!n)return h;const v=Zm(t),g=ky(v),m=null!=(o=r.serializer)?o:Ry[g],{pause:y,resume:b}=my(h,(()=>function(t){try{if(null==t)n.removeItem(e);else{const r=m.write(t),o=n.getItem(e);o!==r&&(n.setItem(e,r),f&&f.dispatchEvent(new CustomEvent(Ly,{detail:{key:e,oldValue:o,newValue:r,storageArea:n}})))}}catch(e){d(e)}}(h.value)),{flush:i,deep:s,eventFilter:p});return f&&l&&(wy(f,"storage",w),wy(f,Ly,(function(e){w(e.detail)}))),w(),h;function w(t){if(!t||t.storageArea===n)if(t&&null==t.key)h.value=v;else if(!t||t.key===e){y();try{h.value=function(t){const r=t?t.newValue:n.getItem(e);if(null==r)return a&&null!==v&&n.setItem(e,m.write(v)),v;if(!t&&u){const e=m.read(r);return Ym(u)?u(e,v):"object"!==g||Array.isArray(e)?e:jy(jy({},v),e)}return"string"!=typeof r?r:m.read(r)}(t)}catch(e){d(e)}finally{t?bn(b):b()}}}}Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;new Map;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;function Fy(e,t,n={}){const{window:r=by}=n;return Iy(e,t,null==r?void 0:r.localStorage,n)}Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;var Ny,My;(My=Ny||(Ny={})).UP="UP",My.RIGHT="RIGHT",My.DOWN="DOWN",My.LEFT="LEFT",My.NONE="NONE";Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;var Dy=Object.defineProperty,By=Object.getOwnPropertySymbols,Uy=Object.prototype.hasOwnProperty,$y=Object.prototype.propertyIsEnumerable,Vy=(e,t,n)=>t in e?Dy(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;((e,t)=>{for(var n in t||(t={}))Uy.call(t,n)&&Vy(e,n,t[n]);if(By)for(var n of By(t))$y.call(t,n)&&Vy(e,n,t[n])})({linear:function(e){return e}},{easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]});var Hy=pd({id:"search",state:function(){return{query:"",searchMoreRoute:null,searching:!1,percentScanned:0,error:null}},getters:{hasQuery:function(e){return""!==String(e.query).trim()}},actions:{init:function(){this.checkSearchProgress()},setQuery:function(e){this.query=e},update:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;this.query=e,this.error=t&&""!==t?t:null,this.searchMoreRoute=n,this.searching=r,this.percentScanned=o,this.searching&&this.checkSearchProgress()},checkSearchProgress:function(){var e=this,t=this.query;if(""!==t){var n="?"+new URLSearchParams({query:t});ov.get(this.searchMoreRoute+n).then((function(n){var r=n.data;if(e.query===t){var o=e.searching;e.searching=r.hasMoreResults,e.percentScanned=r.percentScanned,e.searching?e.checkSearchProgress():o&&!e.searching&&window.dispatchEvent(new CustomEvent("reload-results"))}}))}}}}),zy=pd({id:"pagination",state:function(){return{page:1,pagination:{}}},getters:{currentPage:function(e){return 1!==e.page?Number(e.page):null},links:function(e){var t;return((null===(t=e.pagination)||void 0===t?void 0:t.links)||[]).slice(1,-1)},linksShort:function(e){var t;return((null===(t=e.pagination)||void 0===t?void 0:t.links_short)||[]).slice(1,-1)},hasPages:function(e){var t;return(null===(t=e.pagination)||void 0===t?void 0:t.last_page)>1},hasMorePages:function(e){var t;return null!==(null===(t=e.pagination)||void 0===t?void 0:t.next_page_url)}},actions:{setPagination:function(e){var t,n;(this.pagination=e,(null===(t=this.pagination)||void 0===t?void 0:t.last_page)0}))},totalResults:function(){return this.levelsFound.reduce((function(e,t){return e+t.count}),0)},levelsSelected:function(){return this.levelsFound.filter((function(e){return e.selected}))},totalResultsSelected:function(){return this.levelsSelected.reduce((function(e,t){return e+t.count}),0)}},actions:{setLevelCounts:function(e){e.hasOwnProperty("length")?this.levelCounts=e:this.levelCounts=Object.values(e),this.allLevels=e.map((function(e){return e.level}))},selectAllLevels:function(){this.excludedLevels=[],this.levelCounts.forEach((function(e){return e.selected=!0}))},deselectAllLevels:function(){this.excludedLevels=this.allLevels,this.levelCounts.forEach((function(e){return e.selected=!1}))},toggleLevel:function(e){var t=this.levelCounts.find((function(t){return t.level===e}))||{};this.excludedLevels.includes(e)?(this.excludedLevels=this.excludedLevels.filter((function(t){return t!==e})),t.selected=!0):(this.excludedLevels.push(e),t.selected=!1)}}}),Wy=n(486),Ky={System:"System",Light:"Light",Dark:"Dark"},Gy=[{label:"Datetime",data_key:"datetime"},{label:"Severity",data_key:"level"},{label:"Message",data_key:"message"}],Yy=pd({id:"logViewer",state:function(){return{theme:Fy("logViewerTheme",Ky.System),shorterStackTraces:Fy("logViewerShorterStackTraces",!1),direction:Fy("logViewerDirection","desc"),resultsPerPage:Fy("logViewerResultsPerPage",25),helpSlideOverOpen:!1,loading:!1,error:null,logs:[],columns:Gy,levelCounts:[],performance:{},hasMoreResults:!1,percentScanned:100,abortController:null,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,stacksOpen:[],stacksInView:[],stackTops:{},containerTop:0,showLevelsDropdown:!0}},getters:{selectedFile:function(){return nb().selectedFile},isOpen:function(e){return function(t){return e.stacksOpen.includes(t)}},isMobile:function(e){return e.viewportWidth<=1023},tableRowHeight:function(){return this.isMobile?29:36},headerHeight:function(){return this.isMobile?0:36},shouldBeSticky:function(e){var t=this;return function(n){return t.isOpen(n)&&e.stacksInView.includes(n)}},stickTopPosition:function(){var e=this;return function(t){var n=e.pixelsAboveFold(t);return n<0?Math.max(e.headerHeight-e.tableRowHeight,e.headerHeight+n)+"px":e.headerHeight+"px"}},pixelsAboveFold:function(e){var t=this;return function(n){var r=document.getElementById("tbody-"+n);if(!r)return!1;var o=r.getClientRects()[0];return o.top+o.height-t.tableRowHeight-t.headerHeight-e.containerTop}},isInViewport:function(){var e=this;return function(t){return e.pixelsAboveFold(t)>-e.tableRowHeight}}},actions:{setViewportDimensions:function(e,t){this.viewportWidth=e,this.viewportHeight=t;var n=document.querySelector(".log-item-container");n&&(this.containerTop=n.getBoundingClientRect().top)},toggleTheme:function(){switch(this.theme){case Ky.System:this.theme=Ky.Light;break;case Ky.Light:this.theme=Ky.Dark;break;default:this.theme=Ky.System}this.syncTheme()},syncTheme:function(){var e=this.theme;e===Ky.Dark||e===Ky.System&&window.matchMedia("(prefers-color-scheme: dark)").matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},toggle:function(e){this.isOpen(e)?this.stacksOpen=this.stacksOpen.filter((function(t){return t!==e})):this.stacksOpen.push(e),this.onScroll()},onScroll:function(){var e=this;this.stacksOpen.forEach((function(t){e.isInViewport(t)?(e.stacksInView.includes(t)||e.stacksInView.push(t),e.stackTops[t]=e.stickTopPosition(t)):(e.stacksInView=e.stacksInView.filter((function(e){return e!==t})),delete e.stackTops[t])}))},reset:function(){this.stacksOpen=[],this.stacksInView=[],this.stackTops={};var e=document.querySelector(".log-item-container");e&&(this.containerTop=e.getBoundingClientRect().top,e.scrollTo(0,0))},loadLogs:(0,Wy.debounce)((function(){var e,t=this,n=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).silently,r=void 0!==n&&n,o=Wm(),i=nb(),s=Hy(),l=zy(),a=qy();if(0!==i.folders.length&&(this.abortController&&this.abortController.abort(),this.selectedFile||s.hasQuery)){this.abortController=new AbortController;var u={host:o.hostQueryParam,file:null===(e=this.selectedFile)||void 0===e?void 0:e.identifier,direction:this.direction,query:s.query,page:l.currentPage,per_page:this.resultsPerPage,exclude_levels:It(a.excludedLevels.length>0?a.excludedLevels:""),exclude_file_types:It(i.fileTypesExcluded.length>0?i.fileTypesExcluded:""),shorter_stack_traces:this.shorterStackTraces};r||(this.loading=!0),ov.get("".concat(LogViewer.basePath,"/api/logs"),{params:u,signal:this.abortController.signal}).then((function(e){var n=e.data;t.logs=u.host?n.logs.map((function(e){var t={host:u.host,file:e.file_identifier,query:"log-index:".concat(e.index)};return e.url="".concat(window.location.host).concat(LogViewer.basePath,"?").concat(new URLSearchParams(t)),e})):n.logs,t.columns=n.columns||Gy,t.hasMoreResults=n.hasMoreResults,t.percentScanned=n.percentScanned,t.error=n.error||null,t.performance=n.performance||{},a.setLevelCounts(n.levelCounts),l.setPagination(n.pagination),t.loading=!1,r||bn((function(){t.reset(),n.expandAutomatically&&t.stacksOpen.push(0)})),t.hasMoreResults&&t.loadLogs({silently:!0})})).catch((function(e){var n;if("ERR_CANCELED"===e.code)return t.hasMoreResults=!1,void(t.percentScanned=100);t.loading=!1,t.error=e.message,null!==(n=e.response)&&void 0!==n&&null!==(n=n.data)&&void 0!==n&&n.message&&(t.error+=": "+e.response.data.message)}))}}),10)}});function Jy(e){return Jy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Jy(e)}function Qy(e){return function(e){if(Array.isArray(e))return Zy(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Zy(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Zy(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Zy(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0}))},files:function(e){return e.folders.flatMap((function(e){return e.files}))},selectedFile:function(e){return e.files.find((function(t){return t.identifier===e.selectedFileIdentifier}))},foldersOpen:function(e){return e.openFolderIdentifiers.map((function(t){return e.folders.find((function(e){return e.identifier===t}))}))},isOpen:function(){var e=this;return function(t){return e.foldersOpen.map((function(e){return e.identifier})).includes(t.identifier)}},isChecked:function(e){return function(t){return e.filesChecked.includes("string"==typeof t?t:t.identifier)}},shouldBeSticky:function(e){var t=this;return function(n){return t.isOpen(n)&&e.foldersInView.map((function(e){return e.identifier})).includes(n.identifier)}},isInViewport:function(){var e=this;return function(t){return e.pixelsAboveFold(t)>-36}},pixelsAboveFold:function(e){return function(t){var n=document.getElementById("folder-"+t);if(!n)return!1;var r=n.getClientRects()[0];return r.top+r.height-e.containerTop}},hasFilesChecked:function(e){return e.filesChecked.length>0},fileTypesSelected:function(e){return e.fileTypesAvailable.filter((function(t){return e.selectedFileTypes.includes(t.identifier)}))},fileTypesExcluded:function(e){return e.fileTypesAvailable.filter((function(t){return!e.selectedFileTypes.includes(t.identifier)})).map((function(e){return e.identifier}))},selectedFileTypesString:function(){var e=this.fileTypesSelected.map((function(e){return e.name}));return 0===e.length?"Please select at least one file type":1===e.length?e[0]:2===e.length?e.join(" and "):3===e.length?e.slice(0,-1).join(", ")+" and "+e.slice(-1):e.slice(0,3).join(", ")+" and "+(e.length-3)+" more"}},actions:{setDirection:function(e){this.direction=e},selectFile:function(e){this.selectedFileIdentifier!==e&&(this.selectedFileIdentifier=e,this.openFolderForActiveFile(),this.sidebarOpen=!1)},openFolderForActiveFile:function(){var e=this;if(this.selectedFile){var t=this.folders.find((function(t){return t.files.some((function(t){return t.identifier===e.selectedFile.identifier}))}));t&&!this.isOpen(t)&&this.toggle(t)}},openRootFolderIfNoneOpen:function(){var e=this.folders.find((function(e){return e.is_root}));e&&0===this.openFolderIdentifiers.length&&this.openFolderIdentifiers.push(e.identifier)},loadFolders:function(){var e=this;return this.abortController&&this.abortController.abort(),this.selectedHost?(this.abortController=new AbortController,this.loading=!0,ov.get("".concat(LogViewer.basePath,"/api/folders"),{params:{host:this.hostQueryParam,direction:this.direction},signal:this.abortController.signal}).then((function(t){var n=t.data;e.folders=n,e.error=n.error||null,e.loading=!1,0===e.openFolderIdentifiers.length&&(e.openFolderForActiveFile(),e.openRootFolderIfNoneOpen()),e.setAvailableFileTypes(n),e.onScroll()})).catch((function(t){var n;"ERR_CANCELED"!==t.code&&(e.loading=!1,e.error=t.message,null!==(n=t.response)&&void 0!==n&&null!==(n=n.data)&&void 0!==n&&n.message&&(e.error+=": "+t.response.data.message))}))):(this.folders=[],this.error=null,void(this.loading=!1))},setAvailableFileTypes:function(e){var t=e.flatMap((function(e){return e.files.map((function(e){return e.type}))})),n=Qy(new Set(t.map((function(e){return e.value}))));this.fileTypesAvailable=n.map((function(e){return{identifier:e,name:t.find((function(t){return t.value===e})).name,count:t.filter((function(t){return t.value===e})).length}})),this.selectedFileTypes&&0!==this.selectedFileTypes.length||(this.selectedFileTypes=n)},toggle:function(e){this.isOpen(e)?this.openFolderIdentifiers=this.openFolderIdentifiers.filter((function(t){return t!==e.identifier})):this.openFolderIdentifiers.push(e.identifier),this.onScroll()},onScroll:function(){var e=this;this.foldersOpen.forEach((function(t){e.isInViewport(t)?e.foldersInView.includes(t)||e.foldersInView.push(t):e.foldersInView=e.foldersInView.filter((function(e){return e!==t}))}))},reset:function(){this.openFolderIdentifiers=[],this.foldersInView=[];var e=document.getElementById("file-list-container");e&&(this.containerTop=e.getBoundingClientRect().top,e.scrollTo(0,0))},toggleSidebar:function(){this.sidebarOpen=!this.sidebarOpen},checkBoxToggle:function(e){this.isChecked(e)?this.filesChecked=this.filesChecked.filter((function(t){return t!==e})):this.filesChecked.push(e)},toggleCheckboxVisibility:function(){this.checkBoxesVisibility=!this.checkBoxesVisibility},resetChecks:function(){this.filesChecked=[],this.checkBoxesVisibility=!1},clearCacheForFile:function(e){var t=this;return this.clearingCache[e.identifier]=!0,ov.post("".concat(LogViewer.basePath,"/api/files/").concat(e.identifier,"/clear-cache"),{},{params:{host:this.hostQueryParam}}).then((function(){e.identifier===t.selectedFileIdentifier&&Yy().loadLogs(),t.cacheRecentlyCleared[e.identifier]=!0,setTimeout((function(){return t.cacheRecentlyCleared[e.identifier]=!1}),2e3)})).catch((function(e){})).finally((function(){return t.clearingCache[e.identifier]=!1}))},deleteFile:function(e){var t=this;return ov.delete("".concat(LogViewer.basePath,"/api/files/").concat(e.identifier),{params:{host:this.hostQueryParam}}).then((function(){return t.loadFolders()}))},clearCacheForFolder:function(e){var t=this;return this.clearingCache[e.identifier]=!0,ov.post("".concat(LogViewer.basePath,"/api/folders/").concat(e.identifier,"/clear-cache"),{},{params:{host:this.hostQueryParam}}).then((function(){e.files.some((function(e){return e.identifier===t.selectedFileIdentifier}))&&Yy().loadLogs(),t.cacheRecentlyCleared[e.identifier]=!0,setTimeout((function(){return t.cacheRecentlyCleared[e.identifier]=!1}),2e3)})).catch((function(e){})).finally((function(){t.clearingCache[e.identifier]=!1}))},deleteFolder:function(e){var t=this;return this.deleting[e.identifier]=!0,ov.delete("".concat(LogViewer.basePath,"/api/folders/").concat(e.identifier),{params:{host:this.hostQueryParam}}).then((function(){return t.loadFolders()})).catch((function(e){})).finally((function(){t.deleting[e.identifier]=!1}))},deleteSelectedFiles:function(){return ov.post("".concat(LogViewer.basePath,"/api/delete-multiple-files"),{files:this.filesChecked},{params:{host:this.hostQueryParam}})},clearCacheForAllFiles:function(){var e=this;this.clearingCache["*"]=!0,ov.post("".concat(LogViewer.basePath,"/api/clear-cache-all"),{},{params:{host:this.hostQueryParam}}).then((function(){e.cacheRecentlyCleared["*"]=!0,setTimeout((function(){return e.cacheRecentlyCleared["*"]=!1}),2e3),Yy().loadLogs()})).catch((function(e){})).finally((function(){return e.clearingCache["*"]=!1}))}}}),rb=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(e=e||"",t)try{e=e.replace(new RegExp(t,"gi"),"$&")}catch(e){}return ob(e).replace(/<mark>/g,"").replace(/<\/mark>/g,"").replace(/<br\/>/g,"
")},ob=function(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'"};return e.replace(/[&<>"']/g,(function(e){return t[e]}))},ib=function(e){var t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t);var n=document.getSelection().rangeCount>0&&document.getSelection().getRangeAt(0);t.select(),document.execCommand("copy"),document.body.removeChild(t),n&&(document.getSelection().removeAllRanges(),document.getSelection().addRange(n))},sb=function(e,t,n){var r=e.currentRoute.value,o={host:r.query.host||void 0,file:r.query.file||void 0,query:r.query.query||void 0,page:r.query.page||void 0};"host"===t?(o.file=void 0,o.page=void 0):"file"===t&&void 0!==o.page&&(o.page=void 0),o[t]=n?String(n):void 0,e.push({name:"home",query:o})},lb=function(){var e=$t({});return{dropdownDirections:e,calculateDropdownDirection:function(t){e.value[t.dataset.toggleId]=function(e){window.innerWidth||document.documentElement.clientWidth;var t=window.innerHeight||document.documentElement.clientHeight;return e.getBoundingClientRect().bottom+190=0&&null===n[r].offsetParent;)r--;return n[r]?n[r]:null},yb=function(e,t){for(var n=Array.from(document.querySelectorAll(".".concat(t))),r=n.findIndex((function(t){return t===e}))+1;r0&&t[0].focus();else if(e.key===gb.Hosts){e.preventDefault();var r=document.getElementById("hosts-toggle-button");null==r||r.click()}else if(e.key===gb.Severity){e.preventDefault();var o=document.getElementById("severity-dropdown-toggle");null==o||o.click()}else if(e.key===gb.Settings){e.preventDefault();var i=document.querySelector("#desktop-site-settings .menu-button");null==i||i.click()}else if(e.key===gb.Search){e.preventDefault();var s=document.getElementById("query");null==s||s.focus()}else if(e.key===gb.Refresh){e.preventDefault();var l=document.getElementById("reload-logs-button");null==l||l.click()}},_b=function(e){if("ArrowLeft"===e.key)e.preventDefault(),function(){var e=document.querySelector(".file-item-container.active .file-item-info");if(e)e.nextElementSibling.focus();else{var t,n=document.querySelector(".file-item-container .file-item-info");null==n||null===(t=n.nextElementSibling)||void 0===t||t.focus()}}();else if("ArrowRight"===e.key){var t=bb(document.activeElement,hb),n=Array.from(document.querySelectorAll(".".concat(vb)));n.length>t&&(e.preventDefault(),n[t].focus())}else if("ArrowUp"===e.key){var r=mb(document.activeElement,hb);r&&(e.preventDefault(),r.focus())}else if("ArrowDown"===e.key){var o=yb(document.activeElement,hb);o&&(e.preventDefault(),o.focus())}},xb=function(e){if("ArrowLeft"===e.key){var t=bb(document.activeElement,vb),n=Array.from(document.querySelectorAll(".".concat(hb)));n.length>t&&(e.preventDefault(),n[t].focus())}else if("ArrowUp"===e.key){var r=mb(document.activeElement,vb);r&&(e.preventDefault(),r.focus())}else if("ArrowDown"===e.key){var o=yb(document.activeElement,vb);o&&(e.preventDefault(),o.focus())}else if("Enter"===e.key||" "===e.key){e.preventDefault();var i=document.activeElement;i.click(),i.focus()}},Sb=function(e){if("ArrowUp"===e.key){var t=mb(document.activeElement,db);t&&(e.preventDefault(),t.focus())}else if("ArrowDown"===e.key){var n=yb(document.activeElement,db);n&&(e.preventDefault(),n.focus())}else"ArrowRight"===e.key&&(e.preventDefault(),document.activeElement.nextElementSibling.focus())},Ob=function(e){if("ArrowLeft"===e.key)e.preventDefault(),document.activeElement.previousElementSibling.focus();else if("ArrowRight"===e.key){e.preventDefault();var t=Array.from(document.querySelectorAll(".".concat(hb)));t.length>0&&t[0].focus()}};function kb(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 9.75v6.75m0 0l-3-3m3 3l3-3m-8.25 6a4.5 4.5 0 01-1.41-8.775 5.25 5.25 0 0110.233-2.33 3 3 0 013.758 3.848A3.752 3.752 0 0118 19.5H6.75z"})])}const Eb={__name:"DownloadLink",props:["url"],setup:function(e){var t=e,n=function(){ov.get("".concat(t.url,"/request")).then((function(e){r(e.data.url)})).catch((function(e){e.response&&e.response.data&&alert("".concat(e.message,": ").concat(e.response.data.message,". Check developer console for more info."))}))},r=function(e){var t=document.createElement("a");t.href=e,t.setAttribute("download",""),document.body.appendChild(t),t.click(),document.body.removeChild(t)};return function(e,t){return Ni(),Vi("button",{onClick:n},[lo(e.$slots,"default",{},(function(){return[Qi(Wt(kb),{class:"w-4 h-4 mr-2"}),ts(" Download ")]}))])}}};function Cb(e){return Cb="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Cb(e)}function Pb(){Pb=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,o=Object.defineProperty||function(e,t,n){e[t]=n.value},i="function"==typeof Symbol?Symbol:{},s=i.iterator||"@@iterator",l=i.asyncIterator||"@@asyncIterator",a=i.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var i=t&&t.prototype instanceof m?t:m,s=Object.create(i.prototype),l=new A(r||[]);return o(s,"_invoke",{value:E(e,n,l)}),s}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=c;var p="suspendedStart",d="suspendedYield",h="executing",v="completed",g={};function m(){}function y(){}function b(){}var w={};u(w,s,(function(){return this}));var _=Object.getPrototypeOf,x=_&&_(_(j([])));x&&x!==n&&r.call(x,s)&&(w=x);var S=b.prototype=m.prototype=Object.create(w);function O(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function k(e,t){function n(o,i,s,l){var a=f(e[o],e,i);if("throw"!==a.type){var u=a.arg,c=u.value;return c&&"object"==Cb(c)&&r.call(c,"__await")?t.resolve(c.__await).then((function(e){n("next",e,s,l)}),(function(e){n("throw",e,s,l)})):t.resolve(c).then((function(e){u.value=e,s(u)}),(function(e){return n("throw",e,s,l)}))}l(a.arg)}var i;o(this,"_invoke",{value:function(e,r){function o(){return new t((function(t,o){n(e,r,t,o)}))}return i=i?i.then(o,o):o()}})}function E(t,n,r){var o=p;return function(i,s){if(o===h)throw new Error("Generator is already running");if(o===v){if("throw"===i)throw s;return{value:e,done:!0}}for(r.method=i,r.arg=s;;){var l=r.delegate;if(l){var a=C(l,r);if(a){if(a===g)continue;return a}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=v,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=h;var u=f(t,n,r);if("normal"===u.type){if(o=r.done?v:d,u.arg===g)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(o=v,r.method="throw",r.arg=u.arg)}}}function C(t,n){var r=n.method,o=t.iterator[r];if(o===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,C(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),g;var i=f(o,t.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,g;var s=i.arg;return s?s.done?(n[t.resultName]=s.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,g):s:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,g)}function P(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function T(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function A(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(P,this),this.reset(!0)}function j(t){if(t||""===t){var n=t[s];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,i=function n(){for(;++o=0;--i){var s=this.tryEntries[i],l=s.completion;if("root"===s.tryLoc)return o("end");if(s.tryLoc<=this.prev){var a=r.call(s,"catchLoc"),u=r.call(s,"finallyLoc");if(a&&u){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),T(n),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;T(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:j(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),g}},t}function Tb(e,t,n,r,o,i,s){try{var l=e[i](s),a=l.value}catch(e){return void n(e)}l.done?t(a):Promise.resolve(a).then(r,o)}var Ab={class:"file-item group"},jb={key:0,class:"sr-only"},Rb={key:1,class:"sr-only"},Lb={key:2,class:"my-auto mr-2"},Ib=["onClick","checked","value"],Fb={class:"file-name"},Nb=Ji("span",{class:"sr-only"},"Name:",-1),Mb={class:"file-size"},Db=Ji("span",{class:"sr-only"},"Size:",-1),Bb={class:"py-2"},Ub={class:"text-brand-500"},$b=Ji("div",{class:"divider"},null,-1);const Vb={__name:"FileListItem",props:{logFile:{type:Object,required:!0},showSelectToggle:{type:Boolean,default:!1}},emits:["selectForDeletion"],setup:function(e,t){t.emit;var n=e,r=nb(),o=Fg(),i=lb(),s=i.dropdownDirections,l=i.calculateDropdownDirection,a=Rs((function(){return r.selectedFile&&r.selectedFile.identifier===n.logFile.identifier})),u=function(){var e,t=(e=Pb().mark((function e(){return Pb().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!confirm("Are you sure you want to delete the log file '".concat(n.logFile.name,"'? THIS ACTION CANNOT BE UNDONE."))){e.next=6;break}return e.next=3,r.deleteFile(n.logFile);case 3:return n.logFile.identifier===r.selectedFileIdentifier&&sb(o,"file",null),e.next=6,r.loadFolders();case 6:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function s(e){Tb(i,r,o,s,l,"next",e)}function l(e){Tb(i,r,o,s,l,"throw",e)}s(void 0)}))});return function(){return t.apply(this,arguments)}}(),c=function(){r.checkBoxToggle(n.logFile.identifier)},f=function(){r.toggleCheckboxVisibility(),c()};return function(t,n){return Ni(),Vi("div",{class:ee(["file-item-container",[a.value?"active":""]])},[Qi(Wt(Rm),null,{default:$n((function(){return[Ji("div",Ab,[Ji("button",{class:"file-item-info",onKeydown:n[0]||(n[0]=function(){return Wt(Sb)&&Wt(Sb).apply(void 0,arguments)})},[a.value?rs("",!0):(Ni(),Vi("span",jb,"Select log file")),a.value?(Ni(),Vi("span",Rb,"Deselect log file")):rs("",!0),e.logFile.can_delete?yr((Ni(),Vi("span",Lb,[Ji("input",{type:"checkbox",onClick:la(c,["stop"]),checked:Wt(r).isChecked(e.logFile),value:Wt(r).isChecked(e.logFile)},null,8,Ib)],512)),[[pl,Wt(r).checkBoxesVisibility]]):rs("",!0),Ji("span",Fb,[Nb,ts(ce(e.logFile.name),1)]),Ji("span",Mb,[Db,ts(ce(e.logFile.size_formatted),1)])],32),Qi(Wt(Lm),{as:"button",class:"file-dropdown-toggle group-hover:border-brand-600 group-hover:dark:border-brand-800","data-toggle-id":e.logFile.identifier,onKeydown:Wt(Ob),onClick:n[1]||(n[1]=la((function(e){return Wt(l)(e.target)}),["stop"]))},{default:$n((function(){return[Qi(Wt(Hm),{class:"w-4 h-4 pointer-events-none"})]})),_:1},8,["data-toggle-id","onKeydown"])]),Qi(Ys,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-90","enter-active-class":"transition ease-out duration-100","enter-from-class":"opacity-0 scale-90","enter-to-class":"opacity-100 scale-100"},{default:$n((function(){return[Qi(Wt(Im),{as:"div",class:ee(["dropdown w-48",[Wt(s)[e.logFile.identifier]]])},{default:$n((function(){return[Ji("div",Bb,[Qi(Wt(Fm),{onClick:n[2]||(n[2]=la((function(t){return Wt(r).clearCacheForFile(e.logFile)}),["stop","prevent"]))},{default:$n((function(t){return[Ji("button",{class:ee([t.active?"active":""])},[yr(Qi(Wt(zm),{class:"h-4 w-4 mr-2"},null,512),[[pl,!Wt(r).clearingCache[e.logFile.identifier]]]),yr(Qi(pb,null,null,512),[[pl,Wt(r).clearingCache[e.logFile.identifier]]]),yr(Ji("span",null,"Clear index",512),[[pl,!Wt(r).cacheRecentlyCleared[e.logFile.identifier]&&!Wt(r).clearingCache[e.logFile.identifier]]]),yr(Ji("span",null,"Clearing...",512),[[pl,!Wt(r).cacheRecentlyCleared[e.logFile.identifier]&&Wt(r).clearingCache[e.logFile.identifier]]]),yr(Ji("span",Ub,"Index cleared",512),[[pl,Wt(r).cacheRecentlyCleared[e.logFile.identifier]]])],2)]})),_:1}),e.logFile.can_download?(Ni(),Hi(Wt(Fm),{key:0,onClick:n[3]||(n[3]=la((function(){}),["stop"]))},{default:$n((function(t){var n=t.active;return[Qi(Eb,{url:e.logFile.download_url,class:ee([n?"active":""])},null,8,["url","class"])]})),_:1})):rs("",!0),e.logFile.can_delete?(Ni(),Vi(Ai,{key:1},[$b,Qi(Wt(Fm),{onClick:la(u,["stop","prevent"])},{default:$n((function(e){return[Ji("button",{class:ee([e.active?"active":""])},[Qi(Wt(Bm),{class:"w-4 h-4 mr-2"}),ts(" Delete ")],2)]})),_:1},8,["onClick"]),Qi(Wt(Fm),{onClick:la(f,["stop"])},{default:$n((function(e){return[Ji("button",{class:ee([e.active?"active":""])},[Qi(Wt(Bm),{class:"w-4 h-4 mr-2"}),ts(" Delete Multiple ")],2)]})),_:1},8,["onClick"])],64)):rs("",!0)])]})),_:1},8,["class"])]})),_:1})]})),_:1})],2)}}},Hb=Vb;function zb(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"}),Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})])}function qb(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M7.217 10.907a2.25 2.25 0 100 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186l9.566-5.314m-9.566 7.5l9.566 5.314m0 0a2.25 2.25 0 103.935 2.186 2.25 2.25 0 00-3.935-2.186zm0-12.814a2.25 2.25 0 103.933-2.185 2.25 2.25 0 00-3.933 2.185z"})])}function Wb(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9 17.25v1.007a3 3 0 01-.879 2.122L7.5 21h9l-.621-.621A3 3 0 0115 18.257V17.25m6-12V15a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 15V5.25m18 0A2.25 2.25 0 0018.75 3H5.25A2.25 2.25 0 003 5.25m18 0V12a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 12V5.25"})])}function Kb(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z"})])}function Gb(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z"})])}function Yb(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9 5.25h.008v.008H12v-.008z"})])}function Jb(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true"},[Ji("path",{"fill-rule":"evenodd",d:"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z","clip-rule":"evenodd"})])}var Qb={class:"checkmark w-[18px] h-[18px] bg-gray-50 dark:bg-gray-800 rounded border dark:border-gray-600 inline-flex items-center justify-center"};const Zb={__name:"Checkmark",props:{checked:{type:Boolean,required:!0}},setup:function(e){return function(t,n){return Ni(),Vi("div",Qb,[e.checked?(Ni(),Hi(Wt(Jb),{key:0,width:"18",height:"18",class:"w-full h-full"})):rs("",!0)])}}};var Xb=Ji("span",{class:"sr-only"},"Settings dropdown",-1),ew={class:"py-2"},tw=Ji("div",{class:"label"},"Settings",-1),nw=Ji("span",{class:"ml-3"},"Shorter stack traces",-1),rw=Ji("div",{class:"divider"},null,-1),ow=Ji("div",{class:"label"},"Actions",-1),iw={class:"text-brand-500"},sw={class:"text-brand-500"},lw=Ji("div",{class:"divider"},null,-1),aw=["innerHTML"];const uw={__name:"SiteSettingsDropdown",setup:function(e){var t=Yy(),n=nb(),r=$t(!1),o=function(){ib(window.location.href),r.value=!0,setTimeout((function(){return r.value=!1}),2e3)};return dr((function(){return t.shorterStackTraces}),(function(){return t.loadLogs()})),function(e,i){return Ni(),Hi(Wt(Rm),{as:"div",class:"relative"},{default:$n((function(){return[Qi(Wt(Lm),{as:"button",class:"menu-button"},{default:$n((function(){return[Xb,Qi(Wt(zb),{class:"w-5 h-5"})]})),_:1}),Qi(Ys,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-90","enter-active-class":"transition ease-out duration-100","enter-from-class":"opacity-0 scale-90","enter-to-class":"opacity-100 scale-100"},{default:$n((function(){return[Qi(Wt(Im),{as:"div",style:{"min-width":"250px"},class:"dropdown"},{default:$n((function(){return[Ji("div",ew,[tw,Qi(Wt(Fm),null,{default:$n((function(e){return[Ji("button",{class:ee([e.active?"active":""]),onClick:i[0]||(i[0]=la((function(e){return Wt(t).shorterStackTraces=!Wt(t).shorterStackTraces}),["stop","prevent"]))},[Qi(Zb,{checked:Wt(t).shorterStackTraces},null,8,["checked"]),nw],2)]})),_:1}),rw,ow,Qi(Wt(Fm),{onClick:la(Wt(n).clearCacheForAllFiles,["stop","prevent"])},{default:$n((function(e){return[Ji("button",{class:ee([e.active?"active":""])},[yr(Qi(Wt(zm),{class:"w-4 h-4 mr-1.5"},null,512),[[pl,!Wt(n).clearingCache["*"]]]),yr(Qi(pb,{class:"w-4 h-4 mr-1.5"},null,512),[[pl,Wt(n).clearingCache["*"]]]),yr(Ji("span",null,"Clear indices for all files",512),[[pl,!Wt(n).cacheRecentlyCleared["*"]&&!Wt(n).clearingCache["*"]]]),yr(Ji("span",null,"Please wait...",512),[[pl,!Wt(n).cacheRecentlyCleared["*"]&&Wt(n).clearingCache["*"]]]),yr(Ji("span",iw,"File indices cleared",512),[[pl,Wt(n).cacheRecentlyCleared["*"]]])],2)]})),_:1},8,["onClick"]),Qi(Wt(Fm),{onClick:la(o,["stop","prevent"])},{default:$n((function(e){return[Ji("button",{class:ee([e.active?"active":""])},[Qi(Wt(qb),{class:"w-4 h-4"}),yr(Ji("span",null,"Share this page",512),[[pl,!r.value]]),yr(Ji("span",sw,"Link copied!",512),[[pl,r.value]])],2)]})),_:1},8,["onClick"]),lw,Qi(Wt(Fm),{onClick:i[1]||(i[1]=la((function(e){return Wt(t).toggleTheme()}),["stop","prevent"]))},{default:$n((function(e){return[Ji("button",{class:ee([e.active?"active":""])},[yr(Qi(Wt(Wb),{class:"w-4 h-4"},null,512),[[pl,Wt(t).theme===Wt(Ky).System]]),yr(Qi(Wt(Kb),{class:"w-4 h-4"},null,512),[[pl,Wt(t).theme===Wt(Ky).Light]]),yr(Qi(Wt(Gb),{class:"w-4 h-4"},null,512),[[pl,Wt(t).theme===Wt(Ky).Dark]]),Ji("span",null,[ts("Theme: "),Ji("span",{innerHTML:Wt(t).theme,class:"font-semibold"},null,8,aw)])],2)]})),_:1}),Qi(Wt(Fm),null,{default:$n((function(e){var n=e.active;return[Ji("button",{onClick:i[2]||(i[2]=function(e){return Wt(t).helpSlideOverOpen=!0}),class:ee([n?"active":""])},[Qi(Wt(Yb),{class:"w-4 h-4"}),ts(" Keyboard Shortcuts ")],2)]})),_:1})])]})),_:1})]})),_:1})]})),_:1})}}};var cw=(e=>(e[e.None=1]="None",e[e.Focusable=2]="Focusable",e[e.Hidden=4]="Hidden",e))(cw||{});let fw=Lr({name:"Hidden",props:{as:{type:[Object,String],default:"div"},features:{type:Number,default:1}},setup:(e,{slots:t,attrs:n})=>()=>{let{features:r,...o}=e;return Ug({ourProps:{"aria-hidden":2==(2&r)||void 0,style:{position:"fixed",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",...4==(4&r)&&2!=(2&r)&&{display:"none"}}},theirProps:o,slot:{},attrs:n,slots:t,name:"Hidden"})}});function pw(e={},t=null,n=[]){for(let[r,o]of Object.entries(e))hw(n,dw(t,r),o);return n}function dw(e,t){return e?e+"["+t+"]":t}function hw(e,t,n){if(Array.isArray(n))for(let[r,o]of n.entries())hw(e,dw(t,r.toString()),o);else n instanceof Date?e.push([t,n.toISOString()]):"boolean"==typeof n?e.push([t,n?"1":"0"]):"string"==typeof n?e.push([t,n]):"number"==typeof n?e.push([t,`${n}`]):null==n?e.push([t,""]):pw(n,t,e)}function vw(e,t){return e===t}var gw=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(gw||{}),mw=(e=>(e[e.Single=0]="Single",e[e.Multi=1]="Multi",e))(mw||{}),yw=(e=>(e[e.Pointer=0]="Pointer",e[e.Other=1]="Other",e))(yw||{});let bw=Symbol("ListboxContext");function ww(e){let t=Yo(bw,null);if(null===t){let t=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,ww),t}return t}let _w=Lr({name:"Listbox",emits:{"update:modelValue":e=>!0},props:{as:{type:[Object,String],default:"template"},disabled:{type:[Boolean],default:!1},by:{type:[String,Function],default:()=>vw},horizontal:{type:[Boolean],default:!1},modelValue:{type:[Object,String,Number,Boolean],default:void 0},defaultValue:{type:[Object,String,Number,Boolean],default:void 0},form:{type:String,optional:!0},name:{type:String,optional:!0},multiple:{type:[Boolean],default:!1}},inheritAttrs:!1,setup(e,{slots:t,attrs:n,emit:r}){let o=$t(1),i=$t(null),s=$t(null),l=$t(null),a=$t([]),u=$t(""),c=$t(null),f=$t(1);function p(e=(e=>e)){let t=null!==c.value?a.value[c.value]:null,n=ym(e(a.value.slice()),(e=>Jg(e.dataRef.domRef))),r=t?n.indexOf(t):null;return-1===r&&(r=null),{options:n,activeOptionIndex:r}}let d=Rs((()=>e.multiple?1:0)),[h,v]=function(e,t,n){let r=$t(null==n?void 0:n.value),o=Rs((()=>void 0!==e.value));return[Rs((()=>o.value?e.value:r.value)),function(e){return o.value||(r.value=e),null==t?void 0:t(e)}]}(Rs((()=>e.modelValue)),(e=>r("update:modelValue",e)),Rs((()=>e.defaultValue))),g=Rs((()=>void 0===h.value?Mg(d.value,{1:[],0:void 0}):h.value)),m={listboxState:o,value:g,mode:d,compare(t,n){if("string"==typeof e.by){let r=e.by;return(null==t?void 0:t[r])===(null==n?void 0:n[r])}return e.by(t,n)},orientation:Rs((()=>e.horizontal?"horizontal":"vertical")),labelRef:i,buttonRef:s,optionsRef:l,disabled:Rs((()=>e.disabled)),options:a,searchQuery:u,activeOptionIndex:c,activationTrigger:f,closeListbox(){e.disabled||1!==o.value&&(o.value=1,c.value=null)},openListbox(){e.disabled||0!==o.value&&(o.value=0)},goToOption(t,n,r){if(e.disabled||1===o.value)return;let i=p(),s=Yg(t===Gg.Specific?{focus:Gg.Specific,id:n}:{focus:t},{resolveItems:()=>i.options,resolveActiveIndex:()=>i.activeOptionIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.disabled});u.value="",c.value=s,f.value=null!=r?r:1,a.value=i.options},search(t){if(e.disabled||1===o.value)return;let n=""!==u.value?0:1;u.value+=t.toLowerCase();let r=(null!==c.value?a.value.slice(c.value+n).concat(a.value.slice(0,c.value+n)):a.value).find((e=>e.dataRef.textValue.startsWith(u.value)&&!e.dataRef.disabled)),i=r?a.value.indexOf(r):-1;-1===i||i===c.value||(c.value=i,f.value=1)},clearSearch(){e.disabled||1!==o.value&&""!==u.value&&(u.value="")},registerOption(e,t){let n=p((n=>[...n,{id:e,dataRef:t}]));a.value=n.options,c.value=n.activeOptionIndex},unregisterOption(e){let t=p((t=>{let n=t.findIndex((t=>t.id===e));return-1!==n&&t.splice(n,1),t}));a.value=t.options,c.value=t.activeOptionIndex,f.value=1},theirOnChange(t){e.disabled||v(t)},select(t){e.disabled||v(Mg(d.value,{0:()=>t,1:()=>{let e=It(m.value.value).slice(),n=It(t),r=e.findIndex((e=>m.compare(n,It(e))));return-1===r?e.push(n):e.splice(r,1),e}}))}};xm([s,l],((e,t)=>{var n;m.closeListbox(),dm(t,pm.Loose)||(e.preventDefault(),null==(n=Jg(s))||n.focus())}),Rs((()=>0===o.value))),Go(bw,m),om(Rs((()=>Mg(o.value,{0:nm.Open,1:nm.Closed}))));let y=Rs((()=>{var e;return null==(e=Jg(s))?void 0:e.closest("form")}));return Jr((()=>{dr([y],(()=>{if(y.value&&void 0!==e.defaultValue)return y.value.addEventListener("reset",t),()=>{var e;null==(e=y.value)||e.removeEventListener("reset",t)};function t(){m.theirOnChange(e.defaultValue)}}),{immediate:!0})})),()=>{let{name:r,modelValue:i,disabled:s,form:l,...a}=e,u={open:0===o.value,disabled:s,value:g.value};return Ls(Ai,[...null!=r&&null!=g.value?pw({[r]:g.value}).map((([e,t])=>Ls(fw,function(e){let t=Object.assign({},e);for(let e in t)void 0===t[e]&&delete t[e];return t}({features:cw.Hidden,key:e,as:"input",type:"hidden",hidden:!0,readOnly:!0,form:l,name:e,value:t})))):[],Ug({ourProps:{},theirProps:{...n,...zg(a,["defaultValue","onUpdate:modelValue","horizontal","multiple","by"])},slot:u,slots:t,attrs:n,name:"Listbox"})])}}}),xw=Lr({name:"ListboxLabel",props:{as:{type:[Object,String],default:"label"},id:{type:String,default:()=>`headlessui-listbox-label-${Wg()}`}},setup(e,{attrs:t,slots:n}){let r=ww("ListboxLabel");function o(){var e;null==(e=Jg(r.buttonRef))||e.focus({preventScroll:!0})}return()=>{let i={open:0===r.listboxState.value,disabled:r.disabled.value},{id:s,...l}=e;return Ug({ourProps:{id:s,ref:r.labelRef,onClick:o},theirProps:l,slot:i,attrs:t,slots:n,name:"ListboxLabel"})}}}),Sw=Lr({name:"ListboxButton",props:{as:{type:[Object,String],default:"button"},id:{type:String,default:()=>`headlessui-listbox-button-${Wg()}`}},setup(e,{attrs:t,slots:n,expose:r}){let o=ww("ListboxButton");function i(e){switch(e.key){case Kg.Space:case Kg.Enter:case Kg.ArrowDown:e.preventDefault(),o.openListbox(),bn((()=>{var e;null==(e=Jg(o.optionsRef))||e.focus({preventScroll:!0}),o.value.value||o.goToOption(Gg.First)}));break;case Kg.ArrowUp:e.preventDefault(),o.openListbox(),bn((()=>{var e;null==(e=Jg(o.optionsRef))||e.focus({preventScroll:!0}),o.value.value||o.goToOption(Gg.Last)}))}}function s(e){if(e.key===Kg.Space)e.preventDefault()}function l(e){o.disabled.value||(0===o.listboxState.value?(o.closeListbox(),bn((()=>{var e;return null==(e=Jg(o.buttonRef))?void 0:e.focus({preventScroll:!0})}))):(e.preventDefault(),o.openListbox(),function(e){requestAnimationFrame((()=>requestAnimationFrame(e)))}((()=>{var e;return null==(e=Jg(o.optionsRef))?void 0:e.focus({preventScroll:!0})}))))}r({el:o.buttonRef,$el:o.buttonRef});let a=sm(Rs((()=>({as:e.as,type:t.type}))),o.buttonRef);return()=>{var r,u;let c={open:0===o.listboxState.value,disabled:o.disabled.value,value:o.value.value},{id:f,...p}=e;return Ug({ourProps:{ref:o.buttonRef,id:f,type:a.value,"aria-haspopup":"listbox","aria-controls":null==(r=Jg(o.optionsRef))?void 0:r.id,"aria-expanded":0===o.listboxState.value,"aria-labelledby":o.labelRef.value?[null==(u=Jg(o.labelRef))?void 0:u.id,f].join(" "):void 0,disabled:!0===o.disabled.value||void 0,onKeydown:i,onKeyup:s,onClick:l},theirProps:p,slot:c,attrs:t,slots:n,name:"ListboxButton"})}}}),Ow=Lr({name:"ListboxOptions",props:{as:{type:[Object,String],default:"ul"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:()=>`headlessui-listbox-options-${Wg()}`}},setup(e,{attrs:t,slots:n,expose:r}){let o=ww("ListboxOptions"),i=$t(null);function s(e){switch(i.value&&clearTimeout(i.value),e.key){case Kg.Space:if(""!==o.searchQuery.value)return e.preventDefault(),e.stopPropagation(),o.search(e.key);case Kg.Enter:if(e.preventDefault(),e.stopPropagation(),null!==o.activeOptionIndex.value){let e=o.options.value[o.activeOptionIndex.value];o.select(e.dataRef.value)}0===o.mode.value&&(o.closeListbox(),bn((()=>{var e;return null==(e=Jg(o.buttonRef))?void 0:e.focus({preventScroll:!0})})));break;case Mg(o.orientation.value,{vertical:Kg.ArrowDown,horizontal:Kg.ArrowRight}):return e.preventDefault(),e.stopPropagation(),o.goToOption(Gg.Next);case Mg(o.orientation.value,{vertical:Kg.ArrowUp,horizontal:Kg.ArrowLeft}):return e.preventDefault(),e.stopPropagation(),o.goToOption(Gg.Previous);case Kg.Home:case Kg.PageUp:return e.preventDefault(),e.stopPropagation(),o.goToOption(Gg.First);case Kg.End:case Kg.PageDown:return e.preventDefault(),e.stopPropagation(),o.goToOption(Gg.Last);case Kg.Escape:e.preventDefault(),e.stopPropagation(),o.closeListbox(),bn((()=>{var e;return null==(e=Jg(o.buttonRef))?void 0:e.focus({preventScroll:!0})}));break;case Kg.Tab:e.preventDefault(),e.stopPropagation();break;default:1===e.key.length&&(o.search(e.key),i.value=setTimeout((()=>o.clearSearch()),350))}}r({el:o.optionsRef,$el:o.optionsRef});let l=rm(),a=Rs((()=>null!==l?(l.value&nm.Open)===nm.Open:0===o.listboxState.value));return()=>{var r,i,l,u;let c={open:0===o.listboxState.value},{id:f,...p}=e;return Ug({ourProps:{"aria-activedescendant":null===o.activeOptionIndex.value||null==(r=o.options.value[o.activeOptionIndex.value])?void 0:r.id,"aria-multiselectable":1===o.mode.value||void 0,"aria-labelledby":null!=(u=null==(i=Jg(o.labelRef))?void 0:i.id)?u:null==(l=Jg(o.buttonRef))?void 0:l.id,"aria-orientation":o.orientation.value,id:f,onKeydown:s,role:"listbox",tabIndex:0,ref:o.optionsRef},theirProps:p,slot:c,attrs:t,slots:n,features:Dg.RenderStrategy|Dg.Static,visible:a.value,name:"ListboxOptions"})}}}),kw=Lr({name:"ListboxOption",props:{as:{type:[Object,String],default:"li"},value:{type:[Object,String,Number,Boolean]},disabled:{type:Boolean,default:!1},id:{type:String,default:()=>`headlessui-listbox.option-${Wg()}`}},setup(e,{slots:t,attrs:n,expose:r}){let o=ww("ListboxOption"),i=$t(null);r({el:i,$el:i});let s=Rs((()=>null!==o.activeOptionIndex.value&&o.options.value[o.activeOptionIndex.value].id===e.id)),l=Rs((()=>Mg(o.mode.value,{0:()=>o.compare(It(o.value.value),It(e.value)),1:()=>It(o.value.value).some((t=>o.compare(It(t),It(e.value))))}))),a=Rs((()=>Mg(o.mode.value,{1:()=>{var t;let n=It(o.value.value);return(null==(t=o.options.value.find((e=>n.some((t=>o.compare(It(t),It(e.dataRef.value)))))))?void 0:t.id)===e.id},0:()=>l.value}))),u=Cm(i),c=Rs((()=>({disabled:e.disabled,value:e.value,get textValue(){return u()},domRef:i})));function f(t){if(e.disabled)return t.preventDefault();o.select(e.value),0===o.mode.value&&(o.closeListbox(),bn((()=>{var e;return null==(e=Jg(o.buttonRef))?void 0:e.focus({preventScroll:!0})})))}function p(){if(e.disabled)return o.goToOption(Gg.Nothing);o.goToOption(Gg.Specific,e.id)}Jr((()=>o.registerOption(e.id,c))),eo((()=>o.unregisterOption(e.id))),Jr((()=>{dr([o.listboxState,l],(()=>{0===o.listboxState.value&&l.value&&Mg(o.mode.value,{1:()=>{a.value&&o.goToOption(Gg.Specific,e.id)},0:()=>{o.goToOption(Gg.Specific,e.id)}})}),{immediate:!0})})),ur((()=>{0===o.listboxState.value&&s.value&&0!==o.activationTrigger.value&&bn((()=>{var e,t;return null==(t=null==(e=Jg(i))?void 0:e.scrollIntoView)?void 0:t.call(e,{block:"nearest"})}))}));let d=Om();function h(e){d.update(e)}function v(t){d.wasMoved(t)&&(e.disabled||s.value||o.goToOption(Gg.Specific,e.id,0))}function g(t){d.wasMoved(t)&&(e.disabled||s.value&&o.goToOption(Gg.Nothing))}return()=>{let{disabled:r}=e,o={active:s.value,selected:l.value,disabled:r},{id:a,value:u,disabled:c,...d}=e;return Ug({ourProps:{id:a,ref:i,role:"option",tabIndex:!0===r?void 0:-1,"aria-disabled":!0===r||void 0,"aria-selected":l.value,disabled:void 0,onClick:f,onFocus:p,onPointerenter:h,onMouseenter:h,onPointermove:v,onMousemove:v,onPointerleave:g,onMouseleave:g},theirProps:d,slot:o,attrs:n,slots:t,name:"ListboxOption"})}}});function Ew(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true"},[Ji("path",{"fill-rule":"evenodd",d:"M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z","clip-rule":"evenodd"})])}var Cw={class:"relative mt-1"},Pw={class:"block truncate"},Tw={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};const Aw={__name:"HostSelector",setup:function(e){var t=Fg(),n=Wm();return dr((function(){return n.selectedHost}),(function(e){sb(t,"host",null!=e&&e.is_remote?e.identifier:null)})),function(e,t){return Ni(),Hi(Wt(_w),{as:"div",modelValue:Wt(n).selectedHostIdentifier,"onUpdate:modelValue":t[0]||(t[0]=function(e){return Wt(n).selectedHostIdentifier=e})},{default:$n((function(){return[Qi(Wt(xw),{class:"ml-1 block text-sm text-gray-500 dark:text-gray-400"},{default:$n((function(){return[ts("Select host")]})),_:1}),Ji("div",Cw,[Qi(Wt(Sw),{id:"hosts-toggle-button",class:"cursor-pointer relative text-gray-800 dark:text-gray-200 w-full cursor-default rounded-md border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 py-2 pl-4 pr-10 text-left hover:border-brand-600 hover:dark:border-brand-800 focus:border-brand-500 focus:outline-none focus:ring-1 focus:ring-brand-500 text-sm"},{default:$n((function(){var e;return[Ji("span",Pw,ce((null===(e=Wt(n).selectedHost)||void 0===e?void 0:e.name)||"Please select a server"),1),Ji("span",Tw,[Qi(Wt(Ew),{class:"h-5 w-5 text-gray-400","aria-hidden":"true"})])]})),_:1}),Qi(Ys,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:$n((function(){return[Qi(Wt(Ow),{class:"absolute z-20 mt-1 max-h-60 w-full overflow-auto rounded-md shadow-md bg-white dark:bg-gray-800 py-1 border border-gray-200 dark:border-gray-700 ring-1 ring-brand ring-opacity-5 focus:outline-none text-sm"},{default:$n((function(){return[(Ni(!0),Vi(Ai,null,io(Wt(n).hosts,(function(e){return Ni(),Hi(Wt(kw),{as:"template",key:e.identifier,value:e.identifier},{default:$n((function(t){var n=t.active,r=t.selected;return[Ji("li",{class:ee([n?"text-white bg-brand-600":"text-gray-900 dark:text-gray-300","relative cursor-default select-none py-2 pl-3 pr-9"])},[Ji("span",{class:ee([r?"font-semibold":"font-normal","block truncate"])},ce(e.name),3),r?(Ni(),Vi("span",{key:0,class:ee([n?"text-white":"text-brand-600","absolute inset-y-0 right-0 flex items-center pr-4"])},[Qi(Wt(Jb),{class:"h-5 w-5","aria-hidden":"true"})],2)):rs("",!0)],2)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1})])]})),_:1},8,["modelValue"])}}},jw=Aw;var Rw={class:"relative mt-1"},Lw={class:"block truncate"},Iw={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};const Fw={__name:"FileTypeSelector",setup:function(e){Fg();var t=nb();return function(e,n){return Ni(),Hi(Wt(_w),{as:"div",modelValue:Wt(t).selectedFileTypes,"onUpdate:modelValue":n[0]||(n[0]=function(e){return Wt(t).selectedFileTypes=e}),multiple:""},{default:$n((function(){return[Qi(Wt(xw),{class:"ml-1 block text-sm text-gray-500 dark:text-gray-400"},{default:$n((function(){return[ts("Selected file types")]})),_:1}),Ji("div",Rw,[Qi(Wt(Sw),{id:"hosts-toggle-button",class:"cursor-pointer relative text-gray-800 dark:text-gray-200 w-full cursor-default rounded-md border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 py-2 pl-4 pr-10 text-left hover:border-brand-600 hover:dark:border-brand-800 focus:border-brand-500 focus:outline-none focus:ring-1 focus:ring-brand-500 text-sm"},{default:$n((function(){return[Ji("span",Lw,ce(Wt(t).selectedFileTypesString),1),Ji("span",Iw,[Qi(Wt(Ew),{class:"h-5 w-5 text-gray-400","aria-hidden":"true"})])]})),_:1}),Qi(Ys,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:$n((function(){return[Qi(Wt(Ow),{class:"absolute z-20 mt-1 max-h-60 w-full overflow-auto rounded-md shadow-md bg-white dark:bg-gray-800 py-1 border border-gray-200 dark:border-gray-700 ring-1 ring-brand ring-opacity-5 focus:outline-none text-sm"},{default:$n((function(){return[(Ni(!0),Vi(Ai,null,io(Wt(t).fileTypesAvailable,(function(e){return Ni(),Hi(Wt(kw),{as:"template",key:e.identifier,value:e.identifier},{default:$n((function(t){var n=t.active,r=t.selected;return[Ji("li",{class:ee([n?"text-white bg-brand-600":"text-gray-900 dark:text-gray-300","relative cursor-default select-none py-2 pl-3 pr-9"])},[Ji("span",{class:ee([r?"font-semibold":"font-normal","block truncate"])},ce(e.name),3),r?(Ni(),Vi("span",{key:0,class:ee([n?"text-white":"text-brand-600","absolute inset-y-0 right-0 flex items-center pr-4"])},[Qi(Wt(Jb),{class:"h-5 w-5","aria-hidden":"true"})],2)):rs("",!0)],2)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1})])]})),_:1},8,["modelValue"])}}};function Nw(e){return Nw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Nw(e)}function Mw(){Mw=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,o=Object.defineProperty||function(e,t,n){e[t]=n.value},i="function"==typeof Symbol?Symbol:{},s=i.iterator||"@@iterator",l=i.asyncIterator||"@@asyncIterator",a=i.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var i=t&&t.prototype instanceof m?t:m,s=Object.create(i.prototype),l=new A(r||[]);return o(s,"_invoke",{value:E(e,n,l)}),s}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=c;var p="suspendedStart",d="suspendedYield",h="executing",v="completed",g={};function m(){}function y(){}function b(){}var w={};u(w,s,(function(){return this}));var _=Object.getPrototypeOf,x=_&&_(_(j([])));x&&x!==n&&r.call(x,s)&&(w=x);var S=b.prototype=m.prototype=Object.create(w);function O(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function k(e,t){function n(o,i,s,l){var a=f(e[o],e,i);if("throw"!==a.type){var u=a.arg,c=u.value;return c&&"object"==Nw(c)&&r.call(c,"__await")?t.resolve(c.__await).then((function(e){n("next",e,s,l)}),(function(e){n("throw",e,s,l)})):t.resolve(c).then((function(e){u.value=e,s(u)}),(function(e){return n("throw",e,s,l)}))}l(a.arg)}var i;o(this,"_invoke",{value:function(e,r){function o(){return new t((function(t,o){n(e,r,t,o)}))}return i=i?i.then(o,o):o()}})}function E(t,n,r){var o=p;return function(i,s){if(o===h)throw new Error("Generator is already running");if(o===v){if("throw"===i)throw s;return{value:e,done:!0}}for(r.method=i,r.arg=s;;){var l=r.delegate;if(l){var a=C(l,r);if(a){if(a===g)continue;return a}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=v,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=h;var u=f(t,n,r);if("normal"===u.type){if(o=r.done?v:d,u.arg===g)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(o=v,r.method="throw",r.arg=u.arg)}}}function C(t,n){var r=n.method,o=t.iterator[r];if(o===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,C(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),g;var i=f(o,t.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,g;var s=i.arg;return s?s.done?(n[t.resultName]=s.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,g):s:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,g)}function P(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function T(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function A(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(P,this),this.reset(!0)}function j(t){if(t||""===t){var n=t[s];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,i=function n(){for(;++o=0;--i){var s=this.tryEntries[i],l=s.completion;if("root"===s.tryLoc)return o("end");if(s.tryLoc<=this.prev){var a=r.call(s,"catchLoc"),u=r.call(s,"finallyLoc");if(a&&u){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),T(n),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;T(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:j(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),g}},t}function Dw(e,t,n,r,o,i,s){try{var l=e[i](s),a=l.value}catch(e){return void n(e)}l.done?t(a):Promise.resolve(a).then(r,o)}function Bw(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function s(e){Dw(i,r,o,s,l,"next",e)}function l(e){Dw(i,r,o,s,l,"throw",e)}s(void 0)}))}}var Uw={class:"flex flex-col h-full py-5"},$w={class:"mx-3 md:mx-0 mb-1"},Vw={class:"sm:flex sm:flex-col-reverse"},Hw={class:"font-semibold text-brand-700 dark:text-brand-600 text-2xl flex items-center"},zw={class:"md:hidden flex-1 flex justify-end"},qw={type:"button",class:"menu-button"},Ww={key:0},Kw=["href"],Gw={key:0,class:"bg-yellow-100 dark:bg-yellow-900 bg-opacity-75 dark:bg-opacity-40 border border-yellow-300 dark:border-yellow-800 rounded-md px-2 py-1 mt-2 text-xs leading-5 text-yellow-700 dark:text-yellow-400"},Yw=Ji("code",{class:"font-mono px-2 py-1 bg-gray-100 dark:bg-gray-900 rounded"},"php artisan log-viewer:publish",-1),Jw={key:3,class:"flex justify-between items-baseline mt-6"},Qw={class:"ml-1 block text-sm text-gray-500 dark:text-gray-400 truncate"},Zw={class:"text-sm text-gray-500 dark:text-gray-400"},Xw=Ji("label",{for:"file-sort-direction",class:"sr-only"},"Sort direction",-1),e_=[Ji("option",{value:"desc"},"Newest first",-1),Ji("option",{value:"asc"},"Oldest first",-1)],t_={key:4,class:"mx-1 mt-1 text-red-600 text-xs"},n_=Ji("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"Please select files to delete and confirm or cancel deletion.",-1),r_=["onClick"],o_={id:"file-list-container",class:"relative h-full overflow-hidden"},i_=["id"],s_=["onClick"],l_={class:"file-item group"},a_={key:0,class:"sr-only"},u_={key:1,class:"sr-only"},c_={class:"file-icon group-hover:hidden group-focus:hidden"},f_={class:"file-icon hidden group-hover:inline-block group-focus:inline-block"},p_={class:"file-name"},d_={key:0},h_=Ji("span",{class:"text-gray-500 dark:text-gray-400"},"root",-1),v_={key:1},g_=Ji("span",{class:"sr-only"},"Open folder options",-1),m_={class:"py-2"},y_={class:"text-brand-500"},b_=Ji("div",{class:"divider"},null,-1),w_=["onClick","disabled"],__={class:"folder-files pl-3 ml-1 border-l border-gray-200 dark:border-gray-800"},x_={key:0,class:"text-center text-sm text-gray-600 dark:text-gray-400"},S_=Ji("p",{class:"mb-5"},"No log files were found.",-1),O_={class:"flex items-center justify-center px-1"},k_=Ji("div",{class:"pointer-events-none absolute z-10 bottom-0 h-4 w-full bg-gradient-to-t from-gray-100 dark:from-gray-900 to-transparent"},null,-1),E_={class:"absolute inset-y-0 left-3 right-7 lg:left-0 lg:right-0 z-10"},C_={class:"rounded-md bg-white text-gray-800 dark:bg-gray-700 dark:text-gray-200 opacity-90 w-full h-full flex items-center justify-center"};const P_={__name:"FileList",setup:function(e){var t=Fg(),n=Ng(),r=Wm(),o=nb(),i=lb(),s=i.dropdownDirections,l=i.calculateDropdownDirection,a=function(){var e=Bw(Mw().mark((function e(n){return Mw().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!confirm("Are you sure you want to delete the log folder '".concat(n.path,"'? THIS ACTION CANNOT BE UNDONE."))){e.next=4;break}return e.next=3,o.deleteFolder(n);case 3:n.files.some((function(e){return e.identifier===o.selectedFileIdentifier}))&&sb(t,"file",null);case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),u=function(){var e=Bw(Mw().mark((function e(){return Mw().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!confirm("Are you sure you want to delete selected log files? THIS ACTION CANNOT BE UNDONE.")){e.next=7;break}return e.next=3,o.deleteSelectedFiles();case 3:return o.filesChecked.includes(o.selectedFileIdentifier)&&sb(t,"file",null),o.resetChecks(),e.next=7,o.loadFolders();case 7:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();return Jr(Bw(Mw().mark((function e(){return Mw().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r.selectHost(n.query.host||null);case 1:case"end":return e.stop()}}),e)})))),dr((function(){return o.direction}),(function(){return o.loadFolders()})),function(e,i){var c,f;return Ni(),Vi("nav",Uw,[Ji("div",$w,[Ji("div",Vw,[Ji("h1",Hw,[ts(" Log Viewer "),Ji("span",zw,[Qi(uw,{class:"ml-2"}),Ji("button",qw,[Qi(Wt(Nm),{class:"w-5 h-5 ml-2",onClick:Wt(o).toggleSidebar},null,8,["onClick"])])])]),e.LogViewer.back_to_system_url?(Ni(),Vi("div",Ww,[Ji("a",{href:e.LogViewer.back_to_system_url,class:"rounded shrink inline-flex items-center text-sm text-gray-500 dark:text-gray-400 hover:text-brand-800 dark:hover:text-brand-600 focus:outline-none focus:ring-2 focus:ring-brand-500 dark:focus:ring-brand-700 mt-0"},[Qi(Wt(Mm),{class:"h-3 w-3 mr-1.5"}),ts(" "+ce(e.LogViewer.back_to_system_label||"Back to ".concat(e.LogViewer.app_name)),1)],8,Kw)])):rs("",!0)]),e.LogViewer.assets_outdated?(Ni(),Vi("div",Gw,[Qi(Wt(Dm),{class:"h-4 w-4 mr-1 inline"}),ts(" Front-end assets are outdated. To update, please run "),Yw])):rs("",!0),Wt(r).supportsHosts&&Wt(r).hasRemoteHosts?(Ni(),Hi(jw,{key:1,class:"mb-8 mt-6"})):rs("",!0),Wt(o).fileTypesAvailable&&Wt(o).fileTypesAvailable.length>1?(Ni(),Hi(Fw,{key:2,class:"mb-8 mt-6"})):rs("",!0),(null===(c=Wt(o).filteredFolders)||void 0===c?void 0:c.length)>0?(Ni(),Vi("div",Jw,[Ji("div",Qw,"Log files on "+ce(null===(f=Wt(o).selectedHost)||void 0===f?void 0:f.name),1),Ji("div",Zw,[Xw,yr(Ji("select",{id:"file-sort-direction",class:"select","onUpdate:modelValue":i[0]||(i[0]=function(e){return Wt(o).direction=e})},e_,512),[[Zl,Wt(o).direction]])])])):rs("",!0),Wt(o).error?(Ni(),Vi("p",t_,ce(Wt(o).error),1)):rs("",!0)]),yr(Ji("div",null,[n_,Ji("div",{class:ee(["grid grid-flow-col pr-4 mt-2",[Wt(o).hasFilesChecked?"justify-between":"justify-end"]])},[yr(Ji("button",{onClick:la(u,["stop"]),class:"button inline-flex"},[Qi(Wt(Bm),{class:"w-5 mr-1"}),ts(" Delete selected files ")],8,r_),[[pl,Wt(o).hasFilesChecked]]),Ji("button",{class:"button inline-flex",onClick:i[1]||(i[1]=la((function(e){return Wt(o).resetChecks()}),["stop"]))},[ts(" Cancel "),Qi(Wt(Nm),{class:"w-5 ml-1"})])],2)],512),[[pl,Wt(o).checkBoxesVisibility]]),Ji("div",o_,[Ji("div",{class:"file-list",onScroll:i[6]||(i[6]=function(e){return Wt(o).onScroll(e)})},[(Ni(!0),Vi(Ai,null,io(Wt(o).filteredFolders,(function(e){return Ni(),Vi("div",{key:e.identifier,id:"folder-".concat(e.identifier),class:"relative folder-container"},[Qi(Wt(Rm),null,{default:$n((function(t){var n=t.open;return[Ji("div",{class:ee(["folder-item-container",[Wt(o).isOpen(e)?"active-folder":"",Wt(o).shouldBeSticky(e)?"sticky "+(n?"z-20":"z-10"):""]]),onClick:function(t){return Wt(o).toggle(e)}},[Ji("div",l_,[Ji("button",{class:"file-item-info group",onKeydown:i[2]||(i[2]=function(){return Wt(Sb)&&Wt(Sb).apply(void 0,arguments)})},[Wt(o).isOpen(e)?rs("",!0):(Ni(),Vi("span",a_,"Open folder")),Wt(o).isOpen(e)?(Ni(),Vi("span",u_,"Close folder")):rs("",!0),Ji("span",c_,[yr(Qi(Wt(Um),{class:"w-5 h-5"},null,512),[[pl,!Wt(o).isOpen(e)]]),yr(Qi(Wt($m),{class:"w-5 h-5"},null,512),[[pl,Wt(o).isOpen(e)]])]),Ji("span",f_,[Qi(Wt(Vm),{class:ee([Wt(o).isOpen(e)?"rotate-90":"","transition duration-100"])},null,8,["class"])]),Ji("span",p_,[String(e.clean_path||"").startsWith("root")?(Ni(),Vi("span",d_,[h_,ts(ce(String(e.clean_path).substring(4)),1)])):(Ni(),Vi("span",v_,ce(e.clean_path),1))])],32),Qi(Wt(Lm),{as:"button",class:"file-dropdown-toggle group-hover:border-brand-600 group-hover:dark:border-brand-800","data-toggle-id":e.identifier,onKeydown:Wt(Ob),onClick:i[3]||(i[3]=la((function(e){return Wt(l)(e.target)}),["stop"]))},{default:$n((function(){return[g_,Qi(Wt(Hm),{class:"w-4 h-4 pointer-events-none"})]})),_:2},1032,["data-toggle-id","onKeydown"])]),Qi(Ys,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-90","enter-active-class":"transition ease-out duration-100","enter-from-class":"opacity-0 scale-90","enter-to-class":"opacity-100 scale-100"},{default:$n((function(){return[yr(Qi(Wt(Im),{static:"",as:"div",class:ee(["dropdown w-48",[Wt(s)[e.identifier]]])},{default:$n((function(){return[Ji("div",m_,[Qi(Wt(Fm),{onClick:la((function(t){return Wt(o).clearCacheForFolder(e)}),["stop","prevent"])},{default:$n((function(t){return[Ji("button",{class:ee([t.active?"active":""])},[yr(Qi(Wt(zm),{class:"w-4 h-4 mr-2"},null,512),[[pl,!Wt(o).clearingCache[e.identifier]]]),yr(Qi(pb,{class:"w-4 h-4 mr-2"},null,512),[[pl,Wt(o).clearingCache[e.identifier]]]),yr(Ji("span",null,"Clear indices",512),[[pl,!Wt(o).cacheRecentlyCleared[e.identifier]&&!Wt(o).clearingCache[e.identifier]]]),yr(Ji("span",null,"Clearing...",512),[[pl,!Wt(o).cacheRecentlyCleared[e.identifier]&&Wt(o).clearingCache[e.identifier]]]),yr(Ji("span",y_,"Indices cleared",512),[[pl,Wt(o).cacheRecentlyCleared[e.identifier]]])],2)]})),_:2},1032,["onClick"]),e.can_download?(Ni(),Hi(Wt(Fm),{key:0},{default:$n((function(t){var n=t.active;return[Qi(Eb,{url:e.download_url,onClick:i[4]||(i[4]=la((function(){}),["stop"])),class:ee([n?"active":""])},null,8,["url","class"])]})),_:2},1024)):rs("",!0),e.can_delete?(Ni(),Vi(Ai,{key:1},[b_,Qi(Wt(Fm),null,{default:$n((function(t){var n=t.active;return[Ji("button",{onClick:la((function(t){return a(e)}),["stop"]),disabled:Wt(o).deleting[e.identifier],class:ee([n?"active":""])},[yr(Qi(Wt(Bm),{class:"w-4 h-4 mr-2"},null,512),[[pl,!Wt(o).deleting[e.identifier]]]),yr(Qi(pb,null,null,512),[[pl,Wt(o).deleting[e.identifier]]]),ts(" Delete ")],10,w_)]})),_:2},1024)],64)):rs("",!0)])]})),_:2},1032,["class"]),[[pl,n]])]})),_:2},1024)],10,s_)]})),_:2},1024),yr(Ji("div",__,[(Ni(!0),Vi(Ai,null,io(e.files||[],(function(e){return Ni(),Hi(Hb,{key:e.identifier,"log-file":e,onClick:function(r){return o=e.identifier,void(n.query.file&&n.query.file===o?sb(t,"file",null):sb(t,"file",o));var o}},null,8,["log-file","onClick"])})),128))],512),[[pl,Wt(o).isOpen(e)]])],8,i_)})),128)),0===Wt(o).folders.length?(Ni(),Vi("div",x_,[S_,Ji("div",O_,[Ji("button",{onClick:i[5]||(i[5]=la((function(e){return Wt(o).loadFolders()}),["prevent"])),class:"inline-flex items-center px-4 py-2 text-left text-sm bg-white hover:bg-gray-50 outline-brand-500 dark:outline-brand-800 text-gray-900 dark:text-gray-200 rounded-md dark:bg-gray-700 dark:hover:bg-gray-600"},[Qi(Wt(qm),{class:"w-4 h-4 mr-1.5"}),ts(" Refresh file list ")])])])):rs("",!0)],32),k_,yr(Ji("div",E_,[Ji("div",C_,[Qi(pb,{class:"w-14 h-14"})])],512),[[pl,Wt(o).loading]])])])}}},T_=P_;function A_(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[Ji("path",{"fill-rule":"evenodd",d:"M4.755 10.059a7.5 7.5 0 0112.548-3.364l1.903 1.903h-3.183a.75.75 0 100 1.5h4.992a.75.75 0 00.75-.75V4.356a.75.75 0 00-1.5 0v3.18l-1.9-1.9A9 9 0 003.306 9.67a.75.75 0 101.45.388zm15.408 3.352a.75.75 0 00-.919.53 7.5 7.5 0 01-12.548 3.364l-1.902-1.903h3.183a.75.75 0 000-1.5H2.984a.75.75 0 00-.75.75v4.992a.75.75 0 001.5 0v-3.18l1.9 1.9a9 9 0 0015.059-4.035.75.75 0 00-.53-.918z","clip-rule":"evenodd"})])}function j_(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[Ji("path",{"fill-rule":"evenodd",d:"M3 6.75A.75.75 0 013.75 6h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 6.75zM3 12a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 12zm0 5.25a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75a.75.75 0 01-.75-.75z","clip-rule":"evenodd"})])}function R_(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M13.5 4.5L21 12m0 0l-7.5 7.5M21 12H3"})])}var L_={class:"pagination"},I_={class:"previous"},F_=["disabled"],N_=Ji("span",{class:"sm:hidden"},"Previous page",-1),M_={class:"sm:hidden border-transparent text-gray-500 dark:text-gray-400 border-t-2 pt-3 px-4 inline-flex items-center text-sm font-medium"},D_={class:"pages"},B_={key:0,class:"border-brand-500 text-brand-600 dark:border-brand-600 dark:text-brand-500","aria-current":"page"},U_={key:1},$_=["onClick"],V_={class:"next"},H_=["disabled"],z_=Ji("span",{class:"sm:hidden"},"Next page",-1);const q_={__name:"Pagination",props:{loading:{type:Boolean,required:!0},short:{type:Boolean,default:!1}},setup:function(e){var t=zy(),n=Fg(),r=Ng(),o=(Rs((function(){return Number(r.query.page)||1})),function(e){e<1&&(e=1),t.pagination&&e>t.pagination.last_page&&(e=t.pagination.last_page),sb(n,"page",e>1?Number(e):null)}),i=function(){return o(t.page+1)},s=function(){return o(t.page-1)};return function(n,r){return Ni(),Vi("nav",L_,[Ji("div",I_,[1!==Wt(t).page?(Ni(),Vi("button",{key:0,onClick:s,disabled:e.loading,rel:"prev"},[Qi(Wt(Mm),{class:"h-5 w-5"}),N_],8,F_)):rs("",!0)]),Ji("div",M_,[Ji("span",null,ce(Wt(t).page),1)]),Ji("div",D_,[(Ni(!0),Vi(Ai,null,io(e.short?Wt(t).linksShort:Wt(t).links,(function(e){return Ni(),Vi(Ai,null,[e.active?(Ni(),Vi("button",B_,ce(Number(e.label).toLocaleString()),1)):"..."===e.label?(Ni(),Vi("span",U_,ce(e.label),1)):(Ni(),Vi("button",{key:2,onClick:function(t){return o(Number(e.label))},class:"border-transparent text-gray-500 dark:text-gray-400 hover:text-gray-700 hover:border-gray-300 dark:hover:text-gray-300 dark:hover:border-gray-400"},ce(Number(e.label).toLocaleString()),9,$_))],64)})),256))]),Ji("div",V_,[Wt(t).hasMorePages?(Ni(),Vi("button",{key:0,onClick:i,disabled:e.loading,rel:"next"},[z_,Qi(Wt(R_),{class:"h-5 w-5"})],8,H_)):rs("",!0)])])}}},W_=q_;function K_(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M19.5 8.25l-7.5 7.5-7.5-7.5"})])}var G_={class:"flex items-center"},Y_={class:"opacity-90 mr-1"},J_={class:"font-semibold"},Q_={class:"opacity-90 mr-1"},Z_={class:"font-semibold"},X_={key:2,class:"opacity-90"},ex={key:3,class:"opacity-90"},tx={class:"py-2"},nx={class:"label flex justify-between"},rx={key:0,class:"no-results"},ox={class:"flex-1 inline-flex justify-between"},ix={class:"log-count"};const sx={__name:"LevelButtons",setup:function(e){var t=Yy(),n=qy();return dr((function(){return n.excludedLevels}),(function(){return t.loadLogs()})),function(e,r){return Ni(),Vi("div",G_,[Qi(Wt(Rm),{as:"div",class:"mr-5 relative log-levels-selector"},{default:$n((function(){return[Qi(Wt(Lm),{as:"button",id:"severity-dropdown-toggle",class:ee(["dropdown-toggle badge none",Wt(n).levelsSelected.length>0?"active":""])},{default:$n((function(){return[Wt(n).levelsSelected.length>2?(Ni(),Vi(Ai,{key:0},[Ji("span",Y_,ce(Wt(n).totalResultsSelected.toLocaleString()+(Wt(t).hasMoreResults?"+":""))+" entries in",1),Ji("strong",J_,ce(Wt(n).levelsSelected[0].level_name)+" + "+ce(Wt(n).levelsSelected.length-1)+" more",1)],64)):Wt(n).levelsSelected.length>0?(Ni(),Vi(Ai,{key:1},[Ji("span",Q_,ce(Wt(n).totalResultsSelected.toLocaleString()+(Wt(t).hasMoreResults?"+":""))+" entries in",1),Ji("strong",Z_,ce(Wt(n).levelsSelected.map((function(e){return e.level_name})).join(", ")),1)],64)):Wt(n).levelsFound.length>0?(Ni(),Vi("span",X_,ce(Wt(n).totalResults.toLocaleString()+(Wt(t).hasMoreResults?"+":""))+" entries found. None selected",1)):(Ni(),Vi("span",ex,"No entries found")),Qi(Wt(K_),{class:"w-4 h-4"})]})),_:1},8,["class"]),Qi(Ys,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-90","enter-active-class":"transition ease-out duration-100","enter-from-class":"opacity-0 scale-90","enter-to-class":"opacity-100 scale-100"},{default:$n((function(){return[Qi(Wt(Im),{as:"div",class:"dropdown down left min-w-[240px]"},{default:$n((function(){return[Ji("div",tx,[Ji("div",nx,[ts(" Severity "),Wt(n).levelsFound.length>0?(Ni(),Vi(Ai,{key:0},[Wt(n).levelsSelected.length===Wt(n).levelsFound.length?(Ni(),Hi(Wt(Fm),{key:0,onClick:la(Wt(n).deselectAllLevels,["stop"])},{default:$n((function(e){return[Ji("a",{class:ee(["inline-link px-2 -mr-2 py-1 -my-1 rounded-md cursor-pointer text-brand-700 dark:text-brand-500 font-normal",[e.active?"active":""]])}," Deselect all ",2)]})),_:1},8,["onClick"])):(Ni(),Hi(Wt(Fm),{key:1,onClick:la(Wt(n).selectAllLevels,["stop"])},{default:$n((function(e){return[Ji("a",{class:ee(["inline-link px-2 -mr-2 py-1 -my-1 rounded-md cursor-pointer text-brand-700 dark:text-brand-500 font-normal",[e.active?"active":""]])}," Select all ",2)]})),_:1},8,["onClick"]))],64)):rs("",!0)]),0===Wt(n).levelsFound.length?(Ni(),Vi("div",rx,"There are no severity filters to display because no entries have been found.")):(Ni(!0),Vi(Ai,{key:1},io(Wt(n).levelsFound,(function(e){return Ni(),Hi(Wt(Fm),{onClick:la((function(t){return Wt(n).toggleLevel(e.level)}),["stop","prevent"])},{default:$n((function(t){return[Ji("button",{class:ee([t.active?"active":""])},[Qi(Zb,{class:"checkmark mr-2.5",checked:e.selected},null,8,["checked"]),Ji("span",ox,[Ji("span",{class:ee(["log-level",e.level_class])},ce(e.level_name),3),Ji("span",ix,ce(Number(e.count).toLocaleString()),1)])],2)]})),_:2},1032,["onClick"])})),256))])]})),_:1})]})),_:1})]})),_:1})])}}};function lx(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z"})])}var ax={class:"flex-1"},ux={class:"prefix-icon"},cx=Ji("label",{for:"query",class:"sr-only"},"Search",-1),fx={class:"relative flex-1 m-1"},px=["onKeydown"],dx={class:"clear-search"},hx={class:"submit-search"},vx={key:0,disabled:"disabled"},gx={class:"hidden xl:inline ml-1"},mx={class:"hidden xl:inline ml-1"},yx={class:"relative h-0 w-full overflow-visible"},bx=["innerHTML"];const wx={__name:"SearchInput",setup:function(e){var t=Hy(),n=Yy(),r=Fg(),o=Ng(),i=Rs((function(){return n.selectedFile})),s=$t(o.query.query||""),l=function(){var e;sb(r,"query",""===s.value?null:s.value),null===(e=document.getElementById("query-submit"))||void 0===e||e.focus()},a=function(){s.value="",l()};return dr((function(){return o.query.query}),(function(e){return s.value=e||""})),function(e,r){return Ni(),Vi("div",ax,[Ji("div",{class:ee(["search",{"has-error":Wt(n).error}])},[Ji("div",ux,[cx,yr(Qi(Wt(lx),{class:"h-4 w-4"},null,512),[[pl,!Wt(n).hasMoreResults]]),yr(Qi(pb,{class:"w-4 h-4"},null,512),[[pl,Wt(n).hasMoreResults]])]),Ji("div",fx,[yr(Ji("input",{"onUpdate:modelValue":r[0]||(r[0]=function(e){return s.value=e}),name:"query",id:"query",type:"text",onKeydown:[ua(l,["enter"]),r[1]||(r[1]=ua((function(e){return e.target.blur()}),["esc"]))]},null,40,px),[[Gl,s.value]]),yr(Ji("div",dx,[Ji("button",{onClick:a},[Qi(Wt(Nm),{class:"h-4 w-4"})])],512),[[pl,Wt(t).hasQuery]])]),Ji("div",hx,[Wt(n).hasMoreResults?(Ni(),Vi("button",vx,[Ji("span",null,[ts("Searching"),Ji("span",gx,ce(i.value?i.value.name:"all files"),1),ts("...")])])):(Ni(),Vi("button",{key:1,onClick:l,id:"query-submit"},[Ji("span",null,[ts("Search"),Ji("span",mx,ce(i.value?'in "'+i.value.name+'"':"all files"),1)]),Qi(Wt(R_),{class:"h-4 w-4"})]))])],2),Ji("div",yx,[yr(Ji("div",{class:"search-progress-bar",style:Y({width:Wt(n).percentScanned+"%"})},null,4),[[pl,Wt(n).hasMoreResults]])]),yr(Ji("p",{class:"mt-1 text-red-600 text-xs",innerHTML:Wt(n).error},null,8,bx),[[pl,Wt(n).error]])])}}},_x=wx;function xx(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[Ji("path",{"fill-rule":"evenodd",d:"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z","clip-rule":"evenodd"})])}function Sx(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[Ji("path",{"fill-rule":"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z","clip-rule":"evenodd"})])}function Ox(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[Ji("path",{"fill-rule":"evenodd",d:"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zm13.36-1.814a.75.75 0 10-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 00-1.06 1.06l2.25 2.25a.75.75 0 001.14-.094l3.75-5.25z","clip-rule":"evenodd"})])}function kx(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[Ji("path",{"fill-rule":"evenodd",d:"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 01.67 1.34l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 11-.671-1.34l.041-.022zM12 9a.75.75 0 100-1.5.75.75 0 000 1.5z","clip-rule":"evenodd"})])}function Ex(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[Ji("path",{"fill-rule":"evenodd",d:"M16.28 11.47a.75.75 0 010 1.06l-7.5 7.5a.75.75 0 01-1.06-1.06L14.69 12 7.72 5.03a.75.75 0 011.06-1.06l7.5 7.5z","clip-rule":"evenodd"})])}function Cx(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M13.19 8.688a4.5 4.5 0 011.242 7.244l-4.5 4.5a4.5 4.5 0 01-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 00-6.364-6.364l-4.5 4.5a4.5 4.5 0 001.242 7.244"})])}function Px(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[Ji("path",{d:"M7.493 18.75c-.425 0-.82-.236-.975-.632A7.48 7.48 0 016 15.375c0-1.75.599-3.358 1.602-4.634.151-.192.373-.309.6-.397.473-.183.89-.514 1.212-.924a9.042 9.042 0 012.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 00.322-1.672V3a.75.75 0 01.75-.75 2.25 2.25 0 012.25 2.25c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 01-2.649 7.521c-.388.482-.987.729-1.605.729H14.23c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 00-1.423-.23h-.777zM2.331 10.977a11.969 11.969 0 00-.831 4.398 12 12 0 00.52 3.507c.26.85 1.084 1.368 1.973 1.368H4.9c.445 0 .72-.498.523-.898a8.963 8.963 0 01-.924-3.977c0-1.708.476-3.305 1.302-4.666.245-.403-.028-.959-.5-.959H4.25c-.832 0-1.612.453-1.918 1.227z"})])}var Tx=["onClick"],Ax={class:"sr-only"},jx={class:"text-green-600 dark:text-green-500 hidden md:inline"};const Rx={__name:"LogCopyButton",props:{log:{type:Object,required:!0}},setup:function(e){var t=e,n=$t(!1),r=function(){ib(t.log.url),n.value=!0,setTimeout((function(){return n.value=!1}),1e3)};return function(t,o){return Ni(),Vi("button",{class:"log-link group",onClick:la(r,["stop"]),onKeydown:o[0]||(o[0]=function(){return Wt(xb)&&Wt(xb).apply(void 0,arguments)}),title:"Copy link to this log entry"},[Ji("span",Ax,"Log index "+ce(e.log.index)+". Click the button to copy link to this log entry.",1),yr(Ji("span",{class:"hidden md:inline group-hover:underline"},ce(Number(e.log.index).toLocaleString()),513),[[pl,!n.value]]),yr(Qi(Wt(Cx),{class:"md:opacity-75 group-hover:opacity-100"},null,512),[[pl,!n.value]]),yr(Qi(Wt(Px),{class:"text-green-600 dark:text-green-500 md:hidden"},null,512),[[pl,n.value]]),yr(Ji("span",jx,"Copied!",512),[[pl,n.value]])],40,Tx)}}};var Lx={key:0,class:"tabs-container"},Ix={class:"border-b border-gray-200 dark:border-gray-800"},Fx={class:"-mb-px flex space-x-6","aria-label":"Tabs"},Nx=["onClick","aria-current"];const Mx={__name:"TabContainer",props:{tabs:{type:Array,required:!0}},setup:function(e){var t=$t(e.tabs[0]);Go("currentTab",t);var n=function(e){return t.value&&t.value.value===e.value};return function(r,o){return Ni(),Vi("div",null,[e.tabs&&e.tabs.length>1?(Ni(),Vi("div",Lx,[Ji("div",Ix,[Ji("nav",Fx,[(Ni(!0),Vi(Ai,null,io(e.tabs,(function(e){return Ni(),Vi("a",{key:e.name,href:"#",onClick:la((function(n){return t.value=e}),["prevent"]),class:ee([n(e)?"border-brand-500 dark:border-brand-400 text-brand-600 dark:text-brand-500":"border-transparent text-gray-500 dark:text-gray-400 hover:border-gray-300 hover:text-gray-700 dark:hover:text-gray-200","whitespace-nowrap border-b-2 py-2 px-1 text-sm font-medium focus:outline-brand-500"]),"aria-current":n(e)?"page":void 0},ce(e.name),11,Nx)})),128))])])])):rs("",!0),lo(r.$slots,"default")])}}};var Dx={key:0};const Bx={__name:"TabContent",props:{tabValue:{type:String,required:!0}},setup:function(e){var t=e,n=Yo("currentTab"),r=Rs((function(){return n.value&&n.value.value===t.tabValue}));return function(e,t){return r.value?(Ni(),Vi("div",Dx,[lo(e.$slots,"default")])):rs("",!0)}}};function Ux(e,t){return Ni(),Vi("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[Ji("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M18.375 12.739l-7.693 7.693a4.5 4.5 0 01-6.364-6.364l10.94-10.94A3 3 0 1119.5 7.372L8.552 18.32m.009-.01l-.01.01m5.699-9.941l-7.81 7.81a1.5 1.5 0 002.112 2.13"})])}var $x={class:"mail-preview-attributes"},Vx={key:0},Hx=Ji("td",{class:"font-semibold"},"From",-1),zx={key:1},qx=Ji("td",{class:"font-semibold"},"To",-1),Wx={key:2},Kx=Ji("td",{class:"font-semibold"},"Message ID",-1),Gx={key:3},Yx=Ji("td",{class:"font-semibold"},"Subject",-1),Jx={key:4},Qx=Ji("td",{class:"font-semibold"},"Attachments",-1),Zx={class:"flex items-center"},Xx={class:"opacity-60"},eS=["onClick"];const tS={__name:"MailPreviewAttributes",props:["mail"],setup:function(e){return function(t,n){return Ni(),Vi("div",$x,[Ji("table",null,[e.mail.from?(Ni(),Vi("tr",Vx,[Hx,Ji("td",null,ce(e.mail.from),1)])):rs("",!0),e.mail.to?(Ni(),Vi("tr",zx,[qx,Ji("td",null,ce(e.mail.to),1)])):rs("",!0),e.mail.id?(Ni(),Vi("tr",Wx,[Kx,Ji("td",null,ce(e.mail.id),1)])):rs("",!0),e.mail.subject?(Ni(),Vi("tr",Gx,[Yx,Ji("td",null,ce(e.mail.subject),1)])):rs("",!0),e.mail.attachments&&e.mail.attachments.length>0?(Ni(),Vi("tr",Jx,[Qx,Ji("td",null,[(Ni(!0),Vi(Ai,null,io(e.mail.attachments,(function(t,n){return Ni(),Vi("div",{key:"mail-".concat(e.mail.id,"-attachment-").concat(n),class:"mail-attachment-button"},[Ji("div",Zx,[Qi(Wt(Ux),{class:"h-4 w-4 text-gray-500 dark:text-gray-400 mr-1"}),Ji("span",null,[ts(ce(t.filename)+" ",1),Ji("span",Xx,"("+ce(t.size_formatted)+")",1)])]),Ji("div",null,[Ji("a",{href:"#",onClick:la((function(e){return function(e){for(var t=atob(e.content),n=new Array(t.length),r=0;re.length)&&(t=e.length);for(var n=0,r=new Array(t);n
diff --git a/resources/views/livewire/pages/profile.blade.php b/resources/views/livewire/pages/profile.blade.php new file mode 100644 index 0000000000..e6a0616100 --- /dev/null +++ b/resources/views/livewire/pages/profile.blade.php @@ -0,0 +1,20 @@ +
+ + + {{ __('lychee.PROFILE') }} + +
+
+ + @if($are_notification_active) +
+

+ {{ __('lychee.USER_EMAIL_INSTRUCTION') }} +

+
+ + @endif + +
+
+
\ No newline at end of file diff --git a/resources/views/livewire/pages/settings.blade.php b/resources/views/livewire/pages/settings.blade.php new file mode 100644 index 0000000000..ff0eb8aa76 --- /dev/null +++ b/resources/views/livewire/pages/settings.blade.php @@ -0,0 +1,70 @@ +
+ + + {{ __('lychee.SETTINGS') }} + +
+
+ + + + + + + + + + + + + + + + + + + + + +
+

{{ __('lychee.CSS_TEXT') }}

+ +
+ {{ __('lychee.CSS_TITLE') }} +
+
+ +
+

{{ __('lychee.JS_TEXT') }}

+ +
+ {{ __('lychee.JS_TITLE') }} +
+
+ +
+ {{ __('lychee.MORE') }} +
+
+
+
\ No newline at end of file diff --git a/resources/views/livewire/pages/sharing.blade.php b/resources/views/livewire/pages/sharing.blade.php new file mode 100644 index 0000000000..7444ed6af2 --- /dev/null +++ b/resources/views/livewire/pages/sharing.blade.php @@ -0,0 +1,58 @@ +
+ + + {{ __('lychee.SHARING') }} + +
+
+
+

+ This page gives an overview and edit the sharing rights associated with albums. +

+
+
+ +
+ +
+
+
+
+

+ {{ __('lychee.ALBUM_TITLE') }} + {{ __('lychee.USERNAME') }} + + + + + + + +

+
+ @forelse ($this->perms as $perm) + + @empty +

+ Sharing list is empty +

+ @endforelse +
+
+
+
diff --git a/resources/views/livewire/pages/users.blade.php b/resources/views/livewire/pages/users.blade.php new file mode 100644 index 0000000000..834661ceca --- /dev/null +++ b/resources/views/livewire/pages/users.blade.php @@ -0,0 +1,55 @@ +
+ + + {{ __('lychee.USERS') }} + +
+
+
+

+ This pages allows you to manage users. +

    +
  • + : When selected, the user can upload content.
  • +
  • + : When selected, the user can modify their profile (username, password).
  • +
+

+ +
+
+

+ {{ __('lychee.USERNAME') }} + {{ __('lychee.LOGIN_PASSWORD') }} + + + + + + +

+ +
+ @foreach ($this->users as $user) + + @endforeach + +
+

+ + + + +

+ {{ __('lychee.CREATE') }} +
+
+
+
diff --git a/resources/views/vendor/livewire/simple-tailwind.blade.php b/resources/views/vendor/livewire/simple-tailwind.blade.php new file mode 100644 index 0000000000..e4c0c63bcc --- /dev/null +++ b/resources/views/vendor/livewire/simple-tailwind.blade.php @@ -0,0 +1,45 @@ +
+ @if ($paginator->hasPages()) + + @endif +
diff --git a/resources/views/vendor/livewire/tailwind.blade.php b/resources/views/vendor/livewire/tailwind.blade.php new file mode 100644 index 0000000000..aa598629e5 --- /dev/null +++ b/resources/views/vendor/livewire/tailwind.blade.php @@ -0,0 +1,171 @@ +
+ @if ($paginator->hasPages()) + + @endif +
diff --git a/resources/views/vendor/pagination/tailwind.blade.php b/resources/views/vendor/pagination/tailwind.blade.php new file mode 100644 index 0000000000..5c2a15dbb9 --- /dev/null +++ b/resources/views/vendor/pagination/tailwind.blade.php @@ -0,0 +1,148 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/routes/web-livewire.php b/routes/web-livewire.php new file mode 100644 index 0000000000..ea72ab8899 --- /dev/null +++ b/routes/web-livewire.php @@ -0,0 +1,50 @@ +group(function () { + Route::prefix(config('app.livewire') === true ? '' : 'livewire') + ->group(function () { + Route::get('/landing', Landing::class)->name('landing'); + Route::get('/all-settings', AllSettings::class)->name('all-settings'); + Route::get('/settings', Settings::class)->name('settings'); + Route::get('/profile', Profile::class)->name('profile'); + Route::get('/users', Users::class)->name('users'); + Route::get('/sharing', Sharing::class)->name('sharing'); + Route::get('/jobs', Jobs::class)->name('jobs'); + Route::get('/diagnostics', Diagnostics::class)->name('diagnostics'); + Route::get('/map/{albumId?}', Map::class)->name('livewire-map'); + Route::get('/frame/{albumId?}', Frame::class)->name('livewire-frame'); + Route::get('/gallery', Albums::class)->name('livewire-gallery'); + Route::get('/search/{albumId?}', Search::class)->name('livewire-search'); + Route::get('/gallery/{albumId}/', Album::class)->name('livewire-gallery-album'); + Route::get('/gallery/{albumId}/{photoId}', Album::class)->name('livewire-gallery-photo'); + Route::get('/', function () { + return redirect(Configs::getValueAsBool('landing_page_enable') ? route('landing') : route('livewire-gallery')); + })->name('livewire-index'); + }); + }); + diff --git a/routes/web.php b/routes/web.php index b53327184e..835fd570b1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -22,8 +22,14 @@ Route::feeds(); -Route::get('/', [IndexController::class, 'show'])->name('home')->middleware(['migration:complete']); -Route::get('/gallery', [IndexController::class, 'gallery'])->name('gallery')->middleware(['migration:complete']); +// If we are using Livewire by default, we no longer need those routes. +if (config('app.livewire') !== true) { + Route::get('/', [IndexController::class, 'show'])->name('home')->middleware(['migration:complete']); + Route::get('/gallery', [IndexController::class, 'gallery'])->name('gallery')->middleware(['migration:complete']); + Route::get('/view', [IndexController::class, 'view'])->name('view')->middleware(['redirect-legacy-id']); + Route::get('/frame', [IndexController::class, 'frame'])->name('frame')->middleware(['migration:complete']); +} + Route::match(['get', 'post'], '/migrate', [Administration\UpdateController::class, 'migrate']) ->name('migrate') ->middleware(['migration:incomplete']); @@ -38,8 +44,5 @@ Route::get('/r/{albumID}/{photoID}', [RedirectController::class, 'photo'])->middleware(['migration:complete']); Route::get('/r/{albumID}', [RedirectController::class, 'album'])->middleware(['migration:complete']); -Route::get('/view', [IndexController::class, 'view'])->name('view')->middleware(['redirect-legacy-id']); -Route::get('/frame', [IndexController::class, 'frame'])->name('frame')->middleware(['migration:complete']); - // This route must be defined last because it is a catch all. Route::match(['get', 'post'], '{path}', HoneyPotController::class)->where('path', '.*'); diff --git a/scripts/post-merge b/scripts/post-merge index 409b2c78f4..5bdd6fd140 100755 --- a/scripts/post-merge +++ b/scripts/post-merge @@ -16,6 +16,15 @@ else printf "\n${ORANGE}Dev mode detected${NO_COLOR}\n" echo "composer install" composer install + if command -v npm > /dev/null; then + printf "\n${ORANGE}npm detected${NO_COLOR}\n" + if [ -f "package.json" ]; then + echo "npm install --no-audit --no-fund" + npm install --no-audit --no-fund + else + printf "${GREEN}no package.json found${NO_COLOR}\n" + fi + fi else printf "\n${ORANGE}--no-dev mode detected${NO_COLOR}\n" echo "composer install --no-dev --prefer-dist" diff --git a/scripts/pre-commit b/scripts/pre-commit index a04e928b9c..53fbf69c06 100755 --- a/scripts/pre-commit +++ b/scripts/pre-commit @@ -8,6 +8,8 @@ printf "\n${GREEN}pre commit hook start${NO_COLOR}\n" PHP_CS_FIXER="vendor/bin/php-cs-fixer" PHP_CS_FIXER_IGNORE_ENV=1 +NPM_FORMAT="node_modules/prettier" + if [ -x "$PHP_CS_FIXER" ]; then git status --porcelain | grep -e '^[AM]\(.*\).php$' | cut -c 3- | while read line; do ${PHP_CS_FIXER} fix --config=.php-cs-fixer.php ${line}; @@ -21,4 +23,17 @@ else echo "" fi +if [ -x "$NPM_FORMAT" ]; then + npm run format + git status --porcelain | grep -e '^[AM]\(.*\).js$' | cut -c 3- | while read line; do + git add "$line"; + done +else + echo "" + printf "${YELLOW}Please install prettier, e.g.:${NO_COLOR}" + echo "" + echo " npm run install" + echo "" +fi + printf "\n${GREEN}pre commit hook finish${NO_COLOR}\n" diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000000..a8870f1765 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,183 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + "./resources/**/*.blade.php", + "./resources/**/*.js", + "./resources/**/*.vue", + ], + theme: { + extend: { + backgroundImage: { + 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', + 'noise': "url('../img/noise.png')" + }, + dropShadow: { + '3xl': '0 20px 20px rgba(0, 0, 0, 1)', + }, + fontSize: { + '3xs': ['0.55rem', '0.7rem'], + '2xs' : ['0.65rem', '0.8rem'], + }, + colors: { + primary: { + 200: 'var(--primary-200)', + 300: 'var(--primary-300)', + 400: 'var(--primary-400)', + 500: 'var(--primary-500)', + 600: 'var(--primary-600)', + 700: 'var(--primary-700)', + }, + 'text-main': { + 0: 'var(--text-main-0)', + 100: 'var(--text-main-100)', + 200: 'var(--text-main-200)', + 400: 'var(--text-main-400)', + }, + 'text-hover': 'var(--text-hover)', + bg: { + 50: 'var(--bg-50)', + 100: 'var(--bg-100)', + 200: 'var(--bg-200)', + 300: 'var(--bg-300)', + 400: 'var(--bg-400)', + 500: 'var(--bg-500)', + 600: 'var(--bg-600)', + 700: 'var(--bg-700)', + 800: 'var(--bg-800)', + 900: 'var(--bg-900)', + 950: 'var(--bg-950)', + }, + danger: { + 600: 'var(--danger)', + 700: 'var(--danger-dark)', + 800: 'var(--danger-darker)', + }, + warning: { + 600: 'var(--warning)', + 700: 'var(--warning-dark)', + }, + create: { + 600: 'var(--create)', + 700: 'var(--create-dark)', + } + }, + flexShrink: { + 2: '2' + }, + transitionProperty: { + width: ['width'], + }, + keyframes: { + fadeIn: { + '0%': { 'opacity': '0' }, + '100%': { 'opacity': '1' } + }, + fadeOut: { + '0%': { 'opacity': '1' }, + '100%': { 'opacity': '0' } + }, + moveBackground: { + '0%': { 'background-position-x': '0px' }, + '100%': { 'background-position-x': '-100px' } + }, + moveUp: { + '0%': {'transform': 'translateY(80px)'}, + '100%': {'transform': 'translateY(0)'} + }, + zoomIn: { + '0%': { + 'opacity': '0', + 'transform': 'scale(0.8)' + }, + '100%': { + 'opacity': '1', + 'transform': 'scale(1)' + } + }, + zoomOut: { + '0%': { + 'opacity': '1', + 'transform': 'scale(1)' + }, + '100%': { + 'opacity': '0', + 'transform': 'scale(0.8)' + } + }, + popIn: { + '0%': { + 'opacity': '0', + 'transform': 'scale(1.1)' + }, + '100%': { + 'opacity': '1', + 'transform': 'scale(1)' + } + }, + scaleIn: { + '0%': { + 'transform': 'scale(0)' + }, + '100%': { + 'transform': 'scale(1)' + } + }, + scaleOut: { + '0%': { + 'transform': 'scale(1)' + }, + '100%': { + 'transform': 'scale(0)' + } + }, + animateDown: { + '0%': { + 'opacity': '0', + 'transform': 'translateY(-300px)' + }, + '100%': { + 'opacity': '1', + 'transform': 'translateY(0px)' + } + }, + animateUp: { + '0%': { + 'opacity': '0', + 'transform': 'translateY(300px)' + }, + '100%': { + 'opacity': '1', + 'transform': 'translateY(0px)' + } + } + + + }, + animation: { + 'fadeIn': 'fadeIn 0.3s forwards cubic-bezier(0.51, 0.92, 0.24, 1)', + 'fadeOut': 'fadeOut 0.3s forwards cubic-bezier(0.51, 0.92, 0.24, 1)', + 'zoomIn': 'zoomIn 0.2s forwards cubic-bezier(0.51, 0.92, 0.24, 1)', + 'zoomOut': 'zoomOut 0.2s forwards cubic-bezier(0.51, 0.92, 0.24, 1)', + 'moveUp': 'moveUp 0.3s forwards cubic-bezier(0.51, 0.92, 0.24, 1)', + 'scaleIn': 'scaleIn 0.3s forwards cubic-bezier(0.51,0.92,0.24,1.2)', + 'scaleOut': 'scaleOut 0.3s forwards cubic-bezier(0.51,0.92,0.24,1.2)', + + 'slowFadeIn': 'fadeIn 2s forwards cubic-bezier(0.51, 0.92, 0.24, 1)', + 'slowFadeOut': 'fadeOut 2s forwards cubic-bezier(0.51, 0.92, 0.24, 1)', + 'slowZoomIn': 'zoomIn 2s forwards cubic-bezier(0.51, 0.92, 0.24, 1)', + 'slowZoomOut': 'zoomOut 2s forwards cubic-bezier(0.51, 0.92, 0.24, 1)', + + 'slowMoveUp': 'moveUp 2s forwards cubic-bezier(0.51, 0.92, 0.24, 1)', + 'slowPopIn': 'popIn 2s forwards cubic-bezier(0.51, 0.92, 0.24, 1)', + + 'landingIntroPopIn': 'popIn 2s forwards ease-in-out', + 'landingIntroFadeOut': 'fadeOut 2s 2s forwards ease-in-out', // delayed by 2s + 'landingSlidesPopIn': 'popIn 2s 3s forwards ease-in-out', // delayed by 2s + 'ladningAnimateDown': 'animateDown 1s 3.1s forwards ease-in-out', + 'ladningAnimateUp': 'animateUp 1s 3.1s forwards ease-in-out', + 'delayedFadeOut': 'fadeOut 2s 2s forwards ease-in-out' + } + }, + }, + plugins: [], +} \ No newline at end of file diff --git a/tests/AbstractTestCase.php b/tests/AbstractTestCase.php index 177d2b140c..474fb3fa07 100644 --- a/tests/AbstractTestCase.php +++ b/tests/AbstractTestCase.php @@ -116,4 +116,17 @@ protected static function getRecentPhotoIDs(): BaseCollection return Photo::query()->select('id')->where($recentFilter)->pluck('id'); } + + /** + * Because we are now using hard coded urls for the images size_variants instead of relative. + * We need to drop that prefix in order to access them from public_path(). + * + * @param string $url + * + * @return string prefix removed + */ + protected function dropUrlPrefix(string $url): string + { + return str_replace(config('app.url'), '', $url); + } } diff --git a/tests/Feature/BasePhotosAddHandler.php b/tests/Feature/BasePhotosAddHandler.php index 44cc05796a..2cb5b2cd3f 100644 --- a/tests/Feature/BasePhotosAddHandler.php +++ b/tests/Feature/BasePhotosAddHandler.php @@ -489,7 +489,7 @@ public function testUploadMultibyteTitle(): void 'title' => 'fin de journée', 'description' => null, 'tags' => [], - 'license' => 'None', + 'license' => 'none', 'is_public' => false, 'is_starred' => false, 'iso' => '400', diff --git a/tests/Feature/CommandFixPermissionsTest.php b/tests/Feature/CommandFixPermissionsTest.php index 9c15b6b812..4f87912700 100644 --- a/tests/Feature/CommandFixPermissionsTest.php +++ b/tests/Feature/CommandFixPermissionsTest.php @@ -27,7 +27,7 @@ class CommandFixPermissionsTest extends Base\BasePhotoTest */ public function testFixPermissions(): void { - if (config('filesystems.images.visibility', 'public') !== 'public') { + if (config('filesystems.disks.images.visibility', 'public') !== 'public') { static::markTestSkipped('Wrong setting in .env file or configuration'); } @@ -38,7 +38,7 @@ public function testFixPermissions(): void static::createUploadedFile(TestConstants::SAMPLE_FILE_MONGOLIA_IMAGE) )); - $filePath = public_path($photo->size_variants->original->url); + $filePath = public_path($this->dropUrlPrefix($photo->size_variants->original->url)); $dirPath = pathinfo($filePath, PATHINFO_DIRNAME); static::skipIfNotFileOwner($filePath); diff --git a/tests/Feature/CommandGenerateThumbsTest.php b/tests/Feature/CommandGenerateThumbsTest.php index 4692d73df3..3931a918b1 100644 --- a/tests/Feature/CommandGenerateThumbsTest.php +++ b/tests/Feature/CommandGenerateThumbsTest.php @@ -51,7 +51,7 @@ public function testThumbRecreation(): void )); // Remove the size variant "small" from disk and from DB - unlink(public_path($photo1->size_variants->small->url)); + unlink(public_path($this->dropUrlPrefix($photo1->size_variants->small->url))); DB::table('size_variants') ->where('photo_id', '=', $photo1->id) ->where('type', '=', SizeVariantType::SMALL) @@ -67,6 +67,6 @@ public function testThumbRecreation(): void $this->assertNotNull($photo2->size_variants->small); $this->assertEquals($photo1->size_variants->small->width, $photo2->size_variants->small->width); $this->assertEquals($photo1->size_variants->small->height, $photo2->size_variants->small->height); - $this->assertFileExists(public_path($photo2->size_variants->small->url)); + $this->assertFileExists(public_path($this->dropUrlPrefix($photo2->size_variants->small->url))); } } diff --git a/tests/Feature/CommandGhostbusterTest.php b/tests/Feature/CommandGhostbusterTest.php index 82633171ac..65a66097d7 100644 --- a/tests/Feature/CommandGhostbusterTest.php +++ b/tests/Feature/CommandGhostbusterTest.php @@ -30,13 +30,13 @@ public function testRemoveOrphanedFiles(): void // and thumb, because these size variants must be generated at least // otherwise we have nothing to test. $fileURLs = array_diff([ - $photo->size_variants->original->url, - $photo->size_variants->medium2x?->url, - $photo->size_variants->medium?->url, - $photo->size_variants->small2x?->url, - $photo->size_variants->small?->url, - $photo->size_variants->thumb2x?->url, - $photo->size_variants->thumb->url, + $this->dropUrlPrefix($photo->size_variants->original->url), + $this->dropUrlPrefix($photo->size_variants->medium2x?->url), + $this->dropUrlPrefix($photo->size_variants->medium?->url), + $this->dropUrlPrefix($photo->size_variants->small2x?->url), + $this->dropUrlPrefix($photo->size_variants->small?->url), + $this->dropUrlPrefix($photo->size_variants->thumb2x?->url), + $this->dropUrlPrefix($photo->size_variants->thumb->url), ], [null]); $this->assertNotEmpty($fileURLs); @@ -79,18 +79,18 @@ public function testRemoveZombiePhotos(): void // otherwise we have nothing to test. $originalFileURL = $photo->size_variants->original->url; $fileURLs = array_diff([ - $originalFileURL, - $photo->size_variants->medium2x?->url, - $photo->size_variants->medium?->url, - $photo->size_variants->small2x?->url, - $photo->size_variants->small?->url, - $photo->size_variants->thumb2x?->url, - $photo->size_variants->thumb->url, + $this->dropUrlPrefix($originalFileURL), + $this->dropUrlPrefix($photo->size_variants->medium2x?->url), + $this->dropUrlPrefix($photo->size_variants->medium?->url), + $this->dropUrlPrefix($photo->size_variants->small2x?->url), + $this->dropUrlPrefix($photo->size_variants->small?->url), + $this->dropUrlPrefix($photo->size_variants->thumb2x?->url), + $this->dropUrlPrefix($photo->size_variants->thumb->url), ], [null]); $this->assertNotEmpty($fileURLs); // Remove original file - \Safe\unlink(public_path($originalFileURL)); + \Safe\unlink(public_path($this->dropUrlPrefix($originalFileURL))); // Ghostbuster, ... $this->artisan(self::COMMAND, [ diff --git a/tests/Feature/CommandTakeDateTest.php b/tests/Feature/CommandTakeDateTest.php index 88a8a10d11..402fa7a5a0 100644 --- a/tests/Feature/CommandTakeDateTest.php +++ b/tests/Feature/CommandTakeDateTest.php @@ -47,7 +47,7 @@ public function testSetUploadTimeFromFileTime(): void /** @var \App\Models\Photo */ $photo = static::convertJsonToObject($this->photos_tests->get($id)); - $file_time = \Safe\filemtime(public_path($photo->size_variants->original->url)); + $file_time = \Safe\filemtime(public_path($this->dropUrlPrefix($photo->size_variants->original->url))); $carbon = new Carbon($photo->created_at); $this->assertEquals($file_time, $carbon->getTimestamp()); diff --git a/tests/Feature/CommandVideoDataTest.php b/tests/Feature/CommandVideoDataTest.php index a71232a9c0..741de6c4fe 100644 --- a/tests/Feature/CommandVideoDataTest.php +++ b/tests/Feature/CommandVideoDataTest.php @@ -31,7 +31,7 @@ public function testThumbRecreation(): void )); // Remove the size variant "thumb" from disk and from DB - \Safe\unlink(public_path($photo1->size_variants->thumb->url)); + \Safe\unlink(public_path($this->dropUrlPrefix($photo1->size_variants->thumb->url))); DB::table('size_variants') ->where('photo_id', '=', $photo1->id) ->where('type', '=', SizeVariantType::THUMB) @@ -47,6 +47,6 @@ public function testThumbRecreation(): void $this->assertNotNull($photo2->size_variants->thumb); $this->assertEquals($photo1->size_variants->thumb->width, $photo2->size_variants->thumb->width); $this->assertEquals($photo1->size_variants->thumb->height, $photo2->size_variants->thumb->height); - $this->assertFileExists(public_path($photo2->size_variants->thumb->url)); + $this->assertFileExists(public_path($this->dropUrlPrefix($photo2->size_variants->thumb->url))); } } diff --git a/tests/Feature/PhotosAddMethodsTest.php b/tests/Feature/PhotosAddMethodsTest.php index 3fb9d9b2d2..949d8a6d5a 100644 --- a/tests/Feature/PhotosAddMethodsTest.php +++ b/tests/Feature/PhotosAddMethodsTest.php @@ -35,7 +35,12 @@ public function testImportViaMove(): void { // import the photo copy(base_path(TestConstants::SAMPLE_FILE_NIGHT_IMAGE), static::importPath('night.jpg')); - $this->photos_tests->importFromServer(static::importPath(), null, true, false, false); + $this->photos_tests->importFromServer( + path: static::importPath(), + album_id: null, + delete_imported: true, + skip_duplicates: false, + import_via_symlink: false); // check if the file has been moved $this->assertEquals(false, file_exists(static::importPath('night.jpg'))); @@ -45,7 +50,12 @@ public function testImportViaCopy(): void { // import the photo copy(base_path(TestConstants::SAMPLE_FILE_NIGHT_IMAGE), static::importPath('night.jpg')); - $this->photos_tests->importFromServer(static::importPath(), null, false, false, false); + $this->photos_tests->importFromServer( + path: static::importPath(), + album_id: null, + delete_imported: false, + skip_duplicates: false, + import_via_symlink: false); // check if the file is still there $this->assertEquals(true, file_exists(static::importPath('night.jpg'))); @@ -67,7 +77,7 @@ public function testImportViaSymlink(): void $photo_id = $ids_after->diff($ids_before)->first(); /** @var \App\Models\Photo $photo */ $photo = static::convertJsonToObject($this->photos_tests->get($photo_id)); - $symlink_path = public_path($photo->size_variants->original->url); + $symlink_path = public_path($this->dropUrlPrefix($photo->size_variants->original->url)); $this->assertEquals(true, is_link($symlink_path)); } @@ -190,8 +200,8 @@ public function testAppleLivePhotoImportViaSymlink(): void $this->assertEquals(pathinfo($photo->live_photo_url, PATHINFO_FILENAME), pathinfo($photo->size_variants->original->url, PATHINFO_FILENAME)); // get the paths of the original size variant and the live photo and check whether they are truly symbolic links - $symlink_path1 = public_path($photo->size_variants->original->url); - $symlink_path2 = public_path($photo->live_photo_url); + $symlink_path1 = public_path($this->dropUrlPrefix($photo->size_variants->original->url)); + $symlink_path2 = public_path($this->dropUrlPrefix($photo->live_photo_url)); $this->assertEquals(true, is_link($symlink_path1)); $this->assertEquals(true, is_link($symlink_path2)); } diff --git a/tests/Feature/PhotosOperationsTest.php b/tests/Feature/PhotosOperationsTest.php index cde528dfa3..07737df9a0 100644 --- a/tests/Feature/PhotosOperationsTest.php +++ b/tests/Feature/PhotosOperationsTest.php @@ -150,7 +150,7 @@ public function testManyFunctionsAtOnce(): void 'album_id' => null, 'id' => $id, 'created_at' => $updated_taken_at->setTimezone('UTC')->format('Y-m-d\TH:i:sP'), - 'license' => 'All Rights Reserved', + 'license' => 'reserved', 'is_public' => true, 'is_starred' => true, 'tags' => ['night', 'trees'], @@ -190,7 +190,7 @@ public function testManyFunctionsAtOnce(): void 'focal' => '16 mm', 'iso' => '1250', 'lens' => 'EF16-35mm f/2.8L USM', - 'license' => 'All Rights Reserved', + 'license' => 'reserved', 'make' => 'Canon', 'model' => 'Canon EOS R', 'is_public' => true, diff --git a/tests/Feature/Traits/RequiresEmptyUsers.php b/tests/Feature/Traits/RequiresEmptyUsers.php index adf7c18f3e..2af5ae6989 100644 --- a/tests/Feature/Traits/RequiresEmptyUsers.php +++ b/tests/Feature/Traits/RequiresEmptyUsers.php @@ -24,7 +24,7 @@ protected function setUpRequiresEmptyUsers(): void static::assertEquals( 0, DB::table('users') - ->where('may_administrate', '=', false) + ->where('id', '>', 1) ->count() ); } @@ -32,6 +32,6 @@ protected function setUpRequiresEmptyUsers(): void protected function tearDownRequiresEmptyUsers(): void { // Clean up remaining stuff from tests - DB::table('users')->where('may_administrate', '=', false)->delete(); + DB::table('users')->where('id', '>', 1)->delete(); } } diff --git a/tests/Livewire/Base/BaseLivewireTest.php b/tests/Livewire/Base/BaseLivewireTest.php new file mode 100644 index 0000000000..c06fd63296 --- /dev/null +++ b/tests/Livewire/Base/BaseLivewireTest.php @@ -0,0 +1,94 @@ +setUpRequiresEmptyUsers(); + $this->setUpRequiresEmptyAlbums(); + $this->setUpRequiresEmptyPhotos(); + + $this->admin = User::factory()->may_administrate()->create(); + $this->userMayUpload1 = User::factory()->may_upload()->create(); + $this->userMayUpload2 = User::factory()->may_upload()->create(); + $this->userNoUpload = User::factory()->create(); + $this->userLocked = User::factory()->locked()->create(); + + $this->album1 = Album::factory()->as_root()->owned_by($this->userMayUpload1)->create(); + $this->photo1 = Photo::factory()->owned_by($this->userMayUpload1)->with_GPS_coordinates()->in($this->album1)->create(); + $this->photo1b = Photo::factory()->owned_by($this->userMayUpload1)->with_subGPS_coordinates()->in($this->album1)->create(); + + $this->subAlbum1 = Album::factory()->children_of($this->album1)->owned_by($this->userMayUpload1)->create(); + $this->subPhoto1 = Photo::factory()->owned_by($this->userMayUpload1)->with_GPS_coordinates()->in($this->subAlbum1)->create(); + + $this->album2 = Album::factory()->as_root()->owned_by($this->userMayUpload1)->create(); + $this->photo2 = Photo::factory()->owned_by($this->userMayUpload1)->with_GPS_coordinates()->in($this->album2)->create(); + + $this->subAlbum2 = Album::factory()->children_of($this->album2)->owned_by($this->userMayUpload1)->create(); + $this->subPhoto2 = Photo::factory()->owned_by($this->userMayUpload1)->with_GPS_coordinates()->in($this->subAlbum2)->create(); + + $this->photoUnsorted = Photo::factory()->owned_by($this->userMayUpload1)->with_GPS_coordinates()->create(); + + $this->withoutVite(); + } + + public function tearDown(): void + { + $this->tearDownRequiresEmptyPhotos(); + $this->tearDownRequiresEmptyAlbums(); + $this->tearDownRequiresEmptyUsers(); + + parent::tearDown(); + } + + final public static function notifySuccess(): array + { + return ['msg' => __('lychee.CHANGE_SUCCESS'), 'type' => NotificationType::SUCCESS->value]; + } +} \ No newline at end of file diff --git a/tests/Livewire/Forms/Album/CreateTagTest.php b/tests/Livewire/Forms/Album/CreateTagTest.php new file mode 100644 index 0000000000..ec05546362 --- /dev/null +++ b/tests/Livewire/Forms/Album/CreateTagTest.php @@ -0,0 +1,49 @@ +assertForbidden(); + } + + public function testCreateLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(CreateTag::class) + ->assertForbidden(); + } + + public function testCreateLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(CreateTag::class) + ->assertOk() + ->assertViewIs('livewire.forms.add.create-tag') + ->call('close') + ->assertDispatched('closeModal'); + + Livewire::actingAs($this->userMayUpload1)->test(CreateTag::class) + ->assertOk() + ->assertViewIs('livewire.forms.add.create-tag') + ->set('title', fake()->country() . ' ' . fake()->year()) + ->set('tag', 'something') + ->call('submit') + ->assertRedirect(); + } +} diff --git a/tests/Livewire/Forms/Album/CreateTest.php b/tests/Livewire/Forms/Album/CreateTest.php new file mode 100644 index 0000000000..93927d0f29 --- /dev/null +++ b/tests/Livewire/Forms/Album/CreateTest.php @@ -0,0 +1,60 @@ + [Params::PARENT_ID => null]]) + ->assertForbidden(); + + Livewire::test(Create::class, ['params' => [Params::PARENT_ID => $this->album1->id]]) + ->assertForbidden(); + } + + public function testCreateLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(Create::class, ['params' => [Params::PARENT_ID => null]]) + ->assertForbidden(); + + Livewire::actingAs($this->userNoUpload)->test(Create::class, ['params' => [Params::PARENT_ID => $this->album1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Create::class, ['params' => [Params::PARENT_ID => $this->album1->id]]) + ->assertForbidden(); + } + + public function testCreateLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Create::class, ['params' => [Params::PARENT_ID => $this->album1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.add.create') + ->call('close') + ->assertDispatched('closeModal'); + + Livewire::actingAs($this->userMayUpload1)->test(Create::class, ['params' => [Params::PARENT_ID => $this->album1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.add.create') + ->set('title', fake()->country() . ' ' . fake()->year()) + ->call('submit') + ->assertRedirect(); + + $this->assertCount(2, $this->album1->fresh()->load('children')->children); + } +} diff --git a/tests/Livewire/Forms/Album/DeletePanelTest.php b/tests/Livewire/Forms/Album/DeletePanelTest.php new file mode 100644 index 0000000000..41ba8d46b2 --- /dev/null +++ b/tests/Livewire/Forms/Album/DeletePanelTest.php @@ -0,0 +1,52 @@ + $this->album1]) + ->assertForbidden(); + } + + public function testDeletePanelLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(DeletePanel::class, ['album' => $this->album1]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(DeletePanel::class, ['album' => $this->album1]) + ->assertForbidden(); + } + + public function testDeletePanelLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(DeletePanel::class, ['album' => $this->subAlbum1]) + ->assertOk() + ->assertViewIs('livewire.forms.album.delete-panel') + ->call('delete') + ->assertRedirect(route('livewire-gallery-album', ['albumId' => $this->album1->id])); + + $this->assertCount(0, $this->album1->fresh()->load('children')->children); + + Livewire::actingAs($this->userMayUpload1)->test(DeletePanel::class, ['album' => $this->album1]) + ->assertOk() + ->assertViewIs('livewire.forms.album.delete-panel') + ->call('delete') + ->assertRedirect(route('livewire-gallery')); + } +} diff --git a/tests/Livewire/Forms/Album/DeleteTest.php b/tests/Livewire/Forms/Album/DeleteTest.php new file mode 100644 index 0000000000..7127acc988 --- /dev/null +++ b/tests/Livewire/Forms/Album/DeleteTest.php @@ -0,0 +1,58 @@ + [Params::PARENT_ID => null, Params::ALBUM_ID => $this->album1->id]]) + ->assertForbidden(); + + Livewire::test(Delete::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertForbidden(); + } + + public function testDeleteLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(Delete::class, ['params' => [Params::PARENT_ID => null, Params::ALBUM_ID => $this->album1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userNoUpload)->test(Delete::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Delete::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertForbidden(); + } + + public function testDeleteLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Delete::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.album.delete') + ->call('close'); + + Livewire::actingAs($this->userMayUpload1)->test(Delete::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.album.delete') + ->call('delete') + ->assertRedirect(route('livewire-gallery-album', ['albumId' => $this->album1->id])); + + $this->assertCount(0, $this->album1->fresh()->load('children')->children); + } +} diff --git a/tests/Livewire/Forms/Album/MergeMoveTest.php b/tests/Livewire/Forms/Album/MergeMoveTest.php new file mode 100644 index 0000000000..339319f99d --- /dev/null +++ b/tests/Livewire/Forms/Album/MergeMoveTest.php @@ -0,0 +1,132 @@ + [Params::PARENT_ID => null, Params::ALBUM_ID => $this->album1->id]]) + ->assertForbidden(); + + Livewire::test(Merge::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertForbidden(); + + Livewire::test(Merge::class, ['params' => [Params::PARENT_ID => null, Params::ALBUM_IDS => [$this->album1->id, $this->subAlbum1->id]]]) + ->assertForbidden(); + } + + public function testMoveLoggedOut(): void + { + Livewire::test(Move::class, ['params' => [Params::PARENT_ID => null, Params::ALBUM_ID => $this->album1->id]]) + ->assertForbidden(); + + Livewire::test(Move::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertForbidden(); + } + + public function testMergeLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(Merge::class, ['params' => [Params::PARENT_ID => null, Params::ALBUM_ID => $this->album1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userNoUpload)->test(Merge::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Merge::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertForbidden(); + } + + public function testMoveLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(Move::class, ['params' => [Params::PARENT_ID => null, Params::ALBUM_ID => $this->album1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userNoUpload)->test(Move::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Move::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertForbidden(); + } + + public function testMergeLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Merge::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.album.merge') + ->call('close'); + + Livewire::actingAs($this->userMayUpload1)->test(Merge::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.album.merge') + ->call('setAlbum', $this->album1->id, $this->album1->title) + ->assertSet('albumID', $this->album1->id) + ->assertSet('title', $this->album1->title) + ->assertOk() + ->call('submit') + ->assertRedirect(route('livewire-gallery-album', ['albumId' => $this->album1->id])); + + $this->assertCount(0, $this->album1->fresh()->load('children')->children); + + Livewire::actingAs($this->userMayUpload1)->test(Merge::class, ['params' => [Params::PARENT_ID => null, Params::ALBUM_ID => $this->album1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.album.merge') + ->call('setAlbum', $this->album2->id, $this->album2->title) + ->assertSet('albumID', $this->album2->id) + ->assertSet('title', $this->album2->title) + ->assertOk() + ->call('submit') + ->assertRedirect(route('livewire-gallery')); + + $this->assertCount(1, $this->album2->fresh()->load('children')->children); + } + + public function testMoveLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Move::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.album.move') + ->call('close'); + + Livewire::actingAs($this->userMayUpload1)->test(Move::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.album.move') + ->call('setAlbum', $this->album2->id, $this->album2->title) + ->assertSet('albumID', $this->album2->id) + ->assertSet('title', $this->album2->title) + ->assertOk() + ->call('submit') + ->assertRedirect(route('livewire-gallery-album', ['albumId' => $this->album1->id])); + + $this->assertCount(0, $this->album1->fresh()->load('children')->children); + $this->assertCount(2, $this->album2->fresh()->load('children')->children); + + Livewire::actingAs($this->userMayUpload1)->test(Move::class, ['params' => [Params::PARENT_ID => null, Params::ALBUM_ID => $this->album1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.album.move') + ->call('setAlbum', $this->album2->id, $this->album2->title) + ->assertSet('albumID', $this->album2->id) + ->assertSet('title', $this->album2->title) + ->assertOk() + ->call('submit') + ->assertRedirect(route('livewire-gallery')); + + $this->assertCount(3, $this->album2->fresh()->load('children')->children); + } +} diff --git a/tests/Livewire/Forms/Album/MovePanelTest.php b/tests/Livewire/Forms/Album/MovePanelTest.php new file mode 100644 index 0000000000..a42cfc24a6 --- /dev/null +++ b/tests/Livewire/Forms/Album/MovePanelTest.php @@ -0,0 +1,66 @@ + $this->subAlbum1]) + ->assertForbidden(); + + Livewire::test(MovePanel::class, ['album' => $this->subAlbum1]) + ->assertForbidden(); + } + + public function testMoveLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(MovePanel::class, ['album' => $this->subAlbum1]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(MovePanel::class, ['album' => $this->subAlbum1]) + ->assertForbidden(); + } + + public function testMoveLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(MovePanel::class, ['album' => $this->subAlbum1]) + ->assertOk() + ->assertViewIs('livewire.forms.album.move-panel') + ->call('setAlbum', $this->album2->id, $this->album2->title) + ->assertSet('albumID', $this->album2->id) + ->assertSet('title', $this->album2->title) + ->assertOk() + ->call('move') + ->assertRedirect(route('livewire-gallery-album', ['albumId' => $this->album1->id])); + + $this->assertCount(0, $this->album1->fresh()->load('children')->children); + $this->assertCount(2, $this->album2->fresh()->load('children')->children); + + Livewire::actingAs($this->userMayUpload1)->test(MovePanel::class, ['album' => $this->album1]) + ->assertOk() + ->assertViewIs('livewire.forms.album.move-panel') + ->call('setAlbum', $this->album2->id, $this->album2->title) + ->assertSet('albumID', $this->album2->id) + ->assertSet('title', $this->album2->title) + ->assertOk() + ->call('move') + ->assertRedirect(route('livewire-gallery')); + + $this->assertCount(3, $this->album2->fresh()->load('children')->children); + } +} diff --git a/tests/Livewire/Forms/Album/PropertiesTest.php b/tests/Livewire/Forms/Album/PropertiesTest.php new file mode 100644 index 0000000000..9bfb7c3ae0 --- /dev/null +++ b/tests/Livewire/Forms/Album/PropertiesTest.php @@ -0,0 +1,43 @@ + $this->album1])->assertForbidden(); + } + + public function testPropertiesLoggedIn(): void + { + Livewire::actingAs($this->admin)->test(Properties::class, ['album' => $this->album1]) + ->assertOk() + ->assertViewIs('livewire.forms.album.properties') + ->call('submit') + ->assertOk() + ->assertDispatched('notify', self::notifySuccess()); + + Livewire::actingAs($this->admin)->test(Properties::class, ['album' => $this->album1]) + ->assertOk() + ->assertViewIs('livewire.forms.album.properties') + ->set('license', 'WTFPL') + ->call('submit') + ->assertOk() + ->assertNotDispatched('notify', self::notifySuccess()); + } +} diff --git a/tests/Livewire/Forms/Album/RenameTest.php b/tests/Livewire/Forms/Album/RenameTest.php new file mode 100644 index 0000000000..7834a4f2e3 --- /dev/null +++ b/tests/Livewire/Forms/Album/RenameTest.php @@ -0,0 +1,61 @@ + [Params::PARENT_ID => null, Params::ALBUM_ID => $this->album1->id]]) + ->assertForbidden(); + + Livewire::test(Rename::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertForbidden(); + } + + public function testRenameLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(Rename::class, ['params' => [Params::PARENT_ID => null, Params::ALBUM_ID => $this->album1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userNoUpload)->test(Rename::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Rename::class, ['params' => [Params::PARENT_ID => null, Params::ALBUM_ID => $this->album1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Rename::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertForbidden(); + } + + public function testRenameLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Rename::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.album.rename') + ->call('close'); + + Livewire::actingAs($this->userMayUpload1)->test(Rename::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.album.rename') + ->set('title', $this->album1->title) + ->assertOk() + ->call('submit') + ->assertDispatched('reloadPage'); + } +} diff --git a/tests/Livewire/Forms/Album/SearchAlbumTest.php b/tests/Livewire/Forms/Album/SearchAlbumTest.php new file mode 100644 index 0000000000..3274ac8a6b --- /dev/null +++ b/tests/Livewire/Forms/Album/SearchAlbumTest.php @@ -0,0 +1,137 @@ +album2->title = 'vzreckosowoigygagvarcknkxubsbmrczvkmwqayhsemhpwidplztkifahdywtuaghlyighdcrzxjlzzdcuj'; + $this->album2->save(); + } + + public function testSearchAlbumLoggedOut(): void + { + Livewire::test(SearchAlbum::class, ['parent_id' => null, 'lft' => null, 'rgt' => null]) + ->assertOk() + ->assertCount('albumListSaved', 0) + ->assertSet('albumListSaved', []); + + Livewire::test(SearchAlbum::class, ['parent_id' => $this->album1->id, 'lft' => $this->album1->_lft, 'rgt' => $this->album1->_rgt]) + ->assertOk() + ->assertCount('albumListSaved', 1) + ->assertSet('albumListSaved', [ + [ + 'id' => null, + 'title' => __('lychee.ROOT'), + 'original' => __('lychee.ROOT'), + 'short_title' => __('lychee.ROOT'), + 'thumb' => 'img/no_images.svg', + ], + ]); + } + + public function testSearchAlbumLoggedInAsNotOwner(): void + { + Livewire::actingAs($this->userMayUpload2)->test(SearchAlbum::class, ['parent_id' => null, 'lft' => null, 'rgt' => null]) + ->assertOk() + ->assertCount('albumListSaved', 0) + ->assertSet('albumListSaved', []); + + Livewire::actingAs($this->userMayUpload2)->test(SearchAlbum::class, ['parent_id' => $this->album1->id, 'lft' => $this->album1->_lft, 'rgt' => $this->album1->_rgt]) + ->assertOk() + ->assertCount('albumListSaved', 1) + ->assertSet('albumListSaved', [ + [ + 'id' => null, + 'title' => __('lychee.ROOT'), + 'original' => __('lychee.ROOT'), + 'short_title' => __('lychee.ROOT'), + 'thumb' => 'img/no_images.svg', + ], + ]); + } + + public function testSearchAlbumLoggedInAsOwner(): void + { + $shorten1 = substr($this->album1->title, 0, 3); + $shorten2 = substr($this->album2->title, 0, 3); + $shorten2b = substr($this->subAlbum2->title, 0, 3); + + $count = 2; + + // This is because names are randomly generated and we might get a colision + if ($shorten2 === $shorten1) { + $count += 2; + } elseif ($shorten2b === $shorten1) { + $count++; + } + + Livewire::actingAs($this->userMayUpload1)->test(SearchAlbum::class, ['parent_id' => null, 'lft' => null, 'rgt' => null]) + ->assertOk() + ->assertCount('albumListSaved', 4) + ->assertCount('albumList', 4) + ->set('search', $shorten1) + ->assertOk() + ->assertCount('albumList', $count); + + if ($shorten2b === $shorten2) { + $count = 2; + } else { + $count = 1; + } + + Livewire::actingAs($this->userMayUpload1)->test(SearchAlbum::class, ['parent_id' => $this->album1->id, 'lft' => $this->album1->_lft, 'rgt' => $this->album1->_rgt]) + ->assertOk() + ->assertCount('albumListSaved', 3) + ->assertCount('albumList', 3) + ->set('search', $shorten2b) + ->assertCount('albumList', $count); + } + + // public function testSearchAlbumLoggedNoRights(): void + // { + // Livewire::actingAs($this->userNoUpload)->test(SearchAlbum::class, ['params' => [Params::PARENT_ID => null, Params::ALBUM_ID => $this->album1->id]]) + // ->assertForbidden(); + + // Livewire::actingAs($this->userNoUpload)->test(SearchAlbum::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + // ->assertForbidden(); + + // Livewire::actingAs($this->userMayUpload2)->test(SearchAlbum::class, ['params' => [Params::PARENT_ID => null, Params::ALBUM_ID => $this->album1->id]]) + // ->assertForbidden(); + + // Livewire::actingAs($this->userMayUpload2)->test(SearchAlbum::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + // ->assertForbidden(); + // } + + // public function testSearchAlbumLoggedIn(): void + // { + // Livewire::actingAs($this->userMayUpload1)->test(SearchAlbum::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + // ->assertOk() + // ->assertViewIs('livewire.forms.album.SearchAlbum') + // ->call('close'); + + // Livewire::actingAs($this->userMayUpload1)->test(SearchAlbum::class, ['params' => [Params::PARENT_ID => $this->album1->id, Params::ALBUM_ID => $this->subAlbum1->id]]) + // ->assertOk() + // ->assertViewIs('livewire.forms.album.SearchAlbum') + // ->set('title', $this->album1->title) + // ->assertOk() + // ->call('submit') + // ->assertDispatched('reloadPage'); + // } +} diff --git a/tests/Livewire/Forms/Album/ShareWithTest.php b/tests/Livewire/Forms/Album/ShareWithTest.php new file mode 100644 index 0000000000..886e0f7afd --- /dev/null +++ b/tests/Livewire/Forms/Album/ShareWithTest.php @@ -0,0 +1,105 @@ + $this->album1])->assertForbidden(); + } + + public function testShareWithLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(ShareWith::class, ['album' => $this->album1]) + ->assertOk() + ->assertViewIs('livewire.forms.album.share-with') + ->set('search', 'a') + ->assertOk() + ->set('search', 'u') + ->call('select', $this->userMayUpload2->id, $this->userMayUpload2->username) + ->assertSet('userID', $this->userMayUpload2->id) + ->assertSet('username', $this->userMayUpload2->username) + ->call('clearUsername') + ->assertSet('userID', null) + ->assertSet('username', null) + ->call('select', $this->userMayUpload2->id, $this->userMayUpload2->username) + ->set('grants_full_photo_access', true) + ->set('grants_download', true) + ->set('grants_upload', true) + ->set('grants_edit', true) + ->set('grants_delete', true) + ->call('add') + ->assertOk(); + + $this->album1->fresh(); + $this->album1->base_class->load('access_permissions'); + + // we do have one permission + $this->assertEquals(1, $this->album1->access_permissions->count()); + /** @var AccessPermission $perm */ + $perm = $this->album1->access_permissions->first(); + + $this->assertEquals($this->userMayUpload2->id, $perm->user_id); + $this->assertTrue($perm->grants_full_photo_access); + $this->assertTrue($perm->grants_download); + $this->assertTrue($perm->grants_upload); + $this->assertTrue($perm->grants_edit); + $this->assertTrue($perm->grants_delete); + $this->assertNotNull($perm->album); + + Livewire::actingAs($this->userMayUpload2)->test(ShareWithLine::class, ['perm' => $perm]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload1)->test(ShareWithLine::class, ['perm' => $perm]) + ->assertOk() + ->set('grants_full_photo_access', false) + ->set('grants_download', false) + ->set('grants_upload', false) + ->set('grants_edit', false) + ->set('grants_delete', false) + ->assertDispatched('notify', self::notifySuccess()) + ->assertSet('grants_full_photo_access', false) + ->assertSet('grants_download', false) + ->assertSet('grants_upload', false) + ->assertSet('grants_edit', false) + ->assertSet('grants_delete', false); + + $perm = $perm->fresh(); + $this->assertFalse($perm->grants_full_photo_access); + $this->assertFalse($perm->grants_download); + $this->assertFalse($perm->grants_upload); + $this->assertFalse($perm->grants_edit); + $this->assertFalse($perm->grants_delete); + + Livewire::actingAs($this->userNoUpload)->test(Sharing::class) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Sharing::class) + ->assertOk() + ->call('delete', $perm->id) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload1)->test(ShareWith::class, ['album' => $this->album1]) + ->assertOk() + ->call('delete', $perm->id) + ->assertOk(); + } +} diff --git a/tests/Livewire/Forms/Album/TransferTest.php b/tests/Livewire/Forms/Album/TransferTest.php new file mode 100644 index 0000000000..4145d3c7ad --- /dev/null +++ b/tests/Livewire/Forms/Album/TransferTest.php @@ -0,0 +1,70 @@ + $this->album1]) + ->assertForbidden(); + } + + public function testTransferLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(Transfer::class, ['album' => $this->album1]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Transfer::class, ['album' => $this->album1]) + ->assertForbidden(); + } + + public function testTransferLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Transfer::class, ['album' => $this->album1]) + ->assertOk() + ->assertViewIs('livewire.forms.album.transfer') + ->set('username', $this->userMayUpload2->username) + ->assertOk() + ->call('transfer') + ->assertRedirect(route('livewire-gallery')); + + // user 2 has access + Livewire::actingAs($this->userMayUpload2)->test(Album::class, ['albumId' => $this->album1->id]) + ->assertViewIs('livewire.pages.gallery.album') + ->assertSee($this->album1->id) + ->assertOk() + ->assertSet('flags.is_accessible', true); + + // User 1 no longer have access. + Livewire::actingAs($this->userMayUpload1)->test(Album::class, ['albumId' => $this->album1->id]) + ->assertRedirect(route('livewire-gallery')); + } + + public function testTransferAsAdmin(): void + { + Livewire::actingAs($this->admin)->test(Transfer::class, ['album' => $this->album1]) + ->assertOk() + ->assertViewIs('livewire.forms.album.transfer') + ->set('username', $this->userMayUpload2->username) + ->assertOk() + ->call('transfer') + ->assertDispatched('notify', ['msg' => 'Transfer successful!', 'type' => NotificationType::SUCCESS->value]); + } +} diff --git a/tests/Livewire/Forms/Album/VisibilityTest.php b/tests/Livewire/Forms/Album/VisibilityTest.php new file mode 100644 index 0000000000..722dab0e33 --- /dev/null +++ b/tests/Livewire/Forms/Album/VisibilityTest.php @@ -0,0 +1,123 @@ + $this->album1])->assertForbidden(); + } + + public function testVisibilityLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Visibility::class, ['album' => $this->album1]) + ->assertOk() + ->assertViewIs('livewire.forms.album.visibility') + ->toggle('is_public') + ->assertDispatched('notify', self::notifySuccess()); + + $this->album1->fresh(); + $this->album1->base_class->load('access_permissions'); + $this->assertNotNull($this->album1->public_permissions()); + + Livewire::actingAs($this->userMayUpload1)->test(Visibility::class, ['album' => $this->album1]) + ->assertOk() + ->assertViewIs('livewire.forms.album.visibility') + ->set('grants_full_photo_access', true) + ->assertDispatched('notify', self::notifySuccess()) + ->set('is_link_required', true) + ->assertDispatched('notify', self::notifySuccess()) + ->set('grants_download', true) + ->assertDispatched('notify', self::notifySuccess()) + ->set('is_nsfw', true) + ->assertDispatched('notify', self::notifySuccess()) + ->set('is_password_required', true) + ->assertDispatched('notify', self::notifySuccess()) + ->set('password', 'password') + ->assertDispatched('notify', self::notifySuccess()); + + $this->album1 = $this->album1->fresh(); + $this->album1->base_class->load('access_permissions'); + + Livewire::actingAs($this->userMayUpload1)->test(Visibility::class, ['album' => $this->album1]) + ->assertOk() + ->assertSet('is_public', true) + ->assertSet('grants_full_photo_access', true) + ->assertSet('is_link_required', true) + ->assertSet('grants_download', true) + ->assertSet('is_nsfw', true) + ->assertSet('is_password_required', true) + ->toggle('is_public') + ->assertDispatched('notify', self::notifySuccess()) + ->assertSet('grants_full_photo_access', false) + ->assertSet('is_link_required', false) + ->assertSet('grants_download', false) + ->assertSet('is_nsfw', true) + ->assertSet('is_password_required', false); + } + + public function testUnlocking(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Visibility::class, ['album' => $this->album1]) + ->assertOk() + ->assertViewIs('livewire.forms.album.visibility') + ->toggle('is_public') + ->assertDispatched('notify', self::notifySuccess()) + ->assertSet('is_public', true) + ->set('grants_full_photo_access', true) + ->assertDispatched('notify', self::notifySuccess()) + ->set('is_link_required', true) + ->assertDispatched('notify', self::notifySuccess()) + ->set('grants_download', true) + ->assertDispatched('notify', self::notifySuccess()) + ->set('is_nsfw', true) + ->assertDispatched('notify', self::notifySuccess()) + ->set('is_password_required', true) + ->assertDispatched('notify', self::notifySuccess()) + ->set('password', 'password') + ->assertDispatched('notify', self::notifySuccess()); + + $this->album1 = $this->album1->fresh(); + $this->album1->base_class->load('access_permissions'); + + Livewire::actingAs($this->userMayUpload2)->test(UnlockAlbum::class, ['albumID' => $this->album1->id]) + ->set('password', 'wrongPassword') + ->call('submit') + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(UnlockAlbum::class, ['albumID' => $this->album1->id]) + ->set('password', '') + ->call('submit') + ->assertDispatched('notify'); + + Livewire::actingAs($this->userMayUpload2)->test(UnlockAlbum::class, ['albumID' => $this->album1->id]) + ->set('password', 'password') + ->call('submit') + ->assertOk() + ->assertRedirect(route('livewire-gallery-album', ['albumId' => $this->album1->id])); + } + + public function testUnlockingUnlockedAlbum(): void + { + Livewire::actingAs($this->userMayUpload2)->test(UnlockAlbum::class, ['albumID' => $this->album1->id]) + ->set('password', 'password') + ->call('submit') + ->assertForbidden(); + } +} diff --git a/tests/Livewire/Forms/ConfirmTest.php b/tests/Livewire/Forms/ConfirmTest.php new file mode 100644 index 0000000000..04fab9364b --- /dev/null +++ b/tests/Livewire/Forms/ConfirmTest.php @@ -0,0 +1,42 @@ +assertForbidden(); + } + + public function testConfirmLoggedIn(): void + { + Livewire::actingAs($this->admin)->test(SaveAll::class) + ->assertOk() + ->assertViewIs('livewire.forms.confirms.save-all') + ->call('confirm') + ->assertDispatched('saveAll') + ->assertDispatched('closeModal'); + + Livewire::actingAs($this->admin)->test(SaveAll::class) + ->assertOk() + ->assertViewIs('livewire.forms.confirms.save-all') + ->call('close') + ->assertNotDispatched('saveAll') + ->assertDispatched('closeModal'); + } +} diff --git a/tests/Livewire/Forms/FormsProfileTest.php b/tests/Livewire/Forms/FormsProfileTest.php new file mode 100644 index 0000000000..27145d392e --- /dev/null +++ b/tests/Livewire/Forms/FormsProfileTest.php @@ -0,0 +1,198 @@ +setUpRequiresEmptyWebAuthnCredentials(); + + $this->credential = $this->userMayUpload1->makeWebAuthnCredential([ + 'id' => '_Xlz-khgFhDdkvOWyy_YqC54ExkYyp1o6HAQiybqLST-9RGBndpgI06TQygIYI7ZL2dayCMYm6J1-bXyl72obA', + + 'user_id' => '27117450ff81461d80331fb79c655f39', + 'alias' => null, + + 'counter' => 0, + 'rp_id' => 'https://localhost', + 'origin' => 'https://localhost', + 'transports' => null, + 'aaguid' => '00000000-0000-0000-0000-000000000000', + + 'public_key' => "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEF25MWDQwaeFqZJ2Gy/7HEdZkWaW+\nQCbWjLiplbklmqIq6MSSRhLqJLoegR5PqG2JOqhSLcQDAmf/tzdAvO5MmQ==\n-----END PUBLIC KEY-----\n", + 'attestation_format' => 'none', + ]); + $this->credential->save(); + } + + public function tearDown(): void + { + $this->tearDownRequiresEmptyWebAuthnCredentials(); + parent::tearDown(); + } + + public function testSecondFactorLoggedOut(): void + { + Livewire::test(SecondFactor::class)->assertForbidden(); + } + + public function testSecondFactorLoggedIn(): void + { + $this->assertEquals(1, $this->userMayUpload1->webAuthnCredentials()->count()); + Livewire::actingAs($this->userMayUpload1)->test(SecondFactor::class) + ->assertViewIs('livewire.modules.profile.second-factor') + ->assertSeeLivewire(ManageSecondFactor::class) + ->dispatch('reload-component') // called when a WebAuthn is create + ->call('delete', '_Xlz-khgFhDdkvOWyy_YqC54ExkYyp1o6HAQiybqLST-9RGBndpgI06TQygIYI7ZL2dayCMYm6J1-bXyl72obA') + ->assertDontSeeLivewire(ManageSecondFactor::class); + + $this->assertEquals(0, $this->userMayUpload1->webAuthnCredentials()->count()); + } + + public function testSecondFactorLoggedInCrossInteraction(): void + { + $this->assertEquals(1, $this->userMayUpload1->webAuthnCredentials()->count()); + $this->assertEquals(0, $this->userNoUpload->webAuthnCredentials()->count()); + Livewire::actingAs($this->userNoUpload)->test(SecondFactor::class) + ->assertViewIs('livewire.modules.profile.second-factor') + ->assertDontSeeLivewire(ManageSecondFactor::class) + ->dispatch('reload-component') // called when a WebAuthn is create + ->call('delete', '_Xlz-khgFhDdkvOWyy_YqC54ExkYyp1o6HAQiybqLST-9RGBndpgI06TQygIYI7ZL2dayCMYm6J1-bXyl72obA') + ->assertDontSeeLivewire(ManageSecondFactor::class); + + $this->assertEquals(1, $this->userMayUpload1->webAuthnCredentials()->count()); + } + + public function testManageSecondFactorLogout(): void + { + Livewire::test(ManageSecondFactor::class)->assertForbidden(); + } + + public function testManageSecondFactorLoginCrossInteraction(): void + { + Livewire::actingAs($this->userNoUpload)->test(ManageSecondFactor::class, ['credential' => $this->credential]) + ->assertForbidden(); + } + + public function testManageSecondFactorLogin(): void + { + Livewire::actingAs($this->userMayUpload1)->test(ManageSecondFactor::class, ['credential' => $this->credential]) + ->assertViewIs('livewire.forms.profile.manage-second-factor') + ->assertSet('alias', '_Xlz-khgFhDdkvOWyy_YqC54ExkYyp') + ->set('alias', '123') + ->assertSet('alias', '123') + ->assertDispatched('notify'); + + // reload model + $this->credential->fresh(); + + Livewire::actingAs($this->userMayUpload1)->test(ManageSecondFactor::class, ['credential' => $this->credential]) + ->assertViewIs('livewire.forms.profile.manage-second-factor') + ->assertSet('alias', '_Xlz-khgFhDdkvOWyy_YqC54ExkYyp') + ->set('alias', '12345') + ->assertSet('alias', '12345') + ->assertDispatched('notify'); + + $this->assertEquals('12345', $this->credential->fresh()->alias); + } + + public function testGetApiTokenLogout(): void + { + Livewire::test(GetApiToken::class) + ->assertUnauthorized(); + } + + public function testSetEmailLogout(): void + { + Livewire::test(SetEmail::class) + ->assertForbidden(); + } + + public function testSetLoginLogout(): void + { + Livewire::test(SetLogin::class) + ->assertForbidden(); + } + + public function testGetApiTokenLogin(): void + { + Livewire::actingAs($this->userMayUpload1)->test(GetApiToken::class) + ->assertViewIs('livewire.forms.profile.get-api-token') + ->assertSet('token', __('lychee.DISABLED_TOKEN_STATUS_MSG')) + ->call('resetToken') + ->assertNotSet('token', __('lychee.DISABLED_TOKEN_STATUS_MSG')) + ->call('close') + ->assertDispatched('closeModal'); + + Livewire::actingAs($this->userMayUpload1)->test(GetApiToken::class) + ->assertViewIs('livewire.forms.profile.get-api-token') + ->assertSet('token', __('lychee.TOKEN_NOT_AVAILABLE')) + ->call('disableToken') + ->assertSet('token', __('lychee.DISABLED_TOKEN_STATUS_MSG')); + + $this->assertNull($this->userMayUpload1->fresh()->token); + } + + public function testSetEmailLogin(): void + { + Livewire::actingAs($this->userMayUpload1)->test(SetEmail::class) + ->assertViewIs('livewire.forms.settings.input') + ->set('value', 'user@lychee.org') + ->call('save') + ->assertOk(); + + $this->assertEquals('user@lychee.org', $this->userMayUpload1->fresh()->email); + } + + public function testSetLoginLogin(): void + { + Livewire::actingAs($this->userMayUpload1)->test(SetLogin::class) + ->assertViewIs('livewire.forms.profile.set-login') + ->call('openApiTokenModal') + ->assertDispatched('openModal', 'forms.profile.get-api-token') + ->set('oldPassword', '') + ->set('password', '') + ->set('password_confirmation', '') + ->set('username', '') + ->call('submit') + ->assertHasErrors('oldPassword') + ->set('oldPassword', 'password') + ->call('submit') + ->assertHasErrors('password') + ->set('username', 'userNoUpload') + ->set('password', 'password') + ->call('submit') + ->assertHasErrors('password') + ->set('password_confirmation', 'password') + ->call('submit') + ->assertHasNoErrors('password'); + + $this->assertEquals('userNoUpload', $this->userMayUpload1->fresh()->username()); + } +} diff --git a/tests/Livewire/Forms/ImportFromServerTest.php b/tests/Livewire/Forms/ImportFromServerTest.php new file mode 100644 index 0000000000..3a994e5ce2 --- /dev/null +++ b/tests/Livewire/Forms/ImportFromServerTest.php @@ -0,0 +1,90 @@ +assertForbidden(); + } + + public function testLoggedInNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(ImportFromServer::class) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload1)->test(ImportFromServer::class) + ->assertForbidden(); + } + + public function testLoggedInAndError(): void + { + Livewire::actingAs($this->admin)->test(ImportFromServer::class) + ->assertViewIs('livewire.forms.add.import-from-server') + ->assertOk() + ->set('form.path', '') + ->call('submit') + ->assertOk() + ->assertHasErrors('form.paths.0'); + } + + // public function testLoggedInWithDeleteImported() : void { + // copy(base_path(TestConstants::SAMPLE_FILE_NIGHT_IMAGE), static::importPath('night.jpg')); + + // Livewire::actingAs($this->admin)->test(ImportFromServer::class) + // ->assertViewIs('livewire.forms.add.import-from-server') + // ->assertOk() + // ->set('form.path', static::importPath()) + // ->assertSet('form.delete_imported', false) + // ->call('submit') + // ->assertOk() + // ->assertHasNoErrors('form.paths.0'); + + // $this->assertEquals(true, file_exists(static::importPath('night.jpg'))); + // } + + // public function testLoggedInWithoutDeleteImported() : void { + // copy(base_path(TestConstants::SAMPLE_FILE_NIGHT_IMAGE), static::importPath('night.jpg')); + + // Livewire::actingAs($this->admin)->test(ImportFromServer::class) + // ->assertViewIs('livewire.forms.add.import-from-server') + // ->assertOk() + // ->set('form.path', static::importPath()) + // ->set('form.delete_imported', true) + // ->assertSet('form.delete_imported', true) + // ->call('submit') + // ->assertOk() + // ->assertHasNoErrors('form.paths.0'); + + // $this->assertEquals(false, file_exists(static::importPath('night.jpg'))); + // } + + public function testLoggedInClose(): void + { + Livewire::actingAs($this->admin)->test(ImportFromServer::class) + ->assertViewIs('livewire.forms.add.import-from-server') + ->assertOk() + ->call('close') + ->assertDispatched('closeModal'); + } +} \ No newline at end of file diff --git a/tests/Livewire/Forms/ImportFromUrlTest.php b/tests/Livewire/Forms/ImportFromUrlTest.php new file mode 100644 index 0000000000..7912c10501 --- /dev/null +++ b/tests/Livewire/Forms/ImportFromUrlTest.php @@ -0,0 +1,57 @@ +assertForbidden(); + } + + public function testLoggedInNoUpload(): void + { + Livewire::actingAs($this->userNoUpload)->test(ImportFromUrl::class) + ->assertForbidden(); + } + + public function testLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(ImportFromUrl::class) + ->assertViewIs('livewire.forms.add.import-from-url') + ->assertOk() + ->set('form.url', TestConstants::SAMPLE_DOWNLOAD_JPG) + ->call('submit') + ->assertOk() + ->assertDispatched('reloadPage') + ->assertDispatched('closeModal'); + } + + public function testLoggedInClose(): void + { + Livewire::actingAs($this->userMayUpload1)->test(ImportFromUrl::class) + ->assertViewIs('livewire.forms.add.import-from-url') + ->assertOk() + ->call('close') + ->assertDispatched('closeModal'); + } +} \ No newline at end of file diff --git a/tests/Livewire/Forms/Photo/CopyToTest.php b/tests/Livewire/Forms/Photo/CopyToTest.php new file mode 100644 index 0000000000..e234235e7f --- /dev/null +++ b/tests/Livewire/Forms/Photo/CopyToTest.php @@ -0,0 +1,68 @@ + [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::test(CopyTo::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + } + + public function testMoveLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(CopyTo::class, ['params' => [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userNoUpload)->test(CopyTo::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(CopyTo::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + } + + public function testMoveLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(CopyTo::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.copyTo') + ->call('close'); + + Livewire::actingAs($this->userMayUpload1)->test(CopyTo::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.copyTo') + ->call('setAlbum', $this->album2->id, $this->album2->title) + ->assertRedirect(route('livewire-gallery-album', ['albumId' => $this->album1->id])); + + $this->assertCount(2, $this->album1->fresh()->load('photos')->photos); + $this->assertCount(3, $this->album2->fresh()->load('photos')->photos); // 2 added + 1 old + + Livewire::actingAs($this->userMayUpload1)->test(CopyTo::class, ['params' => [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photoUnsorted->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.copyTo') + ->call('setAlbum', $this->album2->id, $this->album2->title) + ->assertRedirect(route('livewire-gallery-album', ['albumId' => SmartAlbumType::UNSORTED->value])); + + $this->assertCount(4, $this->album2->fresh()->load('photos')->photos); // 1 added + 3 old (from above) + } +} diff --git a/tests/Livewire/Forms/Photo/DeleteTest.php b/tests/Livewire/Forms/Photo/DeleteTest.php new file mode 100644 index 0000000000..9dad74dc5f --- /dev/null +++ b/tests/Livewire/Forms/Photo/DeleteTest.php @@ -0,0 +1,58 @@ + [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::test(Delete::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + } + + public function testDeleteLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(Delete::class, ['params' => [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userNoUpload)->test(Delete::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Delete::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + } + + public function testDeleteLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Delete::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.delete') + ->call('close'); + + Livewire::actingAs($this->userMayUpload1)->test(Delete::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.delete') + ->call('submit') + ->assertRedirect(route('livewire-gallery-album', ['albumId' => $this->album1->id])); + + $this->assertCount(0, $this->album1->fresh()->load('photos')->photos); + } +} diff --git a/tests/Livewire/Forms/Photo/DownloadTest.php b/tests/Livewire/Forms/Photo/DownloadTest.php new file mode 100644 index 0000000000..91dcaedea1 --- /dev/null +++ b/tests/Livewire/Forms/Photo/DownloadTest.php @@ -0,0 +1,53 @@ + [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::test(Download::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->subPhoto1->id]]]) + ->assertForbidden(); + } + + public function testDeleteLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(Download::class, ['params' => [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userNoUpload)->test(Download::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Download::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + } + + public function testDeleteLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Download::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.download') + ->call('close'); + + Livewire::actingAs($this->userMayUpload1)->test(Download::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->assertRedirect(); + } +} diff --git a/tests/Livewire/Forms/Photo/MoveTest.php b/tests/Livewire/Forms/Photo/MoveTest.php new file mode 100644 index 0000000000..eee6a681c8 --- /dev/null +++ b/tests/Livewire/Forms/Photo/MoveTest.php @@ -0,0 +1,68 @@ + [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::test(Move::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + } + + public function testMoveLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(Move::class, ['params' => [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userNoUpload)->test(Move::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Move::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + } + + public function testMoveLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Move::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.move') + ->call('close'); + + Livewire::actingAs($this->userMayUpload1)->test(Move::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.move') + ->call('setAlbum', $this->album2->id, $this->album2->title) + ->assertRedirect(route('livewire-gallery-album', ['albumId' => $this->album1->id])); + + $this->assertCount(0, $this->album1->fresh()->load('photos')->photos); + $this->assertCount(3, $this->album2->fresh()->load('photos')->photos); // 2 added + 1 old + + Livewire::actingAs($this->userMayUpload1)->test(Move::class, ['params' => [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photoUnsorted->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.move') + ->call('setAlbum', $this->album2->id, $this->album2->title) + ->assertRedirect(route('livewire-gallery-album', ['albumId' => SmartAlbumType::UNSORTED->value])); + + $this->assertCount(4, $this->album2->fresh()->load('photos')->photos); // 1 added + 3 old (from above) + } +} diff --git a/tests/Livewire/Forms/Photo/RenameTest.php b/tests/Livewire/Forms/Photo/RenameTest.php new file mode 100644 index 0000000000..716e89d7b1 --- /dev/null +++ b/tests/Livewire/Forms/Photo/RenameTest.php @@ -0,0 +1,61 @@ + [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::test(Rename::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + } + + public function testRenameLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(Rename::class, ['params' => [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userNoUpload)->test(Rename::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Rename::class, ['params' => [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Rename::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + } + + public function testRenameLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Rename::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.rename') + ->call('close'); + + Livewire::actingAs($this->userMayUpload1)->test(Rename::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.rename') + ->set('title', $this->album1->title) + ->assertOk() + ->call('submit') + ->assertDispatched('reloadPage'); + } +} diff --git a/tests/Livewire/Forms/Photo/TagTest.php b/tests/Livewire/Forms/Photo/TagTest.php new file mode 100644 index 0000000000..6f6fe19f2d --- /dev/null +++ b/tests/Livewire/Forms/Photo/TagTest.php @@ -0,0 +1,70 @@ + [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::test(Tag::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + } + + public function testTagLoggedNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(Tag::class, ['params' => [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userNoUpload)->test(Tag::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Tag::class, ['params' => [Params::ALBUM_ID => null, Params::PHOTO_ID => $this->photo1->id]]) + ->assertForbidden(); + + Livewire::actingAs($this->userMayUpload2)->test(Tag::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertForbidden(); + } + + public function testTagLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Tag::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.tag') + ->call('close'); + + Livewire::actingAs($this->userMayUpload1)->test(Tag::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.tag') + ->set('tag', $this->album1->title) + ->assertOk() + ->call('submit') + ->assertDispatched('reloadPage'); + + Livewire::actingAs($this->userMayUpload1)->test(Tag::class, ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->subPhoto1->id]]) + ->assertOk() + ->assertViewIs('livewire.forms.photo.tag') + ->set('tag', $this->album2->title) + ->set('shall_override', true) + ->assertOk() + ->call('submit') + ->assertDispatched('reloadPage'); + } +} diff --git a/tests/Livewire/Forms/SettingsTest.php b/tests/Livewire/Forms/SettingsTest.php new file mode 100644 index 0000000000..45d64d3fc9 --- /dev/null +++ b/tests/Livewire/Forms/SettingsTest.php @@ -0,0 +1,89 @@ +admin)->test(SetAlbumDecorationOrientationSetting::class) + ->assertOk() + ->assertViewIs('livewire.forms.settings.drop-down') + ->set('value', 'column') + ->assertDispatched('notify', self::notifySuccess()); + + Livewire::actingAs($this->admin)->test(SetAlbumDecorationOrientationSetting::class) + ->assertOk() + ->assertViewIs('livewire.forms.settings.drop-down') + ->set('value', 'something') + ->assertNotDispatched('notify', self::notifySuccess()); + } + + public function testDoubleDropdown(): void + { + Livewire::actingAs($this->admin)->test(SetAlbumSortingSetting::class) + ->assertOk() + ->assertViewIs('livewire.forms.settings.double-drop-down') + ->set('value1', 'title') + ->assertDispatched('notify', self::notifySuccess()) + ->set('value2', 'DESC') + ->assertDispatched('notify', self::notifySuccess()); + + Livewire::actingAs($this->admin)->test(SetAlbumSortingSetting::class) + ->assertOk() + ->assertViewIs('livewire.forms.settings.double-drop-down') + ->set('value1', 'something') + ->assertNotDispatched('notify', self::notifySuccess()) + ->set('value1', 'title') + ->set('value2', 'OTHER') + ->assertNotDispatched('notify', self::notifySuccess()); + } + + public function testBoolean(): void + { + Configs::set('search_public', false); + + Livewire::actingAs($this->admin)->test(BooleanSetting::class, + ['description' => 'PUBLIC_SEARCH_TEXT', 'name' => 'search_public']) + ->assertOk() + ->assertViewIs('livewire.forms.settings.toggle') + ->assertSet('flag', false) + ->set('flag', true) + ->assertDispatched('notify', self::notifySuccess()); + } + + public function testString(): void + { + $dropbox = Configs::getValueAsString('dropbox_key'); + Livewire::actingAs($this->admin)->test(StringSetting::class, [ + 'description' => 'DROPBOX_TEXT', + 'placeholder' => 'SETTINGS_DROPBOX_KEY', + 'action' => 'DROPBOX_TITLE', + 'name' => 'dropbox_key', + ]) + ->assertOk() + ->assertViewIs('livewire.forms.settings.input') + ->assertSet('value', $dropbox) + ->set('value', 'api') + ->call('save') + ->assertDispatched('notify', self::notifySuccess()); + } +} diff --git a/tests/Livewire/Forms/UploadTest.php b/tests/Livewire/Forms/UploadTest.php new file mode 100644 index 0000000000..1c6f5d1c09 --- /dev/null +++ b/tests/Livewire/Forms/UploadTest.php @@ -0,0 +1,90 @@ +upload_chunk_size = Configs::getValueAsInt('upload_chunk_size'); + $this->upload_processing_limit = Configs::getValueAsInt('upload_processing_limit'); + Configs::set('upload_processing_limit', 57); + Configs::set('upload_chunk_size', 12345); + } + + public function tearDown(): void + { + Configs::set('upload_processing_limit', $this->upload_processing_limit); + Configs::set('upload_chunk_size', $this->upload_chunk_size); + parent::tearDown(); + } + + public function testConfirmLoggedOut(): void + { + Livewire::test(Upload::class)->assertForbidden(); + } + + public function testLoggedInNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test(Upload::class) + ->assertForbidden(); + } + + public function testConfirmLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Upload::class) + ->assertOk() + ->assertViewIs('livewire.forms.add.upload') + ->assertSet('chunkSize', 12345) + ->assertSet('parallelism', 57) + ->call('close') + ->assertDispatched('closeModal'); + + // Reset + Configs::set('upload_chunk_size', 0); + + $tmpFilename = tempnam(sys_get_temp_dir(), 'lychee'); + copy(base_path(TestConstants::SAMPLE_FILE_NIGHT_IMAGE), $tmpFilename); + $uploadedFile = UploadedFile::fake()->createWithContent('night.jpg', file_get_contents($tmpFilename)); + $name = TestConstants::SAMPLE_FILE_NIGHT_IMAGE; + $size = filesize($tmpFilename); + + Livewire::actingAs($this->userMayUpload1)->test(Upload::class) + ->assertOk() + ->assertViewIs('livewire.forms.add.upload') + ->set([ + 'uploads.0.fileName' => $name, + 'uploads.0.fileSize' => $size, + 'uploads.0.lastModified' => 0, + 'uploads.0.stage' => 'uploading', + 'uploads.0.progress' => 0, + ]) + ->set('uploads.0.fileChunk', $uploadedFile) + ->assertOk(); + } +} diff --git a/tests/Livewire/Menus/AlbumAddTest.php b/tests/Livewire/Menus/AlbumAddTest.php new file mode 100644 index 0000000000..1c6f75f62c --- /dev/null +++ b/tests/Livewire/Menus/AlbumAddTest.php @@ -0,0 +1,67 @@ + ['parentID' => null]]) + ->assertViewIs('livewire.context-menus.album-add') + ->assertStatus(200); + } + + public function testOpenAlbumCreateModalModal(): void + { + Livewire::test(AlbumAdd::class, ['params' => ['parentID' => null]]) + ->call('openAlbumCreateModal') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.album.create'); + } + + public function testOpenTagAlbumCreateModal(): void + { + Livewire::test(AlbumAdd::class, ['params' => ['parentID' => null]]) + ->call('openTagAlbumCreateModal') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.album.create-tag'); + } + + public function testOpenImportFromServerModal(): void + { + Livewire::test(AlbumAdd::class, ['params' => ['parentID' => null]]) + ->call('openImportFromServerModal') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.add.import-from-server'); + } + + public function testOpenImportFromUrlModal(): void + { + Livewire::test(AlbumAdd::class, ['params' => ['parentID' => null]]) + ->call('openImportFromUrlModal') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.add.import-from-url'); + } + + public function testOpenUploadModal(): void + { + Livewire::test(AlbumAdd::class, ['params' => ['parentID' => null]]) + ->call('openUploadModal') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.add.upload'); + } +} diff --git a/tests/Livewire/Menus/AlbumDropdownTest.php b/tests/Livewire/Menus/AlbumDropdownTest.php new file mode 100644 index 0000000000..72f6d30416 --- /dev/null +++ b/tests/Livewire/Menus/AlbumDropdownTest.php @@ -0,0 +1,85 @@ + ['parentID' => null, 'albumID' => $this->album1->id]] + ) + ->assertViewIs('livewire.context-menus.album-dropdown') + ->assertStatus(200); + } + + public function testRename(): void + { + Livewire::test( + AlbumDropdown::class, + ['params' => ['parentID' => null, 'albumID' => $this->album1->id]] + ) + ->call('rename') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.album.rename'); + } + + public function testMerge(): void + { + Livewire::test( + AlbumDropdown::class, + ['params' => ['parentID' => null, 'albumID' => $this->album1->id]] + ) + ->call('merge') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.album.merge'); + } + + public function testDelete(): void + { + Livewire::test( + AlbumDropdown::class, + ['params' => ['parentID' => null, 'albumID' => $this->album1->id]] + ) + ->call('delete') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.album.delete'); + } + + public function testMove(): void + { + Livewire::test( + AlbumDropdown::class, + ['params' => ['parentID' => null, 'albumID' => $this->album1->id]] + ) + ->call('move') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.album.move'); + } + + public function testDownload(): void + { + Livewire::test( + AlbumDropdown::class, + ['params' => ['parentID' => null, 'albumID' => $this->album1->id]] + ) + ->call('download') + ->assertDispatched('closeContextMenu') + ->assertRedirect(route('download', ['albumIDs' => $this->album1->id])); + } +} diff --git a/tests/Livewire/Menus/AlbumsDropdownTest.php b/tests/Livewire/Menus/AlbumsDropdownTest.php new file mode 100644 index 0000000000..9def556715 --- /dev/null +++ b/tests/Livewire/Menus/AlbumsDropdownTest.php @@ -0,0 +1,86 @@ + [Params::PARENT_ID => null, Params::ALBUM_IDS => [$this->album1->id, $this->album2->id]]] + ) + ->assertViewIs('livewire.context-menus.albums-dropdown') + ->assertStatus(200); + } + + public function testRename(): void + { + Livewire::test( + AlbumsDropdown::class, + ['params' => [Params::PARENT_ID => null, Params::ALBUM_IDS => [$this->album1->id, $this->album2->id]]] + ) + ->call('renameAll') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.album.rename'); + } + + public function testMerge(): void + { + Livewire::test( + AlbumsDropdown::class, + ['params' => [Params::PARENT_ID => null, Params::ALBUM_IDS => [$this->album1->id, $this->album2->id]]] + ) + ->call('mergeAll') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.album.merge'); + } + + public function testDelete(): void + { + Livewire::test( + AlbumsDropdown::class, + ['params' => [Params::PARENT_ID => null, Params::ALBUM_IDS => [$this->album1->id, $this->album2->id]]] + ) + ->call('deleteAll') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.album.delete'); + } + + public function testMove(): void + { + Livewire::test( + AlbumsDropdown::class, + ['params' => [Params::PARENT_ID => null, Params::ALBUM_IDS => [$this->album1->id, $this->album2->id]]] + ) + ->call('moveAll') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.album.move'); + } + + public function testDownload(): void + { + Livewire::test( + AlbumsDropdown::class, + ['params' => [Params::PARENT_ID => null, Params::ALBUM_IDS => [$this->album1->id, $this->album2->id]]] + ) + ->call('downloadAll') + ->assertDispatched('closeContextMenu') + ->assertRedirect(route('download') . '?albumIDs=' . $this->album1->id . ',' . $this->album2->id); + } +} diff --git a/tests/Livewire/Menus/ContextMenuTest.php b/tests/Livewire/Menus/ContextMenuTest.php new file mode 100644 index 0000000000..370eca2466 --- /dev/null +++ b/tests/Livewire/Menus/ContextMenuTest.php @@ -0,0 +1,43 @@ +assertSet('isOpen', false) + ->dispatch('openContextMenu', 'menus.AlbumAdd', [Params::PARENT_ID => null], 'right: 30px; top: 30px; transform-origin: top right;') + ->assertSet('isOpen', true) + ->assertSet('type', 'menus.AlbumAdd') + ->dispatch('closeContextMenu') + ->assertSet('isOpen', false); + } + + public function testMenu2(): void + { + Livewire::test(ContextMenu::class) + ->assertSet('isOpen', false) + ->call('openContextMenu', 'menus.AlbumAdd', [Params::PARENT_ID => null], 'right: 30px; top: 30px; transform-origin: top right;') + ->assertSet('isOpen', true) + ->assertSet('type', 'menus.AlbumAdd') + ->dispatch('closeContextMenu') + ->assertSet('isOpen', false); + } +} diff --git a/tests/Livewire/Menus/LeftMenuTest.php b/tests/Livewire/Menus/LeftMenuTest.php new file mode 100644 index 0000000000..88d0597200 --- /dev/null +++ b/tests/Livewire/Menus/LeftMenuTest.php @@ -0,0 +1,37 @@ +admin)->test(LeftMenu::class) + ->assertViewIs('livewire.components.left-menu') + ->assertSet('isOpen', false) + ->dispatch('openLeftMenu') + ->assertSet('isOpen', true) + ->dispatch('closeLeftMenu') + ->assertSet('isOpen', false) + ->dispatch('toggleLeftMenu') + ->assertSet('isOpen', true) + ->call('openAboutModal') + ->assertDispatched('openModal', 'modals.about') + ->call('logout') + ->assertRedirect(route('livewire-gallery')); + } +} diff --git a/tests/Livewire/Menus/PhotoDropdownTest.php b/tests/Livewire/Menus/PhotoDropdownTest.php new file mode 100644 index 0000000000..76e92041cb --- /dev/null +++ b/tests/Livewire/Menus/PhotoDropdownTest.php @@ -0,0 +1,136 @@ + [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->assertViewIs('livewire.context-menus.photo-dropdown') + ->assertStatus(200); + } + + public function testRename(): void + { + Livewire::test(PhotoDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->call('rename') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.photo.rename'); + } + + public function testStarGuest(): void + { + Livewire::test(PhotoDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->call('star') + ->assertStatus(403); + } + + public function testStar(): void + { + Livewire::actingAs($this->admin)->test(PhotoDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->call('star') + ->assertDispatched('closeContextMenu') + ->assertDispatched('reloadPage'); + } + + public function testUnstarGuest(): void + { + Livewire::test(PhotoDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->call('unstar') + ->assertStatus(403); + } + + public function testUnstar(): void + { + Livewire::actingAs($this->admin)->test(PhotoDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->call('unstar') + ->assertDispatched('closeContextMenu') + ->assertDispatched('reloadPage'); + } + + public function testSetAsCoverGuest(): void + { + Livewire::test(PhotoDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->call('setAsCover') + ->assertStatus(403); + } + + public function testSetAsCover(): void + { + Livewire::actingAs($this->admin)->test(PhotoDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->call('setAsCover') + ->assertDispatched('closeContextMenu') + ->assertDispatched('reloadPage'); + } + + public function testTag(): void + { + Livewire::test(PhotoDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->call('tag') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.photo.tag'); + } + + public function testDelete(): void + { + Livewire::test(PhotoDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->call('delete') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.photo.delete'); + } + + public function testMove(): void + { + Livewire::test(PhotoDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->call('move') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.photo.move'); + } + + public function testCopyTo(): void + { + Livewire::test(PhotoDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->call('copyTo') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.photo.copy-to'); + } + + public function testDownload(): void + { + Livewire::test(PhotoDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_ID => $this->photo1->id]]) + ->call('download') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.photo.download'); + // ->assertRedirect(route('photo_download', ['kind' => DownloadVariantType::ORIGINAL->value, 'photoIDs' => $this->photo->id])); + } +} diff --git a/tests/Livewire/Menus/PhotosDropdownTest.php b/tests/Livewire/Menus/PhotosDropdownTest.php new file mode 100644 index 0000000000..913bccfe66 --- /dev/null +++ b/tests/Livewire/Menus/PhotosDropdownTest.php @@ -0,0 +1,119 @@ + [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->assertViewIs('livewire.context-menus.photos-dropdown') + ->assertStatus(200); + } + + public function testRename(): void + { + Livewire::test(PhotosDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->call('renameAll') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.photo.rename'); + } + + public function testStarGuest(): void + { + Livewire::test(PhotosDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->call('starAll') + ->assertStatus(403); + } + + public function testStar(): void + { + Livewire::actingAs($this->admin)->test(PhotosDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->call('starAll') + ->assertDispatched('closeContextMenu') + ->assertDispatched('reloadPage'); + } + + public function testUnstarGuest(): void + { + Livewire::test(PhotosDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->call('unstarAll') + ->assertStatus(403); + } + + public function testUnstar(): void + { + Livewire::actingAs($this->admin)->test(PhotosDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->call('unstarAll') + ->assertDispatched('closeContextMenu') + ->assertDispatched('reloadPage'); + } + + public function testTag(): void + { + Livewire::test(PhotosDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->call('tagAll') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.photo.tag'); + } + + public function testDelete(): void + { + Livewire::test(PhotosDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->call('deleteAll') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.photo.delete'); + } + + public function testMove(): void + { + Livewire::test(PhotosDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->call('moveAll') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.photo.move'); + } + + public function testCopyTo(): void + { + Livewire::test(PhotosDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->call('copyAllTo') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.photo.copy-to'); + } + + public function testDownload(): void + { + Livewire::test(PhotosDropdown::class, + ['params' => [Params::ALBUM_ID => $this->album1->id, Params::PHOTO_IDS => [$this->photo1->id, $this->photo1b->id]]]) + ->call('downloadAll') + ->assertDispatched('closeContextMenu') + ->assertDispatched('openModal', 'forms.photo.download'); + // ->assertRedirect(route('photo_download', ['kind' => DownloadVariantType::ORIGINAL->value, Params::PHOTO_IDS => $this->photo->id])); + } +} diff --git a/tests/Livewire/Modals/AboutTest.php b/tests/Livewire/Modals/AboutTest.php new file mode 100644 index 0000000000..ce361b4844 --- /dev/null +++ b/tests/Livewire/Modals/AboutTest.php @@ -0,0 +1,30 @@ +assertViewIs('livewire.modals.about') + ->assertSet('is_new_release_available', false) + ->assertSet('is_git_update_available', false) + ->assertSet('version', resolve(InstalledVersion::class)->getVersion()->toString()); + } +} diff --git a/tests/Livewire/Modals/LoginTest.php b/tests/Livewire/Modals/LoginTest.php new file mode 100644 index 0000000000..63e992b416 --- /dev/null +++ b/tests/Livewire/Modals/LoginTest.php @@ -0,0 +1,39 @@ +assertViewIs('livewire.modals.login') + ->call('submit') + ->assertHasErrors('password', ['required']) + ->assertHasErrors('username', ['required']) + ->set('username', 'admin') + ->call('submit') + ->assertHasErrors('password', ['required']) + ->set('password', '123456') + ->call('submit') + ->assertHasErrors('wrongLogin') + ->set('password', 'password') + ->call('submit') + ->assertDispatched('login-close') + ->assertDispatched('reloadPage'); + } +} diff --git a/tests/Livewire/Modals/ModalTest.php b/tests/Livewire/Modals/ModalTest.php new file mode 100644 index 0000000000..a456607722 --- /dev/null +++ b/tests/Livewire/Modals/ModalTest.php @@ -0,0 +1,46 @@ +assertSet('isOpen', false) + ->dispatch('openModal', 'modals.about', __('lychee.CLOSE')) + ->assertSet('isOpen', true) + ->assertSet('type', 'modals.about') + ->assertSet('close_text', __('lychee.CLOSE')) + ->assertViewIs('livewire.components.modal') + ->dispatch('closeModal') + ->assertSet('isOpen', false); + } + + public function testOpenClose2(): void + { + Livewire::test(Modal::class) + ->assertSet('isOpen', false) + ->call('openModal', 'modals.about', __('lychee.CLOSE')) + ->assertSet('isOpen', true) + ->assertSet('type', 'modals.about') + ->assertSet('close_text', __('lychee.CLOSE')) + ->assertViewIs('livewire.components.modal') + ->dispatch('closeModal') + ->assertSet('isOpen', false); + } +} diff --git a/tests/Livewire/Modules/ErrorsTest.php b/tests/Livewire/Modules/ErrorsTest.php new file mode 100644 index 0000000000..c98bad6130 --- /dev/null +++ b/tests/Livewire/Modules/ErrorsTest.php @@ -0,0 +1,47 @@ +component) + ->assertViewIs('livewire.modules.diagnostics.pre-colored') + ->assertOk(); + } + + public function testLoggedIn(): void + { + Livewire::actingAs($this->admin)->test($this->component, ['lazy' => false]) + ->assertViewIs('livewire.modules.diagnostics.pre-colored') + ->assertOk() + ->call('getDataProperty'); + } +} diff --git a/tests/Livewire/Modules/SpaceTest.php b/tests/Livewire/Modules/SpaceTest.php new file mode 100644 index 0000000000..4f278e2d35 --- /dev/null +++ b/tests/Livewire/Modules/SpaceTest.php @@ -0,0 +1,51 @@ +component) + ->assertViewIs('livewire.modules.diagnostics.with-action-call') + ->assertSee('Error: You must have administrator rights to see this.') + ->assertOk(); + } + + public function testLoggedIn(): void + { + Livewire::actingAs($this->admin)->test($this->component) + ->assertViewIs('livewire.modules.diagnostics.with-action-call') + ->assertDontSee('Error: You must have administrator rights to see this.') + ->assertOk() + ->call('do') + ->assertOk() + ->assertDontSee('Error: You must have administrator rights to see this.'); + } +} diff --git a/tests/Livewire/Modules/UserLineTest.php b/tests/Livewire/Modules/UserLineTest.php new file mode 100644 index 0000000000..409d1897d1 --- /dev/null +++ b/tests/Livewire/Modules/UserLineTest.php @@ -0,0 +1,69 @@ +create(); + Livewire::test($this->component, ['user' => $user]) + ->assertForbidden(); + } + + public function testLoggedIn(): void + { + /** @var User $user */ + $user = User::factory()->create(); + + Livewire::actingAs($this->admin)->test($this->component, ['user' => $user]) + ->assertViewIs('livewire.modules.users.user-line') + ->assertSet('username', $user->username) + ->assertSet('password', '') + ->assertSet('may_upload', false) + ->assertSet('may_edit_own_settings', true) + ->assertSet('id', $user->id); + } + + public function testEdit(): void + { + $user = User::factory()->create(); + + Livewire::actingAs($this->admin)->test($this->component, ['user' => $user]) + ->assertViewIs('livewire.modules.users.user-line') + ->set('username', 'user1') + ->set('may_upload', true) + ->set('may_edit_own_settings', false) + ->call('save') + ->assertSet('username', 'user1') + ->assertSet('may_upload', true) + ->assertSet('may_edit_own_settings', false); + + Livewire::actingAs($this->admin)->test($this->component, ['user' => $user]) + ->set('username', '') + ->call('save') + ->assertDispatched('notify'); // notify only on failure. + + Livewire::actingAs($this->admin)->test($this->component, ['user' => $user]) + ->set('username', 'admin') // cannot use an existing name. + ->call('save') + ->assertStatus(409); + } +} diff --git a/tests/Livewire/Pages/AlbumTest.php b/tests/Livewire/Pages/AlbumTest.php new file mode 100644 index 0000000000..fe03ea201f --- /dev/null +++ b/tests/Livewire/Pages/AlbumTest.php @@ -0,0 +1,134 @@ +get(route('livewire-gallery-album', ['albumId' => $this->album1->id])); + $this->assertOk($response); + + $response = $this->get(route('livewire-gallery-album', ['albumId' => '1234567890'])); + $this->assertNotFound($response); + } + + public function testPageLogout(): void + { + Livewire::test(Album::class, ['albumId' => $this->album1->id]) + ->assertViewIs('livewire.pages.gallery.album') + ->assertSee($this->album1->id) + ->assertOk() + ->assertSet('flags.is_accessible', false) + ->dispatch('reloadPage'); + } + + public function testPageUserNoAccess(): void + { + Livewire::actingAs($this->userMayUpload2)->test(Album::class, ['albumId' => $this->album1->id]) + ->assertRedirect(route('livewire-gallery')); + + Livewire::actingAs($this->userNoUpload)->test(Album::class, ['albumId' => $this->album1->id]) + ->assertRedirect(route('livewire-gallery')); + } + + public function testPageLoginAndBack(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Album::class, ['albumId' => $this->album1->id]) + ->assertViewIs('livewire.pages.gallery.album') + ->assertSee($this->album1->id) + ->assertOk() + ->assertSet('flags.is_accessible', true) + ->call('silentUpdate') + ->assertOk() + ->assertSet('back', route('livewire-gallery')); + } + + public function testPageLoginAndBackFromSubAlbum(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Album::class, ['albumId' => $this->subAlbum1->id]) + ->assertViewIs('livewire.pages.gallery.album') + ->assertSee($this->subAlbum1->id) + ->assertOk() + ->assertSet('flags.is_accessible', true) + ->call('silentUpdate') + ->assertOk() + ->assertSet('back', route('livewire-gallery-album', ['albumId' => $this->album1->id])); + } + + public function testMenus(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Album::class, ['albumId' => $this->album1->id]) + ->assertViewIs('livewire.pages.gallery.album') + ->assertSee($this->album1->id) + ->assertSee($this->subAlbum1->id) + ->assertSee($this->photo1->id) + ->assertSee($this->subPhoto1->size_variants->getThumb()->url) + ->assertOk() + ->call('openContextMenu') + ->assertOk() + ->call('openAlbumDropdown', 0, 0, $this->subAlbum1->id) + ->assertOk() + ->call('openAlbumsDropdown', 0, 0, [$this->subAlbum1->id]) + ->assertOk() + ->call('openPhotoDropdown', 0, 0, $this->photo1->id) + ->assertOk() + ->call('openPhotosDropdown', 0, 0, [$this->photo1->id]) + ->assertOk(); + } + + public function testActions(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Album::class, ['albumId' => $this->album1->id]) + ->assertViewIs('livewire.pages.gallery.album') + ->assertSee($this->album1->id) + ->assertSee($this->subAlbum1->id) + ->assertSee($this->photo1->id) + ->assertSee($this->subPhoto1->size_variants->getThumb()->url) + ->assertOk() + ->call('setStar', [$this->photo1->id]) + ->assertOk() + ->call('unsetStar', [$this->photo1->id]) + ->assertOk() + ->call('setCover', $this->photo1->id) + ->assertDispatched('notify', self::notifySuccess()) + ->assertOk(); + } + + public function testActionsUnsorted(): void + { + Configs::set('layout', PhotoLayoutType::SQUARE); + + Livewire::actingAs($this->userMayUpload1)->test(Album::class, ['albumId' => SmartAlbumType::UNSORTED->value]) + ->assertViewIs('livewire.pages.gallery.album') + ->assertSee($this->photoUnsorted->id) + ->assertOk() + ->call('setStar', [$this->photoUnsorted->id]) + ->assertOk() + ->call('unsetStar', [$this->photoUnsorted->id]) + ->assertOk() + ->call('setCover', $this->photoUnsorted->id) + ->assertNotDispatched('notify') + ->assertOk(); + + Configs::set('layout', PhotoLayoutType::JUSTIFIED); + } +} diff --git a/tests/Livewire/Pages/AllSettingsTest.php b/tests/Livewire/Pages/AllSettingsTest.php new file mode 100644 index 0000000000..54542e1631 --- /dev/null +++ b/tests/Livewire/Pages/AllSettingsTest.php @@ -0,0 +1,59 @@ +component) + ->assertForbidden(); + } + + public function testLoggedIn(): void + { + Livewire::actingAs($this->admin)->test($this->component) + ->assertViewIs('livewire.pages.all-settings') + ->call('openConfirmSave') + ->assertDispatched('openModal'); + + Livewire::actingAs($this->admin)->test($this->component) + ->dispatch('saveAll') + ->assertStatus(200); + + Livewire::actingAs($this->admin)->test($this->component) + ->call('back') + ->assertDispatched('closeLeftMenu') + ->assertRedirect(route('settings')); + } + + public function testLoggedInWithErrors(): void + { + $comp = Livewire::actingAs($this->admin)->test($this->component); + /** @var array $configs */ + $configs = $comp->viewData('form')->configs; + $idx = collect($configs)->search(fn (Configs $conf) => $conf->key === 'check_for_updates'); + $comp->set('form.values.' . $idx, '2') + ->dispatch('saveAll') + ->assertHasErrors('form.values.' . $idx); + + $this->assertNotEquals(2, Configs::getValueAsInt('check_for_updates')); + } +} diff --git a/tests/Livewire/Pages/DiagnosticsTest.php b/tests/Livewire/Pages/DiagnosticsTest.php new file mode 100644 index 0000000000..67c6924c11 --- /dev/null +++ b/tests/Livewire/Pages/DiagnosticsTest.php @@ -0,0 +1,56 @@ +assertViewIs('livewire.pages.diagnostics') + ->assertSeeLivewire(Configurations::class) + ->assertSeeLivewire(Space::class) + ->assertSeeLivewire(Infos::class) + ->assertSeeInOrder([ + 'Error: You must have administrator rights to see this.', + 'Error: You must have administrator rights to see this.', + 'Error: You must have administrator rights to see this.']); + } + + public function testDiagnosticsLogged(): void + { + $diagnostics = Livewire::actingAs($this->admin)->test(Diagnostics::class, ['lazy' => false]) + ->assertViewIs('livewire.pages.diagnostics') + ->assertSeeLivewire(Configurations::class) + ->assertSeeLivewire(Errors::class) + ->assertSeeLivewire(Space::class) + ->assertSeeLivewire(Infos::class) + ->assertDontSee('Error: You must have administrator rights to see this.'); + + $diagnostics->dispatch('reloadPage') + ->assertStatus(200); + + Livewire::actingAs($this->admin)->test(Diagnostics::class) + ->call('back') + ->assertDispatched('closeLeftMenu') + ->assertRedirect(route('livewire-gallery')); + } +} diff --git a/tests/Livewire/Pages/FrameTest.php b/tests/Livewire/Pages/FrameTest.php new file mode 100644 index 0000000000..4bdaf268d3 --- /dev/null +++ b/tests/Livewire/Pages/FrameTest.php @@ -0,0 +1,104 @@ +assertForbidden(); + } + + public function testFrameLoggedInDisabled(): void + { + Configs::set('mod_frame_enabled', false); + Livewire::actingAs($this->userMayUpload1)->test(Frame::class) + ->assertForbidden(); + } + + public function testFrameLoggedOutEnabled(): void + { + // Set up visibiltiy + Livewire::actingAs($this->userMayUpload1)->test(Visibility::class, ['album' => $this->album1]) + ->assertOk() + ->assertViewIs('livewire.forms.album.visibility') + ->toggle('is_public') + ->assertDispatched('notify', self::notifySuccess()); + + $this->album1->fresh(); + $this->album1->base_class->load('access_permissions'); + $this->assertNotNull($this->album1->public_permissions()); + + // Check guest can access + Livewire::test(Album::class, ['albumId' => $this->album1->id]) + ->assertStatus(200); + + // By default we are showing starred. + Configs::set('mod_frame_enabled', true); + Livewire::test(Frame::class) + ->assertStatus(500); + + // Show all pictures + Configs::set('random_album_id', ''); + Configs::set('mod_frame_enabled', true); + Livewire::test(Frame::class) + ->assertOk() + ->assertViewIs('livewire.pages.gallery.frame'); + + // Check frame on album + Livewire::test(Frame::class, ['albumId' => $this->album1->id]) + ->assertOk() + ->assertViewIs('livewire.pages.gallery.frame'); + + Configs::set('mod_frame_enabled', false); + Configs::set('random_album_id', 'starred'); + } + + public function testFrameLoggedInEnabled(): void + { + Configs::set('mod_frame_enabled', true); + Configs::set('random_album_id', ''); + Livewire::actingAs($this->userMayUpload1)->test(Frame::class) + ->assertOk() + ->assertViewIs('livewire.pages.gallery.frame'); + + Configs::set('mod_frame_enabled', false); + Configs::set('random_album_id', 'starred'); + } + + public function testFrameLoggedOutAlbum(): void + { + Configs::set('mod_frame_enabled', false); + Livewire::test(Frame::class, ['albumId' => $this->album1->id]) + ->assertForbidden(); + } + + public function testFrameLoggedInAlbum(): void + { + Configs::set('mod_frame_enabled', true); + Livewire::actingAs($this->userMayUpload1)->test(Frame::class, ['albumId' => $this->album1->id]) + ->assertOk() + ->assertViewIs('livewire.pages.gallery.frame'); + + Configs::set('mod_frame_enabled', false); + } +} diff --git a/tests/Livewire/Pages/GalleryTest.php b/tests/Livewire/Pages/GalleryTest.php new file mode 100644 index 0000000000..ef03a73e7d --- /dev/null +++ b/tests/Livewire/Pages/GalleryTest.php @@ -0,0 +1,34 @@ +assertViewIs('livewire.pages.gallery.albums') + ->assertSee($title) + ->dispatch('reloadPage') + ->assertStatus(200) + ->call('silentUpdate') + ->assertStatus(200); + } +} diff --git a/tests/Livewire/Pages/IndexTest.php b/tests/Livewire/Pages/IndexTest.php new file mode 100644 index 0000000000..590dd688a0 --- /dev/null +++ b/tests/Livewire/Pages/IndexTest.php @@ -0,0 +1,69 @@ +get(route('livewire-index')); + $this->assertRedirect($response); + } + + public function testLandingPage(): void + { + $landing_on_off = Configs::getValue('landing_page_enable'); + Configs::set('landing_page_enable', 1); + + $response = $this->get(route('livewire-index')); + $this->assertRedirect($response); + $response->assertRedirect(route('landing')); + + $response = $this->get(route('landing')); + $this->assertOk($response); + + $response = $this->get(route('livewire-gallery')); + $this->assertOk($response); + + Configs::set('landing_page_enable', $landing_on_off); + } + + public function testGalleryPage(): void + { + $landing_on_off = Configs::getValue('landing_page_enable'); + Configs::set('landing_page_enable', 0); + + $response = $this->get(route('livewire-index')); + $this->assertRedirect($response); + $response->assertRedirect(route('livewire-gallery')); + + $response = $this->get(route('livewire-gallery')); + $this->assertOk($response); + + $response = $this->get(route('landing')); + $this->assertRedirect($response); + + Configs::set('landing_page_enable', $landing_on_off); + } +} diff --git a/tests/Livewire/Pages/JobsTest.php b/tests/Livewire/Pages/JobsTest.php new file mode 100644 index 0000000000..18863d54c3 --- /dev/null +++ b/tests/Livewire/Pages/JobsTest.php @@ -0,0 +1,39 @@ +component) + ->assertForbidden(); + } + + public function testLoggedIn(): void + { + Livewire::actingAs($this->admin)->test($this->component) + ->assertViewIs('livewire.pages.jobs'); + + Livewire::actingAs($this->admin)->test($this->component) + ->call('back') + ->assertDispatched('closeLeftMenu') + ->assertRedirect(route('livewire-gallery')); + } +} diff --git a/tests/Livewire/Pages/LandingTest.php b/tests/Livewire/Pages/LandingTest.php new file mode 100644 index 0000000000..2371ee23d0 --- /dev/null +++ b/tests/Livewire/Pages/LandingTest.php @@ -0,0 +1,48 @@ +landing_on_off = Configs::getValueAsBool('landing_page_enable'); + Configs::set('landing_page_enable', 1); + } + + protected function tearDown(): void + { + Configs::set('landing_page_enable', $this->landing_on_off); + parent::tearDown(); + } + + public function testLandingPage(): void + { + $title = Configs::getValueAsString('landing_title'); + $subtitle = Configs::getValueAsString('landing_subtitle'); + $background = Configs::getValueAsString('landing_background'); + Livewire::test(Landing::class) + ->assertViewIs('livewire.pages.landing') + ->assertSee($title) + ->assertSee($subtitle) + ->assertSee($background); + } +} diff --git a/tests/Livewire/Pages/MapTest.php b/tests/Livewire/Pages/MapTest.php new file mode 100644 index 0000000000..e3d8344218 --- /dev/null +++ b/tests/Livewire/Pages/MapTest.php @@ -0,0 +1,85 @@ +assertForbidden(); + } + + public function testMapLoggedInDisabled(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Map::class) + ->assertForbidden(); + } + + public function testMapLoggedInEnabled(): void + { + Configs::set('map_display', true); + Livewire::actingAs($this->userMayUpload1)->test(Map::class) + ->assertOk() + ->assertViewIs('livewire.pages.gallery.map'); + + Configs::set('map_display', false); + } + + public function testMapLoggedOutEnabled(): void + { + Configs::set('map_display', true); + Configs::set('map_display_public', true); + + Livewire::test(Map::class) + ->assertOk() + ->assertViewIs('livewire.pages.gallery.map'); + + Configs::set('map_display', false); + Configs::set('map_display_public', false); + } + + public function testMapLoggedOutAlbum(): void + { + Livewire::test(Map::class, ['albumId' => $this->album1->id]) + ->assertForbidden(); + + Configs::set('map_display', true); + Livewire::test(Map::class, ['albumId' => $this->album1->id]) + ->assertForbidden(); + + Configs::set('map_display_public', true); + Livewire::test(Map::class, ['albumId' => $this->album1->id]) + ->assertForbidden(); + + Configs::set('map_display', false); + Configs::set('map_display_public', false); + } + + public function testMapLoggedInAlbum(): void + { + Livewire::actingAs($this->userMayUpload1)->test(Map::class) + ->assertForbidden(); + + Configs::set('map_display', true); + Livewire::actingAs($this->userMayUpload1)->test(Map::class) + ->assertOk() + ->assertViewIs('livewire.pages.gallery.map'); + Configs::set('map_display', false); + } +} diff --git a/tests/Livewire/Pages/ProfileTest.php b/tests/Livewire/Pages/ProfileTest.php new file mode 100644 index 0000000000..2712d985da --- /dev/null +++ b/tests/Livewire/Pages/ProfileTest.php @@ -0,0 +1,45 @@ +component) + ->assertForbidden(); + } + + public function testLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test($this->component) + ->assertViewIs('livewire.pages.profile'); + + Livewire::actingAs($this->userMayUpload1)->test($this->component) + ->call('back') + ->assertDispatched('closeLeftMenu') + ->assertRedirect(route('livewire-gallery')); + } + + public function testLoggedInPowerless(): void + { + Livewire::actingAs($this->userLocked)->test($this->component) + ->assertForbidden(); + } +} diff --git a/tests/Livewire/Pages/SettingsTest.php b/tests/Livewire/Pages/SettingsTest.php new file mode 100644 index 0000000000..6530a411a4 --- /dev/null +++ b/tests/Livewire/Pages/SettingsTest.php @@ -0,0 +1,48 @@ +component) + ->assertForbidden(); + } + + public function testLoggedIn(): void + { + Livewire::actingAs($this->userMayUpload1)->test($this->component) + ->assertForbidden(); + } + + public function testLoggedInAdmin(): void + { + Livewire::actingAs($this->admin)->test($this->component) + ->assertViewIs('livewire.pages.settings'); + + Livewire::actingAs($this->admin)->test($this->component) + ->call('back') + ->assertDispatched('closeLeftMenu') + ->assertRedirect(route('livewire-gallery')); + } +} diff --git a/tests/Livewire/Pages/SharingTest.php b/tests/Livewire/Pages/SharingTest.php new file mode 100644 index 0000000000..f7acd15d16 --- /dev/null +++ b/tests/Livewire/Pages/SharingTest.php @@ -0,0 +1,56 @@ +component) + ->assertForbidden(); + } + + public function testLoggedInUserNoRights(): void + { + Livewire::actingAs($this->userNoUpload)->test($this->component) + ->assertForbidden(); + } + + public function testLoggedInUser(): void + { + Livewire::actingAs($this->userMayUpload1)->test($this->component) + ->assertViewIs('livewire.pages.sharing'); + + Livewire::actingAs($this->userMayUpload1)->test($this->component) + ->call('back') + ->assertDispatched('closeLeftMenu') + ->assertRedirect(route('livewire-gallery')); + } + + public function testLoggedInAdmin(): void + { + Livewire::actingAs($this->admin)->test($this->component) + ->assertViewIs('livewire.pages.sharing'); + + Livewire::actingAs($this->admin)->test($this->component) + ->call('back') + ->assertDispatched('closeLeftMenu') + ->assertRedirect(route('livewire-gallery')); + } +} diff --git a/tests/Livewire/Pages/UsersTest.php b/tests/Livewire/Pages/UsersTest.php new file mode 100644 index 0000000000..41e8a491e6 --- /dev/null +++ b/tests/Livewire/Pages/UsersTest.php @@ -0,0 +1,94 @@ +admin = User::findOrFail(1); + + $this->setUpRequiresEmptyUsers(); + $this->withoutVite(); + } + + public function tearDown(): void + { + $this->tearDownRequiresEmptyUsers(); + parent::tearDown(); + } + + public function testLoggedOut(): void + { + Livewire::test($this->component) + ->assertForbidden(); + } + + public function testLoggedIn(): void + { + Livewire::actingAs($this->admin)->test($this->component) + ->assertViewIs('livewire.pages.users') + ->assertCount('users', 1); + + Livewire::actingAs($this->admin)->test($this->component) + ->call('back') + ->assertDispatched('closeLeftMenu') + ->assertRedirect(route('livewire-gallery')); + } + + public function testCreate(): void + { + User::where('username', '=', 'user1')->delete(); + + $this->assertEquals(1, User::count()); + $this->assertEquals(0, User::where('username', '=', 'user1')->count()); + + Livewire::actingAs($this->admin)->test(Users::class) + ->set('username', 'user1') + ->set('password', 'password') + ->call('create') + ->assertCount('users', 2); + + $this->assertEquals(2, User::count()); + } + + public function testDelete(): void + { + /** @var User $user */ + $user = User::factory()->create(); + + Livewire::actingAs($this->admin)->test(Users::class) + ->call('delete', $user->id) + ->assertCount('users', 1); + } + + public function testForbiddenDelete(): void + { + Livewire::actingAs($this->admin)->test(Users::class) + ->call('delete', $this->admin->id) + ->assertStatus(403); + } +} diff --git a/tests/Livewire/WireableTest.php b/tests/Livewire/WireableTest.php new file mode 100644 index 0000000000..9d49959b96 --- /dev/null +++ b/tests/Livewire/WireableTest.php @@ -0,0 +1,45 @@ +num = new class() {}; + } + }; + + $this->assertThrows(fn () => $trait->toLivewire(), LycheeLogicException::class); + } + + public function testWirableHydrate(): void + { + $trait = new class() implements Wireable { + use UseWireable; + }; + + $this->assertThrows(fn () => $trait::fromLivewire(''), LycheeLogicException::class); + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000000..d12fe33b99 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,112 @@ +{ + "include": ["resources/js/**/*", "resources/css/**/*"], + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es6", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "lib": ["ES6", "DOM"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "CommonJS", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + "paths": { + "@/*": ["./resources/js/*"] + }, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + // "skipLibCheck": true, /* Skip type checking all .d.ts files. */ + } +} diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000000..5b22a143aa --- /dev/null +++ b/vite.config.js @@ -0,0 +1,33 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; +import commonjs from 'vite-plugin-commonjs' +import checker from 'vite-plugin-checker' + +export default defineConfig({ + plugins: [ + commonjs(/* options */), + + laravel({ + input: ['resources/css/app.css', 'resources/js/app.ts'], + refresh: true, + }), + + checker({ + // e.g. use TypeScript check + typescript: true, + }), + ], + server: { + watch: { + ignored: [ + "**/.*/**", + "**/database/**", + "**/node_modules/**", + "**/public/**", + "**/storage/**", + "**/tests/**", + "vendor/**", + ], + }, + } +}); From b37247f5af799f76d6a010cbf73c1188c070d8dc Mon Sep 17 00:00:00 2001 From: ildyria Date: Sat, 23 Dec 2023 16:47:38 +0100 Subject: [PATCH 02/25] enable Livewire by default --- config/app.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/app.php b/config/app.php index 51768d6a18..9dbeaaebd5 100644 --- a/config/app.php +++ b/config/app.php @@ -40,7 +40,7 @@ | */ - 'livewire' => (bool) env('LIVEWIRE_ENABLED', false), + 'livewire' => (bool) env('LIVEWIRE_ENABLED', true), /* |-------------------------------------------------------------------------- From b956627060ee8f088895ccf870db42e791c65e3e Mon Sep 17 00:00:00 2001 From: ildyria Date: Sat, 23 Dec 2023 17:03:18 +0100 Subject: [PATCH 03/25] create build --- .gitignore | 1 + Makefile | 8 +++++++- package-lock.json | 6 ++++++ package.json | 1 + resources/js/lycheeOrg/layouts/useJustify.ts | 3 ++- 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 74e4d4c574..2db2a099c0 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ build/* # Those are personal public/dist/user.css public/dist/custom.js +public/build/* # Pictures we do not commit public/uploads/** diff --git a/Makefile b/Makefile index 17ae0a2616..2837ad5d44 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,11 @@ composer: composer install --prefer-dist --no-dev php artisan vendor:publish --tag=log-viewer-asset -dist-gen: clean composer +npm-build: + rm -r public/build 2> /dev/null || true + npm run build + +dist-gen: clean composer npm-build @echo "packaging..." @mkdir Lychee @mkdir Lychee/public @@ -19,6 +23,7 @@ dist-gen: clean composer @cp -r config Lychee @cp -r composer-cache Lychee @cp -r database Lychee + @cp -r public/build Lychee/public @cp -r public/dist Lychee/public @cp -r public/vendor Lychee/public @cp -r public/installer Lychee/public @@ -46,6 +51,7 @@ dist-gen: clean composer @cp -r version.md Lychee @touch Lychee/storage/logs/laravel.log @touch Lychee/public/dist/user.css + @touch Lychee/public/dist/custom.js @touch Lychee/public/uploads/import/index.html @touch Lychee/public/sym/index.html diff --git a/package-lock.json b/package-lock.json index 27deec751f..0a74054392 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "packages": { "": { "dependencies": { + "@types/justified-layout": "^4.1.4", "autoprefixer": "^10.4.16", "justified-layout": "^4.1.0", "laravel-vite-plugin": "^0.8.1", @@ -681,6 +682,11 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "peer": true }, + "node_modules/@types/justified-layout": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/justified-layout/-/justified-layout-4.1.4.tgz", + "integrity": "sha512-q2ybP0u0NVj87oMnGZOGxY2iUN8ddr48zPOBHBdbOLpsMTA/keGj+93ou+OMCnJk0xewzlNIaVEkxM6VBD3E2w==" + }, "node_modules/@types/leaflet": { "version": "1.9.8", "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.8.tgz", diff --git a/package.json b/package.json index 4087727a3d..5f8e51f2bf 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@types/tailwindcss": "^3.1.0" }, "dependencies": { + "@types/justified-layout": "^4.1.4", "autoprefixer": "^10.4.16", "justified-layout": "^4.1.0", "laravel-vite-plugin": "^0.8.1", diff --git a/resources/js/lycheeOrg/layouts/useJustify.ts b/resources/js/lycheeOrg/layouts/useJustify.ts index 17a22b6823..ad8fe93cb5 100644 --- a/resources/js/lycheeOrg/layouts/useJustify.ts +++ b/resources/js/lycheeOrg/layouts/useJustify.ts @@ -1,4 +1,5 @@ import { ChildNodeWithDataStyle } from "./types"; +import createJustifiedLayout from "justified-layout"; export function useJustify(el: HTMLElement, photoDefaultHeight: number = 320) { const view = document.getElementById("lychee_view_content"); @@ -17,7 +18,7 @@ export function useJustify(el: HTMLElement, photoDefaultHeight: number = 320) { const width = _photo.dataset.width; return height > 0 ? width / height : 1; }); - const layoutGeometry = require("justified-layout")(ratio, { + const layoutGeometry = createJustifiedLayout(ratio, { containerWidth: containerWidth, containerPadding: 0, targetRowHeight: photoDefaultHeight, From b72602453e28cf48ce860e98cc5846e4d7a8f618 Mon Sep 17 00:00:00 2001 From: ildyria Date: Sat, 23 Dec 2023 17:05:30 +0100 Subject: [PATCH 04/25] version 5.0.0 --- .../2023_12_23_160356_bump_version050000.php | 22 +++++++++++++++++++ version.md | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 database/migrations/2023_12_23_160356_bump_version050000.php diff --git a/database/migrations/2023_12_23_160356_bump_version050000.php b/database/migrations/2023_12_23_160356_bump_version050000.php new file mode 100644 index 0000000000..a63c4d382c --- /dev/null +++ b/database/migrations/2023_12_23_160356_bump_version050000.php @@ -0,0 +1,22 @@ +where('key', 'version')->update(['value' => '050000']); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + DB::table('configs')->where('key', 'version')->update(['value' => '041300']); + } +}; diff --git a/version.md b/version.md index 01b73abe55..28cbf7c0aa 100644 --- a/version.md +++ b/version.md @@ -1 +1 @@ -4.13.0 \ No newline at end of file +5.0.0 \ No newline at end of file From 17922a4723ec7a34b3a92e744935ef131f39e84c Mon Sep 17 00:00:00 2001 From: ildyria Date: Sat, 23 Dec 2023 17:08:21 +0100 Subject: [PATCH 05/25] fix makefile --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 2837ad5d44..5d0bcf57c3 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,8 @@ composer: npm-build: rm -r public/build 2> /dev/null || true + rm -r node_modules 2> /dev/null || true + npm install npm run build dist-gen: clean composer npm-build From f1eed669000d0b40859d06e3f42b493e5bf1297e Mon Sep 17 00:00:00 2001 From: ildyria Date: Sat, 23 Dec 2023 17:10:52 +0100 Subject: [PATCH 06/25] fix package --- package-lock.json | 13 +------------ package.json | 3 +-- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0a74054392..b6a9c1c45a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,8 +32,7 @@ "@types/leaflet.markercluster": "^1.5.4", "@types/mousetrap": "^1.6.15", "@types/photoswipe": "^4.1.6", - "@types/qrcode": "^1.5.5", - "@types/tailwindcss": "^3.1.0" + "@types/qrcode": "^1.5.5" } }, "node_modules/@alloc/quick-lru": { @@ -743,16 +742,6 @@ "@types/node": "*" } }, - "node_modules/@types/tailwindcss": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/tailwindcss/-/tailwindcss-3.1.0.tgz", - "integrity": "sha512-JxPzrm609hzvF4nmOI3StLjbBEP3WWQxDDJESqR1nh94h7gyyy3XSl0hn5RBMJ9mPudlLjtaXs5YEBtLw7CnPA==", - "deprecated": "This is a stub types definition. tailwindcss provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "tailwindcss": "*" - } - }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", diff --git a/package.json b/package.json index 5f8e51f2bf..a6c0cc15e9 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,7 @@ "@types/leaflet.markercluster": "^1.5.4", "@types/mousetrap": "^1.6.15", "@types/photoswipe": "^4.1.6", - "@types/qrcode": "^1.5.5", - "@types/tailwindcss": "^3.1.0" + "@types/qrcode": "^1.5.5" }, "dependencies": { "@types/justified-layout": "^4.1.4", From 831b9ef6bbfb1be207ad2380e87a75d072cbfefc Mon Sep 17 00:00:00 2001 From: ildyria Date: Sat, 23 Dec 2023 17:17:19 +0100 Subject: [PATCH 07/25] fix .env.example --- .env.example | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 9622b2e537..fe8f76839c 100644 --- a/.env.example +++ b/.env.example @@ -8,7 +8,9 @@ APP_FORCE_HTTPS=false # enable or disable debug bar. By default it is disabled. # Do note that this disable CSP!! DEBUGBAR_ENABLED=false -LIVEWIRE_ENABLED=false + +# enable or disable the v5 layout. +LIVEWIRE_ENABLED=true # enable or disable log viewer. By default it is enabled. LOG_VIEWER_ENABLED=true From 24dd04e5b590c4e93ef03d4856df10092d5de16f Mon Sep 17 00:00:00 2001 From: ildyria Date: Sat, 23 Dec 2023 18:17:33 +0100 Subject: [PATCH 08/25] don't break tests --- .github/workflows/.env.mariadb | 1 + .github/workflows/.env.postgresql | 1 + .github/workflows/.env.sqlite | 1 + 3 files changed, 3 insertions(+) diff --git a/.github/workflows/.env.mariadb b/.github/workflows/.env.mariadb index 5b2b4f189d..fd8a185fab 100644 --- a/.github/workflows/.env.mariadb +++ b/.github/workflows/.env.mariadb @@ -3,6 +3,7 @@ APP_URL=https://localhost APP_ENV=dev APP_KEY=SomeRandomString APP_DEBUG=true +LIVEWIRE_ENABLED=false DB_CONNECTION=mysql DB_HOST=localhost diff --git a/.github/workflows/.env.postgresql b/.github/workflows/.env.postgresql index 2d6c582c84..57702d51d0 100644 --- a/.github/workflows/.env.postgresql +++ b/.github/workflows/.env.postgresql @@ -3,6 +3,7 @@ APP_URL=https://localhost APP_ENV=dev APP_KEY=SomeRandomString APP_DEBUG=true +LIVEWIRE_ENABLED=false DB_CONNECTION=pgsql DB_HOST=localhost diff --git a/.github/workflows/.env.sqlite b/.github/workflows/.env.sqlite index 1aff99054c..676b77bfaf 100644 --- a/.github/workflows/.env.sqlite +++ b/.github/workflows/.env.sqlite @@ -3,6 +3,7 @@ APP_URL=https://localhost APP_ENV=dev APP_KEY=SomeRandomString APP_DEBUG=true +LIVEWIRE_ENABLED=false DB_CONNECTION=sqlite DB_LIST_FOREIGN_KEYS=true From 61050722ddcdfe944ee3b7a4a8a31e661af83b3f Mon Sep 17 00:00:00 2001 From: ildyria Date: Sat, 23 Dec 2023 21:09:16 +0100 Subject: [PATCH 09/25] fix 1. --- resources/views/components/gallery/view/photo.blade.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/views/components/gallery/view/photo.blade.php b/resources/views/components/gallery/view/photo.blade.php index a890b8590d..d5808619fb 100644 --- a/resources/views/components/gallery/view/photo.blade.php +++ b/resources/views/components/gallery/view/photo.blade.php @@ -93,7 +93,8 @@ class='absolute m-auto w-auto h-auto'