From 1cf587bc8f42a7e783d6cc71f2ab93e6748b2c76 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Sun, 18 May 2025 14:03:18 -0700 Subject: [PATCH] restructure files onto electron-vite boilerplate --- .editorconfig | 11 +- .erb/configs/.eslintrc | 7 - .erb/configs/webpack.config.base.ts | 64 - .erb/configs/webpack.config.eslint.ts | 3 - .erb/configs/webpack.config.main.prod.ts | 84 - .erb/configs/webpack.config.preload.dev.ts | 70 - .erb/configs/webpack.config.remote.dev.ts | 127 - .erb/configs/webpack.config.remote.prod.ts | 142 - .../webpack.config.renderer.dev.dll.ts | 79 - .erb/configs/webpack.config.renderer.dev.ts | 201 - .erb/configs/webpack.config.renderer.prod.ts | 137 - .erb/configs/webpack.config.renderer.web.ts | 147 - .erb/configs/webpack.config.web.prod.ts | 138 - .erb/configs/webpack.paths.ts | 46 - .erb/mocks/fileMock.js | 1 - .erb/scripts/.eslintrc | 8 - .erb/scripts/check-build-exists.ts | 33 - .erb/scripts/check-native-dep.js | 54 - .erb/scripts/check-node-env.js | 16 - .erb/scripts/check-port-in-use.js | 16 - .erb/scripts/clean.js | 17 - .erb/scripts/delete-source-maps.js | 9 - .erb/scripts/electron-rebuild.js | 20 - .erb/scripts/link-modules.ts | 9 - .erb/scripts/notarize.js | 30 - .eslintignore | 34 - .eslintrc.js | 97 - .gitignore | 33 +- .husky/pre-commit | 4 - .prettierignore | 6 + .prettierrc | 22 - .prettierrc.yaml | 12 + .vscode/extensions.json | 9 +- .vscode/launch.json | 63 +- .vscode/settings.json | 10 +- .vscode/tasks.json | 25 - build/entitlements.mac.plist | 12 + build/icon.icns | Bin 0 -> 282132 bytes build/icon.ico | Bin 0 -> 179695 bytes build/icon.png | Bin 0 -> 49324 bytes dev-app-update.yml | 3 + electron-builder.yml | 43 + electron.vite.config.ts | 35 + eslint.config.mjs | 48 + ng.conf.template | 27 - package-lock.json | 6057 +++++++++++------ package.json | 449 +- release/app/package-lock.json | 2352 ------- release/app/package.json | 30 - resources/icon.png | Bin 0 -> 49324 bytes src/__tests__/App.test.tsx | 9 - src/i18n/i18n.ts | 65 +- src/main/features/core/lyrics/genius.ts | 163 +- src/main/features/core/lyrics/index.ts | 76 +- src/main/features/core/lyrics/lrclib.ts | 35 +- src/main/features/core/lyrics/netease.ts | 131 +- src/main/features/core/lyrics/shared.ts | 1 + src/main/features/core/player/index.ts | 49 +- src/main/features/core/player/media-keys.ts | 1 + src/main/features/core/remote/index.ts | 180 +- src/main/features/core/settings/index.ts | 5 +- src/main/features/index.ts | 3 +- src/main/features/linux/mpris.ts | 4 +- src/main/features/win32/index.ts | 3 + src/main/{main.ts => index.ts} | 114 +- src/main/menu.ts | 64 +- src/main/preload.ts | 23 - src/main/utils.ts | 5 +- src/{main => }/preload/browser.ts | 0 src/{main => }/preload/discord-rpc.ts | 0 src/preload/index.d.ts | 10 + src/preload/index.ts | 45 + src/{main => }/preload/ipc.ts | 0 src/{main => }/preload/local-settings.ts | 20 +- src/{main => }/preload/lyrics.ts | 4 +- src/{main => }/preload/mpris.ts | 3 +- src/{main => }/preload/mpv-player.ts | 3 +- src/{main => }/preload/remote.ts | 10 +- src/{main => }/preload/utils.ts | 12 +- src/renderer/api/controller.ts | 11 +- src/renderer/api/jellyfin.types.ts | 854 +-- src/renderer/api/jellyfin/jellyfin-api.ts | 22 +- .../api/jellyfin/jellyfin-controller.ts | 74 +- .../api/jellyfin/jellyfin-normalize.ts | 33 +- src/renderer/api/jellyfin/jellyfin-types.ts | 16 +- src/renderer/api/navidrome.types.ts | 562 +- src/renderer/api/navidrome/navidrome-api.ts | 28 +- .../api/navidrome/navidrome-controller.ts | 81 +- .../api/navidrome/navidrome-normalize.ts | 40 +- src/renderer/api/navidrome/navidrome-types.ts | 1 + src/renderer/api/query-keys.ts | 60 +- src/renderer/api/subsonic.types.ts | 258 +- src/renderer/api/subsonic/subsonic-api.ts | 13 +- .../api/subsonic/subsonic-controller.ts | 93 +- .../api/subsonic/subsonic-normalize.ts | 31 +- src/renderer/api/types.ts | 1155 ++-- src/renderer/api/utils.ts | 9 +- src/renderer/app.tsx | 46 +- src/renderer/assets/assets.d.ts | 31 + src/renderer/assets/entitlements.mac.plist | 10 + src/renderer/assets/icons/1024x1024.png | Bin 0 -> 158010 bytes src/renderer/assets/icons/128x128.png | Bin 0 -> 6450 bytes src/renderer/assets/icons/256x256.png | Bin 0 -> 15855 bytes src/renderer/assets/icons/32x32.png | Bin 0 -> 1393 bytes src/renderer/assets/icons/512x512.png | Bin 0 -> 49324 bytes src/renderer/assets/icons/64x64.png | Bin 0 -> 2825 bytes src/renderer/assets/icons/favicon.ico | Bin 0 -> 5238 bytes src/renderer/assets/icons/icon.icns | Bin 0 -> 282132 bytes src/renderer/assets/icons/icon.ico | Bin 0 -> 179695 bytes src/renderer/assets/icons/icon.png | Bin 0 -> 49324 bytes src/renderer/assets/pause-circle.png | Bin 0 -> 896 bytes src/renderer/assets/play-circle.png | Bin 0 -> 971 bytes src/renderer/assets/skip-next.png | Bin 0 -> 479 bytes src/renderer/assets/skip-previous.png | Bin 0 -> 524 bytes src/renderer/components/accordion/index.tsx | 1 + .../components/audio-player/index.tsx | 82 +- .../audio-player/utils/list-handlers.ts | 34 +- src/renderer/components/badge/index.tsx | 1 + src/renderer/components/button/index.tsx | 16 +- src/renderer/components/card/album-card.tsx | 24 +- .../components/card/card-controls.tsx | 32 +- src/renderer/components/card/card-rows.tsx | 13 +- src/renderer/components/card/poster-card.tsx | 17 +- src/renderer/components/checkbox/index.tsx | 2 +- .../components/context-menu/index.tsx | 16 +- src/renderer/components/date-picker/index.tsx | 3 +- src/renderer/components/dialog/index.tsx | 1 + .../components/dropdown-menu/index.tsx | 23 +- .../components/feature-carousel/index.tsx | 28 +- .../components/grid-carousel/index.tsx | 43 +- src/renderer/components/hover-card/index.tsx | 2 +- src/renderer/components/input/index.tsx | 55 +- src/renderer/components/modal/index.tsx | 17 +- src/renderer/components/option/index.tsx | 2 +- src/renderer/components/page-header/index.tsx | 15 +- src/renderer/components/paper/index.tsx | 3 +- src/renderer/components/popover/index.tsx | 7 +- .../components/query-builder/index.tsx | 37 +- .../query-builder/query-builder-option.tsx | 129 +- src/renderer/components/rating/index.tsx | 2 +- src/renderer/components/scroll-area/index.tsx | 9 +- .../components/search-input/index.tsx | 11 +- .../components/segmented-control/index.tsx | 3 +- .../select-with-invalid-data/index.tsx | 5 +- src/renderer/components/select/index.tsx | 17 +- src/renderer/components/skeleton/index.tsx | 1 + src/renderer/components/slider/index.tsx | 1 + src/renderer/components/spinner/index.tsx | 4 +- src/renderer/components/spoiler/index.tsx | 8 +- src/renderer/components/switch/index.tsx | 1 + src/renderer/components/tabs/index.tsx | 2 +- src/renderer/components/text-title/index.tsx | 8 +- src/renderer/components/text/index.tsx | 10 +- src/renderer/components/toast/index.tsx | 9 +- src/renderer/components/tooltip/index.tsx | 3 +- .../virtual-grid/grid-card/default-card.tsx | 23 +- .../grid-card/grid-card-controls.tsx | 35 +- .../virtual-grid/grid-card/index.tsx | 24 +- .../virtual-grid/grid-card/poster-card.tsx | 21 +- .../virtual-grid/virtual-grid-wrapper.tsx | 38 +- .../virtual-grid/virtual-infinite-grid.tsx | 56 +- .../virtual-table/cells/actions-cell.tsx | 6 +- .../virtual-table/cells/album-artist-cell.tsx | 14 +- .../virtual-table/cells/artist-cell.tsx | 14 +- .../cells/combined-title-cell-controls.tsx | 12 +- .../cells/combined-title-cell.tsx | 18 +- .../virtual-table/cells/favorite-cell.tsx | 6 +- .../cells/full-width-disc-cell.tsx | 10 +- .../virtual-table/cells/generic-cell.tsx | 8 +- .../virtual-table/cells/genre-cell.tsx | 14 +- .../virtual-table/cells/note-cell.tsx | 6 +- .../virtual-table/cells/rating-cell.tsx | 5 +- .../virtual-table/cells/row-index-cell.tsx | 3 +- .../virtual-table/cells/title-cell.tsx | 1 + .../virtual-table/headers/duration-header.tsx | 1 + .../headers/generic-table-header.tsx | 12 +- .../hooks/use-click-outside-deselect.tsx | 3 +- .../hooks/use-current-song-row-styles.ts | 6 +- .../hooks/use-fixed-table-header.tsx | 1 + .../virtual-table/hooks/use-virtual-table.ts | 29 +- .../components/virtual-table/index.tsx | 70 +- .../virtual-table/table-config-dropdown.tsx | 14 +- .../virtual-table/table-pagination.tsx | 29 +- .../components/virtual-table/utils.ts | 4 +- src/renderer/context/list-context.tsx | 1 + src/renderer/env.d.ts | 1 + .../components/action-required-container.tsx | 9 +- .../components/error-fallback.tsx | 6 +- .../components/mpv-required.tsx | 13 +- .../components/route-error-boundary.tsx | 9 +- .../components/server-required.tsx | 1 + .../routes/action-required-route.tsx | 7 +- .../action-required/routes/invalid-route.tsx | 3 +- .../components/album-detail-content.tsx | 46 +- .../albums/components/album-detail-header.tsx | 17 +- .../albums/components/album-list-content.tsx | 6 +- .../components/album-list-grid-view.tsx | 13 +- .../components/album-list-header-filters.tsx | 46 +- .../albums/components/album-list-header.tsx | 12 +- .../components/album-list-table-view.tsx | 5 +- .../components/jellyfin-album-filters.tsx | 30 +- .../components/navidrome-album-filters.tsx | 37 +- .../components/subsonic-album-filters.tsx | 7 +- .../albums/context/album-list-context.tsx | 1 + .../albums/queries/album-detail-query.ts | 11 +- .../albums/queries/album-list-count-query.ts | 8 +- .../albums/queries/album-list-query.ts | 6 +- .../albums/routes/album-detail-route.tsx | 20 +- .../albums/routes/album-list-route.tsx | 6 +- .../routes/dummy-album-detail-route.tsx | 49 +- .../album-artist-detail-content.tsx | 43 +- .../components/album-artist-detail-header.tsx | 10 +- ...m-artist-detail-top-songs-list-content.tsx | 7 +- ...um-artist-detail-top-songs-list-header.tsx | 7 +- .../components/album-artist-list-content.tsx | 11 +- .../album-artist-list-grid-view.tsx | 26 +- .../album-artist-list-header-filters.tsx | 35 +- .../components/album-artist-list-header.tsx | 13 +- .../album-artist-list-table-view.tsx | 3 + .../components/artist-list-content.tsx | 11 +- .../components/artist-list-grid-view.tsx | 26 +- .../components/artist-list-header-filters.tsx | 41 +- .../artists/components/artist-list-header.tsx | 15 +- .../components/artist-list-table-view.tsx | 3 + .../queries/album-artist-detail-query.ts | 11 +- .../queries/album-artist-list-count-query.ts | 1 + .../queries/album-artist-list-query.ts | 11 +- .../artists/queries/artist-info-query.ts | 11 +- .../queries/artist-list-count-query.ts | 1 + .../features/artists/queries/roles-query.ts | 1 + .../artists/queries/top-songs-list-query.ts | 8 +- .../routes/album-artist-detail-route.tsx | 5 +- ...bum-artist-detail-top-songs-list-route.tsx | 11 +- .../routes/album-artist-list-route.tsx | 7 +- .../artists/routes/artist-list-route.tsx | 11 +- .../context-menu/context-menu-provider.tsx | 89 +- src/renderer/features/context-menu/events.ts | 55 +- .../hooks/use-handle-context-menu.ts | 5 +- src/renderer/features/context-menu/index.tsx | 2 +- .../features/discord-rpc/use-discord-rpc.ts | 10 +- .../genres/components/genre-list-content.tsx | 6 +- .../components/genre-list-grid-view.tsx | 15 +- .../components/genre-list-header-filters.tsx | 38 +- .../genres/components/genre-list-header.tsx | 14 +- .../components/genre-list-table-view.tsx | 16 +- .../genres/queries/genre-list-query.ts | 8 +- .../genres/routes/genre-list-route.tsx | 11 +- .../home/queries/recently-played-query.ts | 3 +- .../features/home/routes/home-route.tsx | 75 +- .../components/item-details-modal.tsx | 29 +- .../item-details/components/song-path.tsx | 15 +- .../lyrics/components/lyrics-search-form.tsx | 12 +- src/renderer/features/lyrics/lyric-line.tsx | 9 +- .../features/lyrics/lyrics-actions.tsx | 25 +- src/renderer/features/lyrics/lyrics.tsx | 18 +- .../features/lyrics/queries/lyric-query.ts | 31 +- .../lyrics/queries/lyric-search-query.ts | 3 +- .../lyrics/queries/lyric-translate.ts | 4 +- .../features/lyrics/synchronized-lyrics.tsx | 27 +- .../features/lyrics/unsynchronized-lyrics.tsx | 5 +- .../components/drawer-play-queue.tsx | 7 +- .../components/play-queue-list-controls.tsx | 39 +- .../now-playing/components/play-queue.tsx | 50 +- .../components/sidebar-play-queue.tsx | 11 +- src/renderer/features/now-playing/index.ts | 4 +- .../now-playing/routes/now-playing-route.tsx | 14 +- .../player/components/center-controls.tsx | 60 +- .../components/full-screen-player-image.tsx | 13 +- .../components/full-screen-player-queue.tsx | 15 +- .../player/components/full-screen-player.tsx | 32 +- .../player/components/left-controls.tsx | 31 +- .../player/components/player-button.tsx | 10 +- .../features/player/components/playerbar.tsx | 34 +- .../player/components/right-controls.tsx | 58 +- .../player/components/shuffle-all-modal.tsx | 51 +- .../features/player/components/visualizer.tsx | 5 +- .../context/play-queue-handler-context.ts | 1 + .../player/context/webaudio-context.ts | 1 + .../player/hooks/use-center-controls.ts | 52 +- .../player/hooks/use-handle-playqueue-add.ts | 45 +- .../player/hooks/use-playqueue-add.ts | 1 + .../player/hooks/use-right-controls.ts | 15 +- .../features/player/hooks/use-scrobble.ts | 15 +- .../features/player/hooks/use-webaudio.ts | 3 +- .../player/mutations/scrobble-mutation.ts | 5 +- .../features/player/update-remote-song.tsx | 3 +- src/renderer/features/player/utils.ts | 17 +- .../add-to-playlist-context-modal.tsx | 9 +- .../components/create-playlist-form.tsx | 15 +- .../playlist-detail-song-list-content.tsx | 36 +- ...aylist-detail-song-list-header-filters.tsx | 52 +- .../playlist-detail-song-list-header.tsx | 8 +- .../components/playlist-list-content.tsx | 13 +- .../components/playlist-list-grid-view.tsx | 22 +- .../playlist-list-header-filters.tsx | 31 +- .../components/playlist-list-header.tsx | 26 +- .../components/playlist-list-table-view.tsx | 8 +- .../components/playlist-query-builder.tsx | 81 +- .../components/save-as-playlist-form.tsx | 15 +- .../components/update-playlist-form.tsx | 19 +- src/renderer/features/playlists/index.ts | 8 +- .../mutations/add-to-playlist-mutation.ts | 3 +- .../mutations/create-playlist-mutation.ts | 8 +- .../mutations/delete-playlist-mutation.ts | 3 +- .../remove-from-playlist-mutation.ts | 3 +- .../mutations/update-playlist-mutation.ts | 3 +- .../queries/playlist-detail-query.ts | 8 +- .../playlists/queries/playlist-list-query.ts | 8 +- .../queries/playlist-song-list-query.ts | 8 +- .../playlist-detail-song-list-route.tsx | 33 +- .../playlists/routes/playlist-list-route.tsx | 4 +- src/renderer/features/playlists/utils.ts | 3 +- .../search/components/command-palette.tsx | 33 +- .../search/components/go-to-commands.tsx | 5 +- .../search/components/home-commands.tsx | 15 +- .../components/library-command-item.tsx | 19 +- .../search/components/search-content.tsx | 11 +- .../search/components/search-header.tsx | 17 +- .../search/components/server-commands.tsx | 13 +- .../features/search/queries/search-query.ts | 7 +- .../features/search/routes/search-route.tsx | 2 + .../servers/components/add-server-form.tsx | 21 +- .../servers/components/edit-server-form.tsx | 33 +- .../servers/components/server-list-item.tsx | 17 +- .../servers/components/server-list.tsx | 10 +- .../servers/components/server-section.tsx | 5 +- .../components/advanced/advanced-tab.tsx | 1 + .../components/advanced/styles-settings.tsx | 15 +- .../general/application-settings.tsx | 34 +- .../general/context-menu-settings.tsx | 13 +- .../components/general/control-settings.tsx | 35 +- .../components/general/draggable-item.tsx | 19 +- .../components/general/draggable-items.tsx | 21 +- .../components/general/general-tab.tsx | 13 +- .../components/general/home-settings.tsx | 5 +- .../components/general/remote-settings.tsx | 11 +- .../components/general/sidebar-settings.tsx | 4 +- .../components/general/theme-settings.tsx | 27 +- .../hotkeys/hotkey-manager-settings.tsx | 41 +- .../components/hotkeys/hotkeys-tab.tsx | 2 + .../hotkeys/window-hotkey-settings.tsx | 4 +- .../components/playback/audio-settings.tsx | 13 +- .../components/playback/lyric-settings.tsx | 43 +- .../components/playback/mpv-settings.tsx | 69 +- .../components/playback/playback-tab.tsx | 9 +- .../components/playback/scrobble-settings.tsx | 10 +- .../playback/transcode-settings.tsx | 12 +- .../settings/components/settings-content.tsx | 9 +- .../settings/components/settings-header.tsx | 10 +- .../settings/components/settings-option.tsx | 5 +- .../settings/components/settings-section.tsx | 5 +- .../components/window/cache-settngs.tsx | 11 +- .../components/window/discord-settings.tsx | 7 +- .../components/window/password-settings.tsx | 16 +- .../components/window/update-settings.tsx | 18 +- .../components/window/window-settings.tsx | 20 +- .../settings/components/window/window-tab.tsx | 9 +- .../settings/routes/settings-route.tsx | 5 +- .../shared/components/animated-page.tsx | 6 +- .../features/shared/components/filter-bar.tsx | 1 + ...scss => item-image-placeholder.module.css} | 0 .../components/item-image-placeholder.tsx | 8 +- .../shared/components/json-preview.tsx | 2 +- .../shared/components/library-header-bar.tsx | 7 +- ....module.scss => library-header.module.css} | 0 .../shared/components/library-header.tsx | 36 +- .../shared/components/order-toggle-button.tsx | 5 +- .../shared/components/resize-handle.tsx | 2 +- .../shared/hooks/use-handle-favorite.ts | 7 +- .../mutations/create-favorite-mutation.ts | 7 +- .../mutations/delete-favorite-mutation.ts | 7 +- .../shared/mutations/set-rating-mutation.ts | 15 +- .../shared/queries/music-folders-query.ts | 6 +- .../components/share-item-context-modal.tsx | 8 +- .../sharing/mutations/share-item-mutation.ts | 7 +- .../sidebar/components/action-bar.tsx | 19 +- .../components/collapsed-sidebar-button.tsx | 4 +- .../components/collapsed-sidebar-item.tsx | 5 +- .../sidebar/components/collapsed-sidebar.tsx | 9 +- .../sidebar/components/sidebar-icon.tsx | 33 +- .../sidebar/components/sidebar-item.tsx | 5 +- .../components/sidebar-playlist-list.tsx | 57 +- .../features/sidebar/components/sidebar.tsx | 22 +- .../components/similar-songs-list.tsx | 27 +- .../queries/similar-song-queries.tsx | 5 +- .../components/jellyfin-song-filters.tsx | 25 +- .../components/navidrome-song-filters.tsx | 29 +- .../songs/components/song-list-content.tsx | 8 +- .../songs/components/song-list-grid-view.tsx | 17 +- .../components/song-list-header-filters.tsx | 49 +- .../songs/components/song-list-header.tsx | 14 +- .../songs/components/song-list-table-view.tsx | 12 +- .../songs/components/subsonic-song-filter.tsx | 13 +- .../songs/queries/song-list-count-query.ts | 8 +- .../features/songs/queries/song-list-query.ts | 12 +- .../features/songs/routes/song-list-route.tsx | 8 +- .../features/tag/queries/use-tag-list.ts | 13 +- .../features/titlebar/components/app-menu.tsx | 40 +- .../features/titlebar/components/titlebar.tsx | 2 + .../features/users/queries/user-list-query.ts | 12 +- .../components/window-controls.tsx | 12 +- src/renderer/hooks/index.ts | 8 +- src/renderer/hooks/use-app-focus.ts | 2 +- src/renderer/hooks/use-container-query.ts | 2 +- src/renderer/hooks/use-display-refresh.ts | 20 +- src/renderer/hooks/use-fast-average-color.tsx | 6 +- src/renderer/hooks/use-genre-route.ts | 7 +- src/renderer/hooks/use-hide-scrollbar.ts | 4 +- src/renderer/hooks/use-is-overflow.ts | 4 +- src/renderer/hooks/use-list-filter-refresh.ts | 16 +- .../hooks/use-server-authenticated.ts | 7 +- src/renderer/hooks/use-server-version.ts | 11 +- .../hooks/use-should-pad-titlebar.tsx | 3 +- src/renderer/hooks/use-song-change.ts | 5 +- src/renderer/hooks/use-theme.ts | 1 + src/renderer/index.ejs | 18 - src/renderer/index.html | 19 + src/renderer/is-updated-dialog.tsx | 15 +- src/renderer/layouts/auth-layout.tsx | 1 + src/renderer/layouts/default-layout.tsx | 25 +- .../default-layout/full-screen-overlay.tsx | 1 + .../layouts/default-layout/left-sidebar.tsx | 3 +- .../layouts/default-layout/main-content.tsx | 19 +- .../layouts/default-layout/player-bar.tsx | 1 + .../layouts/default-layout/right-sidebar.tsx | 15 +- .../default-layout/side-drawer-queue.tsx | 11 +- src/renderer/layouts/window-bar.tsx | 22 +- src/renderer/lib/react-query.ts | 74 +- src/renderer/{index.tsx => main.tsx} | 18 +- src/renderer/preload.d.ts | 90 - src/renderer/router/app-outlet.tsx | 13 +- src/renderer/router/app-router.tsx | 24 +- src/renderer/router/routes.ts | 4 +- src/renderer/router/titlebar-outlet.tsx | 1 + .../store/album-artist-list-data.store.ts | 8 +- src/renderer/store/album-artist.store.ts | 39 +- src/renderer/store/album-list-data.store.ts | 8 +- src/renderer/store/app.store.ts | 47 +- src/renderer/store/auth.store.ts | 19 +- src/renderer/store/event.store.ts | 28 +- .../store/full-screen-player.store.ts | 14 +- src/renderer/store/index.ts | 12 +- src/renderer/store/list.store.ts | 101 +- src/renderer/store/player.store.ts | 71 +- src/renderer/store/playlist.store.ts | 77 +- src/renderer/store/settings.store.ts | 152 +- src/renderer/styles/global.scss | 222 +- ...yscrollbars.scss => overlayscrollbars.css} | 0 src/renderer/types.ts | 227 +- src/renderer/types/emotion.d.ts | 1 - src/renderer/utils/format.tsx | 10 +- src/renderer/utils/index.ts | 10 +- src/renderer/utils/linkify.tsx | 2 +- .../utils/set-transcoded-queue-data.ts | 10 +- tsconfig.json | 28 +- tsconfig.node.json | 8 + tsconfig.web.json | 31 + 457 files changed, 9927 insertions(+), 11705 deletions(-) delete mode 100644 .erb/configs/.eslintrc delete mode 100644 .erb/configs/webpack.config.base.ts delete mode 100644 .erb/configs/webpack.config.eslint.ts delete mode 100644 .erb/configs/webpack.config.main.prod.ts delete mode 100644 .erb/configs/webpack.config.preload.dev.ts delete mode 100644 .erb/configs/webpack.config.remote.dev.ts delete mode 100644 .erb/configs/webpack.config.remote.prod.ts delete mode 100644 .erb/configs/webpack.config.renderer.dev.dll.ts delete mode 100644 .erb/configs/webpack.config.renderer.dev.ts delete mode 100644 .erb/configs/webpack.config.renderer.prod.ts delete mode 100644 .erb/configs/webpack.config.renderer.web.ts delete mode 100644 .erb/configs/webpack.config.web.prod.ts delete mode 100644 .erb/configs/webpack.paths.ts delete mode 100644 .erb/mocks/fileMock.js delete mode 100644 .erb/scripts/.eslintrc delete mode 100644 .erb/scripts/check-build-exists.ts delete mode 100644 .erb/scripts/check-native-dep.js delete mode 100644 .erb/scripts/check-node-env.js delete mode 100644 .erb/scripts/check-port-in-use.js delete mode 100644 .erb/scripts/clean.js delete mode 100644 .erb/scripts/delete-source-maps.js delete mode 100644 .erb/scripts/electron-rebuild.js delete mode 100644 .erb/scripts/link-modules.ts delete mode 100644 .erb/scripts/notarize.js delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js delete mode 100755 .husky/pre-commit create mode 100644 .prettierignore delete mode 100644 .prettierrc create mode 100644 .prettierrc.yaml delete mode 100644 .vscode/tasks.json create mode 100644 build/entitlements.mac.plist create mode 100644 build/icon.icns create mode 100644 build/icon.ico create mode 100644 build/icon.png create mode 100644 dev-app-update.yml create mode 100644 electron-builder.yml create mode 100644 electron.vite.config.ts create mode 100644 eslint.config.mjs delete mode 100644 ng.conf.template delete mode 100644 release/app/package-lock.json delete mode 100644 release/app/package.json create mode 100644 resources/icon.png delete mode 100644 src/__tests__/App.test.tsx rename src/main/{main.ts => index.ts} (91%) delete mode 100644 src/main/preload.ts rename src/{main => }/preload/browser.ts (100%) rename src/{main => }/preload/discord-rpc.ts (100%) create mode 100644 src/preload/index.d.ts create mode 100644 src/preload/index.ts rename src/{main => }/preload/ipc.ts (100%) rename src/{main => }/preload/local-settings.ts (77%) rename src/{main => }/preload/lyrics.ts (94%) rename src/{main => }/preload/mpris.ts (88%) rename src/{main => }/preload/mpv-player.ts (99%) rename src/{main => }/preload/remote.ts (89%) rename src/{main => }/preload/utils.ts (79%) create mode 100644 src/renderer/assets/assets.d.ts create mode 100644 src/renderer/assets/entitlements.mac.plist create mode 100644 src/renderer/assets/icons/1024x1024.png create mode 100644 src/renderer/assets/icons/128x128.png create mode 100644 src/renderer/assets/icons/256x256.png create mode 100644 src/renderer/assets/icons/32x32.png create mode 100644 src/renderer/assets/icons/512x512.png create mode 100644 src/renderer/assets/icons/64x64.png create mode 100644 src/renderer/assets/icons/favicon.ico create mode 100644 src/renderer/assets/icons/icon.icns create mode 100644 src/renderer/assets/icons/icon.ico create mode 100644 src/renderer/assets/icons/icon.png create mode 100644 src/renderer/assets/pause-circle.png create mode 100644 src/renderer/assets/play-circle.png create mode 100644 src/renderer/assets/skip-next.png create mode 100644 src/renderer/assets/skip-previous.png create mode 100644 src/renderer/env.d.ts rename src/renderer/features/shared/components/{item-image-placeholder.module.scss => item-image-placeholder.module.css} (100%) rename src/renderer/features/shared/components/{library-header.module.scss => library-header.module.css} (100%) delete mode 100644 src/renderer/index.ejs create mode 100644 src/renderer/index.html rename src/renderer/{index.tsx => main.tsx} (84%) delete mode 100644 src/renderer/preload.d.ts rename src/renderer/styles/{overlayscrollbars.scss => overlayscrollbars.css} (100%) create mode 100644 tsconfig.node.json create mode 100644 tsconfig.web.json diff --git a/.editorconfig b/.editorconfig index 779f99a1..9d08a1a8 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,12 +1,9 @@ root = true [*] -indent_style = space -indent_size = 4 -end_of_line = lf charset = utf-8 -trim_trailing_whitespace = true +indent_style = space +indent_size = 2 +end_of_line = lf insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false +trim_trailing_whitespace = true diff --git a/.erb/configs/.eslintrc b/.erb/configs/.eslintrc deleted file mode 100644 index 89d242ba..00000000 --- a/.erb/configs/.eslintrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "rules": { - "no-console": "off", - "global-require": "off", - "import/no-dynamic-require": "off" - } -} diff --git a/.erb/configs/webpack.config.base.ts b/.erb/configs/webpack.config.base.ts deleted file mode 100644 index c998500c..00000000 --- a/.erb/configs/webpack.config.base.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - * Base webpack config used across other specific configs - */ - -import webpack from 'webpack'; -import { dependencies as externals } from '../../release/app/package.json'; -import webpackPaths from './webpack.paths'; -import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin'; - -const createStyledComponentsTransformer = require('typescript-plugin-styled-components').default; - -const styledComponentsTransformer = createStyledComponentsTransformer(); - -const configuration: webpack.Configuration = { - externals: [...Object.keys(externals || {})], - - module: { - rules: [ - { - exclude: /node_modules/, - test: /\.[jt]sx?$/, - use: { - loader: 'ts-loader', - options: { - // Remove this line to enable type checking in webpack builds - transpileOnly: true, - getCustomTransformers: () => ({ before: [styledComponentsTransformer] }), - }, - }, - }, - ], - }, - - output: { - // https://github.com/webpack/webpack/issues/1114 - library: { - type: 'commonjs2', - }, - - path: webpackPaths.srcPath, - }, - - plugins: [ - new webpack.EnvironmentPlugin({ - NODE_ENV: 'production', - }), - ], - - /** - * Determine the array of extensions that should be used to resolve modules. - */ - resolve: { - extensions: ['.js', '.jsx', '.json', '.ts', '.tsx'], - fallback: { - child_process: false, - }, - plugins: [new TsconfigPathsPlugin({ baseUrl: webpackPaths.srcPath })], - modules: [webpackPaths.srcPath, 'node_modules'], - }, - - stats: 'errors-only', -}; - -export default configuration; diff --git a/.erb/configs/webpack.config.eslint.ts b/.erb/configs/webpack.config.eslint.ts deleted file mode 100644 index 35a631b7..00000000 --- a/.erb/configs/webpack.config.eslint.ts +++ /dev/null @@ -1,3 +0,0 @@ -/* eslint import/no-unresolved: off, import/no-self-import: off */ - -module.exports = require('./webpack.config.renderer.dev').default; diff --git a/.erb/configs/webpack.config.main.prod.ts b/.erb/configs/webpack.config.main.prod.ts deleted file mode 100644 index 10d1ea17..00000000 --- a/.erb/configs/webpack.config.main.prod.ts +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Webpack config for production electron main process - */ - -import path from 'path'; - -import TerserPlugin from 'terser-webpack-plugin'; -import webpack from 'webpack'; -import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'; -import { merge } from 'webpack-merge'; - -import checkNodeEnv from '../scripts/check-node-env'; -import deleteSourceMaps from '../scripts/delete-source-maps'; -import baseConfig from './webpack.config.base'; -import webpackPaths from './webpack.paths'; - -checkNodeEnv('production'); -deleteSourceMaps(); - -const devtoolsConfig = - process.env.DEBUG_PROD === 'true' - ? { - devtool: 'source-map', - } - : {}; - -const configuration: webpack.Configuration = { - ...devtoolsConfig, - - mode: 'production', - - target: 'electron-main', - - entry: { - main: path.join(webpackPaths.srcMainPath, 'main.ts'), - preload: path.join(webpackPaths.srcMainPath, 'preload.ts'), - }, - - output: { - path: webpackPaths.distMainPath, - filename: '[name].js', - }, - - optimization: { - minimizer: [ - new TerserPlugin({ - parallel: true, - }), - ], - }, - - plugins: [ - new BundleAnalyzerPlugin({ - analyzerMode: process.env.ANALYZE === 'true' ? 'server' : 'disabled', - }), - - /** - * Create global constants which can be configured at compile time. - * - * Useful for allowing different behaviour between development builds and - * release builds - * - * NODE_ENV should be production so that modules do not perform certain - * development checks - */ - new webpack.EnvironmentPlugin({ - NODE_ENV: 'production', - DEBUG_PROD: false, - START_MINIMIZED: false, - }), - ], - - /** - * Disables webpack processing of __dirname and __filename. - * If you run the bundle in node.js it falls back to these values of node.js. - * https://github.com/webpack/webpack/issues/2010 - */ - node: { - __dirname: false, - __filename: false, - }, -}; - -export default merge(baseConfig, configuration); diff --git a/.erb/configs/webpack.config.preload.dev.ts b/.erb/configs/webpack.config.preload.dev.ts deleted file mode 100644 index 6abb73f2..00000000 --- a/.erb/configs/webpack.config.preload.dev.ts +++ /dev/null @@ -1,70 +0,0 @@ -import path from 'path'; - -import webpack from 'webpack'; -import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'; -import { merge } from 'webpack-merge'; - -import checkNodeEnv from '../scripts/check-node-env'; -import baseConfig from './webpack.config.base'; -import webpackPaths from './webpack.paths'; - -// When an ESLint server is running, we can't set the NODE_ENV so we'll check if it's -// at the dev webpack config is not accidentally run in a production environment -if (process.env.NODE_ENV === 'production') { - checkNodeEnv('development'); -} - -const configuration: webpack.Configuration = { - devtool: 'inline-source-map', - - mode: 'development', - - target: 'electron-preload', - - entry: path.join(webpackPaths.srcMainPath, 'preload.ts'), - - output: { - path: webpackPaths.dllPath, - filename: 'preload.js', - }, - - plugins: [ - new BundleAnalyzerPlugin({ - analyzerMode: process.env.ANALYZE === 'true' ? 'server' : 'disabled', - }), - - /** - * Create global constants which can be configured at compile time. - * - * Useful for allowing different behaviour between development builds and - * release builds - * - * NODE_ENV should be production so that modules do not perform certain - * development checks - * - * By default, use 'development' as NODE_ENV. This can be overriden with - * 'staging', for example, by changing the ENV variables in the npm scripts - */ - new webpack.EnvironmentPlugin({ - NODE_ENV: 'development', - }), - - new webpack.LoaderOptionsPlugin({ - debug: true, - }), - ], - - /** - * Disables webpack processing of __dirname and __filename. - * If you run the bundle in node.js it falls back to these values of node.js. - * https://github.com/webpack/webpack/issues/2010 - */ - node: { - __dirname: false, - __filename: false, - }, - - watch: true, -}; - -export default merge(baseConfig, configuration); diff --git a/.erb/configs/webpack.config.remote.dev.ts b/.erb/configs/webpack.config.remote.dev.ts deleted file mode 100644 index 3313095e..00000000 --- a/.erb/configs/webpack.config.remote.dev.ts +++ /dev/null @@ -1,127 +0,0 @@ -import 'webpack-dev-server'; -import path from 'path'; - -import HtmlWebpackPlugin from 'html-webpack-plugin'; -import webpack from 'webpack'; -import { merge } from 'webpack-merge'; - -import checkNodeEnv from '../scripts/check-node-env'; -import baseConfig from './webpack.config.base'; -import webpackPaths from './webpack.paths'; - -const { version } = require('../../package.json'); - -// When an ESLint server is running, we can't set the NODE_ENV so we'll check if it's -// at the dev webpack config is not accidentally run in a production environment -if (process.env.NODE_ENV === 'production') { - checkNodeEnv('development'); -} - -const configuration: webpack.Configuration = { - devtool: 'inline-source-map', - - mode: 'development', - - target: ['web'], - - entry: { - remote: path.join(webpackPaths.srcRemotePath, 'index.tsx'), - worker: path.join(webpackPaths.srcRemotePath, 'service-worker.ts'), - }, - - output: { - path: webpackPaths.dllPath, - publicPath: '/', - filename: '[name].js', - library: { - type: 'umd', - }, - }, - - module: { - rules: [ - { - test: /\.s?css$/, - use: [ - 'style-loader', - { - loader: 'css-loader', - options: { - modules: true, - sourceMap: true, - importLoaders: 1, - }, - }, - 'sass-loader', - ], - include: /\.module\.s?(c|a)ss$/, - }, - { - test: /\.s?css$/, - use: ['style-loader', 'css-loader', 'sass-loader'], - exclude: /\.module\.s?(c|a)ss$/, - }, - // Fonts - { - test: /\.(woff|woff2|eot|ttf|otf)$/i, - type: 'asset/resource', - }, - // Images - { - test: /\.(png|svg|jpg|jpeg|gif)$/i, - type: 'asset/resource', - }, - ], - }, - plugins: [ - new webpack.NoEmitOnErrorsPlugin(), - - /** - * Create global constants which can be configured at compile time. - * - * Useful for allowing different behaviour between development builds and - * release builds - * - * NODE_ENV should be production so that modules do not perform certain - * development checks - * - * By default, use 'development' as NODE_ENV. This can be overriden with - * 'staging', for example, by changing the ENV variables in the npm scripts - */ - new webpack.EnvironmentPlugin({ - NODE_ENV: 'development', - }), - - new webpack.LoaderOptionsPlugin({ - debug: true, - }), - - new HtmlWebpackPlugin({ - filename: path.join('index.html'), - template: path.join(webpackPaths.srcRemotePath, 'index.ejs'), - favicon: path.join(webpackPaths.assetsPath, 'icons', 'favicon.ico'), - minify: { - collapseWhitespace: true, - removeAttributeQuotes: true, - removeComments: true, - }, - isBrowser: true, - env: process.env.NODE_ENV, - isDevelopment: process.env.NODE_ENV !== 'production', - nodeModules: webpackPaths.appNodeModulesPath, - templateParameters: { - version, - prod: false, - }, - }), - ], - - node: { - __dirname: false, - __filename: false, - }, - - watch: true, -}; - -export default merge(baseConfig, configuration); diff --git a/.erb/configs/webpack.config.remote.prod.ts b/.erb/configs/webpack.config.remote.prod.ts deleted file mode 100644 index d96dbe5b..00000000 --- a/.erb/configs/webpack.config.remote.prod.ts +++ /dev/null @@ -1,142 +0,0 @@ -/** - * Build config for electron renderer process - */ - -import path from 'path'; - -import CssMinimizerPlugin from 'css-minimizer-webpack-plugin'; -import HtmlWebpackPlugin from 'html-webpack-plugin'; -import MiniCssExtractPlugin from 'mini-css-extract-plugin'; -import TerserPlugin from 'terser-webpack-plugin'; -import webpack from 'webpack'; -import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'; -import { merge } from 'webpack-merge'; - -import checkNodeEnv from '../scripts/check-node-env'; -import deleteSourceMaps from '../scripts/delete-source-maps'; -import baseConfig from './webpack.config.base'; -import webpackPaths from './webpack.paths'; - -const { version } = require('../../package.json'); - -checkNodeEnv('production'); -deleteSourceMaps(); - -const devtoolsConfig = - process.env.DEBUG_PROD === 'true' - ? { - devtool: 'source-map', - } - : {}; - -const configuration: webpack.Configuration = { - ...devtoolsConfig, - - mode: 'production', - - target: ['web'], - - entry: { - remote: path.join(webpackPaths.srcRemotePath, 'index.tsx'), - worker: path.join(webpackPaths.srcRemotePath, 'service-worker.ts'), - }, - - output: { - path: webpackPaths.distRemotePath, - publicPath: './', - filename: '[name].js', - library: { - type: 'umd', - }, - }, - - module: { - rules: [ - { - test: /\.s?(a|c)ss$/, - use: [ - MiniCssExtractPlugin.loader, - { - loader: 'css-loader', - options: { - modules: true, - sourceMap: true, - importLoaders: 1, - }, - }, - 'sass-loader', - ], - include: /\.module\.s?(c|a)ss$/, - }, - { - test: /\.s?(a|c)ss$/, - use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'], - exclude: /\.module\.s?(c|a)ss$/, - }, - // Fonts - { - test: /\.(woff|woff2|eot|ttf|otf)$/i, - type: 'asset/resource', - }, - // Images - { - test: /\.(png|svg|jpg|jpeg|gif)$/i, - type: 'asset/resource', - }, - ], - }, - - optimization: { - minimize: true, - minimizer: [ - new TerserPlugin({ - parallel: true, - }), - new CssMinimizerPlugin(), - ], - }, - - plugins: [ - /** - * Create global constants which can be configured at compile time. - * - * Useful for allowing different behaviour between development builds and - * release builds - * - * NODE_ENV should be production so that modules do not perform certain - * development checks - */ - new webpack.EnvironmentPlugin({ - NODE_ENV: 'production', - DEBUG_PROD: false, - }), - - new MiniCssExtractPlugin({ - filename: 'remote.css', - }), - - new BundleAnalyzerPlugin({ - analyzerMode: process.env.ANALYZE === 'true' ? 'server' : 'disabled', - }), - - new HtmlWebpackPlugin({ - filename: 'index.html', - template: path.join(webpackPaths.srcRemotePath, 'index.ejs'), - favicon: path.join(webpackPaths.assetsPath, 'icons', 'favicon.ico'), - minify: { - collapseWhitespace: true, - removeAttributeQuotes: true, - removeComments: true, - }, - isBrowser: true, - env: process.env.NODE_ENV, - isDevelopment: process.env.NODE_ENV !== 'production', - templateParameters: { - version, - prod: true, - }, - }), - ], -}; - -export default merge(baseConfig, configuration); diff --git a/.erb/configs/webpack.config.renderer.dev.dll.ts b/.erb/configs/webpack.config.renderer.dev.dll.ts deleted file mode 100644 index dea71afb..00000000 --- a/.erb/configs/webpack.config.renderer.dev.dll.ts +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Builds the DLL for development electron renderer process - */ - -import path from 'path'; - -import webpack from 'webpack'; -import { merge } from 'webpack-merge'; - -import { dependencies } from '../../package.json'; -import checkNodeEnv from '../scripts/check-node-env'; -import baseConfig from './webpack.config.base'; -import webpackPaths from './webpack.paths'; - -checkNodeEnv('development'); - -const dist = webpackPaths.dllPath; - -const configuration: webpack.Configuration = { - context: webpackPaths.rootPath, - - devtool: 'eval', - - mode: 'development', - - target: 'electron-renderer', - - externals: ['fsevents', 'crypto-browserify'], - - /** - * Use `module` from `webpack.config.renderer.dev.js` - */ - module: require('./webpack.config.renderer.dev').default.module, - - entry: { - renderer: Object.keys(dependencies || {}), - }, - - output: { - path: dist, - filename: '[name].dev.dll.js', - library: { - name: 'renderer', - type: 'var', - }, - }, - - plugins: [ - new webpack.DllPlugin({ - path: path.join(dist, '[name].json'), - name: '[name]', - }), - - /** - * Create global constants which can be configured at compile time. - * - * Useful for allowing different behaviour between development builds and - * release builds - * - * NODE_ENV should be production so that modules do not perform certain - * development checks - */ - new webpack.EnvironmentPlugin({ - NODE_ENV: 'development', - }), - - new webpack.LoaderOptionsPlugin({ - debug: true, - options: { - context: webpackPaths.srcPath, - output: { - path: webpackPaths.dllPath, - }, - }, - }), - ], -}; - -export default merge(baseConfig, configuration); diff --git a/.erb/configs/webpack.config.renderer.dev.ts b/.erb/configs/webpack.config.renderer.dev.ts deleted file mode 100644 index 46e51530..00000000 --- a/.erb/configs/webpack.config.renderer.dev.ts +++ /dev/null @@ -1,201 +0,0 @@ -import 'webpack-dev-server'; -import { execSync, spawn } from 'child_process'; -import fs from 'fs'; -import path from 'path'; - -import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin'; -import chalk from 'chalk'; -import HtmlWebpackPlugin from 'html-webpack-plugin'; -import webpack from 'webpack'; -import { merge } from 'webpack-merge'; - -import checkNodeEnv from '../scripts/check-node-env'; -import baseConfig from './webpack.config.base'; -import webpackPaths from './webpack.paths'; - -// When an ESLint server is running, we can't set the NODE_ENV so we'll check if it's -// at the dev webpack config is not accidentally run in a production environment -if (process.env.NODE_ENV === 'production') { - checkNodeEnv('development'); -} - -const port = process.env.PORT || 4343; -const manifest = path.resolve(webpackPaths.dllPath, 'renderer.json'); -// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -const requiredByDLLConfig = module.parent!.filename.includes('webpack.config.renderer.dev.dll'); - -/** - * Warn if the DLL is not built - */ -if (!requiredByDLLConfig && !(fs.existsSync(webpackPaths.dllPath) && fs.existsSync(manifest))) { - console.log( - chalk.black.bgYellow.bold( - 'The DLL files are missing. Sit back while we build them for you with "npm run build-dll"', - ), - ); - execSync('npm run postinstall'); -} - -const configuration: webpack.Configuration = { - devtool: 'inline-source-map', - - mode: 'development', - - target: ['web', 'electron-renderer'], - - entry: [ - `webpack-dev-server/client?http://localhost:${port}/dist`, - 'webpack/hot/only-dev-server', - path.join(webpackPaths.srcRendererPath, 'index.tsx'), - ], - - output: { - path: webpackPaths.distRendererPath, - publicPath: '/', - filename: 'renderer.dev.js', - library: { - type: 'umd', - }, - }, - - module: { - rules: [ - { - test: /\.s?css$/, - use: [ - 'style-loader', - { - loader: 'css-loader', - options: { - modules: { - localIdentName: '[name]__[local]--[hash:base64:5]', - exportLocalsConvention: 'camelCaseOnly', - }, - sourceMap: true, - importLoaders: 1, - }, - }, - 'sass-loader', - ], - include: /\.module\.s?(c|a)ss$/, - }, - { - test: /\.s?css$/, - use: ['style-loader', 'css-loader', 'sass-loader'], - exclude: /\.module\.s?(c|a)ss$/, - }, - // Fonts - { - test: /\.(woff|woff2|eot|ttf|otf)$/i, - type: 'asset/resource', - }, - // Images - { - test: /\.(png|svg|jpg|jpeg|gif)$/i, - type: 'asset/resource', - }, - ], - }, - plugins: [ - ...(requiredByDLLConfig - ? [] - : [ - new webpack.DllReferencePlugin({ - context: webpackPaths.dllPath, - manifest: require(manifest), - sourceType: 'var', - }), - ]), - - new webpack.NoEmitOnErrorsPlugin(), - - /** - * Create global constants which can be configured at compile time. - * - * Useful for allowing different behaviour between development builds and - * release builds - * - * NODE_ENV should be production so that modules do not perform certain - * development checks - * - * By default, use 'development' as NODE_ENV. This can be overriden with - * 'staging', for example, by changing the ENV variables in the npm scripts - */ - new webpack.EnvironmentPlugin({ - NODE_ENV: 'development', - }), - - new webpack.LoaderOptionsPlugin({ - debug: true, - }), - - new ReactRefreshWebpackPlugin(), - - new HtmlWebpackPlugin({ - filename: path.join('index.html'), - template: path.join(webpackPaths.srcRendererPath, 'index.ejs'), - minify: { - collapseWhitespace: true, - removeAttributeQuotes: true, - removeComments: true, - }, - isBrowser: false, - env: process.env.NODE_ENV, - isDevelopment: process.env.NODE_ENV !== 'production', - nodeModules: webpackPaths.appNodeModulesPath, - templateParameters: { - web: false, - }, - }), - ], - - node: { - __dirname: false, - __filename: false, - }, - - devServer: { - port, - compress: true, - hot: true, - headers: { 'Access-Control-Allow-Origin': '*' }, - static: { - publicPath: '/', - }, - historyApiFallback: { - verbose: true, - }, - setupMiddlewares(middlewares) { - console.log('Starting preload.js builder...'); - const preloadProcess = spawn('npm', ['run', 'start:preload'], { - shell: true, - stdio: 'inherit', - }) - .on('close', (code: number) => process.exit(code!)) - .on('error', (spawnError) => console.error(spawnError)); - - console.log('Starting remote.js builder...'); - const remoteProcess = spawn('npm', ['run', 'start:remote'], { - shell: true, - stdio: 'inherit', - }) - .on('close', (code: number) => process.exit(code!)) - .on('error', (spawnError) => console.error(spawnError)); - - console.log('Starting Main Process...'); - spawn('npm', ['run', 'start:main'], { - shell: true, - stdio: 'inherit', - }) - .on('close', (code: number) => { - preloadProcess.kill(); - remoteProcess.kill(); - process.exit(code!); - }) - .on('error', (spawnError) => console.error(spawnError)); - return middlewares; - }, - }, -}; - -export default merge(baseConfig, configuration); diff --git a/.erb/configs/webpack.config.renderer.prod.ts b/.erb/configs/webpack.config.renderer.prod.ts deleted file mode 100644 index 379bb2d0..00000000 --- a/.erb/configs/webpack.config.renderer.prod.ts +++ /dev/null @@ -1,137 +0,0 @@ -/** - * Build config for electron renderer process - */ - -import path from 'path'; - -import CssMinimizerPlugin from 'css-minimizer-webpack-plugin'; -import HtmlWebpackPlugin from 'html-webpack-plugin'; -import MiniCssExtractPlugin from 'mini-css-extract-plugin'; -import TerserPlugin from 'terser-webpack-plugin'; -import webpack from 'webpack'; -import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'; -import { merge } from 'webpack-merge'; - -import checkNodeEnv from '../scripts/check-node-env'; -import deleteSourceMaps from '../scripts/delete-source-maps'; -import baseConfig from './webpack.config.base'; -import webpackPaths from './webpack.paths'; - -checkNodeEnv('production'); -deleteSourceMaps(); - -const devtoolsConfig = - process.env.DEBUG_PROD === 'true' - ? { - devtool: 'source-map', - } - : {}; - -const configuration: webpack.Configuration = { - ...devtoolsConfig, - - mode: 'production', - - target: ['web', 'electron-renderer'], - - entry: [path.join(webpackPaths.srcRendererPath, 'index.tsx')], - - output: { - path: webpackPaths.distRendererPath, - publicPath: './', - filename: 'renderer.js', - library: { - type: 'umd', - }, - }, - - module: { - rules: [ - { - test: /\.s?(a|c)ss$/, - use: [ - MiniCssExtractPlugin.loader, - { - loader: 'css-loader', - options: { - modules: { - localIdentName: '[name]__[local]--[hash:base64:5]', - exportLocalsConvention: 'camelCaseOnly', - }, - sourceMap: true, - importLoaders: 1, - }, - }, - 'sass-loader', - ], - include: /\.module\.s?(c|a)ss$/, - }, - { - test: /\.s?(a|c)ss$/, - use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'], - exclude: /\.module\.s?(c|a)ss$/, - }, - // Fonts - { - test: /\.(woff|woff2|eot|ttf|otf)$/i, - type: 'asset/resource', - }, - // Images - { - test: /\.(png|svg|jpg|jpeg|gif)$/i, - type: 'asset/resource', - }, - ], - }, - - optimization: { - minimize: true, - minimizer: [ - new TerserPlugin({ - parallel: true, - }), - new CssMinimizerPlugin(), - ], - }, - - plugins: [ - /** - * Create global constants which can be configured at compile time. - * - * Useful for allowing different behaviour between development builds and - * release builds - * - * NODE_ENV should be production so that modules do not perform certain - * development checks - */ - new webpack.EnvironmentPlugin({ - NODE_ENV: 'production', - DEBUG_PROD: false, - }), - - new MiniCssExtractPlugin({ - filename: 'style.css', - }), - - new BundleAnalyzerPlugin({ - analyzerMode: process.env.ANALYZE === 'true' ? 'server' : 'disabled', - }), - - new HtmlWebpackPlugin({ - filename: 'index.html', - template: path.join(webpackPaths.srcRendererPath, 'index.ejs'), - minify: { - collapseWhitespace: true, - removeAttributeQuotes: true, - removeComments: true, - }, - isBrowser: false, - isDevelopment: process.env.NODE_ENV !== 'production', - templateParameters: { - web: false, - }, - }), - ], -}; - -export default merge(baseConfig, configuration); diff --git a/.erb/configs/webpack.config.renderer.web.ts b/.erb/configs/webpack.config.renderer.web.ts deleted file mode 100644 index 82b5f79a..00000000 --- a/.erb/configs/webpack.config.renderer.web.ts +++ /dev/null @@ -1,147 +0,0 @@ -import 'webpack-dev-server'; -import path from 'path'; - -import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin'; -import HtmlWebpackPlugin from 'html-webpack-plugin'; -import webpack from 'webpack'; -import { merge } from 'webpack-merge'; - -import checkNodeEnv from '../scripts/check-node-env'; -import baseConfig from './webpack.config.base'; -import webpackPaths from './webpack.paths'; - -// When an ESLint server is running, we can't set the NODE_ENV so we'll check if it's -// at the dev webpack config is not accidentally run in a production environment -if (process.env.NODE_ENV === 'production') { - checkNodeEnv('development'); -} - -const port = process.env.PORT || 4343; - -const configuration: webpack.Configuration = { - devtool: 'inline-source-map', - - mode: 'development', - - target: ['web', 'electron-renderer'], - - entry: [ - `webpack-dev-server/client?http://localhost:${port}/dist`, - 'webpack/hot/only-dev-server', - path.join(webpackPaths.srcRendererPath, 'index.tsx'), - ], - - output: { - path: webpackPaths.distRendererPath, - publicPath: '/', - filename: 'renderer.dev.js', - library: { - type: 'umd', - }, - }, - - module: { - rules: [ - { - test: /\.s?css$/, - use: [ - 'style-loader', - { - loader: 'css-loader', - options: { - modules: { - localIdentName: '[name]__[local]--[hash:base64:5]', - exportLocalsConvention: 'camelCaseOnly', - }, - sourceMap: true, - importLoaders: 1, - }, - }, - 'sass-loader', - ], - include: /\.module\.s?(c|a)ss$/, - }, - { - test: /\.s?css$/, - use: ['style-loader', 'css-loader', 'sass-loader'], - exclude: /\.module\.s?(c|a)ss$/, - }, - // Fonts - { - test: /\.(woff|woff2|eot|ttf|otf)$/i, - type: 'asset/resource', - }, - // Images - { - test: /\.(png|svg|jpg|jpeg|gif)$/i, - type: 'asset/resource', - }, - ], - }, - plugins: [ - new webpack.NoEmitOnErrorsPlugin(), - - /** - * Create global constants which can be configured at compile time. - * - * Useful for allowing different behaviour between development builds and - * release builds - * - * NODE_ENV should be production so that modules do not perform certain - * development checks - * - * By default, use 'development' as NODE_ENV. This can be overriden with - * 'staging', for example, by changing the ENV variables in the npm scripts - */ - new webpack.EnvironmentPlugin({ - NODE_ENV: 'development', - }), - - new webpack.LoaderOptionsPlugin({ - debug: true, - }), - - new ReactRefreshWebpackPlugin(), - - new HtmlWebpackPlugin({ - filename: path.join('index.html'), - template: path.join(webpackPaths.srcRendererPath, 'index.ejs'), - favicon: path.join(webpackPaths.assetsPath, 'icons', 'favicon.ico'), - minify: { - collapseWhitespace: true, - removeAttributeQuotes: true, - removeComments: true, - }, - isBrowser: false, - env: process.env.NODE_ENV, - isDevelopment: process.env.NODE_ENV !== 'production', - nodeModules: webpackPaths.appNodeModulesPath, - templateParameters: { - web: false, // with hot reload, we don't have NGINX injecting variables - }, - }), - ], - - node: { - __dirname: false, - __filename: false, - }, - - devServer: { - port, - compress: true, - hot: true, - headers: { 'Access-Control-Allow-Origin': '*' }, - static: { - publicPath: '/', - }, - historyApiFallback: { - verbose: true, - }, - setupMiddlewares(middlewares) { - return middlewares; - }, - }, -}; - -export default merge(baseConfig, configuration); diff --git a/.erb/configs/webpack.config.web.prod.ts b/.erb/configs/webpack.config.web.prod.ts deleted file mode 100644 index ed935fd6..00000000 --- a/.erb/configs/webpack.config.web.prod.ts +++ /dev/null @@ -1,138 +0,0 @@ -/** - * Build config for electron renderer process - */ - -import path from 'path'; - -import CssMinimizerPlugin from 'css-minimizer-webpack-plugin'; -import HtmlWebpackPlugin from 'html-webpack-plugin'; -import MiniCssExtractPlugin from 'mini-css-extract-plugin'; -import TerserPlugin from 'terser-webpack-plugin'; -import webpack from 'webpack'; -import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'; -import { merge } from 'webpack-merge'; - -import checkNodeEnv from '../scripts/check-node-env'; -import deleteSourceMaps from '../scripts/delete-source-maps'; -import baseConfig from './webpack.config.base'; -import webpackPaths from './webpack.paths'; - -checkNodeEnv('production'); -deleteSourceMaps(); - -const devtoolsConfig = - process.env.DEBUG_PROD === 'true' - ? { - devtool: 'source-map', - } - : {}; - -const configuration: webpack.Configuration = { - ...devtoolsConfig, - - mode: 'production', - - target: ['web'], - - entry: [path.join(webpackPaths.srcRendererPath, 'index.tsx')], - - output: { - path: webpackPaths.distWebPath, - publicPath: 'auto', - filename: 'renderer.js', - library: { - type: 'umd', - }, - }, - - module: { - rules: [ - { - test: /\.s?(a|c)ss$/, - use: [ - MiniCssExtractPlugin.loader, - { - loader: 'css-loader', - options: { - modules: { - localIdentName: '[name]__[local]--[hash:base64:5]', - exportLocalsConvention: 'camelCaseOnly', - }, - sourceMap: true, - importLoaders: 1, - }, - }, - 'sass-loader', - ], - include: /\.module\.s?(c|a)ss$/, - }, - { - test: /\.s?(a|c)ss$/, - use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'], - exclude: /\.module\.s?(c|a)ss$/, - }, - // Fonts - { - test: /\.(woff|woff2|eot|ttf|otf)$/i, - type: 'asset/resource', - }, - // Images - { - test: /\.(png|svg|jpg|jpeg|gif)$/i, - type: 'asset/resource', - }, - ], - }, - - optimization: { - minimize: true, - minimizer: [ - new TerserPlugin({ - parallel: true, - }), - new CssMinimizerPlugin(), - ], - }, - - plugins: [ - /** - * Create global constants which can be configured at compile time. - * - * Useful for allowing different behaviour between development builds and - * release builds - * - * NODE_ENV should be production so that modules do not perform certain - * development checks - */ - new webpack.EnvironmentPlugin({ - NODE_ENV: 'production', - DEBUG_PROD: false, - }), - - new MiniCssExtractPlugin({ - filename: 'style.css', - }), - - new BundleAnalyzerPlugin({ - analyzerMode: process.env.ANALYZE === 'true' ? 'server' : 'disabled', - }), - - new HtmlWebpackPlugin({ - filename: 'index.html', - template: path.join(webpackPaths.srcRendererPath, 'index.ejs'), - favicon: path.join(webpackPaths.assetsPath, 'icons', 'favicon.ico'), - minify: { - collapseWhitespace: true, - removeAttributeQuotes: true, - removeComments: true, - }, - isBrowser: false, - isDevelopment: process.env.NODE_ENV !== 'production', - templateParameters: { - web: true, - }, - }), - ], -}; - -export default merge(baseConfig, configuration); diff --git a/.erb/configs/webpack.paths.ts b/.erb/configs/webpack.paths.ts deleted file mode 100644 index cb1db0cb..00000000 --- a/.erb/configs/webpack.paths.ts +++ /dev/null @@ -1,46 +0,0 @@ -const path = require('path'); - -const rootPath = path.join(__dirname, '../..'); - -const dllPath = path.join(__dirname, '../dll'); - -const srcPath = path.join(rootPath, 'src'); -const assetsPath = path.join(rootPath, 'assets'); -const srcMainPath = path.join(srcPath, 'main'); -const srcRemotePath = path.join(srcPath, 'remote'); -const srcRendererPath = path.join(srcPath, 'renderer'); - -const releasePath = path.join(rootPath, 'release'); -const appPath = path.join(releasePath, 'app'); -const appPackagePath = path.join(appPath, 'package.json'); -const appNodeModulesPath = path.join(appPath, 'node_modules'); -const srcNodeModulesPath = path.join(srcPath, 'node_modules'); - -const distPath = path.join(appPath, 'dist'); -const distMainPath = path.join(distPath, 'main'); -const distRemotePath = path.join(distPath, 'remote'); -const distRendererPath = path.join(distPath, 'renderer'); -const distWebPath = path.join(distPath, 'web'); - -const buildPath = path.join(releasePath, 'build'); - -export default { - assetsPath, - rootPath, - dllPath, - srcPath, - srcMainPath, - srcRemotePath, - srcRendererPath, - releasePath, - appPath, - appPackagePath, - appNodeModulesPath, - srcNodeModulesPath, - distPath, - distMainPath, - distRemotePath, - distRendererPath, - distWebPath, - buildPath, -}; diff --git a/.erb/mocks/fileMock.js b/.erb/mocks/fileMock.js deleted file mode 100644 index 602eb23e..00000000 --- a/.erb/mocks/fileMock.js +++ /dev/null @@ -1 +0,0 @@ -export default 'test-file-stub'; diff --git a/.erb/scripts/.eslintrc b/.erb/scripts/.eslintrc deleted file mode 100644 index 35dc618d..00000000 --- a/.erb/scripts/.eslintrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "rules": { - "no-console": "off", - "global-require": "off", - "import/no-dynamic-require": "off", - "import/no-extraneous-dependencies": "off" - } -} diff --git a/.erb/scripts/check-build-exists.ts b/.erb/scripts/check-build-exists.ts deleted file mode 100644 index 1d299a2f..00000000 --- a/.erb/scripts/check-build-exists.ts +++ /dev/null @@ -1,33 +0,0 @@ -// Check if the renderer and main bundles are built -import path from 'path'; -import chalk from 'chalk'; -import fs from 'fs'; -import webpackPaths from '../configs/webpack.paths'; - -const mainPath = path.join(webpackPaths.distMainPath, 'main.js'); -const remotePath = path.join(webpackPaths.distMainPath, 'remote.js'); -const rendererPath = path.join(webpackPaths.distRendererPath, 'renderer.js'); - -if (!fs.existsSync(mainPath)) { - throw new Error( - chalk.whiteBright.bgRed.bold( - 'The main process is not built yet. Build it by running "npm run build:main"', - ), - ); -} - -if (!fs.existsSync(remotePath)) { - throw new Error( - chalk.whiteBright.bgRed.bold( - 'The remote process is not built yet. Build it by running "npm run build:remote"', - ), - ); -} - -if (!fs.existsSync(rendererPath)) { - throw new Error( - chalk.whiteBright.bgRed.bold( - 'The renderer process is not built yet. Build it by running "npm run build:renderer"', - ), - ); -} diff --git a/.erb/scripts/check-native-dep.js b/.erb/scripts/check-native-dep.js deleted file mode 100644 index f5a23268..00000000 --- a/.erb/scripts/check-native-dep.js +++ /dev/null @@ -1,54 +0,0 @@ -import fs from 'fs'; -import chalk from 'chalk'; -import { execSync } from 'child_process'; -import { dependencies } from '../../package.json'; - -if (dependencies) { - const dependenciesKeys = Object.keys(dependencies); - const nativeDeps = fs - .readdirSync('node_modules') - .filter((folder) => fs.existsSync(`node_modules/${folder}/binding.gyp`)); - if (nativeDeps.length === 0) { - process.exit(0); - } - try { - // Find the reason for why the dependency is installed. If it is installed - // because of a devDependency then that is okay. Warn when it is installed - // because of a dependency - const { dependencies: dependenciesObject } = JSON.parse( - execSync(`npm ls ${nativeDeps.join(' ')} --json`).toString() - ); - const rootDependencies = Object.keys(dependenciesObject); - const filteredRootDependencies = rootDependencies.filter((rootDependency) => - dependenciesKeys.includes(rootDependency) - ); - if (filteredRootDependencies.length > 0) { - const plural = filteredRootDependencies.length > 1; - console.log(` - ${chalk.whiteBright.bgYellow.bold( - 'Webpack does not work with native dependencies.' - )} -${chalk.bold(filteredRootDependencies.join(', '))} ${ - plural ? 'are native dependencies' : 'is a native dependency' - } and should be installed inside of the "./release/app" folder. - First, uninstall the packages from "./package.json": -${chalk.whiteBright.bgGreen.bold('npm uninstall your-package')} - ${chalk.bold( - 'Then, instead of installing the package to the root "./package.json":' - )} -${chalk.whiteBright.bgRed.bold('npm install your-package')} - ${chalk.bold('Install the package to "./release/app/package.json"')} -${chalk.whiteBright.bgGreen.bold( - 'cd ./release/app && npm install your-package' -)} - Read more about native dependencies at: -${chalk.bold( - 'https://electron-react-boilerplate.js.org/docs/adding-dependencies/#module-structure' -)} - `); - process.exit(1); - } - } catch (e) { - console.log('Native dependencies could not be checked'); - } -} diff --git a/.erb/scripts/check-node-env.js b/.erb/scripts/check-node-env.js deleted file mode 100644 index 0e74b115..00000000 --- a/.erb/scripts/check-node-env.js +++ /dev/null @@ -1,16 +0,0 @@ -import chalk from 'chalk'; - -export default function checkNodeEnv(expectedEnv) { - if (!expectedEnv) { - throw new Error('"expectedEnv" not set'); - } - - if (process.env.NODE_ENV !== expectedEnv) { - console.log( - chalk.whiteBright.bgRed.bold( - `"process.env.NODE_ENV" must be "${expectedEnv}" to use this webpack config` - ) - ); - process.exit(2); - } -} diff --git a/.erb/scripts/check-port-in-use.js b/.erb/scripts/check-port-in-use.js deleted file mode 100644 index 9d74213d..00000000 --- a/.erb/scripts/check-port-in-use.js +++ /dev/null @@ -1,16 +0,0 @@ -import chalk from 'chalk'; -import detectPort from 'detect-port'; - -const port = process.env.PORT || '4343'; - -detectPort(port, (err, availablePort) => { - if (port !== String(availablePort)) { - throw new Error( - chalk.whiteBright.bgRed.bold( - `Port "${port}" on "localhost" is already in use. Please use another port. ex: PORT=4343 npm start` - ) - ); - } else { - process.exit(0); - } -}); diff --git a/.erb/scripts/clean.js b/.erb/scripts/clean.js deleted file mode 100644 index b03b0baf..00000000 --- a/.erb/scripts/clean.js +++ /dev/null @@ -1,17 +0,0 @@ -import rimraf from 'rimraf'; -import process from 'process'; -import webpackPaths from '../configs/webpack.paths'; - -const args = process.argv.slice(2); -const commandMap = { - dist: webpackPaths.distPath, - release: webpackPaths.releasePath, - dll: webpackPaths.dllPath, -}; - -args.forEach((x) => { - const pathToRemove = commandMap[x]; - if (pathToRemove !== undefined) { - rimraf.sync(pathToRemove); - } -}); diff --git a/.erb/scripts/delete-source-maps.js b/.erb/scripts/delete-source-maps.js deleted file mode 100644 index 21d6cb58..00000000 --- a/.erb/scripts/delete-source-maps.js +++ /dev/null @@ -1,9 +0,0 @@ -import path from 'path'; -import rimraf from 'rimraf'; -import webpackPaths from '../configs/webpack.paths'; - -export default function deleteSourceMaps() { - rimraf.sync(path.join(webpackPaths.distMainPath, '*.js.map')); - rimraf.sync(path.join(webpackPaths.distRemotePath, '*.js.map')); - rimraf.sync(path.join(webpackPaths.distRendererPath, '*.js.map')); -} diff --git a/.erb/scripts/electron-rebuild.js b/.erb/scripts/electron-rebuild.js deleted file mode 100644 index 0bea3279..00000000 --- a/.erb/scripts/electron-rebuild.js +++ /dev/null @@ -1,20 +0,0 @@ -import { execSync } from 'child_process'; -import fs from 'fs'; -import { dependencies } from '../../release/app/package.json'; -import webpackPaths from '../configs/webpack.paths'; - -if ( - Object.keys(dependencies || {}).length > 0 && - fs.existsSync(webpackPaths.appNodeModulesPath) -) { - const electronRebuildCmd = - '../../node_modules/.bin/electron-rebuild --force --types prod,dev,optional --module-dir .'; - const cmd = - process.platform === 'win32' - ? electronRebuildCmd.replace(/\//g, '\\') - : electronRebuildCmd; - execSync(cmd, { - cwd: webpackPaths.appPath, - stdio: 'inherit', - }); -} diff --git a/.erb/scripts/link-modules.ts b/.erb/scripts/link-modules.ts deleted file mode 100644 index 6cc31e66..00000000 --- a/.erb/scripts/link-modules.ts +++ /dev/null @@ -1,9 +0,0 @@ -import fs from 'fs'; -import webpackPaths from '../configs/webpack.paths'; - -const { srcNodeModulesPath } = webpackPaths; -const { appNodeModulesPath } = webpackPaths; - -if (!fs.existsSync(srcNodeModulesPath) && fs.existsSync(appNodeModulesPath)) { - fs.symlinkSync(appNodeModulesPath, srcNodeModulesPath, 'junction'); -} diff --git a/.erb/scripts/notarize.js b/.erb/scripts/notarize.js deleted file mode 100644 index 4fd3bb8f..00000000 --- a/.erb/scripts/notarize.js +++ /dev/null @@ -1,30 +0,0 @@ -const { notarize } = require('electron-notarize'); -const { build } = require('../../package.json'); - -exports.default = async function notarizeMacos(context) { - const { electronPlatformName, appOutDir } = context; - if (electronPlatformName !== 'darwin') { - return; - } - - if (process.env.CI !== 'true') { - console.warn('Skipping notarizing step. Packaging is not running in CI'); - return; - } - - if (!('APPLE_ID' in process.env && 'APPLE_ID_PASS' in process.env)) { - console.warn( - 'Skipping notarizing step. APPLE_ID and APPLE_ID_PASS env variables must be set' - ); - return; - } - - const appName = context.packager.appInfo.productFilename; - - await notarize({ - appBundleId: build.appId, - appPath: `${appOutDir}/${appName}.app`, - appleId: process.env.APPLE_ID, - appleIdPassword: process.env.APPLE_ID_PASS, - }); -}; diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 19391098..00000000 --- a/.eslintignore +++ /dev/null @@ -1,34 +0,0 @@ -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Coverage directory used by tools like istanbul -coverage -.eslintcache - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules - -# OSX -.DS_Store - -src/i18n -release/app/dist -release/build -.erb/dll - -.idea -npm-debug.log.* -*.css.d.ts -*.sass.d.ts -*.scss.d.ts - -# eslint ignores hidden directories by default: -# https://github.com/eslint/eslint/issues/8429 -!.erb diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index ecc54801..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,97 +0,0 @@ -module.exports = { - extends: ['erb', 'plugin:typescript-sort-keys/recommended'], - ignorePatterns: ['.erb/*', 'server'], - parser: '@typescript-eslint/parser', - parserOptions: { - createDefaultProgram: true, - ecmaVersion: 12, - parser: '@typescript-eslint/parser', - project: './tsconfig.json', - sourceType: 'module', - tsconfigRootDir: './', - }, - plugins: ['@typescript-eslint', 'import', 'sort-keys-fix'], - rules: { - '@typescript-eslint/naming-convention': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-shadow': ['off'], - '@typescript-eslint/no-unused-vars': ['error'], - '@typescript-eslint/no-use-before-define': ['error'], - 'default-case': 'off', - 'import/extensions': 'off', - 'import/no-absolute-path': 'off', - // A temporary hack related to IDE not resolving correct package.json - 'import/no-extraneous-dependencies': 'off', - 'import/no-unresolved': 'error', - 'import/order': [ - 'error', - { - alphabetize: { - caseInsensitive: true, - order: 'asc', - }, - groups: ['builtin', 'external', 'internal', ['parent', 'sibling']], - 'newlines-between': 'never', - pathGroups: [ - { - group: 'external', - pattern: 'react', - position: 'before', - }, - ], - pathGroupsExcludedImportTypes: ['react'], - }, - ], - 'import/prefer-default-export': 'off', - 'jsx-a11y/click-events-have-key-events': 'off', - 'jsx-a11y/interactive-supports-focus': 'off', - 'jsx-a11y/media-has-caption': 'off', - 'no-await-in-loop': 'off', - 'no-console': 'off', - 'no-nested-ternary': 'off', - 'no-restricted-syntax': 'off', - 'no-shadow': 'off', - 'no-underscore-dangle': 'off', - 'no-unused-vars': 'off', - 'no-use-before-define': 'off', - 'prefer-destructuring': 'off', - 'react/function-component-definition': 'off', - 'react/jsx-filename-extension': [2, { extensions: ['.js', '.jsx', '.ts', '.tsx'] }], - 'react/jsx-no-useless-fragment': 'off', - 'react/jsx-props-no-spreading': 'off', - 'react/jsx-sort-props': [ - 'error', - { - callbacksLast: true, - ignoreCase: false, - noSortAlphabetically: false, - reservedFirst: true, - shorthandFirst: true, - shorthandLast: false, - }, - ], - 'react/no-array-index-key': 'off', - 'react/react-in-jsx-scope': 'off', - 'react/require-default-props': 'off', - 'sort-keys-fix/sort-keys-fix': 'warn', - }, - settings: { - 'import/parsers': { - '@typescript-eslint/parser': ['.ts', '.tsx'], - }, - 'import/resolver': { - // See https://github.com/benmosher/eslint-plugin-import/issues/1396#issuecomment-575727774 for line below - node: { - extensions: ['.js', '.jsx', '.ts', '.tsx'], - }, - typescript: { - alwaysTryTypes: true, - project: './tsconfig.json', - }, - webpack: { - config: require.resolve('./.erb/configs/webpack.config.eslint.ts'), - }, - }, - }, -}; diff --git a/.gitignore b/.gitignore index c19e33ce..75ef73cd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,31 +1,6 @@ -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Coverage directory used by tools like istanbul -coverage -.eslintcache - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git node_modules - -# OSX +dist +out .DS_Store - -release/app/dist -release/build -.erb/dll - -.idea -npm-debug.log.* -*.css.d.ts -*.sass.d.ts -*.scss.d.ts - -.env* +.eslintcache +*.log* diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index 36af2198..00000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -npx lint-staged diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..9c6b791d --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +out +dist +pnpm-lock.yaml +LICENSE.md +tsconfig.json +tsconfig.*.json diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index d0e0490c..00000000 --- a/.prettierrc +++ /dev/null @@ -1,22 +0,0 @@ -{ - "printWidth": 100, - "semi": true, - "singleQuote": true, - "tabWidth": 4, - "useTabs": false, - "overrides": [ - { - "files": ["**/*.css", "**/*.scss", "**/*.html"], - "options": { - "singleQuote": true - } - } - ], - "trailingComma": "all", - "bracketSpacing": true, - "arrowParens": "always", - "proseWrap": "never", - "htmlWhitespaceSensitivity": "strict", - "endOfLine": "lf", - "singleAttributePerLine": true -} diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 00000000..357f740e --- /dev/null +++ b/.prettierrc.yaml @@ -0,0 +1,12 @@ +singleQuote: true +semi: true +printWidth: 100 +tabWidth: 4 +trailingComma: all +useTabs: false +arrowParens: always +proseWrap: never +htmlWhitespaceSensitivity: strict +endOfLine: lf +singleAttributePerLine: true +bracketSpacing: true diff --git a/.vscode/extensions.json b/.vscode/extensions.json index c10cabc4..940260d8 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,10 +1,3 @@ { - "recommendations": [ - "dbaeumer.vscode-eslint", - "EditorConfig.EditorConfig", - "stylelint.vscode-stylelint", - "esbenp.prettier-vscode", - "clinyong.vscode-css-modules", - "Huuums.vscode-fast-folder-structure" - ] + "recommendations": ["dbaeumer.vscode-eslint"] } diff --git a/.vscode/launch.json b/.vscode/launch.json index 9c06cf39..0b6b9a64 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,28 +1,39 @@ { - "version": "0.2.0", - "configurations": [ - { - "name": "Electron: Main", - "type": "node", - "request": "launch", - "protocol": "inspector", - "runtimeExecutable": "npm", - "runtimeArgs": ["run start:main --inspect=5858 --remote-debugging-port=9223"], - "preLaunchTask": "Start Webpack Dev" - }, - { - "name": "Electron: Renderer", - "type": "chrome", - "request": "attach", - "port": 9223, - "webRoot": "${workspaceFolder}", - "timeout": 15000 - } - ], - "compounds": [ - { - "name": "Electron: All", - "configurations": ["Electron: Main", "Electron: Renderer"] - } - ] + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Main Process", + "type": "node", + "request": "launch", + "cwd": "${workspaceRoot}", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron-vite", + "windows": { + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron-vite.cmd" + }, + "runtimeArgs": ["--sourcemap"], + "env": { + "REMOTE_DEBUGGING_PORT": "9222" + } + }, + { + "name": "Debug Renderer Process", + "port": 9222, + "request": "attach", + "type": "chrome", + "webRoot": "${workspaceFolder}/src/renderer", + "timeout": 60000, + "presentation": { + "hidden": true + } + } + ], + "compounds": [ + { + "name": "Debug All", + "configurations": ["Debug Main Process", "Debug Renderer Process"], + "presentation": { + "order": 1 + } + } + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 04145377..89839241 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,13 @@ { + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, "files.associations": { ".eslintrc": "jsonc", ".prettierrc": "jsonc", @@ -40,7 +49,6 @@ "typescript.preferences.importModuleSpecifier": "non-relative", "stylelint.validate": ["css", "scss", "typescript", "typescriptreact"], "typescript.updateImportsOnFileMove.enabled": "always", - "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[typescriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "typescript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": true, "folderTemplates.structures": [ diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index e0c639bd..00000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "label": "Start Webpack Dev", - "script": "start:renderer", - "options": { - "cwd": "${workspaceFolder}" - }, - "isBackground": true, - "problemMatcher": { - "owner": "custom", - "pattern": { - "regexp": "____________" - }, - "background": { - "activeOnStart": true, - "beginsPattern": "Compiling\\.\\.\\.$", - "endsPattern": "(Compiled successfully|Failed to compile)\\.$" - } - } - } - ] -} diff --git a/build/entitlements.mac.plist b/build/entitlements.mac.plist new file mode 100644 index 00000000..38c887b2 --- /dev/null +++ b/build/entitlements.mac.plist @@ -0,0 +1,12 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.allow-dyld-environment-variables + + + diff --git a/build/icon.icns b/build/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..93da87711cf8bae46857801c7a357ce461b85040 GIT binary patch literal 282132 zcmeFZg;SMX`!9a)&8BP94V&&1Nr6ox-6dTjU5X&F=@t+K1*D}!L_jHNq#Nl*kZ$QZ z_w)W{e)G;b-}48YnP(W-+%s_3TI;&5Ph9Jnt(!Lh(mdvP(9RfbO=Wx>Y8(In z@E@xv=z^c{f4;FWz@H2!_txMC#9LQc4yYKS-2(sP#bX6oeK9S2Jt=iP9n!m@0>zA? zP#sKSj1uN5#L%xE3psPUv5>FUNuk7V=h-I<2U#a{P@=Q@LbP8<9UB}DLqrE47zW|^DNutyE%GVeT08P> z#`fl6F-PVgM(Z@`c?Ly@Rg|Q43GW;m^j$J!MT(A=z8rO=srei(DSIATis6fyuIuCD zQ=aIuMy=t=8d=6wKg!ut*8S_1cBJNAHWo@_=FFxd-^FBF)wNf{-5t=NPdu#9Qu?8# zrRA>mt&#7zl`bmH}NpxfGC=e(fk6YsMEfGb4^i z(EJl^u#<;WtSLuHYgn!3`*$0^OYZDT$wOO|xH~T{ebOABl$(qH2!ouOd3v6BP zXCs#mFwHG2j(#dyZ2CTbo>zS$KJP{m`!ipEUgzV~&fERn{e2sEcS1BYw3olepj>ZN z%W;iA8_L?Xt~=F@_S0EUgcr$HaFcNs4n*6VyF+O`V0=>Fzqz3;+})8dBbQV--HcTC zmfm`Oa61^*`#?_i$w-K)Twk)4TODhY{eww)O8;Og(9@$VJYl81%@9?}M_B0iAqSj} zz+**Cg$g;VP;d@E1OSZM|6vXzz&}I$XAXP&`~L+G{(BB%Jo{%38!IOmnXBs?!S9A5 z`Ypo(fp1mQl?jCU*BG4JXfh&6lsW1F$xb+O+#@Iq-2}q#rGb^yx%r`j5XOmL3XgYF zh&5o3@j1ps6CO`299HADD`9hAqrK94;C-;a*vP{z3a{H3dVlHgNAiI;%!WRy;|Ld} z3;3Z1&=ktC5JbK+T$Ds!V-2t@s8^5M{i;!Q7UGm;+e7S_RFNuG_Ybz|!!tF`wu2iL zm6#sMm=U?Zl1VxuP07%$ti zoQ|6Q*4z77NYk27vX9Xsk?PY(!;4CMM$)Hl6@z?iY;0xW@Fvfu#NHseobqYgz`POp z&cny5CcH&OMg9?R1M(@2$U)j@ba*0~!+>3C&_Gsf5PJoOyp6yAY~F()y2PQ@@K9?a zT(Ne>ReIWDkH&d|=!dVL(CRrqy|lfYYUx%HkC@wYsEk?2Z<_p^r;U~O7T)+aHMO&4 zr|`2lF1-4|gH*iVsqA7?)^8ritgqWY@)wS;sL-@&~ zT2NAwCIL0m>%kbq=^tVR*HTi}v9wIQy!10n`S2lu+o-~7W9S23sLInKHDg!(CRv;@ zDN)f{33TVe2b6d=FJDs1d=P8v@^%%$5Rj4@L=5G~B(AR7put!b63gFyXIt-l_5h_I zj6>t@X|w3jUnrU#io}>tLRgAdvmq6R#pJJR(ANHgS@gb=8L`Ah}2)C1s9#Y zuJ6$3haaIc-7zKsR1CDVonLLc#db-z8_)MwCxX9d8yR(9^O-k<-`oW3&eam0oY31n zeJU7TRV7qd2#@xd$_p-EfrD3ipx7$*NvR1N2BoB-v6WvFms(r7y*?K_+ohu3-tpV> z+OQ`LG!KtG_EK*&+fC%{j{IcwCBL$AgfwO%r~<<(l}G4qxebk0CWw|kG0L~Bmy0^6 ze8X0mhk=S}g>-kZi6%Bbx4N3d+}zyQ!o)$jx~j@!r5!yrJ$)xx;M=K+j{kj-tZCV& z)Z7A*I~UrA-yV7-E04r!*xR#G)6g7UojTju*|nxQhy4<+GjrqN<+Yys?n--=8N8sN zf_v1Ql|}p4=R7yJ5+%Di6J2D+!^1<#Intq(trz_yBUAAD?DKwoM*QsT!O>oxJY}74 zVnR}PeSLk_cxmr5M_t=&xVZa#UC92v8_$>W!`7;2<7_pxwFUY4He^^|>*^?10J?8S zN5MJ<2I%Q(!{UBH7l+ouqN27wKB);80n#b#SE&kG{{9kS1);wd?=UMY?@9ElI+8bc zcI0JcA-@C!d)Ea3;()swaROQ~6jg0zeMWg%$>&m8^FXPp>MBPUc{MfMZ0W#Qd>WBT z9`uvR&rgj1`s?WHhfhu#RuFo7d#kr+XVdd7u$<4N@opZpB+yAV3;AOrepq}d%+g-G zZ}!G~`0$~6Ig6s~X)^QfWmf`?xX;?ESFZG{y&b~iAfUh$@r5c=ojdgVpE7%_O3&h*Pm zv6DF}mxU{F<@9`}0BHua5xn)dI15-9q_D7Pb$mem?i0ta?o$Hg*vDxS^dYNbOb-K( zbx3hL9=}%6Kw*n1CL@bJeiT%ZCX&t>hQvIgm&0HGo1U7|uHu~VA#zpt^~)xfGQ9$# zc>K(rki+ZSFnGSO&?Swjx+r8^;8_#J=HkvdN~M3@_e>-4wIAg=kGMIvUA%lqsOC-sW#I8GSoRV+MtMuPr19~_5)pQJ+ z-$Y2&6iE_AZ;GmQB-B?3%9nO4Jdl6p&Bo3?=l3?=IYa69C3Rw6(BAh7Uz1y6t4$SJ zDUIqhJR5ue2p7_;1?!H*Ni!w*F09|E8^f z)7JkpY0ESsW;f)2&{o+q&qeUyztI-n#y@E5rN!WrCocLE)OS;6rm!-( zke)WVCS|SOWEy5OP2cl>G>HO^5yYbuf11!7pkG5fiY)T z6R%q*6vp{IWc0G)wsS_7FMQfWSGNjR-yYcB-nM#fEHnJ~xd&O)JR8}NB5m+7p*WdFEug@F#~NA>w1e%_cwGy48BN7KCa=4u(X%9wsH zpn&nx?!7o)U&lQoix4mOL4g=?t=mEw8*yS)%|P33%w}L=2i8G~y|oY-iu(6!H%I#~ zLN7llS0x$Abbj)nbfzaE!pFzQ0OrTo^<)bC7yTvWe+#7l7D^Kx1YUlP+wxX_`RoejWglocW^l=5T`HkUR~GSoqvhup%dw4fHWHAWPf3B zW&%T@{b5&ER~}Q3$~0YzWv<^{{1E184`! z7!I6d>sV8bN{Wj!Ene+ClnB0i#7d0aAr#b-L(XrZ&Jb`2NuZaK@MYV4>YJn|{P5xW z61vZ6cul~oSCXI28`FZWw%C;e7%VOX=%jtZyW;C5TM(Ou6R%=$P|7Wy8yBIZti3e{ zTU*xs!MCSVH#4P-7>`bW>2-9#;vy8iy{r3x$0T=4thIE)$!Q1M+xc&~jmF$tZi`Np zlDIiIav!I#d3t(P-?8E2;Z=U>5qUa9EAf1rbir@q1K<1HzFmW3Mxe&=Ee2|eN}TKy zm|^P`>K)i$#;_ zC&SOH`B?bpdGqBa)$h<tLnuMIrF^E$eRUqu7e92qlV7R)N}MI?PJiu>fFtY(>fktRfoR^# zs>+G<6YrKuoYrb?#QcUl}WfGmh(#6qlZ--DvclY5~h<|@a6u-p}m9Vfd zhg)==qiGvMN&vOG;_=QR;7BonGkQ0QkfErXAvnvtu(&bv55IA4y~7d<#Y=_97IG~OqhH=;|^WAJ+Vh>=Y9=3W3X60(|m-kZX1QcGd+G9-=1L{(9- zU8D13>Qc2fM@r!(y9(LBG2a{@$K1&0$b-T+e$CA5Bt>GUU)uQ*UO!+Rw8R z=*jIB#@>;og7rjpDP2u<#^6D#Am4j(j0{GRJPwWIW>1%z1JeX$4SJ=!Vupq^jqpaE z(3Ah{>KfaK5gSfVPbZ-aCB^K|uavctm&W8cUkaAN4$(uLCaukWa}GC!oTBM2v`65+ z=TwQP^Z;2Dqj*EDY~Yby2FU8XT2yU>BDn}nn{ST$i#qU{o>`e+2vb7Wk1i8s?v@Ws z=VogjG*XQhlQ7B5epE}ZOPt3eqoD9sdbu2eNeROL$or^5_bN^YtIYA ztha)47~&7e_o1hhi)#O|;$i{LXfj#G;i*c=wo}X9CHqKs(nkO@am>hr;YaeWC7UkX z#INpQSe8MTtZ&oO#*i*3iAD)=wk$Ev_9HXMPhv9+r5>Lyj)ulYUaBOw%Lh+~rukw4 z%=M`+mcwzY9wcv9#_1|W|m?A$sj8#WPawB=cI zCl#j=ak1+E{Q&lJwFl1On8a15cfAdt&Z*1R+IMNd%?-FjHSbym3IxAjCjQ3M{&)h!rSe?Zzr z{8l?-Toy|8ijR{i%|ME>EQ&o08v~-=>PF0Y+>^}wT^;pgfBI`!g6&V}=-iyM6#yh% zdtJGCbXP~l{yJMiW{*0#X5;Q#-|nwjUpk`mD18ZypoFjPX?EIO8E7Pk~&9E1wrHycqZrp7-r+7`(w@ zeZxhPE4+qAQYk(r+H?Ms!t&5Mju-9f>Pj7NnG&8@O;{i&FI`buYMoa}rWo_--0#`t z-xCRJC{H}@NoeHem#1+xWd;n~v-vF{*rObnO0Y*Rc@P#|b~7BlC`u+H;1!%$+O3{N1i z>9`YlGq04Nxz_<*31r!%2};*a(cvq}zT)DJoczX^q1H?s1UPCtb>gLO?fIgJGn*P+ z8KMfrnm&bmOCnj4)$F0fTm5Tt+cx23PL!ZDo({~z(k{3Ss^&M1$=Q{#8`oL&#Ut7VN4$ssiu2@ zWuLJ*v@zuPR*hgv&HZMe{7+Ky+pp8?p@;8Wf`UDdifq|dUu7nkPcPUGzXipp_w=a) zVq&(K2hdm4d7pEt5t53J=!5ljNPjanu|K<8k|5N1bYk67f+TO{7E+10d^OrDU_iey z_+Szp9oOr~IY%AWT%;$gX}i0~3T7?iAB$QX_VOCmU#7W$M?-<>2@baTMh zBfh0aj)yTp!8U?{iRm5eBF%94{t??fU$~LOO^{5B(o;mBjYp;FktxZV{8o$aYYzlm zphfs+y`GM0N-v90`(ZOdCPhS(SkiZ^&V%!)!gb!KDj}7#r)s2WeRiy7Zk2Xd_}bBx z!yDr~{1j^SsF`6*Ov=Ub6`<~1d%K{PkDk-V|c zdMRTSOi&PJdG#K|KmX133H=M2{sm3{f~J2#)4!nUU(oa~X!;j4{R^7@1x^2grhh@x zzo6;=3Yr8&0f4^oe^8oGAhtsNM``Miw(bWH{#$9Hcm4mArag0PAF`hr6}T)&XgG)3 z8+l`eNw^$RWF{U9n{PP`D`S8pS&{ZB=}~D%{xLzmvNDk;sch(+9zA6ic4#DPWHeT2 zIU^z(@{^qiFAl|n-JA8r?Oyb`WRw2+-YajkXG2n=j0+P6r@^Q9OD+1faTBytfAQ)n zwnj7Y=u`B9-fC&%0~KD7O#ERsAoZIkFAq^QRr#ObT5RCG&Qz|vLt5Dttqe4`Eb32l zFg{+wx^@ImLZl(UlgtG}q9QHB9(2T1umReSzbciy{+!K)iF}@9|9rE+TtQzP*nRQi zkAyWw0MbzaKvom-b(u9QuFO}jcFc<<2!39<5K+MNr*s5HZhtg;dwH3rr>531F)^9i zsxvY&-q0w2HvMKgQD)E|k|$AZV<)L=XxP=)*B3-Q%+JXwF4uCtH|HA$f5wI=X|Z>I zdi?_l0nS%)=I7@{l9Q8d<>lp{OniRgn`_#-zP>NsTH8-nvOkmE(nnFIPmqAN^v$WB zGBV0@#TS4fIeB?+w?S3K(!9=Nr3VE;^CGjlAjA8m5j-p~`{nJ24-0HuTuv?u3Z3dy zdBj+b`HpE{B9~5cm5`tob-A@WQ_Vmx6LfQ%nwr`X|5d2iOV{+zh$V1{B`qOw6{3_t zJ(xuFBW!0xCy;@IUe+5XkeZfuhlgNcW4rqx_(Jg`8Eqz4FaWqt4)ympJ`@pok?{L$ z?rWapTv7{CS63H`2pDO4)$(hZS))<(}jq+_dL@+GG!W8 zOfh}BYoOn=Xb!mCI0M~)ddOugQ4c6EzxbeQdpGK^qvM*yG-bbs7s9Y)A@?Qk9`k7pTKo8YJ(@RF<%axUtTl=?8gMMcY01_0IZl*jv zJ!=KKR0CL}nw@~=V_X~@FKQ7NW9EQYLf-<&kRIE=N)sEN@0{i4V)N97;RZl}iq9#T znUc*KnIgCqWZ$(?4BrZxQFwplwl|ty>4;*`R8{TMMk1D2WgF+v0pC+f+dND{`kQ8p zCjYMn8yj=b<{?Fc?z6r4RgkGxo~w0VN)~)!a!A1Q&;T3oD#}S|PWm9}%NG+LuU;?_ z{7_+=1E<%hL5?l#A#qGIIR!=VJowh%K@TA*l(P0)v!g)G)eadsdG=?$Vok+?W`ACU z8aJ!4RwVg!_0!?CU%!4mUo1kpan3=Iynk%+=Dxc<83P5C>k8I6%WsGg3v(>u+p{_M z``w98Q)05XlqV1dG1Svj1~CsS%a<=-x**sT3HtZ5jm1UbfrOn>pz$-fMm~zbGyW^? zAG6k1k>yT++qKab3#mNNzIjhVOsvc4y7NVaQo~N;dhwYTt7j+ZyLi5_16>Fn&Z6MtZ(g?89VXv^~>Hy6?3 z`MZnv*I}6_RGlL02AiCXMB#AY{eu>ttufYY!LwpGlSosJ0X`fDpq20`sSCQjDoViI zhv8O})oG&dYL2u&9nQWrD%Si!OliAOehAP3j$Y5;NFZ0%+Il6%|8)BZk}2d!W)xud`blJf2O)x)*>>8sb|DR$5SiFna&qnTX7jw|0R?w= zHt<2aV(H*ZnKD-A1?W#4n5;0*lz2AA0xahf6AJu9@c~a72B6Qmd(< zp<(XAN^V64SdRcrugUvszZRXaY$ZVP71qL6&fbNA*0XcNQk-b!gJcn)nbVR zLSVYl_uxlrDk%U^BQ5~M@Ust@{-%3a>8l%{Vp0hX1(htxm&|xN$uucY4(4HE3JpV+ zdwEre-Z^t>16adDLqP=8t>oA~E;nAkRLqY0_NhV7s%W;#U;(xq8So^Gr z05G+Mf$vEl&eJhUU?{7e;RhvdiupF3L^5&Q_kS|o|4_GXqA)JN-|E;9z_MhnW||H$OD`4(=dR3`lSrZWA|A`g7gcq}qIi+&4xkKe0xo7TkLLTkS1(pOv3Fah zes+Prg<%o5`JO=tk=64~ZI)uER!JF|eM#-cP04v=w+4zFXn3)=y^db;SSR;*uk%b0 z+wP?8EcotnLp2nZ!XV+pp{A;81EvtO4|)a9v1x_uqDeeas^LmgFk`)9F9_{>kqHq7CmB{&MZF8r#h1*PkNkwx)Ya`c z?87j$ug^vh#)=gD7Iu=p`*xrMK}6DLQ~P5@jmyj%`=?L64_dP*`{Fy_dqW+d;6yZ9 zw?HXh*slj<3Y$rl1j1#4ur7W&1#f*!r_>heA^A11psdXo|3*Z<2DTnO6M~dHkX>70ky|?Tn1!o z-<0VslL;D@3NDfac?h(D>v{bfB(ee$1+L~Vc3DWb_!q-WByeGBq!WTXEi7#iGjAOC zxaQe-B=3{&@edtGP$^OYDyIeR;Ha@?(7APlfbG@%T z6!^~Qi)Q&2&S5AM9{=`sw|cnBcPY^5WVWV8Sd$V$jzZM|kK&)W)kiqve@2TfS9Ia= zW%$%5nS_S4f9otxm70=5BEXO24bVUOyEiu_{BiE9t@8KXoPOi5NPID%#D8o0t8JD5 zHQkf%F4i8W9)Q3IQ~=GkD}DvST!7ZT^uzDL7e1VtI2AUl!{s*3PDp$c01LgL!(m$? zk&Jr6Mzgp#^@ZU{od;v>y}}J*;Gy$m<ab4RsqBG{+o>7LGz`a zlf1QU-G>V*WyCf%6a#Ps8czWSzW_lxbw-QWJ==9TxDaMd=Nncvv9D+V0#JwN2UM;r zb>}O_O;=iXJTeV?2~>o=ND^=F=$L*@Cn;5rMuDSB3I;Q+-0(h5(p_JCLz+ zY9wtLvqwn($hhGh8Z;CWWhN~Ql-dAbmm9s5KV_fC&ZH|3S6My#V&V?)1I#ub=%n$+ zo|!uK&$*B0qhn_EVE_7x$-cqAOx?=xFvKY{5sRU{G3vRQfYjrB_sh#mdJ@!0?qfuc zmh@$~)XBhux0F)hf}lbixvD)z>q94o3V+#0sn&PJ6P{Dc7_iQQcEf~dH6@855Ya*d9Tx^zYpxr`M)HZy*{ zGkH4g?tuv)q@+H8wi#c;#&$HFXcEe>Rl29fl|DSQ)j7fEedV$mK!iKQQ5S~zTby@GCbgM&8HK`1j|3pFIH z!9UE^x+@bb%xEnvEbOyDg|t`w!DujkIdqk^kp)8;Nw<{8w@t`HmB0ARIUak`83$B5 z4AvnTjmy^MUyTU8<0vN&h;~mZMsiyQT(E-Dxpb0?oS_c4tQ`i92ay>C71b8wyKVOJ zZC?0$8&i3J(r1Vopu`;>9DL40ko)lrEE_sxtxh-R>mR%VO-NL~#0{mfQ&bRSFo-EAkrchK+-L`hQZ#mj_-(}XfNt#R^gxClp`-_h%a+hgt}F8cR1&Qq@~(THOV zlo0PEo^x4_dihl5pL1}TG``@Sf@xyJL2&@f$GK^TZD+W+xV&GuNc|9zi4*AG2nkX8 z5@&b+c)QFTd-i0mHVcXlm=u;kC)coi`v}WFCZ$)HG4fXVZOpkJlk_S(u-)obF!t%h zu%S#L--S`ISg9?mcYq}Tz5+~qYP-0-FplQ4S!av(VuJ`KO)SebVvebnF+ql?yM>N^z5-q;FSkM4tFztrPu0*=eCD6x=YBgD%rmZjzum8oM;TbO>Eb+!&O{Siy!_=iUMY&%UIYBP{_j`=ETEQ_$N#xl69lmBa~|# z5JH>m+h%NXV(&pSA{1e8$#Id^pbby_(X2Dn$~5^SG75`v8%yH(e&;zyECS^Vcw2QV zhKqxdAxz6e0ceHb=SoU7u(jfWBhK7|Hi!4h`BX(k#p+A*6_-5OYn6*i3C0_+_E@o3 zHO&0xBON^#OUC^u16YK3LiO4Iu`0Qo?=PgycJ?l_E>ou}3NJ<)*84>PxpN1qK$4$& z)?^>%-2G8E1Fsf*UaZdl9ir?w4}~92n8}~XTNB_tfj$BQi{mpW#2z2wQ5T)o-qqLO zJolaVoM87C$?_e6Bj5)_6UGYT9LZ^f3R~N>p5<|UriV*^4NQH(+#~FHF)t@^dC#%b%CU{wUcnjLTXkEKi^=M2QVq z{ztZZzvVv2BEj|)m5$2AV|~HV&Te=fYySjc#jN~VxCwt(ESja+Gf9TOgF*WCuU_^i z%Hvr(RAO}s?hG;mNjWV~7jtE6FO1OE z*4K|zaaT5x{Z6Yg1IYAoVhwx{jeyE6Ikl!4cEVfsJpU zEf;|vy8ZD)~v+638 zrHi~6YnFC|D*T}jIFzl(7}df8Qm~QMr@Aaj17yi!EU&e-qBEf2Ji$>(a&?)mWV|>3 zr6i{ONybrYfQg&}4W@M%rO`vr-+aMDBkD%W-ej|;>%5o;3Bv(|^Imr1Z133?c^CEj6DRO|NzRo}Y!4s4#f7JEepfaPt%xFrpsa!+uwC9x`GOG! z-D{sF<5RW0=m_3zI;CYwU=^$`?Tf+!Z;ra>17cA>BhG+aR}xnbpcX?w2x5oJh*xR7 zJCDvNB$0cj_?^E(r~qE7BKEAk7sJ*7v4jeM7)sYCrd}5Z-lnb*iAL&9zz5*2oW)OZ zq8sB%@u@Q<&e}o@bo=-zh9B}arX^P`agU(u)*6VvK-hFOzaQSX5V09-Q463+(X z^pkI^V)(2wYvSym{?6_RL~CJ+xw6a%1`($!SzNiPIggwo;)48~v`jR;EW#ZN`Y{`< zIyi{f1yotXBttypPNJX8{oOCc1xRwH(=ayEk_1>4{OsdROY-jt@sYc<$%6U|u}>Nh zlrD9xZpp*eVjXY>i6+OALwq8hFYzA>TxQ;i&kj2@oui`%b##ll}6;m8s3OP`l_jEL9Si zLfVl=a0`fIp))sNLDkvRKHnt>qlAI*m})$*njqbpKI@NwV7t0z;vMq42~I zE04~y5D$N!IDSHFrb+%;n+#!_omC8c!A{j%a%Pu{M&lox(5Th|#XiT^6N+C7vFGE^ zw3zE#H!wGnD`UKqF7qb%Bf}MwR_+jA8ei<`PN3B-r_gxue*&h{v$j<~hgpRKiEqmv9e;Se5o56FObRNBU6*)C`BAq- z&QzNvOX<85I#=iUJEbFvFu1$8`{#}aMjv{(y}i8#rLf}&w-S*1R>%5DvZQZ;SxtY# zcN5R&#CaNJ;Y~;DKti;vd&Ds6Km+V~PhXX;9*3JIiT&&Les+Jyzjyj4* z1HPHZNAM2ys8ES}tqIK-b;pL0W2cwsejpD(PkVlx!&S|ZDdmHcs^lH2fuPmy>nIvf zCqKoeMUDajkRU&MykO^Pu-=XQSXAT%^z0fl+QqG@#|c}H1ROR$(rnH!cUNM1xbgUD z5Zt|YV1TyZhuD}qP$CLarhFhZG0*d-{nRkBr|8?5_hRsudDX$C1zb6YAP8zBC%E|l zEPjrxVbm`fjivokM*YSyia;y?%OK8zJ-t%E(CO*Y2x000DwcI z$f!F*dZ0CyrpJ=5pVC=hU;i)n>Q2?!V+Ye8(WyM2-aNaY7Q-}!%6=@;$m|m6y3+=% z?zX4E+g0e%QJtblB5 z_TEC{c`y^XHna9gy0JJROdp#$Yrld#68GJQ54V;emXU>T(%Rw~RP5I}yr-?AMK$i> z0PP#YIXQ2#v+o3nB{YwL>Y;{vx6Sqbhb!mR1Mg_FWkSvJ2%|i3;jJJ6LTFZLCEHAl z4g(4^YH@(OJF70^-(a3|aa;W1r;bl}2v*qqWGfLDI926f&Hl1s{TVkOf|q^9ZMm7A zsqWc$Q7ths@xDkuc8^GqM)n4(HjK6vT;KO!EL(!^-6qf~ae!njk#_>ta_QhJUmNQu z`+@_JKqMiD&3nl8OV&pabtANwPfG(dUb=4!(3m;%90Q z%GF3D^=)JdIx-wAZ~T#JIvEcf;jsatZ+Ok>JZ?ZdJ<0t&#|bE$XrUv?orL1UDZ#Ox zSh_ktxQA~~Ll4MJ(ZjRs)`qJ5-49Oo=Fy7K+?K#uQhUBVv16flVSF2XXJUH$0)jL} z6-QCo;&;8Kn|lWK{qTQto~i(oau6iM{4M?FPC!Ta$^_|OagXKJGZ56>7!XM_1&?i6 zp5m8#0i!ML$B%-h^_*YjCSY@Pz$Au)wgBcQ z6I|I--@=z|f8%0fU%SrMJR9wdA(7DuC$wY`$@`IJVnP;e3d zznkCx8D>lH?!_U9LmGGm@rv!wjuvG<3jI4!SXrvS-fujrgksTh(=*)QeLEQMtEI$D z%CL5Xs!}m)!w4bBlJty>SvHWuSFo{Jh3($S-l1N=Mh%_2A5(B|4Bv>lPbIEt^KM>3~C;RtP*D}X>U zFNfvGE5D|t%FN0N&;x1bMrBaa5(atgz{#`+>K=E7CM$3erdNggj2F6+&CSWK-hHs> zb7ZCh0R%>x?6JblaP#^e({C*Y#122f4H+6iLE^&K#l@v2N(wy65OJj@)5n;Vdm0-T z7uWZ8%%aYNk78QF7Cd*?i4DB24U?Oi0gH0`gERmsePw#8>lZY`cZCMz`!QAnAgx0;@)fg4s;pbK>55IJy}O!V1wK^)bPJ zx>tt~EzjG7IwoEn?PKj3Wx!K!o>e6 zT|@p6tAYPW*JfTN4*#2UjR5|C>G~b%#6)0+gu1X3t)fuX5F(k%OeajG6`lAY4iipB zbQdq%sLEfh)lf$uy|cu#&79dy!Pd-He;zm7t2;A#d`VyuE)bK}}eI^%AwZR6Ky?29i1V zfVhVRf(AGQt?`A}2qf35v6C+e1Ms+RJB(*6@OT(lsxcdR8#0Fs5JzLZ5(2E)%94@G z#L>~;=jMwcs8)vNdQ>vfht&!|Gz@pe52zqKu*INApT}y;LV^?m#2nPvlo;B=iL>)1 z$w*slN+7zoTp*r@jgZTs1H4W(rbDDN%W^SzoeNG4?}~QS))AKBV^Lt)#O@ES60|oN z1wpMnQuAh4f@XskX|3)VpooXPVFvHH*DvjlW<2bXS}TBhn!J99PLkCp>nM1o8lUq8 zf}$LJ@ZcAg8lni1gau&9oylfBXdj=#`Rkw>^6-UjV@Zj4*(c3|;QJc)an&&&G=O*aR1ktImEYgLY z1Lo&?L3nIiK<-k`O?}%2*z8mbDuExlxVd-G+C-j>6$YlTY4A{qx-Zh^NNO*$va(Jt z9aXe|%XhZ9qGA(2j={USO&qZU%2~YCl7eeZf!AmDy8EE&Y8ji;0t%n@;IFlJuMa@F z_W72PW#G3OQ24trk>)5KzA&|6a3qGbYW99!(#U>PkCqxx{NaTJN#6q447R9kTsn}Y z;3c$DUGeLM>g&f&sY|{KS~&tK0nY{g3?I`CE74B=n8_Xpl3x7;;%iCR zax0}5?^_w`Xb4sY9zy{3kNoe2>{X+r&gZ=y!3N4#;KSS~X91Nsx?ex8_Qw=yQA;9{ zQu_8U=I<;RRF4k=POCY4H-39pr-%l3Uw02bqVGbv5DGyB0!{`+No1~ftCe907Gk_r z0-#~__r@Er+BxUs=a(q}rAYZBD?QQ?ofUb&)H^0xHJ3=wQ8&LlSQ4 zPF0w97fnN25!!}uLpH_=pw+W@X$d^}Yw#`7nVOp7e5}3kVCQBSt*0Efj(BL$K}HAx zFcd1g>@!7N{a@w;o>8IaBU({mapvWS*8t)zLr!ME-%(}e7mI!yE2T)C*|C(>4W%|* z<@cG0w4@B($3?rIo{zDhJ|tiRt`J1F9Es2ba=C+g!Dc$i7h7ZN21<+1jyk@P{c-x5 zihSJ}aRj9#>%=kqVi8zD&R!WureLVx2?6?RwH|-PCT#)bY5D%XzR2QG5%L95e&&!$ z7KC{isMjZ0H27?F++LkN$^VJPG>nl?03>YQfkuhpc~EiPXAYeI?)oHbQ-rhH?~9fn zl{kzYbBh{`0k_H>sWQro?Oy+xj{`hwAl$wOMY|W-#UNEkJ_oyH*CFimYp!Gx>gw2s_1p6qfCd+2IquFL;ty@;%xsiJ&>u} zcnFp?Jzm#$Px5jHd;*lHQ(^Nt=>{cBLDzf7V87pecNhk~oH{}Xq3sAbE}w9J%-}Vy zv=pouyq|IZl#x!RZHhz#=$%6E?>QCc^h5Xcs!6qdJ?8*rJ?i}LCdHofOu5eTp zPhR`G8?myUk_seUtH2Ei6r^Q)rMgd`E*?2R2ZGgt3# zE>F7C-@Y{|l_ojF?H75!6V3^NE=1zf(0{6^kQQAB_W-nO(|#w;M!;Ull`V3G}_9UL$;4hWTQ*$~%(Vt*6Zdl(dv zo8xwA|CC z?F)$4znWCV-vDu#B)aAizqThnxr_ZBk=Nnk(F@B<#fd@(8cyB6I*#V^j~2+JroaE2 z7d>O9pwilrH3zC}$3q_^jck|RR8~W+p-72CQS0{bY6+iBfg%&I@0aObf<{0_G+v0t zk429@8lA_aYE3lo>aVORoCgJIYc)Yq0wajSsG6lvblg8RP7`IHzf%5_zE6p#LCS&M zyupVNHiYZWD641spKGu_V0v_6|&rQlMjl9(up@W0g7N?>OEgHadp)FhO0Q6|^zj zd-gC!-3XxrA(&`rP?SGfPT6HG`3=WM(;*OZ{TY%xn4e6&!w?J{5dX~wsYHQcEAum#FX?5l==fTYijw^OjShhDRZ-);(0bv6A+az| z6mkKT3jv0tDUto4RI)Mv#^x4A;GHqRf%8y6lqwYl0ARfMYzo3&%U9?7fv%J@C;^}~ z|Nh{|$IGo-GWk9hgxuEo!n`X6)TlAU*bJ?+-}hU`g1Sl&j;NU?4YILxk1y`8m$%li0?&JGG zYLwk>0Ll7BT~meT!`?gudnHsb-5I?V0EaAG9h8885Oio52Jq>|h;zaTlw&`Efr^O= z`1}4RYr8Skd(uCGLSz@qVTAPl9r&U=aCBKOQN|?<3Kl@vpscW7_c<>;*v(www# zoeoz6GI&~0Zzfv45lZ>bvM*p$e+N39cmZ;Zp9H`=NF}hmRh%Pzfj^kjA6>-XAvg7VGL9tP@Fo zBEh`uR}0R}+b}*19BQEQM0qRt{(9*tn6z)@chTUV(>Z-(CQk$kLSU_cE+BwF2X={i zc#u4lz$bti4{&Iw!dB3NiU6oC1Qx7|7%&B6&a2^Fka-}o14dt6L{KNM$VI#f_`L%K zK%3b0ej6r3z#CnsloE`1Y#_CysH~!y2+Irw%B3DxZjF22YfW%yKRk9&A~wfHU>t&N z(Ep3Q{|sv)>iW3RNeI1#-o%97yL5q|QWT|$fJpBs(yKrSAc&%XbOi(z>0OZCY%~=_ zx-=1__Z|YA&2vA`ea>~R>;3kA#4pj9nc1^v&)#dV^o-FId}MK@X3`iHvi*Fg287#9 zI6Xhp-JQ$y|A76Vv|w$L%5VDX)=8hT;)egfK>W$YUr=w!KgnB84lsfPq@E0qxrT8g zp&-GzVXBo^s%}P*GpUyH?>+GwBpMLSC!n@mC#fYM~NladXocEY2RXDI=+B zdR6ToNC?`psnq6g%i4%#VGIT4`64hKjR6Y8VOq_EALMN0GjoIS$ z^KUen)i~&C>rI_T=F&fHM;1tucX zFjh>CIb>DvX26}d%5N@bSO1D|&GB)UNLjws@n))`h*};WW(xSLZh@WJjR+{ryq?5| z>6`F3f{6|P7vge11UD4m0MWBha}0A)t4!tH35D7K4x`|Q%AR>q_UAYjVTCmi$Ml_f zu4RTsvq5S)?91)4F$d?uVau6MVC5qE$M0Iru1I#U;@p8E(LP!+q1NCS?EG#WEt<4c zj$S)BxFqoi404h02p?p;8-}Zr2s=?!<9(o3;0i%57&oR^N+og9-Isji#1MF3wc%74 z%{ac~cfAZd{#D##t3Cg+jIeAwPOZ^xEvIkw;zvq}Z|S?rLQwGu7=NX@3V$AwNWnrr znRHUn?_4~Z_%>*R?Ik`{MzG=TLF*)zJ1Y%@V9z^}{je)>u>HV1u2(w$w#Z*5;E5Qs z3DLWA?Cah^%80P6E-Gf&7jx}%Lsp>{nchDX z!|q^1?q2=_Xglfyd3vZX4ihgbi5~lGYz8;$ihE3(L!Y3=J0$WcsIEAp$rQ0@+Q^fS zni60W8>h6G|CWkj-GK1e5mN0Es>t(tOX%3L@@OM|B|;!Dvzy}@)|&6^EDiPGaC#qa zoP$Koss#T;Vvb9M;;RXjy`(Yz>oOA&vAaQ;?b*kI9D_s=cy@SQb_XMsA`6we9N=KQ zt9%Bte$9V;uq~~Q$wIt1x-cSBr5lK4TaS6Uxz$V#H&vbrvX*R^uZ&UC)Y|_JQB<=_ zW|AO?JZ_SketXO<-*vLtEm5@9qt?XZF;wOthAjn7+HTqLA_>sB&O z2}eJ0_vfX*aQnB7cxg+`!x!WMf1k-0JGWTPHmQHNu}6Rf6;|Y$c2A9$C;lGEOy#ue zrciE+lMigM2>Lq$M0|kueSj!yvq;|{njy`W%RlX<0%Y14P|*o@?v8V~p_WT5)_i`YN8`Z% z_kHW{7T0mtKNnC3_PuIJKez$qgGYp6#uONTB_94ssb9AF>+O+g z&sudOO9~bse+mJ}suG_~NLcI^ycpuykYDek0i@WbIOtmJ&tfkSMp`T^Dm4W0oa%cr zpDX{^#VUT4Q$|}Py!k=nT2{6N8|ME?-0>MQ@5z>=`NllbWk==K9rT)DX&9ovyHwhs z3+4(e#r+}7&g*sQ-c+&u6c<-%3|T5y0w%CmJ(B^06fMRHaS zlBpl@fl7sRvs!z-MoUhHtL90lCl3d$fbzO32_*%&9JuW4_#57DNcVUG(`LqXlA|Fq zT&^mRSQ!7X`YKmRu1yN#%$Z@0DQYtPgtmTT3%Okjdw(ON_Gp}XMeB)J>S|MRah6})xWJUYoD&H@nLAjNJb zW+9A3XIvEMlvp!g)!e2Mk%HEN#;3uI68SnWeow#hU|?UlE2u|lNmS28mWqnvWd3cO z@bXjyg_@vhvReAdS`=)Gb)334Ico%#LzXIbC-=w2t?MEV^Rtl^s$eChuBUd2F$qu% zHII8o*$a00Gxo42k72bH1buAP>W_CXNc&uPG@q8sZSn4;K8fqe{^3`kR&&i}j;43> z7j?D>bkFy@?2ze7M^ke=r**gIqzT;v&g)lV^~|ZV(^xUN+$ghKj0f2-Nbf<7-;@z} zYuN^$1>1LrIkQ70Efzm}fZaI&Hm&_&3)&Bcy5ns;*rHgh0L0H?|4qH>Yf-b^vE-Ny za*|>?%w1$PrKL1$BMpw?hDI&XbA&{bYBsAa{IMN`g)rw*LTe4M2*Tz_=~DS++MDvn zJDMWv?ZRpc@cDPmM$)}oOJyyV0KGi;yzp;u1S#!@Vd6#d{XTVEmmV65QOB&G9Iu@e zM_#FGlyq~w%%A>*u}B%I1C{%Y-tsN@FvWKxxlm`12qf;*6_t$VJpMh&cmJQ0AUP8m zWe~Ei=ga0z)l_q@$4V_XVZ{A$GktW#&XNNzrhgThE6U;Tp zdE7hB-z#9!!sw_E&99h#buZ9(6uz;ZY!&?ctjeV9EjBMX=R= zReAS_j=)3Is(j>lPOm%so*H5Olkpcz@v?4-mN73A){I|4jFp09Yd%CI)a*INC1%Op zvwf3cBH_8*^KznpVP7hrATgAw!cwMuB@R9`4b)`Y$;n$P>Jbmfl4p8LqIYuh9iwj1+>I4}6Jt9+i_vp;RU(ZL?g`lbSEYGiOfkHe_o|V7KD$t&vGTh&=wT=&>W7hG* zLA`+DX5SCv{Z8B~rdFUT#)H+YQk%qOm0ro7xg14RK?oJ(

@&@JU*{6zJZ#@wL&1 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 aY_54(pTTJN;aUj%V`_NZpx~%e`2Pcbj}(0X literal 0 HcmV?d00001 diff --git a/build/icon.ico b/build/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1e9d1e045c4bd0f218140ac2bc569ca192ce80d1 GIT binary patch literal 179695 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%0Dpre?f}J4>1fJF>3Hs0=;hh$@^7d7 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 literal 0 HcmV?d00001 diff --git a/build/icon.png b/build/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f364f2c17291e4848c5efcb8fb99f06bbb53f229 GIT binary patch literal 49324 zcmX_oc|6qL_y23g#K<;7WjA9_vI|j+eTj&qB5PU7P9)pdDO;8l%2Kk0MA;d8kzID# z_v|}^-_`r`{q;wBJbHCs_ug~P^E}V6eTDzkH@Hoa+j*4e0M7u{xxGuG z32(P1>6OHyiBeaxaHb_yq9&yy3Q)dDb^(8>g0IV$xPc{q#ie!RVwjWh{kwFVYlo|L z4e7hVxB2<`<>!sF=n?CUNMU%G%J@QN3Y)mw-+^-Fmlu9dJC`MT$;ufaMZ!bxu&2j| zSzko!({*XwILT8};zzQ-=1rgZ7}rYMC3>Uv%)*ip$H5)sIu+VmAcOcKw3;jZ%#D*a z-gFP8K<5;?E-T%Zt7S&^Zn7z>tm4)>tGp>*-BsIthC*jIL5wRfP)=p3J2#06Hi{jf0eqA_Sjs$&TESSK|n_;Ad6p={jD7X~Jpr{l* zUF6mFO7~{#jB|m27(CoM(dxLN2yqs=}ufYA{`2eS>rf-id zb)8fh{TR@uq*xWlvc(qV@mOuydpD5l7997xeZ(v!U*Qft9;Bil$EIocnFZ2f=+CEMC+$Ua8 z2yF|q?#U2z;ah-7iXq@*v|SXsE%eT1BQBh(kzRL@wfQgDq3QJaAV>^~zw&-02|{Y7 z$a-6F4DqCNIJ|3}`HrANjf)8Cnj!IfbDR5CE@dM%R#8&!leg|G#+WJf&H~~3ZczlJ5#574p-oxoMZ44#{z>fse}zP zF!^cA?msNb$;o+_5hqh?O>_R@hwJ)`z9!}kKb~EdCx~MHw9IWrsqtahWZeEzr17%L z5s+Lg;Hqe4aU+$cNL+-R_rca^AgTi0l^>c)|5shG5s6TM(KBBokh|5tkkeuFY#il=8XmjA zy{iRXJomQ4ai-vIkd)`?FY}(d_wWN`Aw7Eer~UI87IL2wGPt7{F(huIUBse^82ic` z5fcesp^izTEOBTGXG~J(^Ho-=;Yz=4+0eSS_NZ#Ej~f_q;~|+=v!~mGBwe z$BXwG{SMoZ&#-GI)@LpV8GF?a6k5!Q>V|_T7bZbT)-e{;eEW7j*o$mtbD#5emj1C3 zt$%`(Da*Cl+G*fROZV^JH^u#+=R{G!e?bj!egoj0DJ#*fGt~E(K8L`}5Db2Gs8ZgP z4wItAoLt#E15?Cvoa3h!xF*A)YXCCtzr0P&RaBvmr1YCI~~PGfk)%znhLj3 zjC+>9-Z;gfCNFY44qH|>65%8u-yn-M_=K3RJnnsz{5G0bH4U6k=b|&CkNskAb}KcL z`1~6qLHF>uuN}T)G1~7o+ina>>M^8ntN1ROU*o9#09wv^vtgd^%mXzyM3->+3luIk#_9o$pRQ6>zPenz6L z$T-W#mW&f;7Y?@;dU%oSkqNqe3H{y?$h5V=h{#c7s|*d@OJ92Q191>iH!eL~ny_yO z1xFL{Hze2ZNWQwM!#5MAB%VWiQ15Mu5cMZevNxOoF!Ru&Hk|Sq`{+Z`R8+6%+Am%A z>M*5ZOVaYz2LSWV`_X)in=3pt&7gL0Ix;6sl_FkRS$HdEwSvvK78LqDtF+xIgu(AG z$67LKG8wpyGcN6KyC3Yj6)B!KAOKR>ncdv)`55QvRK36YTKU@ktlwUYdxM_u$nxC5 z@9(eb)++$EEMBG-`Ne$VUV*ZBbr12HXW^dFxirCZ`Lh?hv)I1cas?Llm(TO2BJaj5J_r#0)i)sJH03)uGIxP|N8O`u6xb|p10Ce zJq8M)da98uSNX>K>Kb*!fd%;3DzRD)c6OtpDIF;{l#&p99gi4bAW37>696Fp6c7;T z5M_#g2_8K!{atOK=j6#{m#C>fN-_UDw z6+50fyn!m?GKkSJCV6nW%B$EAE{IKV&jBXG|YM#&wQ+OLh*#s;De zc`~#{sKGI_Y!M&hN`#C`*9LyyG0dy@>Un>#%7PTzI3)uzp$W)at$?ElR6NaSAALb` z41YMx_~e zqw19_SG@1ZkG3co02>Vomwf-eayg?iIrPqrdp%`k;Si@z8Pe-=;GW`*8?E*6!;LLV zjKDTbJ-|ucD=P73X8jzw4R-tE0(=gbZzIn3>D8*LN2J&@7Lvf(FlX8GxzYvNW)t^+ z?ECm4K!|@w+Z&{>qm@KcCU-b*_H^qIvKwmFcI5aou6Y4RJkhA#NnGF&1vza3SpTRh zZsQWieVz%enOPAy*iI^H?+()GF4#>3rMmMejF(v`0(R7|!AGOvNLOY9o*^JhIk17H z`575Arok8Ao+e0w(_4^{o-2et2|_IudSWVeopw~(|Ge4o9&huK^>%F^^H_93kb|A@-+@!!g0E&@#IEz#xTS;5@UGHDQ0GpKi1<(s-wic4XMh@vy#Dtn-G^6kI4+pEQ@FPO18W^7z5)*B9K}1?%@jNOa6Q4Gj%d zQC)euEqU>UDUTI0WI@!ZE};=0&@fiVk{N%*N?f)8b)wf3L9%%?&4RB zc-jbaz%Z+oTn#DhuOu71-)t!wzVBuKq_SG0rrHNA>+Bi!eO9w37(7bp3m#Qhay2G5 zZY(ebX|I=^Ai@2bJ!t?u=Cc?q`iRPs6gvx3bi{B-bIkTTZvS(O+f49S!~6H8taZXa zv{2$S$2ItJhlYlZZz|P&xkxWHCC`%L;>r|#XmVas3__=aZIpAPN7a?Sq3^Wn|8sQ$619!$ zGX4j23|*%vBQDi_NX-ccl@Uwkw*(W0T^d5syDG&` zt;(5z%P|~(|Ni~tmG1Es|D4jZ{~VbChCu|PYV7RotK*Nfd@d{7U*srR)06{%g07bX@M95#N;r4xj9d%2FL1NtSd=U_ zCeFF;$16@=5quCk*sEFTEkncMpGvMb{h~H4{$0N?ybJ57;o`Dc)^$5R?>?YNrj@|U zPSljF&aGXPtNU*;)OEPk_u^txlUaTQpgDmMh4S#wP&-e$o`P&sBjafbFhxu%k0;O0 z&gxBhD?j=TwiUW=`{ap?fyUJ?S1Vn8uB&4bLqC>_D$LgR1my8^WF0g~A})!2s{A%*rHjZZiiyGp?wR#88C*q46_k~|eT#>Fh>@TmuB@Ys zxJ*YZ9reSymG|da#(8JyXjhkGF}F9-}-Zq0YG-m`>@wn1uqxt48-+mvX# z*E8w_Z>xW?6M(D~Hg5>c3q-vX8*tBTeQODwMlgHep7I^C6u_>9;e$BHhFr92u!6EE zZX+Lf$@L-;3ep|XBA4`U-?q=PH=ysaK3kFe7wqA9x}`_XAe+3p*T4}=iSzV4RM&0U z{39C&>YlezJmP~4$vG0ip>b>hMyA?O1$Sbeg zTGld^@O9nraq^EP2Xgo|-&Pr4P+B@9CMMb!poZA8nBSU1L&L+8vAVJtB%@#h*eg3K zRCOdgvkx^onf_J*hb;8a)9azQx8Q2YfCn&*1~IA3HBR}#Vlq8*h{!p8od!uV#207@I`n25dlA3Py4<&zPTzc*%Bv9eGFb&Rj+o*K>g#`pW>M4YNU=lXMv>SHn_b`=ITO^AV z@G0h&ogD^aqg(&H;JI!~e-O(5>g-pSUzcl(5FNB$VO)EaadA`o7k0e@2Kx`Rw6q+W za4%bRA1RBR-s|&#&^~^O7^3d~ZcIaUybZiJyddu8oqyKx5kTvEjR$MIeKtb#?-|_} zgr{H?vdrS;qr?YjO2X%RMLya}=buXGk;lF~JWWR7xF8NkLMWQkUej|-w*zu@btUR( z>|a0&#O~CN?*J}$N_RfO{Tu+Vk&uu$=0BhJ)aKzLBeZuo=UgT*I3E>pJg^))D(it6 z_f8EwBou)+W=GOQKPFABsybrfkiOc+!ccPk5<)os-FUVaHv-1?Dv%N($$1meZuj`H zGx~eE*%XoJ*F*dTd%G?RJnbq0y0lVVd46O6!}x5 zrO8+A<%|G?uE=MLCAV_RqXY^|;5Z&CiT%l(EZc!~IxE6XOGvD{u4*H2e&ey`-p>$3POyP1&fGR{g} zsd%m6F5Njg@4;Mf*%~=)}*GVWp#e(|)E;u;Y zB4%i?!JdkhmG#HkuBNWvlpBaY913yw50yV{LbeewrQsC`3E89uHlEj~7Wch{EL5kJ zpOW}roC?F`QPH~9y#Ru2qQ7Pc#;X1Ey1N|ZT*gx@9PFVHgaKrD1OdV9*Z2_8bV#u( z^w{@pXK$}~b}!=3s&|;hDY_@-=H$q7q|Y2Nb?h?wWueADY-B}GKL?>p@Fy66D)-pf z#l^)irc<4T1WNH`Z}9o`s%Y4xk_p?Cu>PoxY_*7cl+517)>iYjEnZ0kT3%k3Im^zb zP8-r-2Q-ua7)3e`r%|Q{(D%cw-t)?=Vdjvuw6rmII#v2SL;rudJR3F6`B9hs-N9~U z-@rhrneOvf4FB#?jc;Z~9Tq(N@3GT>REof(CTXass0@@IIIwSX`@`OdS+#dMRPWE~ zaWLIc=0^Uy=QjArfK|eFV8ppZ5>1J-vYO-Kdu0BBJKi&T@92NrDLw$K z*&Q5AT3V5?eM#oj!^>XBZB%_tCkXw2_tpr-qs*6q>2`1IwZIBaAM5H8Q3e`a#fP|F z)*zBNM?5Vxz5y2f40CZx7Dz`cp9>1cWQzXzIkiG)L#a}n3wCexe=i+W0JmZRZpC6| z@#(!Q(1QmLI)FAIAcZ9-<1(YtxyF?0C2JD*F)AXgpSM8UIA#5_Hs6d(L_~z4Wh89= z@81zs4G+&U>Gst}rv-^^uamJUDNr66{N_P!`a9g&>8R>@g|r~sHn*&(h^~p|38}-S zgwM|qQZBZ&iY$^7lFUuvxLU;ZcE)M5VB|}8N`36C*D*^rA1x5 zQoCCp&Ip$a+>_-T4;ML zn{hMW$y7~M6cy{|#~VNJ-E$^Q{qVuUA2n$%aVe}VD=^~wrC(JPH>#qyb?03^b(shz z@XsFw$u_Hm*t*{R;iY|8`E$m(`FDT62`!Zk&7B+Sj1b?(JS6ok85JjFK?p6L zXk3m^@u%RZ4RP9}(8Vx>3dhJSQcC|ZTWm{5Fq~5rq;EUW;D}TbFHB3DAcEBP>E^rg zztQZ9L!el^{cdVk7;dA44L!H2&+}t5Xnd0UCt3VPz-#`G-i@+79V2)rK2r-*O%PKlm?@8Dn@rbZ`x3P z70VgXQ^AVExqIMofv{*@>cz#yL}jI?X=&qR41Sc@an;m%+T$p=QQ_VZ zWfcOA-^#(k0a_tc+2_p5Did1L)ZE-B{&5?V=FF`fV(|D-+})?ud0w4ku0$Y^{`Jbs z$=L|}t@5jFtWFfU7~~VKz#S&ykcQljRiekDd-q%Xq=3R(G&;|z+sD<**v9A9zS_v0~B|c&qv$*8Y=j=cr0iAqpyJ=kiURy zxch;msU324b2~Ofu6w&Jz2Z`f=Awq;ly;MJ+qG@Y?N`M{4=SsN7i}CIGQk_7-uoQb zJfDh?oKJFiA;x12P{W3}w_XhNp{|vR)tdlsNJfrbcV&y!F(#W8DM@L0UVU>EyK)Qm zzIQunN6i$&=W3RgmV6m_d+7K{@Zr8n4U8v~Eb{p>`pCdn#O<&4zPar}_lrZ>p3k#O zZ};jg6m`hHJQJ&b=Uz~|^wQ;_r~MCXI#cCI{;)gyTW81Au38hcCwD6_H^|C#Rj?k& zhD1K$JEt~XI>R^fiCyZwze1$*k@{S8nfD9)Fqf}hOn=Q16O_~tby!fjarS}7O#Ig0 zqK?-O4~Lvv1s2xoX)+@u{|tDflpT+V!!5Dc8UoH|*JE_E{8GlOVD~<$maur;F>KZt zIza?ZE)Tf31z?>PPU5^bNyqIu4m?;QW~If# zq1(R-+lH*2w#CXR(kDw8_tN6OjMt3&Q&_je@p1DWpXC;Yd9GGTzI!$q7Rl?^O&51yr zC{kYyH1^)suS4Um3S})w4w#at(!qFuPgdBF5JM}+j-1U2tCk22JYfhJdR6u4eJKN; zKMP4T&7X!Syu)iQnkKBq><~W3b;`vI}*s zj*bm{gzHEl3h{u1DMbnM?T< zk-=2Vv&Gts>x1F&^RcEb6kDRlJtS+k0qvPIB3V{1p4%=6BmCe1s@%#7hqev2BG0f~Q z{4QPeiy1;hIGf*(dXnZ^2q-MMR$*eTiChYy$mYa2AExNkm>Ryp;SrMfhA5Aq=b(|J zsLJ9LIJIK1BIa9jovQmVnAu(}mRI{zVj}n3n)9`8E+oY^XQfP0WR$H#)l8{1CwT=0 zCiMm?X@?$!ZN>6;SAe=bYZLWk*09P*k`eJU-^*$f z@gEBq>`iV1y`eojH&^D$ivtd@SMVz|OYnt?6Kgmw1|1r^SO0r8>qBI^)q4+~pQu24 z<_$6h){IA|`Q+fDr83vQ!cr)79&<}PbjcJE6OOw(xq4x| znP)#B)!p?Vr0Ry`K~K~f*X$HKcuXa2sojhc009GFhAweQ zkeM?FXOugjbA~}26p9Oo7#D4x2 z1IdLpsJNsg>T^y`BHDV}g7t`M{`Z-EL=?4@5B;P@34o*d|RNwCP5SLhgj zYu@EP$?%J=R5(a%z>LLD7rYPn=BrzOc%i89+4bByQboE{TeuEeOhq=iPE3v9`mh2; z5f7e(?2!(MxATJsqaKZ)d(s*4`T2qmj}&+0su}!VD5mQC9P_%VepJ3iGfDHr7qPGY zJg_E<>_XBNTX?(7YGw6h|L30}Lu=DMgwpl1MkX!jXEoK;KFj6@I_F3_M@Op|(br8h zN%jU2oTweVWbFgKk2a08zCDl*@3GDy#%rxMO!KcE@=nmT58^O2>_Zu9ou`S-h}qTh zK0+V08~XA?*S)uK*e@Pne-uIAzg_&tC`8e$#`CTFS5>gt$UyGn?~vSl65sxm4DBH{ zWA$ivET#0bPX-$eYA%I1%^RtO*T7C^l6R6s{K6?#m0`@U_m%>UkMfvO#h^VZpr3}YX%ti+Jf7`6wh!p zz~@&VEXr!(8Knof4!l@&de6;;@RRxd0j}I8V^MG8HBLRFPUHm%UNxuwJdt zcX$DPR9Rik=J8Cyq)`|upSBVLTmrl@@@nUr=x)=(ZUsxDCtri9noIF&pVaNu) zea^xTr)E~w4%x%YH;!Rsm_X(-62a=dNgwh+q5^4>DoME;{t66MJ7=DK8oQuvv&?G7 zY=S!VtO$mN(31{&&gjR8I$B@XzVPWxNLb+5Y>jL(>a&kmkScT!AyhU^`y?6CXRbg7 zH-CGm{e|24XDUy61t7CKl!tYl|4OkJU|xky+{Mh~&b=8Aw@mMAQyj;HGchNDhWtXnBg^CpVQm6H?`f zXH~Elz*$a&ANvOGUZ086n}4Osme%-^zPbDOv;KX3ePvKtd7A-(O%Wd=;t#%e}7Urw-6LS>sO|I_nlR!qn@Br8HMY9hP z5*&e4D#?)1Uye6%`i;wKNVrLVUmrDE;quv`_d1j~2Zz-afQ#=noKnVp9`ZYs#!TBy zv5DuVIG^+u9i$n@cklXB0g8Flt=QU0=+E73cvh!OdvM(19gx{VrwILAb5ayAdIZk zH!vtMjwXYPKq=lkgIS?txP?<;Nq^4CnKwTD}q zppbjMWz8hx_IcA?Q87SqE8&6LJq6Ks3W8i>2eU~IES5NtGhlR&ukDRUeJ#(=AruO1 zZ|uEb>9~KKD&^&e(?HK649?xm19UDEq+mdu$T@~y!yX}Gf=_+^D3HsmQ=Y8rrBL;o zV*6e7V(bdD?H8C`$*5aoT!Ctxp01E=Ei}${%*S^(UjLn5_jTdMvAxW%jEj_XEmLg8 zB-+>35mh@wPpD&~Z?_S6l58irQ2u?2k_Rp>=!dI#rJL^dx6P2(?im_ZJgB9FzMgfL!M^VIfhWg-Ym%%HHa`iFMAdoKv-pb0cn^_Ao~8*FQ5$DThUkQ6VZ zf)zPsC)TAg<{}fDj)nK1XOHQ>!>G=E zXs-v021is1S+17qHYB*ccmc@v41oo=(d?k{1i#w(X2gBWo7y5ej>4Nw&ga?#&*g8C zFH_k>-&}#IGjiLjvH;rsJvTesqdU)D`=6yWIi#;g20OhA$FZMo2h?4~%Ie4J>I)P$ z-e69qxJ!k3o0F)KNS0;-2tcy$-tg_Er5IcGyZlW*y)J0N81OYQ|>6+ zf=(FJH?q_h=S?My zmgnGeS0?R~K2!7AlLBMamsFIg|&kULZ7Go1<}FaTpG>4fo5J zFFd28y8|sggML8_Fk+IdxAdq>$MvlO-=o}f%qdGUc;-{WEp9vTMRpY$eOVVQ_5|Ki zK@;bR(O5bJio65{2-Xze&rGyHz@^`VfuhvU{P8C5JrI*I#9Kn`MD6R_x0{E?w9iJm zU~$tWBhEKeMH|PW_tGXqf@*Y6h9~=ym>?kqOfdOceO*Vsf{1POaV?U7)nTQ=v*TZl z1MO*PgunmHwK#XYIox#$$NW9W`hMNGvEb#ss`yidy#YiOMZGBGPS@4J&&;&)pcsiy zDSn)I_PG`Sod|hH=8s$6K#6F*v@dz(N|%GrCi8vo?cc2CH0qc@6ULpg{rn2FuUyF$ zA^&Nf^`(G0W#ah>NxAq4sP{yQ2@+cyJ2_6UuQ_r{yz=CZybI@x5NsE)-a#Y}zKSFr z7q6mDrGoccy~ZNZvt!(d|;e zm7>}b?%F}mpFiJWPap1iyhT{PSx|WMe^dbZ>iusTtK()C7tMQghXfOh$l}CgW;l_6 zAXL#bnDFi_I$TK^RX8etRMwM1@ua~fGJw9iTqHHJln9drPr7(=+*moz+_kz=S31>bubxO zc7dZtGU>FmuFpC$TlVc%=k2nHx_(FECkF9owQ83qD_Nd6u@SQAL(C&vFU%%B&BO1P z(BIM(T`>!v;V~p*$mgF3h@!<7(vBiYTYUo)6?m{{1D|YC*ptE??B! zdK$Up_a3uvX)j+n?Cw4C>=P1XhT_o>z%`m)oJ|-g@{RNE` z3hVA8c~|PGPW(iQ>t}hx1oJZB3pGoCX+hUSQ>k>qLR&;krKo}6&3~Xvet24giTqcC zaUan3WYPm~k)&xjjbA}*`uUc^y}fsXidey)7&V0rxzhpz6t$O<9+Gp=(AT7#5a+1Z z$tFU!3T_|2V0aT#qqXSXLp@*AWXWKiq@QDSm#F{XQ^RToOo#N%3-Zn}@(RcrMnK@` z96|Zo1*-1VKzhOEGj&y)?J{(Aq(wZbES!YZaG0OalgE$mY(0Wzf4wcbBb(wY6in(E zA5MS};Cl!jkuLI>@(^u?q$A*enF%I7WuJd=zLxW+Vo#-+?5yt|yS6Hs*AXC0B9ZR! znCA9d^GK-j@{!%ZlG2|hu7M_PMzXq_B=6xMPp2#Z&LVhNI{IuXqFp57sw_{wbkQe< za_m3|YrgVfN4N9!(OP(2R7~`4G-4bdl%T@5VD>&-_EbM@$A8k#U+TVlS`LTyjb`MuDPJz+J;6d7X0r<$pBpP4~fbUAQ*PwR%uXQDXl`=-w} zwa}zP1sM-?9}2`l*E1sNi7$nb1tTaCPCo_aZ7Q#M=hhf zVOfv%)+X#;kk8YQ#qLXA96OsFAdlzza6TKo*ahuAr0!0&vK>`P=4GYMW0+5Z*RyQ%zs$e zpGy&{n2t&dt{o%iO~!#K9Y+R87$LD>lCWpjUA62rc)7m>pAa1XG?wAzE3N=*_(-J9 zh&W7RvBbuCq!=E00jW}um)Ev_c5iPAc2!HGx?4Cn$)UQ8t^jNO1>1*+^Ln!vL<-k! zVSe)D35{b9RH>$vB>XrWcMhqPu_GBqJ`^nG`*54zO2dSe6BYO&Qu;--4k-eLKCun_ zL)6M%9*u-mQl4nW`-(Kk&Oal&Lb+uDjWEEN>F{IV{`u=}b?9kdR|atC!NDMF8eB2iT7|rAZ7moq|7wWj%QvUAX0Z7sfMT#Z8{EnA@;fc1dfhSQ72M#d3}rXhkV7|n z&&l1rWXjxNC9YcfN9az7X259)N<4aM^QQ?_I!JaAo<>K*d`sjCEQ9HpqzXYI(pa~q zjhfJe7{3V3oq*oD>v|)7kD)`Aeop@LYBGznpJ)=v!>hDBr7ql~f8FPt1ssVI zLx5b}-6e19>py)+MYZCv^{@8vQ|Ib+IJh3?cZuP`&de{20|%*Mjoi_K_ErFfNVs*x z`K=&jD@wYO0WL>M;9~2FGXKI9APo1R#IIb%f8`-bt*+;X^50{8_Sk{kXcOsYsw)Ue z!%TlhUP8p)rV~zAMbLBkZsjv43n1)gib?A4R#a4!WaZ>M|IVUfev5(6<9ia~=G(!% zLWGK_SPW4l+*0O!mhAQnkm_yW$lyvk4i!% zxGl+0nR{tV=Y4jtsRXpyi})&qwC%wWsV;5F5}ceQZuFv#$eCxP`>bH}$EN$E`W9## z^P26wlQ8{k%J6KZY)%)*^T5zs+3A{k&l$M`{YfTllzw zU4;JybBr{iPUG1AvG4G{NL_v1@71!oWRIjQiU}X|7MZM$*=uS%$Qky&Kt+s`Y7ZCLF&&cMRVP*`l8YjyndclBTVM19EEK-8&o zUDrlB(Yl2GV!x37iu@n1i8=S%Q$*w`Ir{O5bLQ65;WMDsl{~V(hhYCbdK{OO@}5Yx z{bt2iLQ+)HAMNVxKOfK;paaC+myts(m$tC<=@(Ar^Wya;W|?1vPf7NREKd;c=wE~` zO))9arDDzxh(lTQNB;8IYw&RxJPFVBfT8t)+hB%Jyzr1^xksWK>+^BUm6dYRAHfyI zg7c-0WtS_+rHx}+h8KyTa0okMzz-H#X|tzS#T36O6cJKT9leKF5cWTO9&k6nLWmnK?Zy(gr(z%8aU``c>IZ_0YPKEKlccg^JKC8WWjyw=`HW5_gENN0hA4d|WvShlY zS6O7e_WtmYtdXMg=og-petn?|@~%O*8EO)*#b$LJb!|f}y`A_wm17uVL{N!f`fauE zpm#{Njrf8-N?kM_4^vY6ajJ{l{h_y-WbTjkWk z-DJRW{^Cif9qSG+aMm{UY;u3&KvAZn{Lwn=$4|+}I_L;0=SD*D26Ffg&?;c5Je|JK z@Me2D)`i*H1_=kCRIu62+lG~I@Trtgi}z-m0aG_R6*k(iBMRh9-qR0r6Q>rz+n?w^S-uR%Jo_)g|&mvUF`T~D#B?wQ3$^; z4Vb5kq{j9QP>tfU?+^A6DL(Jm=|!vhGmCC}$GL%W(i1c}I|egnxsSg@K*mzLLNjLq zn#DS<#rkaLnrz#^iQ;hMsTC_a)1otYW==}h3D%fticL6EED*CTK@*`5!R0Z1sl-kp z^eO0{@4PpM++ubAq?E3FYWkF3{3D+3^_K>@tZ5nqdVwm&R=4i(dBmm3VH!eu1%ce3)bwAJ%W$;!xo01QiT7y-vf9g zF2<*p2U@3y77-2A!ZYj52NhzD)tf_y4VXY`mtzE#KFJH1)NKuq^A%wa2elf;j&7kb z!`BMW_;-cHGjpbX^kQ%};|x(sas?fQgEj}BspPT%{7`OhJRlpQ4`flY8Yy*(JTQqO&bj|_a5?GW zzAg#55+^#M#ufhwMr%w!L>mQAaPyp!-iL{POwyvsN!urKof<#bT`*Quwfo1@wE?Z# zU`b@S@&iclxv?_XEG>wcROLF{C^o5m zedCr=61Ff68)LzK+48WVhD4kHn+1s7su(+peDAgKQ%RoG4mo)R&)$87$=Is<`Pi?T zr$5JTP~cN>NE=EXQ9ed^0QE0wnZM(|KBSTd{`hGXvlLR0vJ+|t_m5PWZMhDBZ;iDV zO*jPKPtIb;sXaMRyz3#oq?iM)j4di@R>z%4P70t)8A8}3`P8-zxvU%_Xka@3rNQmR zxV-}(l!MU|GAb!jWIf`ID%?IC@-aAZq{QQ8c1PV!y0PoFG_$16LPpOff^K>RVT1iZ zhck!$rn7|{190p68YB=Voty777)pFyzPyj-9-%RxDQL-VW3@V#DpGb%EPgP6H}jw& z!68m+dF)+IHeVp`W(89Ehm?}2xARftax|%(%gXl_ZtYmSa4| zWAtf1w}f?E|Ftn7F(==yledG9%+h$0eFPtMJ@NDmp}`pQe~b%|1#lho$nI>-wOglM z&)l_Y$L$*d-)gQ3OVtEz)qqj5EfHuDiBos9Ux!Axt__b5_fDOFdidSAjC|}t+;d%a z2dEC^P;(U1(~z1-T~uJNf|m%!i9i4%qb%-*K=L*f!X|D&0p-1m8qv5%7yTWrY2|5f z?@@ehdS+%O_+0bx9ma4J9CQi>fI#;rN%7A%GW-Z%WZygYh%$@WVWDHt$AAf%c2+gV zJj}eYbS6MDD=Dp9pK&9O9v=b2$vx#H2&*`k2cIeZ114T>-f7?xyQ#|hG|r;mueCLz z%~JD))zT(x@>s&3Ium+lQW;GHv@ZdHw&>^zFjxI(U|o-d_NN5(&(y zIRy_7y^Ujj6uvU~xkfEd2BapW-$lGq!!4+%{E5=Q3TOtAeOzoH2*V zuY$f&XiWkSPW|zh?%?VF8j90BGQnq^R%lXo!CYRO8Kg;$ap`Ma)=mgN8kusXg18I= zN0psFa+x405eYZrnFh6DzAZ~Wt{#vb6^GvV5@vx?;{I2(`xkVvuIjWx)#RZ?p6No& z)7A)1@M_SZ6hvpdYs3$I^!0y#Kdt>d$=N?~dFV}iZ#)g$w|-~?5kHD??_ZiMs1EpY+J6Dx%7>dLVh)Q4WZ~}@hAeaP?5LcU zD){!3zC)&vw2aKVAED}D5jvEeZxoYpSqzB%K`c^@Z?_3es8w>+iY6=7oM8tMdjjV8 zSYGaHL=%7i2q0YF>QqF$bbruh$8=m)cH$ud88-@v7Nn`HI9xV>*$5Oz8Li-W#uKj*e<)cnM(jShlw}%?GEyQ050eTDZEuC^ zj5HsgmJj8(bB-nCo*Kv{->a9b81sDbCQqF~P8eD5#CVywWzy!%rZf*KX8bTRbb-WDFbj-k`ga^8Q+MOPh$>ZB-p7<}!6IS%KsaaMz zBTB;199>t~+eHcYzRkiy(_?cno29;82 zQ2eAz1cq(|MFbS-5T!$!89Jn-8$>BVDWyxgK@jOq>CR!en|q)8zdX7`x9-i;2+_+tTVxWj)RHJyyiDb?a zA0m}v=ZD@F8B>G)u!;ch5t)%XfW?$qCR|Brq0^gNu^}t=tR~k5CwVqZ)4YU`wV4rv zd7!?pgX6!6vNsRFYf@j2ih*eckds^&;weN7&>N*WcH_Gr5#al_i5aCt*Wib9rNf%i znokWK+HQJJa57{V@WKDwURgwsRgV9tn!$|%D7>`E zC2xKTCc5Q=<&7>}BBqCUp-x0T=IY3~X@95mosD#vPxBXUp=7cnopFF>jUPW$;)*xc8P(J+L9Pxl2zy^)nq5lxG76qjL zHr75z<*sIUem7x92|)yi!^+0Xh=!}nonS{;>p>uG<3C|Y36^$vFDx39r0rUIIT7ys>OTbw4 zquQ{A&D-~t9gZDTuuA`k7p?%97p!Mq@Q@e}`ndfUj20#Fq?FHB@=^mVRP==-!dPro zsL|ypvxtig!>g1xn-$aVUvai=0hHiekg1|c$%h_ldy^u1&q8W6I%{*%u2CIK9#Cxp z(A!-~YPcFiMNrC-CFtwKrOArnqD7yCy!j@#!!=dqM+t;!{6}z2%VL$SD1liOi31T| zMQ*fmEC(e)y82PECtkouH#Od%RmNfM@d zI&Vym@S_7{Ea#i%0K(9=+&SFM{VXB|uWO#*3DcK%p8)jmhc%}Ae1--P33OyPbyUrP zJv8HbaU1`^hU~fm30ln9u-w^rQGSRnV7YDf94WF;%?P)aRvcb7Ou9;M3HbB{PCJR7~}k>Y_)K^PvUsY|C+jP zc0fNlRX;%K?j70*S-GgmrDS5$jS1^Cd!%TMjYU{P-A)4~>n%*#lj0 z<+P^4As6ec_+OODFN&{WG~2qp_9i_97)loknC} zsyIqJBMhlb_&>xPIrP_GPAnn@(^`;2*gevc1FLo4v=M1`p-<6oyt7jCkO=Gp; z`ZwF!EEp-MJ!s4GLUe3_sKm)T$H8?iu|I6 za0Y$=9e$hLRUwJ%X(KfWyuQEYQXkU3N}yGZ90!fEGu zgF$$Z;}^BGM;k*Z{iLK`3PCL}n0F1+aqv>dU&KvCzbmedFp zE^W#fZ52bMYrGO_wb}YPx_#h&5{vcESMleCYR(xHVWJtn4i-SMeC;~zatJ7xV|UV4 zA=|YcFlgU4^R~9NeGkre==8ES{o(;fC+6_oXHx3nTfjfm5-LgX80~mB@boAr?IfN9 zGWI{>D^bSS;`w>#y)yLc-MdElE3V_ch%6NVlEeMA@A;*T&({mhhm09Tx;<|I?+$D*Wn%l--DE5@CQpQ@S1u!9G`!B?<&cU!ew>T7gk{@jNFN=TcS&e- z3WMII8_u1oH@;_}xsbuXZI6~c{qzL)DT40@JFW~Vs3t~o3w1_3%5cqwI^=cSslUv4 z&CoGkx>9)D#zoUMbKX_(+iAG?Zu;dEP!S)b?h#iH`p}*;A57J3eBW5gQbc_^#>YVi zAj8%^`!u4JDw+h>KHPO{x4C=LVr+$G!{FuOPmp6;Za083ehu`j3y-Yn?89#+L2p!f zUHkSl7w1l_Qai-FcZt|qoxfn55>ddaAhZY2-_sb?3zBbFkdB!@_#NE|Tjd+Y;nSQkfO z5Nii)&r*7W8=Zw{h3MnoJi5oS(^03`s^D45Gm3EX5M(5dbC+Qvwy&{1QqKCVDK&L@ zF~==2YN$nt4flKpb=9MW?iunMML2RINN<6;|I*IWzzPZyC>Z{v3Xknc7o#Os)2by? zKTz+XGr#tN(-?+g7MtZywodHyP6eC0RES>(;|N=P9~*8>PoI-qs@$L=n?>;HJaP|b zFPM@uL_!c?koQi&mnin#F*@cK+gv8S-49}JFQ#oxazJhzjSJ7+rG+b9-19&1c>{ai zX#Ey7f_f#z7W=P6Il#azUwFe8?d(awTW$n5xO>#qf=emrgBHGpg!$2(I**ja=( zMTpzmg{D%g1`4|L^DC8XzgD+7U;Lqi0c55TqI*&>?JN^iDr9>)F^xnngAWfL8hL+aA`z^VP4~uW7g$;X-3Zm*ARRp&($)qR#=;c zP*NOfi3^X`)l5`IigVLHV6~q{D=K5ukN8Qj6dHHejT12Vk#xe`a@9Eg0jI~&k?|9T z$b%CikHrdO4?b9hDO9`&r2`9!UVI0r;LwNUeNYk%sA_A@Xt*s!F{k1DnyOEvu` zlF^HhQ>143-ldE$9v|}JL)AjS^I&mBBZeVYdGMIc(9zD0&&lJ3h~M4@Mb#@Qk&1{A z$$ph10YHZPDbyX9Af~>coO;0!?VJzo^THNOY5}zxdUF-%+4P6)KKN%iu#%@5ylywb z$9_dV|AVe>hYoud3G4?{6fHI_ojK&5{;N&-G6hNiL ze*M#!J2BgLq`_$~O$xK=5V4h;{=m!|noDE+Q`wT^qwB?Y>MPz3CfnB8zfV#XTAc}h z@WBTWQa!ky1h?_?rIfoXve)EaO5ZfP{ZVQSq+UAEzMgbTRkP+I#d%ebPLABOw+mgrR-3%qsrksV z{a}&z^@PZUrH{xKT&?-j$+Qj9p&V9n#7Iv%xd$|{f3fi#bKMV$zkuT6@z=ic?Db!| zQq+)$N*f|+(T>X7Te8q$bhXyT%VjVrqg6x0Yi*=(5NbMkml~GRcYjMww`-PzZ+$2e zD-we2$Lus-`ACxg>?OBWc=zpRf-J^(HxE924{Rg$_0O+zCnh7HiQN1MtKp783*xz) z;}bCh`&TT&|EAs}C{{!m@PzyP`@bahem}QWxw1Wmh-kE^(RGAM8B0I^KCAJ*F>M`A z2n-M6bkC{h+UCysO0yYyZ{GOOq*Vf|0>MXGZPk00?r@kqP0q274_1_1yLI-^wX*v1KAv=9+KA{s+ZP5KJrQg7yF_~PXaqh9 z%6nY&z8@EUKU~kZ=6WDellzO5y!fmrL~C|jnsZ%+3`dg$Nn+pme$AeN9^fgs{4v34tQY% zsQ=C;IdO#RuBlUJKn@)%V-2KztSzxCdR5%=sZ>AJ_g!NDOh2Eueb%V{YOd{hQb-b) zK{;c^jzJ30GPpidlONdCr(2||TeRmAK2?aQScEXSbvSYA5PY6Vllig4Hdy_ zpmbj9BSw;{`>aH^DBr=UR718Q9D5a^Bp=%Sh7mtuH#^la#N|%aU;F9i;yWgIQV)SQVD5BIRM|I0ijxVI zMyzY_NSe;%oK3!_yk?Gwh&?rpm2Iy9?No`(U|0piSblV$9q1OlOD~OgEs1vu|6EjP zT#BTAdEn@`o2g7;Q@>{lw~i@^fDNL`DYY-BYu5jMcvGu^iM&va$di|)3Lt5YC@89B^wg-xo!Y&ru!ZYg)Tz330vEL%AA5w}d&hpkr=;$i3 z`TSo|=dL1KzHbw4U)z3X95E2#P&jeq8@W8S4I+B6d{Y*!O90+ulGz&s=-d=4q8vWS zl(>#x`(y`D*z!De^yJ>h6y*A_P2=+cnwm`h%a?vqN*E3q9D82M*IEkPY)-{w56)_B zf`s9aKT@}hmHM_J4rP;q|87Gx=H{M`-nJSe3czEyb-#Z?>k-le^+&f-zS??g39N?G zdulz%qDE<@{M~Wyi(s;>%TztbC=BfGheDP2CSk zW7?)LBY1NvOWDM+g$muX- z(UM(khPof^_YqZ<+Je@j8ccUpAI~dK%oq3cUHtnDa_c9rcvhYU72pzoB^;zfxZFk` z`GLxU5Uma^Ad)(`1H%n-B>Y`Ud$?-{GqH!9Z{NHDdSV#9D9AQu1@vc1f}TaPUhmU0 zC$+%03JYYoNv|KuX0ysB{jV*{b&fVza|OhNLy;kJd6-k}!JI7m z(vlRY?Z5obup@Cnn6By|9OS@q%ptGNH0r1Y+J3gkQz&xC29X%6qbsfKE*;=DHaEAps+s@lmj7bAJ^~IMEz5Lh_e^-bC7Jj6_VDpD3zJz7sZNyke zL&T%w6cOXq8&TR!2#;X0J1;kQL0Aj+k;Q3>@7+ZiUy8LxK3VIt{%2xDT~~2hPd;5I z9)REBjZurPQ=ibCg(v}(Qo<>Iwn^-+x}R-3#Jl5ZW9#AcryX~MzfNGg;bPn88!(`J z1_k|W>G!+hZuYQ)w_U8p{a@?5gQnkn82{mL18#S74$dLf2v{ESj)~hr76zAEF?C%8 zh!FzBZ^WF^96%Ko5Hj55)bDT$0LSXTCuA_(oB2<0x%B{1LK!J82J;7z5ejG1fl(NO3T zD{`!hN*S^WXYag6Xp(5rIomot!uRa}FTcj$1hP$dwvE55KEi}D^jIUHlY}H|ZZ_!6 zux+n5Ocd=-JMRqV+*SexC14V!E#P@TJrjqq`HO98R&Um6_sVt1>PM`_gz?)t#TwYF z`OB#d{yBXeQW50bhdlosb&gs0?-eO#MVAcV-!DF4RdUyw#N9amz+KZB`s|1UNd7HEvGESy% zyAF5W)+cQ!_Hm{g?}~jTdVE!daXoxZ;LtPpN%q8*_L>q;XU!2Gx0BxYwnO--7_aE% zZq*jdw7M@z- zF&@OBk+Io>Nb3DLxra`)L7OoBDZf{^fXKQuf=5fO0lAJ`^1i@xstr707@(qG8^W2r zzl{sRY&SxMV0%w)Gq+ZQRD-;G3~1TVHLi4=7M8i4*=mWid1KEmUDAAx(QS z*ViN+)_H-OQTCfzyLh&t_vH1zQ)2+z?2oA6l%&SR6sY#G2DR93v}{>5|-PqtE~_~r{;-{`NjrsN7u zaUpeVUu0(WdYvjh6TB(pZp1ip{wA}(e@HL*Cff9#d)rMN3VS}DgCuFoESK!+ zhfLU~uLl*Hy6Gn(Ks4|1!N<|rrz$~B@A^>yocuE}p`!Ht08B9O#jpfnBiEcnD{$ZE zY(0vl8;lwS`v4Dz)HuQ@e2?5+WH13_7=#GHxN-8W;k*Vl=d&M5g`)_kXt$U)_}1#W zO{#$zxL5$tFDJM0uKhEw9wqj8C&)8}{c{2Y*Xoy&IG_D4PQCp~5-MRLft+HZox<#{ zf9t4pIs#eD5oza#&gKC|%abUHW8E)u8ZLKYc(RLa0R8s^P%fTSzwU{2WWBYekZ%=g z@(MK54{zP6;Nbf{h-l(~xYK<|pzYdmcoiRxu^?=>(|7r?;B9FKE{jIx$#SDQFll~O zb2y|r&cS5t4}#gQ(F1MC9j7NCJY?INg+8}m?YZaKMU21=YVy}*ygM7FTkltjGeidN z?cK4A&}2noPZtSOg}dI6?JB4ky2;Je8Ri^mbDP?}z~sg^`ruiqu%9QbKMQTRdxO&V z4{>D+h>gf)gFZDjp0@GaRxkpQJdrP?#sylZfhe99(Gq9}+y;lJs}qznSci}3j#M0e znZmi;%9eEY}7cnkzm>AmCAD#DOw4)g%a*EZP$*HC~^eA3>OftQ7Nh4iM!ut*)3V4)$83oLV5wu9l z(Ogf5KZJ443B3Tmq@`Gm+olbbGafx>X<{y4sh3OQXp-*GrugorIKbR=^(GabgOs z^reb`oLe0~hV+o!HhIkNN7fwnN5l)P=>)vpg9H@fZgNsYFMP1w6OBm%sMymB8)48K zfuZzC-nFZjL}|>B@biQGE{Eq(JH+tahb>z`)PgkklMdk&}=1`+z&$yRFp@Fr6fKQj`=@!)0g<)f^*|Fpbo1lo%L^9#MSwRY!DZSUP z>nppUG(|bi`!|VDWX_qI4EP+yp-}~If7pnwyL+X4y#l5}$*#vn{VQD4uOH?Jjr8U+_4tq9$;`pn8vlZlE1}wQPywc`m zI${#zk&%M^TgIO7u3OulAU7_u^wqP0N5)RYt;oyFvdhDtnUj{iS60YC*!9(1-t1`OWaQGJ!$}Ih+UV_? z_dZ~=k&A_$g0$-($0yNjjgNr`=g0)-Z1(DMR!%uanSt1>-#@TkW&JY=wi)k?FACpJ z1$%zFxXA$X)Lnjs)$`la2V;tKgiKhegBI?FY5o^1(*%TUk(%a!!l9|z==o@#$8e=n zL|;T0ZGN$Idey}@b)I-6BYxF@By%eaoH`=M;HMwRYy@G}dMnW?oM)ynG7Dlre123K z)#HV$aNSI>VE)B4iXG_0cmdMn`fozct#N2bs<`Wpl` zFxNQSuG~d+P*3rUG~RbXpZb@~hsTQ$U3lqQrn{__w2(PH53;aE0S!;)MpKT0w{1)# z%Z>BA87go6lCH&G!<<9)4w8O_2hwtJW(D}f{Or1{cLn$M$_w&a zW~>xXZ{y!vk-iGB3E3w@|6&t_1qMkyIS@ryJ#LpLXZTMla<{Sl$7D!@yV_iPU7_%< zgH+@1B(2x4x2hmABWR^R{ep$khRST0t6mLk* zH@vlWW2oXk(M;?EGB$o{qW_uv0=a-_yU=5_nTNq2#Z>8@}6H zxW1d61^m1OWd*jc)R%PE1=KI#nC(i+UyjWNzQH;3uT)2~ho-PJN}2sea1JD&zT%+2 zwVv|s`#-snmgL5m>u#NWx`X-5bSf@)1w=n6wU^Dk0GE{z2F$tI27MY~j9eFO`h!T) zL(I=Rfe9bgGeUtDJ4^Unp99duOFkH7jlX{Wi2=Bh$n8xb4yF4%f2T7J3EyGAH*9>p zmHJU8WqY#hJUJEb{9B?H18}wcdlJCEd-FvMvi5wOlTZJW$>za3RQw1z!oZcLdDy}X zS$Pq5F*=Rqz1w}-Y2)<~myGX}GLBH%{#1n=4y^a@7nqq0kV%TuN`Iz0{@l&`TWm73 zXLSG#qI6D11Zpm_w(p>SMj1(`Np(sFm)!b92q}~h^5%FsVg8(tc07qF{D+r6%&1-b zByUJAGc2cA&RHKUVD=YyM%z=>j|rLYJ{jPTs>m^Bzv9J1MY9=8^xya1G7V}gY`!qT z(Ii3d@4VOA=wLr<5jp^))jSZBBQT-d{xklDFUWa{1vCF57`J84Ai@YW=#TqrjmBY* z@;`9wA6u1x=&MHsnUs~;Yl~1~a>DW=h+XKH4JPw$?S{P0mJ|DkX}GOjVhkp7e`n@nJ`_ee$#J)I~5Q%>|}VpG9-L?I9u0w^Po9C^QH3==G9o>HdS{jB!ES zwH**=@Cx`-W-QF1-Nichg9hM29IjnzsT2qM-$UOe)Sst{zgeRW`CiX6=>F0$dd8B& zlfC{A5A{^{VuLE+`-)R6mY1AjhQ@&|dMc>6TN>($ox5YyPRQ$-zk^#7G$6iOnSS9J z|62&g3s>lcFFjTA=U@sKdXZFSQ2s72{k`sHM85bqlwVZC7POsK`@Lld zN^QOrtJ|Ajr*IK3GO~ra1BzwLV~QVND(mAA5Q4ZqXA z8<@JkdXs_Y)-o^bbW#}k{3i!BMI7aBH`^Nyif07@hG541oEL^GW$=e}aQm9TdopH3 zivyf0PwmCXRqtos7IR*E@1c(KzrD;askyNQ!$b`I0vnLUD4SLa@-o(OSh%)D&pOX5 zDTqD5?KjRKt>X}&!Kbz9Cxwep@rAG{bEN>%+f-4_^$U%HK3)SC4NNXeb{jH#c4z`m zuuXcqxOox&k{W%m4Q`%DN`?~eSM~`{4uUarTMGJ3!qOM;G6*wBnt;rJdJs@0zZz5@ z&T&{y^NJzX!*CYUhy54sYZ${QP(Yp$7)B20VXT$rp1eS%-zdE9+A1>vNYpelA&(bG zt$oFB>msQyq#Es5u~l}djc@gNeSjw#WDBO(9iOHacgq`rK*7TvLu^d{qt&#AA6@5l ze4e(iuEeN~GA^opJ659EB`<6fw@5UVam0qRu5z!wQ(e@ZvY2q~ znadghZQ50wB`&8ibBVEasF9+J(Z=8RRyg^%0_!WMn{vz78=U}&v+0cyF%jg45d?5c zyp%a27lr}Pk#Pkcvz*<>^D`dQ8F2?8fp4;&Ag~S8gY<^_oi1o@1#@;lqjX>A-ooop zZ^0)E{;(o`2?Y^Y0-*ZU^|E6@6#IT`)(!*yOswj2U0 z>y`zP!#I(=(KTy?#O_7?SO`-^u<@jFvdiUbuupHy+R(#z9{OfT5%9@IKb`~bV2k!Y z{IhW!ki#86JYo}dG|o~ED2#BzFTVZX_oM+XoT`@*Wz0MAxm~Z`X372DON1Tu-`Fhn zxbpT`i@#_QzV{*6TJYsR&> zElt3%6bLi}wbNIb$hSVp3N3F9k}rI}0}r+D+u0It9g=|WgiRTKQ?Q--L|(0;fV2yv zblI#bV1&4!!z<&Ea{FEF4fGrjMJCeg<*Gw1qefaA9iuB*w6xPkkTfO9dAxVm;lJk; zs47{mE=K*@yQ$OSC*Yw)7@*kQT4mdFHx`hdBawD?0RA~a6USV*Kz|mqY>?b7&Zam_ zy&z09!B3d-f+z`+Yw-j`{djCAzjmn|lkXrfQ4VnX!4k^i9H&6%fFx^$vIfBiKN*_O zCp8`VkP3fK$7P|83}$V=lG!e>^o;ial#n~B|A?E5*-+_Pqjcz!)>-wRc^XPW2GN-K zOcZnIu(%x|N~>I?(M5Ky|Fcxa4^ z8LrTne*9M2PVap9Tk%90%T>{sD#sXi3Odk1PbeAs^54W#CDh-*aXk=BKzHF_&Ig7w*|& zAzA^YixA`ofoV}^;>aVUH8=*l5AkHRLpj2yWyqiduFATgZ}2fgp%D! z?GiN}jFwK(Zy7=0t3k*u1UfHch^CeCSsV*CH#Jjvb9xGUxEi;|C|NITF_no#`50QG z?(!-y{Ran#l}I`Wk!nbRyrX_>F`nNwts!Q4mE~@@CCl}J$pn|_3G|E*1>SEFp*>wE zfT%_uHT-J$444GEL6ob&vEVf1a-N%^bD^QKwzvY88Bc%-^d)WqObSjx=n7%2efR4b zj!T*cXR=!$uuW+*wq4+=szdHN*VS z<25-Q5Oz=S0ovDY;%qD}Egh&=DVCj8{Il~`asm!7a4(R2`nSi1VmXUh%0h(#wJA#> z$Fy9=(c~>iIrXoshnoS^VK_n6xFluO)EgIS-Edq9ZO|*EOpivvL}Npqkk{J76R)n0 z8xZ;x*hBvD;?3lI!9 zjUt>fd_l`Wj#85v7hjHzrE@N1UVfWy=TY8<_ti?#MvY71@plQAooxf}#)G3Ri5HhY z-+n`Vd#QbMv0WbdUtK%uO;IMHRLIXoak1OSUmL-_Tz?KuegqC2Bod;A=6W<6cCNPL zq(oA6=zTJEJKqN_=B^=$;`_wP&yC-B`BsZD11-l#r-5 z?;~QQjBhtwNVo-4I>0VJ;vgPTga=gy8fO8ELsP&#b9TI2p$HOP#2mPAqPjBZ<>Pp$ zcVGb7_3~mwnlgTDuu ziEq|_@O4)B_a~ux?1SoLW_Q}ypx=-v2UEqhU{5uPuDYf=l@a*wqIn&hj)<-jTKh)? zBjuiZ_g{5U)INvXc{__3&IeG7&BX4m#DBP^s{-8V^W=^&>70qx4W{0YrR$J;E z{@b|#ezaQH+k#|ysW&%FvAh^7txHW0vy<9tD8{{Zm7PJubfxT}_m$$LNr#XeTne!p zT(r%InZxfxXseFsAh4K$tF)QJToLyDUSb_)%IM``MM&nnkH*}LE?&Wan|+fN)}RmX zC6khbR&kmBM111DJf&>1@5iOlkM3QGW=3HfQyG|w=a1C|j;&TbjIW-}TwPy9$C=k9 z&jA|)?o@`*wWVAlotqhrn@M$@1D41Oy(5f71etM5Lc=a*dfD6i0F$%2le)O`IAO)A zw4`>6yZ%3&-+qXavbx2{$1y^)#nmhHr0K#xwN9$^qYJ!GrV}H9WIEx#nqC<_0o0~% zA@4%MRdCZ1?3TK7-tEfHpzd)>aWjM~HG#y6*YQ?Sn^GO(i*y4@L29C$P3-Vb`p|d< zj_8fuT=1Y;DwJrT9bE9WC)piUX(-h9TViAlKJk#OzE>()rvZXyO^zMWxufcAk-X1P zIBJ6as_0F*Sf=#`1q_YfR#@n811(VSiTCI;fl=36w)1_GTQkLQey-&|icnb{vcQzq zDw&3Yo@)0YRcioj;Fmic;o!G`;bq#b0NifL{f|-BK)VXhi^=UcfqE%%ga5)`CPk&wmIZ?o;4`cUz|Nm7Es8x=2I9uBL%?FMCzCH<& zjrykuBV*(FPTNXPgILz<)e|IzeINUFuo{F&ov<&;_Lh}PG2|RJPTOjmG;6M5F9>8aj?M`)8Y z9EntW7kf$fq0eXiGt-ZZv_5j>(OU!i8?mM@c86rc_b_Ek zaiot>wV$v>N)Wk&L)n8M9NxucMKJl(tTcV9Cx@UCs2ju<*)3HTr{_qjydt=#aM#0F zv37d92Mo4r56XGNSRhqZRdQVr*eA4M9G@1Yd;4DBMdGU0=BqNBxRZ<7E1$AIob6Xf z%o0d(Yqa5mlVeXsk@27D?5>G%KUR!LoO|=HQ6iIj%SZJ(X6n#elaSX;NS1y zR zm4i)e9e)S6h9nC=4ui5{!15TS_{|F1g|8%+top}aI3+^=*YjQbGQtyya0lJKY7##K z%1vcV;B{n#V{jM4an#dXtMvP-q5RCdl+ba07VrE+Uj*iSwDF1XE8lqrvmKhGU-`yb zxgC~g?0xiDEuFtFgA*<1Q?*UCLX2X`9rlIFkc?-q>i2jw@=7y zzI=aAq4@qzoyxGPAjZexx=#fRUrV-djBzUlh8SuTa0MV~RRqG#Qyn<~4ZV1j8Q$*0K-us^V@@LA%YK ztt`m;LkuVc`n1f=rkU>~E>)|g?Aq0pbI`DpTRq`2~3swTU3QnP7Z7rb5cME0L~17l&Om;ViFIr(W0F1D_bQ zZ6(7Lb~L{44IIs|y1I(8`BqQPg)hBmM;Ih-aO7^$wO?IkI$vd%lKI>*?M9G&vB%Y` z4>-Fm`g+wl#fO+`|EeyOX#Wg*##*W*d-4yv6vo-$3ddM$uYLB(@zI7Nf}GK))lM@h zY+tDFZNetnQ*gMAMz{G5{iMq+{)XX`U{j0Oo<)KT9NAYF<*5!4s zO0hAspZ*nE4ddk8R+ZVfiyzuTLBom9LWLet7oyr#43%f72NIA*P~g~`U<;qBCt=oh z905~NOFIVR9TEE&3tQXmhEi{S9+=dN`PmN1y7dhiW}$6O=7cSez%>fZq$F%!rY8k@ zSA2a{7hp?|5&g7L$9iN8OT$k&&Hlyg>j;yLYVyNRe72|}xT z$kI|4KPA$Nf_72iaJsS!OACt%v$NX8QFksD2RvaVDg>dfuC7wU9>csjg_X6^@E>w< z)PMUe0=i?TJpql;Cz-<7odc4b>_oRJ{tYTvCW&hLN{rsDU1r*%STZ%5nOn`X{$Flt z93lh{{xja@@Qq}`!3Bs=C#J`$*cDikDR1DG@m7(vq0bVtBC~v z^zT;<9CWz5r*&w!hibc3COrw1tIG8*xkvrtTdS=Lfw?IL_5S^P)fkS&yUkh|i5~?- z$~qdySp!eV;Sg2CS`$!L5_%s8Ked{`rz5a~(fvOQFf-Oi{gi5EOwj|Y7c?93ygK7k z8d;K}t?Wk?N$%yz^osvz5Hb4fL$Lg2WFz z%T~#s_3&>AV5~xmzGKeou5_b#ZjchlmwD9`ZEixHLfNmb1B}XRCOXqPh&{_Y1FNUMCLOFo$#(iMR-&EU1l$w zcE?(UqV(obiAFheXz`?TXWg4@O%aIQ7tLai=k8jy9cs!2Nz+#Ev{JzmTy^lu&R>#V zF2$CYmnRoqb)DQ|h6XsZKfJx?wfnIY!DJ(zBq4o|tM{@)cO@THLQl^V*q!{lp7uaP zD?=}xqZpr^6|!D3Z7?@s;(Th{CKZ13c;ldzQ<9GlOS_@y`KwB~Y(?O_K?(g_S8}lx zPtoTDzu2}ar?d64Bkf8R#&&;<`y<51_QGMoaoY^LLN z;6r;E^DnoKrdq)8Vq%n_9KJ+>W`o7hR$cL^R6Y29H4mPhap0hL3eoiPad}CJy-1LP zuI6w+MhAs#V7J(S>D9i^=%DKIlGdr$-GTE3nnooachKw`2|ABv*O#1}{Z?eGH^&zo zjg7k-ohGtPe3aLhi09@=^6;VHRxE3#*OC=#)Tq?UUao1{tnCh&5f6<*q$NHRj-;9B z2F0yt{^%FsPn$P_=U0!3?z0%Wl@T;B^EVwO$`OLDF$V0dskR^zUM!11l3JE&Z2t(< z)*dkgT>%M}(j_dep-@kG6k@k$XeC6oEtAG@>VZ?L7h98vs?@q@f}zfLbGZ+*Eu&Q* zaMPXoA9WQ)8gx5r1hVd%GoB9yuK{1qe&kv0Z^+iwXk~?kdSBK2eFVahe~)+C#8FneJ#JX;l~2r2 zf!u5Ud#H{joD!<#JEKzYx#i}jqqjKBMtChCgeaK3%ZIiHj}WcHKy;D#>k&uuLJWM$ zKMjgRG?mLSwygWspJp`#Gx~^192ID&J2Fc}54B_1LysuohHIm3Vip8U-?o|4yxF9> zziBiatRUt*=m?ui?kPbD@{G&meGazFqX=4`%fkREfD6t|7QV!`*>CYy<4{qsNKuY&XbU9?Pfb+!)sLy8AZd(SiS>$MyL(r=m@_7!hR(wI!NN&ES9=PlC} zRvbxjZ-cvxss}~oOJkhF+R;#*4lC@{3Bv74_sU;q(Ak{nMpy5UxfLavh*WiZ7xk=> z1-Iny`&+keVU5C*=P2Y}gM$<0rSDVziQL=&=&nO6r89t@ZWJ6h&9Z!SY3GNKt^|;Ot0or=v$_8n(Spn zD3ubV1g`%2Nb#32|J_4eBZOl>338uBRIHgca7mPHwZY0K-}A2^uTG@5W1m~CXdWe6 z(0%3Ni@vJ6dg`rvT@US;S|?3eKRVHhw1qvL8RIzhBj#4hepfc_efeJmLdE;my4}sm zp1$GX;S>J$C4-c53YgR~sDVBbgeXbbWL_T%^ArzO7RBp{Bf=fJpPoxGecTP^LzzX@ z)}B|-XuN#(Tss4m(h>JpSdvFboy^OTS@vt`Z|Fse;}ank*sf#Yj0!CtNyZhi!LHwz zZ(sH-+o;3J0)lYAG*=Jr`*Zq=cZB@axk=aul8?e|2O0-SUi)nd=@OTNBA%N2lSgSoEKt>e!~m#V zO=Z|11McP^U4}-Yz))dnQHFyU^RZb{)m-;`{4A^z(Yk4LhG%ysXU94_m7s7UB`NKL zem=qdx>bp&jN>19xDu#1i3iy?8M+)YF>Ot3bo>rV$>EPYYK0Xo;LvfPPUTG4!LBD?DQO)O&= zVW^7ccXj>oZ+NFMn&+}$$6_lDJdrGRQZ<}CE!WUXFz?`Vq})%LTKt6gx+IEq`R4k_ z80-d{5N%c2M~Ie9?Z|VU*sv-v-xpC;&g-=}#C^;>RbKZ|cPBGK=Vj*Nk}_@lH6Z0H!n{_z<&PgOz7}IaEk2uPZZSaO?Xg>>bt~s&|ar4W{nYI8VuvsUedO z0ak2|FQlzE2JN(w)K7<0dFlm~+4@uvy$n_lxELv2>YPB))Df~#mv|!*nzJG%Cbpym zw=WuIxERj#&kLNp;k)92WAS~K;nn$Qxq-y)Dzkl*&*A6TFN$QWJ-ut$DnpiU%9=la z=QFYIaSo#$?<7i88IS&$U39f5u7UcWn!Y=b>i_%yx?MuVHFA-4t!zq2_8wW8SN0{L z$f}HMWOF53gNw-CB(k!y%IuPLDI;X>{d;f@34!5mu0xvQQn(3Z_qJJ#rI*EKZIUliia1|bI6*EHmF^T zZ3Dn9InTtKtJ@K>fsbDzt4@#WT5qR~>POgc=o#*m4peQC5FG$(L=kigf46e&zn|SNjHr4ERHU6ah1vMx8cc0HwUs`&@TDXa>3w?EdpQZ@Edl$li zLIl)x>7n`wj(;(ONmf0ctTZ#X_OP{n!Xji(If=S10A7rV|H*b)&A^x37qqVCuH#OC ze7^Y=^JDcL1_>Gc-q&}6V(inV4LUqL1hZ2LC?GIcX1AMgrr-O(;~%|CHw6c_e6OkS zO@987N^yfW@pW<7ypdS0%a~ltw%30iRS;TY)-*1}pnY`rlJM86a_Q=iQ zi#}q;?fOl5GV^@hY4Q|Iel_gGG>%RimM6JLavf8&((AD1vOrCLgkCL9v+d7H;JubR z=Fsd=u?5f(O6V3ZkJ%v=2EqjbMmW+7np7V(FhP=q4GX8|p=**T?u1N)7OeYIBG2<@KaAw>Bsf7r46 zi_6Kpr`;T?r%3M^X3I)~CTJGY<@MOBsEk}}u@_WvAJe8lJB1UP8ab6t#YRRa_u}Fs z-m8Xl?zMo3^?lEAZCVJOF9e4RrRxqgAi*tu{Wi$h@^~|XPjd`% zIZCK)$7igKHRbVAFGt|?kSP--E@JNH1GeF0)*SnKW1YC3yRzST^|B)41$ayI+C6Bc z*VdX@xAG69G$88GnLA%yww|zusz|&z(~xS_r)+pIy8S$lx#KKFtK0EF`81v~>YwA# z_S_kl>~M9!;!3Iqh$4|7%{@TwGANOms@8d~B6UqO{yjsmTiv{SO2oSE_O_~qSw__y zla$6C2c?rTARbT z%@~rgse2AV5+URp7v8!g4DcmgX+0Blm06%_yY_B%{Zsr(u!e;tk~*X==G{ucwapXE ze%CLei@^y)yn%aFIBrXt4Effxh6a(Rb}zYPE3Ty|OFVpcI)OoKVjh3Su(IG1N6TMr z%q|bJi6M^Hw!6K-p?o94f}FX#G>t{{-W{R=9OxzYI9ncWn_ytb6CwA;{TQcbm1AM- z;E5HBxTmKVSom+7p96BEy|uN~Eh>M*U!@l5O${kG=YoQirkd^rj<$_o;Och?gy|f9 ztD4m1x@j2H_lSM(I!NMx{fNH(FQ!`2iiVx?i})iBbc!0aUDO4~Z`)p{pC+EWszzDK zn^)lwcB&lxO?HhRS4b8__3dV;g7CG_M`VC7S6e)$TF4NJrEu=q^1!!5dbdvGvbi=_ z@;0Aqru?JT;UIdy*!qC1>Yn3#9o-V)^z$N^teCAX^BW#j-2Ibl>V_ec`#sJm)hJs? z3;}4we@4W*#xy~RQGa8N>3T*vhGe8o$-3J`7%Mx@D-hH)uSHp&zTSt~^t1gs^LTR3 zFR@q9dtllfTEtG|#2Uy%7AfZY8OKQ!DQ$Z+0UA)x3;jBK-?wn zOWRnem;MIS}nsWBi|X!V>1Nfj6`yXQ{jsJ##_VJeh@C zf*$`ycKPRbu^)`WD=`?Y%6xwfWg6d7Z7vLJaUaW5%DZd(-Kh;fo?E3*azQ#N0}q-f zhZt7F9L3J$IK$9R8A5*;wjNskS?H;!3QR?G2P`r@Ee(vM4&C^(a_3HJEsfg39k+iW zq(N@vcR)Ax~<^QetkQ=a%L9Mw=!Xegz1h zx!$b^@bcyj@Z1vLza+;~OA~%8j4z$tHRK@pt2&Y&S@2#mY_E@rm6DRLPFjCYk4;W> zhcGrahI=NR?$_C?6~NC4xp6sxDC+M_f z-HRUC^c}0eZn39Pn_x{V7OB9|dPY6;5qntmvVffh6VmHn%0G+|VnYbmvPtzL7aHUleTo2m@qG|;n`?s-iU@iOnrNU%R z3T4h;mulZ#?L@!F2$rP?$4!^|3QCwd(x+zn9_8g?^QST8cG~53n z%#gO^-nw-wH}M?NTS(S&E9&nMKU1MFG-y$&o83RGU9gW7k#n19=8(;^PwdjI1va!- zPmgvw7rR5uTogYO6; z-p)rc2}+d&wP_8!S-@LI6Z<}Soq!e5Gn5Lu9&^}ud+bJe8y8s!7je^h?|TUA)s`P= zVD!m;@3X~>sknfHjQs{)&Ft`79c_6xp#v?~gF-+6RPF)2MlubA&e`34Gf$=ZZiGa1 zK<~gc>9@?w3B$H#!Ch{W)g8^7v3_u31&Ng~2CKA_+vzY!$VG~))o!6FH}mm^m;8$} z)#tmO^x1d6htXfxb0NoQ=l*k9ml@73Okg;?ZW4O`mC|s5*`1z&f+T_c2ED78b#QdxQL}~F78eg;%K}xB6(%^*dEVK zj;j3kd#$Y~)%N@~Hk88Y*E8}Oo#|N!J~yr7Yhaq)Y5KZd+H}E_ClWKRKR4(?XXBS_eYa}Ey zH_3D9HEBTnHu9Bk3~|Lai`%bl=fo$mmbQOe?5@`$ZqB{@aGE)S(_f^P`_i+ocAOxgaNrsX8sI3VnOs^#we$hkw6&QIBFp+G(s4z6JXDRyi5cV>HfdT@_HT0~&}keV?o zk-{v9o&4a+Zhb(fC8A`4U#vT9pib?mRM?ipMGPSCGG__=n+e~b|0MXN=W;8rY@pQ~ z@6T;F#@6OyK@%JU{Z_Tbdi17K^y2y_Q+lh!{+2IRiA9evTW@%@X`0Rc4L8{S(p@`8 zkKe=d77=oPPTf93eWvf|>gey_p|k96Eg;JXWVyLIob0UvebLbZl1oIQVB%3QkSQaq zIn5Am`0JoI`CMr>aPK77%3HHuq>yg;`Fcwa>U*W-HW*!aBY zXRB~Kqos+u`?f~^HODc0c+!Kz1oS>Dge2isSa{dTOk-^9^9TBm?C{mf^R;l<1VxL z(ke)6Y4-XKRS+?QGBhoN_yg4fIZcp*FvcY@wLm+=FFrk5jK4Ut^X^gDLjFUaqqRe7 zG6c_`elrGcA~}aQ4|l349Ly(V}q?vKgT|Giv-6vfd_KDbCryC+I&n*^UPq}8$Y{!U;QRUtD(gHB$ z-Th$7#~X?~WCA%9j53`xKA$9o^sE4*0Aql!v9~_i>FevOT4^bjfR;Bj_$z>Kz5hlj zf>eQ3qE{)}ZwN#!NlDNh|A0wrCk1JPijf!IW0~^fcs<7bYCku{<@ifRVDTmu<0-#v z;OK!-l;#`9+#2hY*=Mq-QOFTCv!U}e@U2pp%Rh{on1B*(QD`N_J(I?&r$x*k8am}E zQ_cE%x*kpYfs`ZtF9+F>wVDd9AQk~evLM&f3%B-Sj8E;H&3uXH;L2ctj2}7rJZ*)l zpDjiwmoX6U=+sGIASPYG$v7#`y7XSzFZD214vEia!5=Re@O*h5xt@L)^e|&rFJG zKYgQ|j(q)Ay1Ltz=Nm-m4&RDif$5!Pa@k%kNIjha{vzSX3(Pmzd(5kNFI5fwVqP+T3CUq#EWU~ zrZjMcDbV+D)E;I1SS>jBhV2PQ=EhOQRq23Rf7+j?1^L&l!PboJ1aJ^oT!_Zf#dF(KiGF2w+%n_qf17(M8cGzkBJ-=6cPjmF5{; z)2}zbV{0=XS;!2>p}nvK4SVccmzje)r;PG-CQ#)P?&^1d zO_y0XBY;}%^~vYoUi@xyv9L>Gklgo0S>dohV+TdMz0>0%xLUTM8mU(tL{f&pOJd6= z8px9hFBrWT)LAL+H=Pd|zp{NuB{dV&{1RSW*Y-AeW~C_bY6<(t-x z5Xgq~rr^`9yC5d{XU$KIzEeIfi*IPbn_!p%3&mQDyIZF#!Pvid_4*C1#oay;I~7`C zVuLfOV0&(?)H_J59CEz*p$z@}-J+2%@XKfpWyMiO+m&*6FZx&4M21KjeZcq#-a#Ue zN^oryZFX%vI1x4#r6N~6bNMp)uhWLtR4axSmn_Nu#Q9mEMJWBIivv?hja0j2SN)E` zWUWh;8hU)CO7e!P_)Juc^POK_~x00=A75Ns-w^HYI|eg$sgOe*2P=WADJQ zVc0O@97v$(iA}))`u+^l>Hs2X{e=kjoLxZk7b-d-$gHh%UCU4JZNxj%3i}#u{GlKx z&RdS>{-T{J>;p0SkJ{@~gBhh%Ab*k3$XTg0qx-ZMFspV&UH$i|yt_d-dxVs~Qd(7OOIFwdeC3TBx)R zL|)p~Vh5MDYt@g%j$*>-x0&}3PcS6YKi_4!3|$vug9lZ?{`6={O8@^{fVf!`DYFCl zyOyqVicIDit(SSPbh5I_H(;LCTTC$@rKilLepJS&$!iOHc6F?Sxy5U4*aFOKXa+UJ z$RC8?U@ogpcNE4voThImTw^4qBtF14={-7>zGn4`B)yq^a2hr~>hZN>1@mHo2x%b6-I2V`>GYUcdrp;WD+cgr@ zV%2y_)S~h#J+j^Ia0;Ri|0Q|Eb%zMACzYVsM!0_ z-HhtsE5U^y`H_wazE?VMn0?E=?z3|rC9~2XZ(?Q1+qwT>SrP9yBvmCRT%?W)7&=00 z;OeiYUf)(nRqZ(cZ5XLV`6f+NJ(B0j&hRYlp1$&-fs8idtU4{ zIv1t+E=19_&mhYfVc0EvLFo#5f}=Alp?)aObbHwx9Fmm}yVFKO?yt`ee#p`wVv8Hh z<2Xf?i<~_JL*E$Cea@C!Gjg?gFo=k?g@ylxZ>O3jas_MuSFSU1Wo~o8O-`6NK9xMh z2f8J_|M{PkYn_E&Xy9?v<}2}V{x=S&kIU!*SHE%_2B$pRjm#bu*yl4jpX3)N^97wU zyry>(IJAGk>x+--;FS&VpfTSLi@dGLDW2cUpKva(G0o^*JG{4(uThHjUK;}QHdj6O z>#M;JYrCZp>xo4OpPgNGftnXDQvAOJ2phk!HD~t&h z)GNE*SADQ63pc+~d+Kce8(!P2Fy^an@>6!0&=Qr>7IWjI9Na}&k(%D#t8W-+e*qU8 zox`|gte}@!J#{jkcXpNaY~dsEa59bIEDlR1Pd)SIt)*ea>5WDVKF$@^A}btt>{TdZ z65KE)4RZ5c;sf*-GBVU5`eXC+^B+oT>P#B(e`F@Xv~0B+E8?{2F7_Swk`w$EDr-4Hsobk9ywM{_rU)qs`-yx!W6MhgoE@ zeHKbu!J+-&`{?(z_V+rQP^rB;Ykp4yIg10U8`w^v--bwnH9Aq@Tx#@*g8qT|-qUSsu2%x_K{irYk|El;bsSFT8g?1nDH;wFeAmAdM1 z5|vs}s@^|jEFE3{B3CAtJTHKJ-kHXxr=zoK`N=Y7l8{OYA&*XnM&%Fa2BV<=VxXU2 zrgWIk`|wrE1;-i(aL`bb4?8lRAn)DQQHUXRgJ&_1_}NX=l^#(l9q%x6rXJvbUJE&y ztd`iiqtB7PC~eH~XKgr_Bb^C-k}LK+_V)Q6JVYG5uI8ZJ?@qA9AGl3gue=I$svMVu zmMcO_%kgKoTOwZ19sYRhI>&SQC_vlx3U`SHhx(zCW<=!)SlG#e<7T`cP4Rfg(Y?Pt@AN+?gVj1Hjbx> zr6{-XSGTS@>^R|foKqMG)sIFLdC(C%6@D@~>e^idNibz(f1M%gp8%1Wm6aSwE6+tH zQ&pI;h3LeP=2VP{r!1ojvu@U9Jox*(>qFe;&eV;UD`W+W)+#-f>je{kSYT!Hl-wP> z55kYURgL2zsniEMC0OX^#kwd^nd=#qzL0* z0V0K51_lOsC+wYS(px{;Y_`>4{uCx^5dT)DKT8LpJY12eVG_*#A;S6XWz@^Mh3GLl zCjvso1>-vBC58G?86RxxM%BSHZmP?H}!*l8Mwj+m=#QL4>`4{^j6fq6%mDE*x<9TUb^JF?v z+@@3PiiUwieH;Y=b)?tS+F&a?k-`XgOCFjFuR@nqV*wU5vm^lyvZ5!c45}h z=Ui^;O>Y18C)c8%M^)Y3-78zurt`ZPUPyl5*47pye%zFyBu($daI2;RvE&H6vWJcK zsNd!9{H>~RCjZBGiu!z;V9@=0r2}zDQEE~nF)sbE**F%7LM>d1d(P1N;%YU?&W10; zOVg|ds{w&`dGE)tkZN%A_?tPeJqdHt47S0wdb2O4C39N=WncWAt zhm6PK5e50T9I%HGx_O=tX}Jo-U=SNYA)!-d_^AWjrm|H{Od09}8|9`IbNCTWl2c)Z zv+bv`s=cR5Eb-CRHx`*mNS?Uen*n4?l`6B_I=Rv%hx`~I6E(wy+!iHA|buK zy?Pb+fQlPZKB0Jr9FFj}&t%F59+IKnyf$LF2RQZjKTfg3$QQDAlyDE1X2t1Zq>NBG zU!ON=srMi}ZSscs#CIF7Mmf_FjYUHJ+Y#H@*~8YA9~m8l*ty!ysYUmX(vID6WhYKo zE`@!3Q?BsazwdO-Z~ipPV`=l`iUEDHUSk<*c&1u*XySt_W_kI6Yh3Yu=d!Zt`K}@E zlX*#;uC8v==c~$AJ8xn+A;6};%Zxq?iToIC!XHz2Wadag8>=HB*k-OwAs(}OG+n@P zo=uapPbm*2p87p|`QbaJhfBj|jflI`xLr9^3!)L>sWX)!ulBj5CJ^X%jC!I#u zBPb%m=2n6+W$YIZS3HtAX~2r_$#PINcWtJH@s4bp>Q&u4H|RH;SMSloW}ta{lJ62W z2e$2|IdN=5o<6Vkm2l6#OpStzCfp#`ADqodHPqcFB_*YlC;MB9kTu0StV6j)N}6M5 z(%reNMcK6`ZP|0g&MuRx0=z3m0lQ|1si!O?fZ=_<7FNZ6?wCZfmNQT#V??aP_|<{r zok>dZq9fycrKUfszl>ZR^9peH1{8H9tnHZ6D6dVpt%);tIe!Qk8_lDogC=X~)NlDx zQd3q)^SSb6D)*RAkGWdpp)9Ju%P=FuvZ$?0HpJXIhjb)L0V@|f_@<&?vq(EdxKBFH z@tZ~BWj%DCpLDwJtg-8MLs3^vEDr=f-kqGB%pCbwQI(&eo;R+1zV1`>%>{Ui%&3Wh z1Sb5y?Fd7CyzDbvij<^H^g69lKUmb>)74$G#iF|1_4GuZh!a6*0Q(|rMso@i6SjEX z&ArJ;;602+IZhwZH;SzL?fB}D^m6v|i+m6g@!55rUO~?blm+zpVeZ{AFTrOeCMKrt zjASqRqyCUVma8f&x8N?TF&=oK<*iDr`1+}Fc^`iUocNVh4j_%J8ibz_Z69*lUBpoL z$!EPtiNR!(qP7Mr7W-~{JuyF+9r8}%$#~Y3>v=oEa~-i@Jc1@t@Rn3hPGmzBh$8fFbp%9n11LLG9zW$gzbqg(tJPXKj850%sb97khO*Q?Dbxh@pK zb$jgLOWkv)=^eK8&Qv!hYig03_L>u>^94vBkOv|Cj~FgnGrVLW@u-t+p2Z9r)C#Pc zbUW-Fck1A>n!dM+mI4h&PyhSIprD$)5pba|d6l2(k`6=yNkkCs{AYc+%CKKqmLypq zRw18NUv_5rl8Toq2=l*FynS|wjYxqQeE(i0-b!1AHe{08{MmnN(FK1*mg|^#SBWje z16++t*0hVwGaZmZ`0GHMnC4o12AiR6qZ*(r2{X}@j&J#d8$!zsd&k4h?srItRcaPH zgjt!0jXgV+$~WZEAwAK5t1`v5)TQe#=BuTORz6i$hDd~8YEoA@R>ND0{D+4NPHnM2 z{XRE0_hD;tV9q51r0PsJ_z+xck1f&I!8swF>7k2X_hmDEGnHg*V#NZ*#Khcn5@UTc zDk;13QXK^L34{e)xm$pYf z7~L5N$n>@0+HFCBy?xe7Qwd?cnFNCz2#bjDu3Qo)brFjGPkf_Wf;enSSPl-)IJzR< zKxEP)&%OiEAWD=JD*fLB3YVyX#g!3xRyYiD2!ehaS%qeCLzoSM@_Xvc9S5?DNvnlJ(Va zG7;0Bcn(OA6POO%3<}a5?sVWdr>EPYP{|-<9cdszM+wz|5KLOuG{C zOfj{Td-y(8;G+r2)XSqtmoF&RxQx-RNHsMp>YD|uB?S{e`%xfj!}{r@qCxC$#} zVq-gJM)w^(HR25vQhN)5l!83y<5zKU=-8l$rJa^(E~-!1EZ0)|Pt!@-6V~qdxxx5f ztDAXgD{k0B?|`a1GS9IxL}Li@u?fWXZRB_sPA8^Q!^7Y|9CF44EeDUkJJWSpP2}O_ zEh{?Jp$rVB35q2#2g;IQer)XWF6<}mbw)k?JjGXd@va(^qTRX8%}oI&*LQyR zWw;^G1#rTI#ERjT$hM9WzA7n9Rep6A5h_8>C<2@M`Gxl9m)d8~gtf$nf;Mh!pl@7$ z(EkYm&^#jV)6x#c^nd2tJ0w9~Kqf)Yok10^XPS?9|G&gPWZ#I6ii+}lYml^%q(r8W zDP&@58dr;ND!QYS%WVMj#RgsV+d(|VSh4^>S>2M83s7U}XWen+C(>~G3d;CtOKS2c zd^uhIC+-MU7*@>fIvbn3H{A-Wp(8hh@kU8;al?1SHXb1gPIh)$qTRw<979*=g847x z<`3Z1MBxj3xtubYf=X{`X=%pe63ho(D$rF-T2?>rav|%ZCf2{tzT^R5H1R1l#_e!x zL6GkP9USJ3(0$BEkDU79_2ETIN_4M zo~5k!YTk!Yy)RRxOy}1nbiieO`O_r;-fj)SZl8BnrT+t&J||RT3|}577nBT{YZIvR z_4cNZ;(m)TgWPRY1#hAYW}-g$wz=u9bI?mxOcV4zXmeg#wVeH_@4NqiOpnYoJdF-1 zfMrTOi-cX*Q{ntP1#jJei&qj3p# z*|1EmApg6cXk2T|Q_Wl^mdOfv^D}JEWx&i@<*9Q#FcvsgpFODEDQS7eN0bjyiAQ{v zhg;rLxodPV7O7q^!9q0j+A8~rd=6#N&+%))cccCeTp*F|y)(5wRG;$IgN#b>1MVM> zxZtva>mQ7h7gg_-nF33_bWU`Z5{B*6Qy488&tI%^-w8IFhZ)k{e`G&{i&%z=z42K1FD*ktH-i6|vYbW|| zcNSCmsU921b3<-_X!`W&*~gl_vA5PA;=rqcwC7WccD@HI#xWOa-7dbV1@RqV2d%|; zsRx~8UnDmv{l_j_g&E2}fBxiADXYGZGE|$uGO4ZmIn-cgq|dcfIwV z7^dbwkYSWt5Zm>joy7CK5(wv+9XAAXEeL#7-UAo;dn)^Do(4O+{}FPBJea_YwiDw>-6JMNj*%J+`%bUF8$bs#I~5E7BVTc4 zdq&-;d2(HCs@(jMy9Z|`PjkcN83Xqxk)n~^i!Th_g8BD-7m|uX_KgUdHIUDRR zQ`t#pS?UhM&5!4Et=y-jxK!Zd$N!Q$(>emK zDG}1y!0QjiT>4mm66oj5-e*ET8(4ZG-KdjSyZg-d-R~!B)%d1LV6%Iold`XIF+jB- z9$$Yp#FW(BEiEgYFOYj5Cd|ale0LhL{e`21pkbs<*790>dwiT}Z%D4q z+|OFhWuwi6nh&AYx|mHrq;%7iYv5xIqeTr#o2Eo+$SvFygXp7jX0m7L;1?pRc3ngD;` zXSs4Q(i=pN?ir3ecntvcC+e@g%c{|j9JZmA6;1w;xf~Gw=5!)Xt zD#ZE(hx%W0X2NW`n9WT3&A)ioPRODXVe0vVHHFa%GEg?B8gn;^&PjM+jMbekus&iA zFJQI@PQ*L}TK8t>i31UpA}6#%MxaB-UEp{8sIa8U&N_a)78@5ASdghTI6*=O7<*~_ zsWF`&26HNf^ks%WvF_O3VZ2b2`lOR#XYvvf&lVJt&96LQ1We@*@epORFKINboxljd z8+}DxGILE}L)3`Povx?5gem8mvq8`(BpEjdh~M(})2YerTKpQY_Nr?3^us`d7g#tg zs5a~X+<1bmbCq(*ujvU1q6w0D6x&h*ROV#_dioLea0Q-UYGMFKkim*;2-WzEn{skz z^YQuRCO65!ehoxpr&TY22)Gj*$tvetGs+|YRSs#119m{o#A+OsPHZ(YnFGky%^MNh zia?CiX$M!L{sy<9luMG4qDiEaS}JaA0ELb>T=J3&VPMhZ7O4{|l(qFmYLz#BJl!iR zS?Nmgh+Mk%gz7|x`SAoWi>{*kzJyx~I8pXq$gSW@PA>q%hKbdta4%j&CTpTfn0D_Xw-R9^&) zI@e6=sI22D{YbQ8C9=!4AWVZ4At+LpCttunBt&l1_S)c;v`a`SxS+MPgMJT6@P4sk zE|*Z3guDoFedxeG58@Tn%q8v<-p=8xZ1@K?^DC;E@uVlfhfWbwOFU-!B@<$NgBud^ z(<)X(=pz-)pa51Z&c)xhCJ49}>^3EhZzF%;m;5gc*<8AR4`5^ z;AhZzUF|2{{CEI3Y)CXkHuSDU;Zt*jYNiz|z_CQO?58tk1hHM^Yn`iS3OfOkqTl@p z2E~sr0+J~hWx|Pvlx{$G*`F4OEhwS;xOZi&aD}ApK=jyI1sW?albX4(DX2s|aKWjo z`0dXmACaqOy246<0dWg%X^*WdSxa5orVlm)jBZEfj_zIuIynFkBoKkV%9+jLYX!k% zA@#2Z6CSvn=YqYoB0P;Zzx_>*R=|M0oR?0lvN~h$ghul4`&Y|p!Sl(3 zzvIWXf!zcorr&5+AHHk$O}OV;bCh5wPXa(yFT$vv1&Kq+CrISVdT>>Ap)R~qCAH)>;ev(s%vu6{`T;vJPHFD}I zxM7w9Bc5;~AW3Zl(dH3Ps1=|ba2ER#*#X41Ml8i6`%DGf z6zC%7^iN8_kx)P$O@KewcBb*t4(^f11NUM^*k#oeK;1O*Z?Ck2o`d}u*plc!q2k?b z)yu5PDtcVmz{WaL37x%kie-hmsCW^>G3k-QlAZp3JM05YaW?^})arI?)~e(0mIs2g zC>JzEIORs(Fhzu+1UQC4Zcz~+uB7dWw_u1OSuN`<+5K@NHt`Hi1SIgv%%)qP} zHcXt*L+w5=wY&Vw(rpkClGC^j;->5H!DeQ(D-$Ef&uD%q@r7jz5eGJXIo=NUQk{BG zjyW*$nvEs&bR-V4Fx6IdKHCY3?Zv=!By&s%Qq2R8u*(#UAPyP8jv(l2Tj(Bn{7^ zueo|D2DmzUk)#jU|F|(AmFQ;ARJ`PoN?ROVZHJwJOxxjzduQdd=wukx+mAX`CJk{D~;F~q#US#Kp?D| zDq!56deVz6pu0qm4vy1xD`JAp%M4&g5iRGJUCz{d2HU%E;7N$4s;)|@lFiHi2a-gW AZvX%Q literal 0 HcmV?d00001 diff --git a/dev-app-update.yml b/dev-app-update.yml new file mode 100644 index 00000000..44ae7a59 --- /dev/null +++ b/dev-app-update.yml @@ -0,0 +1,3 @@ +provider: generic +url: https://example.com/auto-updates +updaterCacheDirName: feishin-updater diff --git a/electron-builder.yml b/electron-builder.yml new file mode 100644 index 00000000..97210c58 --- /dev/null +++ b/electron-builder.yml @@ -0,0 +1,43 @@ +appId: com.electron.app +productName: feishin +directories: + buildResources: build +files: + - '!**/.vscode/*' + - '!src/*' + - '!electron.vite.config.{js,ts,mjs,cjs}' + - '!{.eslintcache,eslint.config.mjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}' + - '!{.env,.env.*,.npmrc,pnpm-lock.yaml}' + - '!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}' +asarUnpack: + - resources/** +win: + executableName: feishin +nsis: + artifactName: ${name}-${version}-setup.${ext} + shortcutName: ${productName} + uninstallDisplayName: ${productName} + createDesktopShortcut: always +mac: + entitlementsInherit: build/entitlements.mac.plist + extendInfo: + - NSCameraUsageDescription: Application requests access to the device's camera. + - NSMicrophoneUsageDescription: Application requests access to the device's microphone. + - NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder. + - NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder. + notarize: false +dmg: + artifactName: ${name}-${version}.${ext} +linux: + target: + - AppImage + - snap + - deb + maintainer: electronjs.org + category: Utility +appImage: + artifactName: ${name}-${version}.${ext} +npmRebuild: false +publish: + provider: generic + url: https://example.com/auto-updates diff --git a/electron.vite.config.ts b/electron.vite.config.ts new file mode 100644 index 00000000..c338aacc --- /dev/null +++ b/electron.vite.config.ts @@ -0,0 +1,35 @@ +import react from '@vitejs/plugin-react'; +import { externalizeDepsPlugin, UserConfig } from 'electron-vite'; +import { resolve } from 'path'; + +const config: UserConfig = { + main: { + plugins: [externalizeDepsPlugin()], + }, + preload: { + plugins: [externalizeDepsPlugin()], + }, + renderer: { + css: { + modules: { + generateScopedName: '[name]__[local]__[hash:base64:5]', + localsConvention: 'camelCase', + }, + }, + plugins: [react()], + resolve: { + alias: { + '/@/i18n': resolve('src/i18n'), + '/@/main': resolve('src/main'), + '/@/renderer': resolve('src/renderer'), + '/@/renderer/api': resolve('src/renderer/api'), + '/@/renderer/components': resolve('src/renderer/components'), + '/@/renderer/features': resolve('src/renderer/features'), + '/@/renderer/hooks': resolve('src/renderer/hooks'), + '/@/shared': resolve('src/shared'), + }, + }, + }, +}; + +export default config; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..b286f9b3 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,48 @@ +import eslintConfigPrettier from '@electron-toolkit/eslint-config-prettier'; +import tseslint from '@electron-toolkit/eslint-config-ts'; +import perfectionist from 'eslint-plugin-perfectionist'; +import eslintPluginReact from 'eslint-plugin-react'; +import eslintPluginReactHooks from 'eslint-plugin-react-hooks'; +import eslintPluginReactRefresh from 'eslint-plugin-react-refresh'; + +export default tseslint.config( + { ignores: ['**/node_modules', '**/dist', '**/out'] }, + tseslint.configs.recommended, + perfectionist.configs['recommended-natural'], + eslintPluginReact.configs.flat.recommended, + eslintPluginReact.configs.flat['jsx-runtime'], + { + settings: { + react: { + version: 'detect', + }, + }, + }, + { + files: ['**/*.{ts,tsx}'], + plugins: { + 'react-hooks': eslintPluginReactHooks, + 'react-refresh': eslintPluginReactRefresh, + }, + rules: { + ...eslintPluginReactHooks.configs.recommended.rules, + ...eslintPluginReactRefresh.configs.vite.rules, + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-unused-vars': 'warn', + curly: ['error', 'all'], + indent: [ + 'error', + 'tab', + { + offsetTernaryExpressions: true, + SwitchCase: 1, + }, + ], + 'no-unused-vars': 'off', + 'no-use-before-define': 'off', + quotes: ['error', 'single'], + semi: ['error', 'always'], + }, + }, + eslintConfigPrettier, +); diff --git a/ng.conf.template b/ng.conf.template deleted file mode 100644 index eb46ff72..00000000 --- a/ng.conf.template +++ /dev/null @@ -1,27 +0,0 @@ -server { - listen 9180; - sendfile on; - default_type application/octet-stream; - - gzip on; - gzip_http_version 1.1; - gzip_disable "MSIE [1-6]\."; - gzip_min_length 256; - gzip_vary on; - gzip_proxied expired no-cache no-store private auth; - gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript; - gzip_comp_level 9; - - location ${PUBLIC_PATH} { - alias /usr/share/nginx/html/; - try_files $uri $uri/ /index.html =404; - } - - location ${PUBLIC_PATH}settings.js { - alias /etc/nginx/conf.d/settings.js; - } - - location ${PUBLIC_PATH}/settings.js { - alias /etc/nginx/conf.d/settings.js; - } -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2f03474d..9bf65edf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,13 +8,14 @@ "name": "feishin", "version": "0.13.0", "hasInstallScript": true, - "license": "GPL-3.0", "dependencies": { "@ag-grid-community/client-side-row-model": "^28.2.1", "@ag-grid-community/core": "^28.2.1", "@ag-grid-community/infinite-row-model": "^28.2.1", "@ag-grid-community/react": "^28.2.1", "@ag-grid-community/styles": "^28.2.1", + "@electron-toolkit/preload": "^3.0.1", + "@electron-toolkit/utils": "^4.0.0", "@emotion/react": "^11.10.4", "@mantine/core": "^6.0.17", "@mantine/dates": "^6.0.17", @@ -31,6 +32,7 @@ "audiomotion-analyzer": "^4.5.0", "auto-text-size": "^0.2.3", "axios": "^1.6.0", + "cheerio": "^1.0.0", "clsx": "^2.0.0", "cmdk": "^0.2.0", "dayjs": "^1.11.6", @@ -39,7 +41,7 @@ "electron-localshortcut": "^3.2.1", "electron-log": "^5.1.1", "electron-store": "^8.1.0", - "electron-updater": "^6.3.1", + "electron-updater": "^6.3.9", "fast-average-color": "^9.3.0", "format-duration": "^2.0.0", "framer-motion": "^11.0.0", @@ -52,11 +54,12 @@ "lodash": "^4.17.21", "md5": "^2.3.0", "memoize-one": "^6.0.0", + "mpris-service": "^2.1.2", "nanoid": "^3.3.3", "net": "^1.0.2", "node-mpv": "github:jeffvli/Node-MPV#32b4d64395289ad710c41d481d2707a7acfc228f", - "overlayscrollbars": "^2.2.1", - "overlayscrollbars-react": "^0.5.1", + "overlayscrollbars": "^2.11.1", + "overlayscrollbars-react": "^0.5.6", "react": "^18.2.0", "react-dom": "^18.2.0", "react-error-boundary": "^3.1.4", @@ -72,10 +75,14 @@ "semver": "^7.5.4", "styled-components": "^6.0.8", "swiper": "^9.3.1", + "ws": "^8.18.2", "zod": "^3.22.3", "zustand": "^4.3.9" }, "devDependencies": { + "@electron-toolkit/eslint-config-prettier": "^3.0.0", + "@electron-toolkit/eslint-config-ts": "^3.0.0", + "@electron-toolkit/tsconfig": "^1.0.1", "@electron/rebuild": "^3.6.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.5", "@stylelint/postcss-css-in-js": "^0.38.0", @@ -87,9 +94,9 @@ "@types/jest": "^27.4.1", "@types/lodash": "^4.14.188", "@types/md5": "^2.3.2", - "@types/node": "^17.0.23", - "@types/react": "^18.0.25", - "@types/react-dom": "^18.0.8", + "@types/node": "^22.14.1", + "@types/react": "^19.1.1", + "@types/react-dom": "^19.1.2", "@types/react-test-renderer": "^17.0.1", "@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-window": "^1.8.5", @@ -100,6 +107,7 @@ "@types/webpack-env": "^1.16.3", "@typescript-eslint/eslint-plugin": "^5.47.0", "@typescript-eslint/parser": "^5.47.0", + "@vitejs/plugin-react": "^4.3.4", "browserslist-config-erb": "^0.0.3", "chalk": "^4.1.2", "concurrently": "^7.1.0", @@ -108,12 +116,13 @@ "css-loader": "^6.7.1", "css-minimizer-webpack-plugin": "^3.4.1", "detect-port": "^1.3.0", - "electron": "^36.1.0", - "electron-builder": "^24.13.3", + "electron": "^35.1.5", + "electron-builder": "^25.1.8", "electron-devtools-installer": "^3.2.0", "electron-notarize": "^1.2.1", + "electron-vite": "^3.1.0", "electronmon": "^2.0.2", - "eslint": "^8.30.0", + "eslint": "^9.24.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-erb": "^4.0.3", "eslint-import-resolver-typescript": "^2.7.1", @@ -122,9 +131,12 @@ "eslint-plugin-import": "^2.26.0", "eslint-plugin-jest": "^26.1.3", "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-perfectionist": "^4.13.0", + "eslint-plugin-prettier": "^5.4.0", "eslint-plugin-promise": "^6.0.0", - "eslint-plugin-react": "^7.29.4", - "eslint-plugin-react-hooks": "^4.4.0", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.19", "eslint-plugin-sort-keys-fix": "^1.1.2", "eslint-plugin-typescript-sort-keys": "^2.1.0", "file-loader": "^6.2.0", @@ -138,12 +150,15 @@ "postcss-scss": "^4.0.4", "postcss-styled-syntax": "^0.5.0", "postcss-syntax": "^0.36.2", - "prettier": "^3.3.3", + "prettier": "^3.5.3", + "react": "^19.1.0", + "react-dom": "^19.1.0", "react-refresh": "^0.12.0", "react-refresh-typescript": "^2.0.4", "react-test-renderer": "^18.0.0", "rimraf": "^3.0.2", "sass": "^1.49.11", + "sass-embedded": "^1.89.0", "sass-loader": "^12.6.0", "style-loader": "^3.3.1", "stylelint": "^15.10.3", @@ -158,9 +173,10 @@ "ts-node": "^10.9.2", "tsconfig-paths-webpack-plugin": "^4.0.0", "tsx": "^4.16.2", - "typescript": "^5.2.2", + "typescript": "^5.8.3", "typescript-plugin-styled-components": "^3.0.0", "url-loader": "^4.1.1", + "vite": "^6.2.6", "webpack": "^5.94.0", "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^4.9.2", @@ -234,23 +250,23 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", + "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", "dev": true, "license": "MIT", "engines": { @@ -258,22 +274,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", + "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.10", - "@babel/types": "^7.26.10", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helpers": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -306,13 +322,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", - "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0", + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -322,14 +338,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", - "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -349,28 +365,28 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", + "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -380,9 +396,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", "engines": { @@ -390,27 +406,27 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { @@ -418,26 +434,26 @@ } }, "node_modules/@babel/helpers": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", - "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.0" + "@babel/types": "^7.27.1" }, "bin": { "parser": "bin/babel-parser.js" @@ -502,13 +518,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -654,13 +670,61 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -670,42 +734,39 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", - "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.27.0", - "@babel/parser": "^7.27.0", - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -713,14 +774,23 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -733,6 +803,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@bufbuild/protobuf": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.4.0.tgz", + "integrity": "sha512-RN9M76x7N11QRihKovEglEjjVCQEA9PRBVnDgk9xw8JHLrcUrp4FpAVSPSH91cNbcTft3u2vpLN4GMbiKY9PJw==", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -878,9 +955,9 @@ } }, "node_modules/@discordjs/rest": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.4.3.tgz", - "integrity": "sha512-+SO4RKvWsM+y8uFHgYQrcTl/3+cY02uQOH7/7bKbVZsTfrfpoE62o5p+mmV+s7FVhTX82/kQUGGbu4YlV60RtA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.5.0.tgz", + "integrity": "sha512-PWhchxTzpn9EV3vvPRpwS0EE2rNYB9pvzDU/eLLW3mByJl0ZHZjHI2/wA8EbH2gRMQV7nu+0FoDF84oiPl8VAQ==", "license": "Apache-2.0", "dependencies": { "@discordjs/collection": "^2.1.1", @@ -888,7 +965,7 @@ "@sapphire/async-queue": "^1.5.3", "@sapphire/snowflake": "^3.5.3", "@vladfrangu/async_event_emitter": "^2.4.6", - "discord-api-types": "^0.37.119", + "discord-api-types": "^0.38.1", "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", "undici": "6.21.1" @@ -900,6 +977,15 @@ "url": "https://github.com/discordjs/discord.js?sponsor" } }, + "node_modules/@discordjs/rest/node_modules/discord-api-types": { + "version": "0.38.8", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.8.tgz", + "integrity": "sha512-xuRXPD44FcbKHrQK15FS1HFlMRNJtsaZou/SVws18vQ7zHqmlxyDktMkZpyvD6gE2ctGOVYC/jUyoMMAyBWfcw==", + "license": "MIT", + "workspaces": [ + "scripts/actions/documentation" + ] + }, "node_modules/@discordjs/util": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.1.1.tgz", @@ -922,6 +1008,70 @@ "node": ">=10.0.0" } }, + "node_modules/@electron-toolkit/eslint-config-prettier": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@electron-toolkit/eslint-config-prettier/-/eslint-config-prettier-3.0.0.tgz", + "integrity": "sha512-YapmIOVkbYdHLuTa+ad1SAVtcqYL9A/SJsc7cxQokmhcwAwonGevNom37jBf9slXegcZ/Slh01I/JARG1yhNFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-prettier": "^5.2.3" + }, + "peerDependencies": { + "eslint": ">= 9.0.0", + "prettier": ">= 3.0.0" + } + }, + "node_modules/@electron-toolkit/eslint-config-ts": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@electron-toolkit/eslint-config-ts/-/eslint-config-ts-3.1.0.tgz", + "integrity": "sha512-MowZQKd3yxXSDLack5QvjQwYHhpOJFoWBGBwJ/k+DCd7NUSendplECbQGFp86tPQYPUrPBPceR/hdsSAnaY5ZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/js": "^9.24.0", + "globals": "^16.0.0", + "typescript-eslint": "^8.29.1" + }, + "peerDependencies": { + "eslint": ">=9.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@electron-toolkit/preload": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@electron-toolkit/preload/-/preload-3.0.2.tgz", + "integrity": "sha512-TWWPToXd8qPRfSXwzf5KVhpXMfONaUuRAZJHsKthKgZR/+LqX1dZVSSClQ8OTAEduvLGdecljCsoT2jSshfoUg==", + "license": "MIT", + "peerDependencies": { + "electron": ">=13.0.0" + } + }, + "node_modules/@electron-toolkit/tsconfig": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@electron-toolkit/tsconfig/-/tsconfig-1.0.1.tgz", + "integrity": "sha512-M0Mol3odspvtCuheyujLNAW7bXq7KFNYVMRtpjFa4ZfES4MuklXBC7Nli/omvc+PRKlrklgAGx3l4VakjNo8jg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/node": "*" + } + }, + "node_modules/@electron-toolkit/utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@electron-toolkit/utils/-/utils-4.0.0.tgz", + "integrity": "sha512-qXSntwEzluSzKl4z5yFNBknmPGjPa3zFhE4mp9+h0cgokY5ornAeP+CJQDBhKsL1S58aOQfcwkD3NwLZCl+64g==", + "license": "MIT", + "peerDependencies": { + "electron": ">=13.0.0" + } + }, "node_modules/@electron/asar": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", @@ -1056,7 +1206,7 @@ "node_modules/@electron/node-gyp": { "version": "10.2.0-electron.1", "resolved": "git+ssh://git@github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", - "integrity": "sha512-CrYo6TntjpoMO1SHjl5Pa/JoUsECNqNdB7Kx49WLQpWzPw53eEITJ2Hs9fh/ryUYDn4pxZz11StaBYBrLFJdqg==", + "integrity": "sha512-4MSBTT8y07YUDqf69/vSh80Hh791epYqGtWHO3zSKhYFwQg+gx9wi1PqbqP6YqC4WMsNxZ5l9oDmnWdK5pfCKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1079,9 +1229,9 @@ } }, "node_modules/@electron/notarize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.2.1.tgz", - "integrity": "sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", + "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", "dev": true, "license": "MIT", "dependencies": { @@ -1110,9 +1260,9 @@ } }, "node_modules/@electron/osx-sign": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.0.5.tgz", - "integrity": "sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.1.tgz", + "integrity": "sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -1174,85 +1324,53 @@ } }, "node_modules/@electron/universal": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.5.1.tgz", - "integrity": "sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.1.tgz", + "integrity": "sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==", "dev": true, "license": "MIT", "dependencies": { - "@electron/asar": "^3.2.1", - "@malept/cross-spawn-promise": "^1.1.0", + "@electron/asar": "^3.2.7", + "@malept/cross-spawn-promise": "^2.0.0", "debug": "^4.3.1", - "dir-compare": "^3.0.0", - "fs-extra": "^9.0.1", - "minimatch": "^3.0.4", - "plist": "^3.0.4" + "dir-compare": "^4.2.0", + "fs-extra": "^11.1.1", + "minimatch": "^9.0.3", + "plist": "^3.1.0" }, "engines": { - "node": ">=8.6" - } - }, - "node_modules/@electron/universal/node_modules/@malept/cross-spawn-promise": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", - "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/malept" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" - } - ], - "license": "Apache-2.0", - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@electron/universal/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==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node": ">=16.4" } }, "node_modules/@electron/universal/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=14.14" } }, "node_modules/@electron/universal/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@emotion/babel-plugin": { @@ -1385,9 +1503,9 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz", - "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", "cpu": [ "ppc64" ], @@ -1402,9 +1520,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz", - "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", "cpu": [ "arm" ], @@ -1419,9 +1537,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz", - "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", "cpu": [ "arm64" ], @@ -1436,9 +1554,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz", - "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", "cpu": [ "x64" ], @@ -1453,9 +1571,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz", - "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", "cpu": [ "arm64" ], @@ -1470,9 +1588,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz", - "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", "cpu": [ "x64" ], @@ -1487,9 +1605,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz", - "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", "cpu": [ "arm64" ], @@ -1504,9 +1622,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz", - "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", "cpu": [ "x64" ], @@ -1521,9 +1639,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz", - "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", "cpu": [ "arm" ], @@ -1538,9 +1656,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz", - "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", "cpu": [ "arm64" ], @@ -1555,9 +1673,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz", - "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", "cpu": [ "ia32" ], @@ -1572,9 +1690,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz", - "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", "cpu": [ "loong64" ], @@ -1589,9 +1707,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz", - "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", "cpu": [ "mips64el" ], @@ -1606,9 +1724,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz", - "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", "cpu": [ "ppc64" ], @@ -1623,9 +1741,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz", - "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", "cpu": [ "riscv64" ], @@ -1640,9 +1758,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz", - "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", "cpu": [ "s390x" ], @@ -1657,9 +1775,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz", - "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", "cpu": [ "x64" ], @@ -1674,9 +1792,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz", - "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", "cpu": [ "arm64" ], @@ -1691,9 +1809,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz", - "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", "cpu": [ "x64" ], @@ -1708,9 +1826,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz", - "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", "cpu": [ "arm64" ], @@ -1725,9 +1843,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz", - "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", "cpu": [ "x64" ], @@ -1742,9 +1860,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz", - "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", "cpu": [ "x64" ], @@ -1759,9 +1877,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz", - "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", "cpu": [ "arm64" ], @@ -1776,9 +1894,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz", - "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", "cpu": [ "ia32" ], @@ -1793,9 +1911,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz", - "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", "cpu": [ "x64" ], @@ -1810,9 +1928,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz", - "integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, "license": "MIT", "dependencies": { @@ -1838,17 +1956,79 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1856,7 +2036,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -1874,16 +2054,13 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1902,45 +2079,59 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", + "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.14.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@floating-ui/core": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", - "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.0.tgz", + "integrity": "sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==", "license": "MIT", "dependencies": { "@floating-ui/utils": "^0.2.9" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", - "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.0.tgz", + "integrity": "sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.6.0", + "@floating-ui/core": "^1.7.0", "@floating-ui/utils": "^0.2.9" } }, @@ -1998,44 +2189,42 @@ "node": ">=10.13.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/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==", + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "Apache-2.0", "engines": { - "node": "*" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -2052,18 +2241,25 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "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==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -2081,6 +2277,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -2093,6 +2290,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -2105,6 +2303,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -2122,6 +2321,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -2137,6 +2337,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -2893,6 +3094,15 @@ "node": ">= 8" } }, + "node_modules/@nornagon/put": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@nornagon/put/-/put-0.0.8.tgz", + "integrity": "sha512-ugvXJjwF5ldtUpa7D95kruNJ41yFQDEKyF5CW4TgKJnh+W/zmlBzXXeKTyqIgwMFrkePN2JqOBqcF0M0oOunow==", + "license": "MIT/X11", + "engines": { + "node": ">=0.3.0" + } + }, "node_modules/@npmcli/fs": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", @@ -3756,6 +3966,286 @@ "node": ">=14.0.0" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.0.tgz", + "integrity": "sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.0.tgz", + "integrity": "sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.0.tgz", + "integrity": "sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.0.tgz", + "integrity": "sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.0.tgz", + "integrity": "sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.0.tgz", + "integrity": "sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.0.tgz", + "integrity": "sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.0.tgz", + "integrity": "sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.0.tgz", + "integrity": "sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.0.tgz", + "integrity": "sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.0.tgz", + "integrity": "sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.0.tgz", + "integrity": "sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.0.tgz", + "integrity": "sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.0.tgz", + "integrity": "sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.0.tgz", + "integrity": "sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.0.tgz", + "integrity": "sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.0.tgz", + "integrity": "sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.0.tgz", + "integrity": "sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.0.tgz", + "integrity": "sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.0.tgz", + "integrity": "sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -4038,6 +4528,39 @@ "deep-equal": "^2.0.5" } }, + "node_modules/@testing-library/dom/node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/@testing-library/jest-dom": { "version": "5.17.0", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", @@ -4094,14 +4617,24 @@ "react-dom": "^18.0.0" } }, + "node_modules/@testing-library/react/node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 6" } }, "node_modules/@trysound/sax": { @@ -4327,9 +4860,9 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "version": "4.17.22", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.22.tgz", + "integrity": "sha512-eZUmSnhRX9YRSkplpz0N+k6NljUUn5l3EWZIKZvYzhvMphEuNiyyy1viH/ejgt66JWgALwC/gtSUAeQKtSwW/w==", "dev": true, "license": "MIT", "dependencies": { @@ -4532,11 +5065,14 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "version": "22.15.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.18.tgz", + "integrity": "sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } }, "node_modules/@types/node-forge": { "version": "1.3.11", @@ -4588,9 +5124,9 @@ "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.9.18", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", "dev": true, "license": "MIT" }, @@ -4602,24 +5138,23 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.20", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz", - "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==", + "version": "19.1.4", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.4.tgz", + "integrity": "sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==", "dev": true, "license": "MIT", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.3.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.6.tgz", - "integrity": "sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==", + "version": "19.1.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.5.tgz", + "integrity": "sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==", "dev": true, "license": "MIT", "peerDependencies": { - "@types/react": "^18.0.0" + "@types/react": "^19.0.0" } }, "node_modules/@types/react-test-renderer": { @@ -5090,12 +5625,35 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "node_modules/@vitejs/plugin-react": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.4.1.tgz", + "integrity": "sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "@babel/core": "^7.26.10", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/@vitejs/plugin-react/node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/@vladfrangu/async_event_emitter": { "version": "2.4.6", @@ -5368,6 +5926,25 @@ "dev": true, "license": "ISC" }, + "node_modules/abstract-socket": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/abstract-socket/-/abstract-socket-2.1.1.tgz", + "integrity": "sha512-YZJizsvS1aBua5Gd01woe4zuyYBGgSMeqDOB6/ChwdTI904KP6QGtJswXl4hcqWxbz86hQBe++HWV0hF1aGUtA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "dependencies": { + "bindings": "^1.2.1", + "nan": "^2.12.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -5460,16 +6037,13 @@ } }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "4" - }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/agentkeepalive": { @@ -5611,6 +6185,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5620,6 +6195,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -5646,42 +6222,47 @@ } }, "node_modules/app-builder-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", - "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "version": "5.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.10.tgz", + "integrity": "sha512-Ev4jj3D7Bo+O0GPD2NMvJl+PGiBAfS7pUGawntBNpCbxtpncfUixqFj9z9Jme7V7s3LBGqsWZZP54fxBX3JKJw==", "dev": true, "license": "MIT" }, "node_modules/app-builder-lib": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.13.3.tgz", - "integrity": "sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==", + "version": "25.1.8", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-25.1.8.tgz", + "integrity": "sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==", "dev": true, "license": "MIT", "dependencies": { "@develar/schema-utils": "~2.6.5", - "@electron/notarize": "2.2.1", - "@electron/osx-sign": "1.0.5", - "@electron/universal": "1.5.1", + "@electron/notarize": "2.5.0", + "@electron/osx-sign": "1.3.1", + "@electron/rebuild": "3.6.1", + "@electron/universal": "2.0.1", "@malept/flatpak-bundler": "^0.4.0", "@types/fs-extra": "9.0.13", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", + "builder-util": "25.1.7", + "builder-util-runtime": "9.2.10", "chromium-pickle-js": "^0.2.0", + "config-file-ts": "0.2.8-rc1", "debug": "^4.3.4", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", "ejs": "^3.1.8", - "electron-publish": "24.13.1", + "electron-publish": "25.1.7", "form-data": "^4.0.0", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", "is-ci": "^3.0.0", "isbinaryfile": "^5.0.0", "js-yaml": "^4.1.0", + "json5": "^2.2.3", "lazy-val": "^1.0.5", - "minimatch": "^5.1.1", - "read-config-file": "6.3.2", + "minimatch": "^10.0.0", + "resedit": "^1.7.0", "sanitize-filename": "^1.6.3", "semver": "^7.3.8", "tar": "^6.1.12", @@ -5691,8 +6272,59 @@ "node": ">=14.0.0" }, "peerDependencies": { - "dmg-builder": "24.13.3", - "electron-builder-squirrel-windows": "24.13.3" + "dmg-builder": "25.1.8", + "electron-builder-squirrel-windows": "25.1.8" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/rebuild": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.6.1.tgz", + "integrity": "sha512-f6596ZHpEq/YskUd8emYvOUne89ij8mQgjYFA5ru25QwbrRO+t1SImofdDv7kKOuWCmVOuU5tvfkbgGxIl3E/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@malept/cross-spawn-promise": "^2.0.0", + "chalk": "^4.0.0", + "debug": "^4.1.1", + "detect-libc": "^2.0.1", + "fs-extra": "^10.0.0", + "got": "^11.7.0", + "node-abi": "^3.45.0", + "node-api-version": "^0.2.0", + "node-gyp": "^9.0.0", + "ora": "^5.1.0", + "read-binary-file-arch": "^1.0.6", + "semver": "^7.3.5", + "tar": "^6.0.5", + "yargs": "^17.0.1" + }, + "bin": { + "electron-rebuild": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/arg": { @@ -5709,11 +6341,12 @@ "license": "Python-2.0" }, "node_modules/aria-hidden": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", - "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.5.tgz", + "integrity": "sha512-N+u63/2br5AG+OSrk0rIgFOYPSEYlkD7Yk5fq3LDole6QDIAbAFpbchE5fhBiUdRV2Fa8pWAaXvy+VK/maBeTA==", "license": "MIT", "dependencies": { + "caniuse-lite": "^1.0.30001718", "tslib": "^2.0.0" }, "engines": { @@ -6197,6 +6830,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, "license": "MIT" }, "node_modules/bare-events": { @@ -6258,6 +6892,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -6357,7 +7001,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, "license": "ISC" }, "node_modules/boolean": { @@ -6373,6 +7016,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -6485,9 +7129,9 @@ "license": "BSD-2-Clause" }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", "dev": true, "funding": [ { @@ -6505,10 +7149,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -6575,6 +7219,13 @@ "ieee754": "^1.1.13" } }, + "node_modules/buffer-builder": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "dev": true, + "license": "MIT/X11" + }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -6585,44 +7236,30 @@ "node": "*" } }, - "node_modules/buffer-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", - "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "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==", - "dev": true, "license": "MIT" }, "node_modules/builder-util": { - "version": "24.13.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.13.1.tgz", - "integrity": "sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==", + "version": "25.1.7", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-25.1.7.tgz", + "integrity": "sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==", "dev": true, "license": "MIT", "dependencies": { "@types/debug": "^4.1.6", "7zip-bin": "~5.2.0", - "app-builder-bin": "4.0.0", + "app-builder-bin": "5.0.0-alpha.10", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.2.4", + "builder-util-runtime": "9.2.10", "chalk": "^4.1.2", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "fs-extra": "^10.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", "is-ci": "^3.0.0", "js-yaml": "^4.1.0", "source-map-support": "^0.5.19", @@ -6631,9 +7268,9 @@ } }, "node_modules/builder-util-runtime": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz", - "integrity": "sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==", + "version": "9.2.10", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz", + "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==", "dev": true, "license": "MIT", "dependencies": { @@ -6654,6 +7291,16 @@ "node": ">= 0.8" } }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cacache": { "version": "16.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", @@ -6727,7 +7374,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", @@ -6759,7 +7405,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -6870,10 +7515,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001715", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz", - "integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==", - "dev": true, + "version": "1.0.30001718", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", + "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", "funding": [ { "type": "opencollective", @@ -6930,7 +7574,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", - "dev": true, "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", @@ -6956,7 +7599,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", @@ -7229,6 +7871,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -7241,8 +7884,19 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -7257,6 +7911,13 @@ "dev": true, "license": "MIT" }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "dev": true, + "license": "MIT" + }, "node_modules/colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -7453,14 +8114,14 @@ "license": "MIT" }, "node_modules/config-file-ts": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.6.tgz", - "integrity": "sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==", + "version": "0.2.8-rc1", + "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.8-rc1.tgz", + "integrity": "sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==", "dev": true, "license": "MIT", "dependencies": { - "glob": "^10.3.10", - "typescript": "^5.3.3" + "glob": "^10.3.12", + "typescript": "^5.4.3" } }, "node_modules/config-file-ts/node_modules/glob": { @@ -7527,6 +8188,13 @@ "node": ">=0.8" } }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true, + "license": "ISC" + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -7589,9 +8257,9 @@ } }, "node_modules/core-js": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz", - "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", + "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -7601,9 +8269,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.41.0.tgz", - "integrity": "sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q==", + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.42.0.tgz", + "integrity": "sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -7676,6 +8344,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -7873,7 +8542,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", @@ -7915,7 +8583,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">= 6" @@ -8206,6 +8873,24 @@ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", "license": "MIT" }, + "node_modules/dbus-next": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/dbus-next/-/dbus-next-0.9.2.tgz", + "integrity": "sha512-tzQq/+wrTZ2yU+U5PoeXc97KABhX2v55C/T0finH3tSKYuI8H/SqppIFymBBrUHcK13LvEGY3vdj3ikPPenL5g==", + "license": "MIT", + "dependencies": { + "@nornagon/put": "0.0.8", + "event-stream": "3.3.4", + "hexy": "^0.2.10", + "jsbi": "^2.0.5", + "long": "^4.0.0", + "safe-buffer": "^5.1.1", + "xml2js": "^0.4.17" + }, + "optionalDependencies": { + "abstract-socket": "^2.0.0" + } + }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", @@ -8229,9 +8914,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -8339,30 +9024,17 @@ "license": "MIT" }, "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "dev": true, + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", "object-is": "^1.1.5", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" + "regexp.prototype.flags": "^1.5.1" }, "engines": { "node": ">= 0.4" @@ -8437,7 +9109,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -8465,7 +9136,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", @@ -8488,6 +9158,13 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, + "license": "MIT" + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -8581,14 +9258,14 @@ } }, "node_modules/dir-compare": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz", - "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", + "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", "dev": true, "license": "MIT", "dependencies": { - "buffer-equal": "^1.0.0", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5", + "p-limit": "^3.1.0 " } }, "node_modules/dir-compare/node_modules/brace-expansion": { @@ -8635,15 +9312,15 @@ "license": "MIT" }, "node_modules/dmg-builder": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.13.3.tgz", - "integrity": "sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==", + "version": "25.1.8", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-25.1.8.tgz", + "integrity": "sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==", "dev": true, "license": "MIT", "dependencies": { - "app-builder-lib": "24.13.3", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", + "app-builder-lib": "25.1.8", + "builder-util": "25.1.7", + "builder-util-runtime": "9.2.10", "fs-extra": "^10.1.0", "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" @@ -8693,16 +9370,16 @@ } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/dom-accessibility-api": { @@ -8736,7 +9413,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", @@ -8747,21 +9423,10 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, "funding": [ { "type": "github", @@ -8798,7 +9463,6 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" @@ -8823,7 +9487,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", @@ -8861,21 +9524,33 @@ } }, "node_modules/dotenv": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", - "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", "dev": true, "license": "BSD-2-Clause", "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "dev": true, - "license": "BSD-2-Clause" + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } }, "node_modules/dunder-proto": { "version": "1.0.1", @@ -8895,13 +9570,13 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true, "license": "MIT" }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, "license": "MIT" }, "node_modules/ee-first": { @@ -8928,9 +9603,9 @@ } }, "node_modules/electron": { - "version": "36.1.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-36.1.0.tgz", - "integrity": "sha512-gnp3BnbKdGsVc7cm1qlEaZc8pJsR08mIs8H/yTo8gHEtFkGGJbDTVZOYNAfbQlL0aXh+ozv+CnyiNeDNkT1Upg==", + "version": "35.4.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-35.4.0.tgz", + "integrity": "sha512-VIPSNcUnic00aaE83w6BW4Dj1kE8A5DU0nVbvwqotN3+gseGunbP4WyHp/kfKXVKQj1S3No3HnYxU5LJmYbAtw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -8947,21 +9622,20 @@ } }, "node_modules/electron-builder": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.13.3.tgz", - "integrity": "sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==", + "version": "25.1.8", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-25.1.8.tgz", + "integrity": "sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig==", "dev": true, "license": "MIT", "dependencies": { - "app-builder-lib": "24.13.3", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", + "app-builder-lib": "25.1.8", + "builder-util": "25.1.7", + "builder-util-runtime": "9.2.10", "chalk": "^4.1.2", - "dmg-builder": "24.13.3", + "dmg-builder": "25.1.8", "fs-extra": "^10.1.0", "is-ci": "^3.0.0", "lazy-val": "^1.0.5", - "read-config-file": "6.3.2", "simple-update-notifier": "2.0.0", "yargs": "^17.6.2" }, @@ -9024,9 +9698,9 @@ } }, "node_modules/electron-log": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.3.4.tgz", - "integrity": "sha512-QLj0EbsA5R5Yy4vjGlLe7m8hPNZ/Enp7c7a2WH7RUPr0hIOp0vDaC+6bJM0th6+uZKiZGGH5a2aKzvYp3eYwDQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.4.0.tgz", + "integrity": "sha512-AXI5OVppskrWxEAmCxuv8ovX+s2Br39CpCAgkGMNHQtjYT3IiVbSQTncEjFVGPgoH35ZygRm/mvUMBDWwhRxgg==", "license": "MIT", "engines": { "node": ">= 14" @@ -9064,15 +9738,15 @@ } }, "node_modules/electron-publish": { - "version": "24.13.1", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.13.1.tgz", - "integrity": "sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==", + "version": "25.1.7", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-25.1.7.tgz", + "integrity": "sha512-+jbTkR9m39eDBMP4gfbqglDd6UvBC7RLh5Y0MhFSsc6UkGHj9Vj9TWobxevHYMMqmoujL11ZLjfPpMX+Pt6YEg==", "dev": true, "license": "MIT", "dependencies": { "@types/fs-extra": "^9.0.11", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", + "builder-util": "25.1.7", + "builder-util-runtime": "9.2.10", "chalk": "^4.1.2", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", @@ -9093,9 +9767,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.142", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.142.tgz", - "integrity": "sha512-Ah2HgkTu/9RhTDNThBtzu2Wirdy4DC9b0sMT1pUhbkZQ5U/iwmE+PHZX1MpjD5IkJCc2wSghgGG/B04szAx07w==", + "version": "1.5.155", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.155.tgz", + "integrity": "sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==", "dev": true, "license": "ISC" }, @@ -9128,14 +9802,34 @@ "node": ">=12.0.0" } }, - "node_modules/electron/node_modules/@types/node": { - "version": "22.15.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.12.tgz", - "integrity": "sha512-K0fpC/ZVeb8G9rm7bH7vI0KAec4XHEhBam616nVJCV51bKzJ6oA3luG4WdKoaztxe70QaNjS/xBmcDLmr4PiGw==", + "node_modules/electron-vite": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/electron-vite/-/electron-vite-3.1.0.tgz", + "integrity": "sha512-M7aAzaRvSl5VO+6KN4neJCYLHLpF/iWo5ztchI/+wMxIieDZQqpbCYfaEHHHPH6eupEzfvZdLYdPdmvGqoVe0Q==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "@babel/core": "^7.26.10", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "cac": "^6.7.14", + "esbuild": "^0.25.1", + "magic-string": "^0.30.17", + "picocolors": "^1.1.1" + }, + "bin": { + "electron-vite": "bin/electron-vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@swc/core": "^1.0.0", + "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + } } }, "node_modules/electronmon": { @@ -9188,6 +9882,7 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, "license": "MIT" }, "node_modules/emojis-list": { @@ -9225,7 +9920,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz", "integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==", - "dev": true, "license": "MIT", "dependencies": { "iconv-lite": "^0.6.3", @@ -9276,6 +9970,18 @@ "dev": true, "license": "ISC" }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -9538,9 +10244,9 @@ "optional": true }, "node_modules/esbuild": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz", - "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -9551,31 +10257,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.3", - "@esbuild/android-arm": "0.25.3", - "@esbuild/android-arm64": "0.25.3", - "@esbuild/android-x64": "0.25.3", - "@esbuild/darwin-arm64": "0.25.3", - "@esbuild/darwin-x64": "0.25.3", - "@esbuild/freebsd-arm64": "0.25.3", - "@esbuild/freebsd-x64": "0.25.3", - "@esbuild/linux-arm": "0.25.3", - "@esbuild/linux-arm64": "0.25.3", - "@esbuild/linux-ia32": "0.25.3", - "@esbuild/linux-loong64": "0.25.3", - "@esbuild/linux-mips64el": "0.25.3", - "@esbuild/linux-ppc64": "0.25.3", - "@esbuild/linux-riscv64": "0.25.3", - "@esbuild/linux-s390x": "0.25.3", - "@esbuild/linux-x64": "0.25.3", - "@esbuild/netbsd-arm64": "0.25.3", - "@esbuild/netbsd-x64": "0.25.3", - "@esbuild/openbsd-arm64": "0.25.3", - "@esbuild/openbsd-x64": "0.25.3", - "@esbuild/sunos-x64": "0.25.3", - "@esbuild/win32-arm64": "0.25.3", - "@esbuild/win32-ia32": "0.25.3", - "@esbuild/win32-x64": "0.25.3" + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" } }, "node_modules/escalade": { @@ -9641,60 +10347,64 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", + "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-airbnb": { @@ -10036,6 +10746,19 @@ "node": ">= 0.4" } }, + "node_modules/eslint-config-erb/node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-config-erb/node_modules/eslint-plugin-jest": { "version": "27.9.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", @@ -10127,6 +10850,19 @@ "semver": "bin/semver.js" } }, + "node_modules/eslint-config-erb/node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, "node_modules/eslint-config-erb/node_modules/language-tags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", @@ -10154,14 +10890,17 @@ } }, "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz", + "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==", "dev": true, "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, "peerDependencies": { "eslint": ">=7.0.0" } @@ -10424,19 +11163,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-import/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -10539,10 +11265,171 @@ "node": "*" } }, + "node_modules/eslint-plugin-perfectionist": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.13.0.tgz", + "integrity": "sha512-dsPwXwV7IrG26PJ+h1crQ1f5kxay/gQAU0NJnbVTQc91l5Mz9kPjyIZ7fXgie+QSgi8a+0TwGbfaJx+GIhzuoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "^8.32.1", + "@typescript-eslint/utils": "^8.32.1", + "natural-orderby": "^5.0.0" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "eslint": ">=8.45.0" + } + }, + "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/scope-manager": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz", + "integrity": "sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/types": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz", + "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz", + "integrity": "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/utils": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.1.tgz", + "integrity": "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.32.1", + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/typescript-estree": "8.32.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz", + "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.32.1", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-perfectionist/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-perfectionist/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint-plugin-perfectionist/node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, "node_modules/eslint-plugin-prettier": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.6.tgz", - "integrity": "sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz", + "integrity": "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==", "dev": true, "license": "MIT", "dependencies": { @@ -10620,16 +11507,26 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", "dev": true, "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" } }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { @@ -10643,19 +11540,6 @@ "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-react/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -10820,9 +11704,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10830,26 +11714,23 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/minimatch": { @@ -10865,32 +11746,32 @@ "node": "*" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -10973,6 +11854,21 @@ "node": ">= 0.6" } }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -11297,17 +12193,32 @@ "pend": "~1.2.0" } }, + "node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-loader": { @@ -11331,6 +12242,13 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT", + "optional": true + }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -11341,6 +12259,19 @@ "minimatch": "^5.0.1" } }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -11424,18 +12355,17 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -11485,6 +12415,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -11501,6 +12432,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -11577,6 +12509,12 @@ "node": ">= 0.6" } }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "license": "MIT" + }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -11747,7 +12685,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11762,6 +12699,27 @@ "node": ">=10" } }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -11946,6 +12904,19 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", @@ -12007,12 +12978,16 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz", + "integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { @@ -12198,7 +13173,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -12250,6 +13224,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true, + "license": "ISC" + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -12317,6 +13298,15 @@ "dev": true, "license": "MIT" }, + "node_modules/hexy": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/hexy/-/hexy-0.2.11.tgz", + "integrity": "sha512-ciq6hFsSG/Bpt2DmrZJtv+56zpPdnq+NQ4ijEFrveKN0ZG1mhl/LdT1NQZ9se6ty1fACcI4d4vYqC9v8EYpH2A==", + "license": "MIT", + "bin": { + "hexy": "bin/hexy_cmd.js" + } + }, "node_modules/history": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", @@ -12572,7 +13562,6 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", - "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -12588,20 +13577,10 @@ "entities": "^4.5.0" } }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true, "license": "BSD-2-Clause" }, @@ -12652,18 +13631,17 @@ } }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/http-proxy-middleware": { @@ -12719,17 +13697,17 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -12917,7 +13895,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -12940,9 +13917,9 @@ } }, "node_modules/idb-keyval": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz", - "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz", + "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", "license": "Apache-2.0" }, "node_modules/identity-obj-proxy": { @@ -13007,9 +13984,9 @@ } }, "node_modules/immutable": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.1.tgz", - "integrity": "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.2.tgz", + "integrity": "sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==", "dev": true, "license": "MIT" }, @@ -13188,7 +14165,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -13360,7 +14336,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -13425,6 +14400,7 @@ "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==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -13548,16 +14524,6 @@ "node": ">=8" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", @@ -13592,7 +14558,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -13825,6 +14790,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, "node_modules/isobject": { @@ -14790,6 +15756,11 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbi": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-2.0.5.tgz", + "integrity": "sha512-TzO/62Hxeb26QMb4IGlI/5X+QLr9Uqp1FPkwp2+KOICW+Q+vSuFj61c8pkT6wAns4WcK56X7CmSHhJeDGWOqxQ==" + }, "node_modules/jsbn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", @@ -14844,14 +15815,17 @@ } } }, - "node_modules/jsdom/node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "node_modules/jsdom/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "license": "MIT", + "dependencies": { + "debug": "4" + }, "engines": { - "node": ">= 6" + "node": ">= 6.0.0" } }, "node_modules/jsdom/node_modules/form-data": { @@ -14885,6 +15859,20 @@ "node": ">= 6" } }, + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/jsdom/node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -15623,6 +16611,12 @@ "node": ">=8" } }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "license": "Apache-2.0" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -15676,118 +16670,19 @@ } }, "node_modules/magic-bytes.js": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.11.0.tgz", - "integrity": "sha512-nVmadqN9gam80tdnn74qjFCKgldwzv1+96XmeCvR3bY7wNn2PjHMnRakOWC6+32g133vgZOjUiYgswIxohffzA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.12.1.tgz", + "integrity": "sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA==", + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, "license": "MIT", "dependencies": { - "rimraf": "^6.0.1" - } - }, - "node_modules/magic-bytes.js/node_modules/glob": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", - "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/magic-bytes.js/node_modules/jackspeak": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", - "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/magic-bytes.js/node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/magic-bytes.js/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/magic-bytes.js/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/magic-bytes.js/node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/magic-bytes.js/node_modules/rimraf": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", - "license": "ISC", - "dependencies": { - "glob": "^11.0.0", - "package-json-from-dist": "^1.0.0" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/make-dir": { @@ -15841,6 +16736,58 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/make-fetch-happen/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -15874,6 +16821,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" + }, "node_modules/matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -16286,16 +17238,19 @@ "license": "ISC" }, "node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -16482,6 +17437,17 @@ "integrity": "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==", "license": "MIT" }, + "node_modules/mpris-service": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mpris-service/-/mpris-service-2.1.2.tgz", + "integrity": "sha512-AC6WepCnFWwOME9OWplHZ8ps/BB+g9QrEpUKCv7wX82fDPzR3nPrypOFmL/Fm0JloEAu6QTWSfDLLc6mM/jinw==", + "license": "MIT", + "dependencies": { + "dbus-next": "^0.9.2", + "deep-equal": "^1.0.1", + "source-map-support": "^0.5.11" + } + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -16512,6 +17478,13 @@ "multicast-dns": "cli.js" } }, + "node_modules/nan": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", + "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", + "license": "MIT", + "optional": true + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -16544,6 +17517,16 @@ "dev": true, "license": "MIT" }, + "node_modules/natural-orderby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz", + "integrity": "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/negotiator": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", @@ -16579,9 +17562,9 @@ } }, "node_modules/node-abi": { - "version": "3.74.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.74.0.tgz", - "integrity": "sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==", + "version": "3.75.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz", + "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==", "dev": true, "license": "MIT", "dependencies": { @@ -16619,6 +17602,78 @@ "node": ">= 6.13.0" } }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -16719,11 +17774,27 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" @@ -16765,7 +17836,6 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -16782,7 +17852,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -17013,9 +18082,9 @@ } }, "node_modules/overlayscrollbars": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-2.11.1.tgz", - "integrity": "sha512-kogaNaBTIizRenQ2GTzt2cpkEH9B0nUBXseRxqQblH/YicJ3TaWuvn8E5TXPPfJCVoHYSgBYZzzva40kCERKHg==", + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-2.11.3.tgz", + "integrity": "sha512-8frVuHyBEOoWlO8VPlp7N+5XI1IrMkzWFR4GjPaTlvjdHQ+XN1C+hMQJpIy0QK1jMAK/cSLVRPG0jirqX0gA0A==", "license": "MIT" }, "node_modules/overlayscrollbars-react": { @@ -17141,6 +18210,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/pako": { @@ -17195,7 +18265,6 @@ "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, "license": "MIT", "dependencies": { "entities": "^6.0.0" @@ -17208,7 +18277,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "dev": true, "license": "MIT", "dependencies": { "domhandler": "^5.0.3", @@ -17222,7 +18290,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", - "dev": true, "license": "MIT", "dependencies": { "parse5": "^7.0.0" @@ -17232,11 +18299,13 @@ } }, "node_modules/parse5/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -17286,6 +18355,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -17354,6 +18424,33 @@ "node": ">=8" } }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "license": [ + "MIT", + "Apache2" + ], + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/pe-library": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", + "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -18673,28 +19770,26 @@ } }, "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "dev": true, "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "dev": true, "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.26.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.1.0" } }, "node_modules/react-error-boundary": { @@ -18800,9 +19895,9 @@ } }, "node_modules/react-remove-scroll": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz", - "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.0.tgz", + "integrity": "sha512-sGsQtcjMqdQyijAHytfGEELB8FufGbfXIsvUTe+NLx1GDRJCXtCFLBLUI1eyZCKXXvbEU2C6gai0PZKoIE9Vbg==", "license": "MIT", "dependencies": { "react-remove-scroll-bar": "^2.3.7", @@ -18946,6 +20041,16 @@ "dev": true, "license": "MIT" }, + "node_modules/react-test-renderer/node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/react-textarea-autosize": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", @@ -19038,24 +20143,6 @@ "read-binary-file-arch": "cli.js" } }, - "node_modules/read-config-file": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.3.2.tgz", - "integrity": "sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "config-file-ts": "^0.2.4", - "dotenv": "^9.0.2", - "dotenv-expand": "^5.1.0", - "js-yaml": "^4.1.0", - "json5": "^2.2.0", - "lazy-val": "^1.0.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/read-pkg": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", @@ -19198,17 +20285,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -19401,6 +20481,24 @@ "dev": true, "license": "MIT" }, + "node_modules/resedit": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", + "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pe-library": "^0.4.1" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", @@ -19630,6 +20728,46 @@ "node": ">=8.0" } }, + "node_modules/rollup": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.0.tgz", + "integrity": "sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.41.0", + "@rollup/rollup-android-arm64": "4.41.0", + "@rollup/rollup-darwin-arm64": "4.41.0", + "@rollup/rollup-darwin-x64": "4.41.0", + "@rollup/rollup-freebsd-arm64": "4.41.0", + "@rollup/rollup-freebsd-x64": "4.41.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.0", + "@rollup/rollup-linux-arm-musleabihf": "4.41.0", + "@rollup/rollup-linux-arm64-gnu": "4.41.0", + "@rollup/rollup-linux-arm64-musl": "4.41.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.0", + "@rollup/rollup-linux-riscv64-gnu": "4.41.0", + "@rollup/rollup-linux-riscv64-musl": "4.41.0", + "@rollup/rollup-linux-s390x-gnu": "4.41.0", + "@rollup/rollup-linux-x64-gnu": "4.41.0", + "@rollup/rollup-linux-x64-musl": "4.41.0", + "@rollup/rollup-win32-arm64-msvc": "4.41.0", + "@rollup/rollup-win32-ia32-msvc": "4.41.0", + "@rollup/rollup-win32-x64-msvc": "4.41.0", + "fsevents": "~2.3.2" + } + }, "node_modules/rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", @@ -19708,7 +20846,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -19764,7 +20901,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, "license": "MIT" }, "node_modules/sanitize-filename": { @@ -19778,9 +20914,9 @@ } }, "node_modules/sass": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.87.0.tgz", - "integrity": "sha512-d0NoFH4v6SjEK7BoX810Jsrhj7IQSYHAHLi/iSpgqKc7LaIDshFRlSg5LOymf9FqQhxEHs2W5ZQXlvy0KD45Uw==", + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.0.tgz", + "integrity": "sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19798,6 +20934,407 @@ "@parcel/watcher": "^2.4.1" } }, + "node_modules/sass-embedded": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.89.0.tgz", + "integrity": "sha512-EDrK1el9zdgJFpocCGlxatDWaP18tJBWoM1hxzo2KJBvjdmBichXI6O6KlQrigvQPO3uJ8DfmFmAAx7s7CG6uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.0.0", + "buffer-builder": "^0.2.0", + "colorjs.io": "^0.5.0", + "immutable": "^5.0.2", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-android-arm": "1.89.0", + "sass-embedded-android-arm64": "1.89.0", + "sass-embedded-android-ia32": "1.89.0", + "sass-embedded-android-riscv64": "1.89.0", + "sass-embedded-android-x64": "1.89.0", + "sass-embedded-darwin-arm64": "1.89.0", + "sass-embedded-darwin-x64": "1.89.0", + "sass-embedded-linux-arm": "1.89.0", + "sass-embedded-linux-arm64": "1.89.0", + "sass-embedded-linux-ia32": "1.89.0", + "sass-embedded-linux-musl-arm": "1.89.0", + "sass-embedded-linux-musl-arm64": "1.89.0", + "sass-embedded-linux-musl-ia32": "1.89.0", + "sass-embedded-linux-musl-riscv64": "1.89.0", + "sass-embedded-linux-musl-x64": "1.89.0", + "sass-embedded-linux-riscv64": "1.89.0", + "sass-embedded-linux-x64": "1.89.0", + "sass-embedded-win32-arm64": "1.89.0", + "sass-embedded-win32-ia32": "1.89.0", + "sass-embedded-win32-x64": "1.89.0" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.89.0.tgz", + "integrity": "sha512-s6jxkEZQQrtyIGZX6Sbcu7tEixFG2VkqFgrX11flm/jZex7KaxnZtFace+wnYAgHqzzYpx0kNzJUpT+GXxm8CA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.89.0.tgz", + "integrity": "sha512-pr4R3p5R+Ul9ZA5nzYbBJQFJXW6dMGzgpNBhmaToYDgDhmNX5kg0mZAUlGLHvisLdTiR6oEfDDr9QI6tnD2nqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-ia32": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.89.0.tgz", + "integrity": "sha512-GoNnNGYmp1F0ZMHqQbAurlQsjBMZKtDd5H60Ruq86uQFdnuNqQ9wHKJsJABxMnjfAn60IjefytM5PYTMcAmbfA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.89.0.tgz", + "integrity": "sha512-di+i4KkKAWTNksaQYTqBEERv46qV/tvv14TPswEfak7vcTQ2pj2mvV4KGjLYfU2LqRkX/NTXix9KFthrzFN51Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.89.0.tgz", + "integrity": "sha512-1cRRDAnmAS1wLaxfFf6PCHu9sKW8FNxdM7ZkanwxO9mztrCu/uvfqTmaurY9+RaKvPus7sGYFp46/TNtl/wRjg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.89.0.tgz", + "integrity": "sha512-EUNUzI0UkbQ6dASPyf09S3x7fNT54PjyD594ZGTY14Yh4qTuacIj27ckLmreAJNNu5QxlbhyYuOtz+XN5bMMxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.89.0.tgz", + "integrity": "sha512-23R8zSuB31Fq/MYpmQ38UR2C26BsYb66VVpJgWmWl/N+sgv/+l9ECuSPMbYNgM3vb9TP9wk9dgL6KkiCS5tAyg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.89.0.tgz", + "integrity": "sha512-KAzA1XD74d8/fiJXxVnLfFwfpmD2XqUJZz+DL6ZAPNLH1sb+yCP7brktaOyClDc/MBu61JERdHaJjIZhfX0Yqw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.89.0.tgz", + "integrity": "sha512-g9Lp57qyx51ttKj0AN/edV43Hu1fBObvD7LpYwVfs6u3I95r0Adi90KujzNrUqXxJVmsfUwseY8kA8zvcRjhYA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-ia32": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.89.0.tgz", + "integrity": "sha512-5fxBeXyvBr3pb+vyrx9V6yd7QDRXkAPbwmFVVhjqshBABOXelLysEFea7xokh/tM8JAAQ4O8Ls3eW3Eojb477g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.89.0.tgz", + "integrity": "sha512-0Q1JeEU4/tzH7fwAwarfIh+Swn3aXG/jPhVsZpbR1c1VzkeaPngmXdmLJcVXsdb35tjk84DuYcFtJlE1HYGw4Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.89.0.tgz", + "integrity": "sha512-50oelrOtN64u15vJN9uJryIuT0+UPjyeoq0zdWbY8F7LM9294Wf+Idea+nqDUWDCj1MHndyPFmR1mjeuRouJhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-ia32": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.89.0.tgz", + "integrity": "sha512-ILWqpTd+0RdsSw977iVAJf4CLetIbcQgLQf17ycS1N4StZKVRZs1bBfZhg/f/HU/4p5HondPAwepgJepZZdnFA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.89.0.tgz", + "integrity": "sha512-n2V+Tdjj7SAuiuElJYhWiHjjB1YU0cuFvL1/m5K+ecdNStfHFWIzvBT6/vzQnBOWjI4eZECNVuQ8GwGWCufZew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.89.0.tgz", + "integrity": "sha512-KOHJdouBK3SLJKZLnFYzuxs3dn+6jaeO3p4p1JUYAcVfndcvh13Sg2sLGfOfpg7Og6ws2Nnqnx0CyL26jPJ7ag==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.89.0.tgz", + "integrity": "sha512-0A/UWeKX6MYhVLWLkdX3NPKHO+mvIwzaf6TxGCy3vS3TODWaeDUeBhHShAr7YlOKv5xRGxf7Gx7FXCPV0mUyMA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.89.0.tgz", + "integrity": "sha512-dRBoOFPDWctHPYK3hTk3YzyX/icVrXiw7oOjbtpaDr6JooqIWBe16FslkWyvQzdmfOFy80raKVjgoqT7DsznkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.89.0.tgz", + "integrity": "sha512-RnlVZ14hC/W7ubzvhqnbGfjU5PFNoFP/y5qycgCy+Mezb0IKbWvZ2Lyzux8TbL3OIjOikkNpfXoNQrX706WLAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-ia32": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.89.0.tgz", + "integrity": "sha512-eFe9VMNG+90nuoE3eXDy+38+uEHGf7xcqalq5+0PVZfR+H9RlaEbvIUNflZV94+LOH8Jb4lrfuekhHgWDJLfSg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.89.0.tgz", + "integrity": "sha512-AaGpr5R6MLCuSvkvDdRq49ebifwLcuGPk0/10hbYw9nh3jpy2/CylYubQpIpR4yPcuD1wFwFqufTXC3HJYGb0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/sass-loader": { "version": "12.6.0", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", @@ -19857,13 +21394,11 @@ } }, "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "dev": true, + "license": "MIT" }, "node_modules/schema-utils": { "version": "3.3.0", @@ -19906,9 +21441,9 @@ } }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -20133,11 +21668,17 @@ "node": ">= 0.8.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==", + "dev": true, + "license": "ISC" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -20155,7 +21696,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -20219,6 +21759,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -20231,6 +21772,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -20445,6 +21987,19 @@ "node": ">= 10" } }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/sort-keys": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz", @@ -20483,7 +22038,6 @@ "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==", - "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -20494,7 +22048,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -20574,6 +22127,18 @@ "wbuf": "^1.7.3" } }, + "node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -20672,6 +22237,15 @@ "node": ">= 0.4" } }, + "node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1" + } + }, "node_modules/stream-composer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", @@ -20734,6 +22308,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -20749,6 +22324,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -20763,12 +22339,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/string-width/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==", + "dev": true, "license": "MIT" }, "node_modules/string.prototype.includes": { @@ -20888,6 +22466,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -20901,6 +22480,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -20980,9 +22560,9 @@ "license": "ISC" }, "node_modules/styled-components": { - "version": "6.1.17", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.17.tgz", - "integrity": "sha512-97D7DwWanI7nN24v0D4SvbfjLE9656umNSJZkBkDIWL37aZqG/wRQ+Y9pWtXyBIM/NSfcBzHLErEsqHmJNSVUg==", + "version": "6.1.18", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.18.tgz", + "integrity": "sha512-Mvf3gJFzZCkhjY2Y/Fx9z1m3dxbza0uI9H1CbNZm/jSHCojzJhQ0R7bByrlFJINnMzz/gPulpoFFGymNwrsMcw==", "license": "MIT", "dependencies": { "@emotion/is-prop-valid": "1.2.2", @@ -21284,17 +22864,17 @@ } }, "node_modules/stylelint-scss": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.11.1.tgz", - "integrity": "sha512-e4rYo0UY+BIMtGeGanghrvHTjcryxgZbyFxUedp8dLFqC4P70aawNdYjRrQxbnKhu3BNr4+lt5e/53tcKXiwFA==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.12.0.tgz", + "integrity": "sha512-U7CKhi1YNkM1pXUXl/GMUXi8xKdhl4Ayxdyceie1nZ1XNIdaUgMV6OArpooWcDzEggwgYD0HP/xIgVJo9a655w==", "dev": true, "license": "MIT", "optional": true, "dependencies": { "css-tree": "^3.0.1", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.35.0", - "mdn-data": "^2.15.0", + "known-css-properties": "^0.36.0", + "mdn-data": "^2.21.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.6", "postcss-selector-parser": "^7.1.0", @@ -21331,9 +22911,9 @@ "optional": true }, "node_modules/stylelint-scss/node_modules/known-css-properties": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", - "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz", + "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==", "dev": true, "license": "MIT", "optional": true @@ -21408,6 +22988,21 @@ "node": ">=12.0.0" } }, + "node_modules/stylelint/node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -21696,15 +23291,37 @@ "dev": true, "license": "MIT" }, - "node_modules/synckit": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.4.tgz", - "integrity": "sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==", + "node_modules/sync-child-process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", + "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.3", - "tslib": "^2.8.1" + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", + "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/synckit": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.6.tgz", + "integrity": "sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.4" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -21876,14 +23493,14 @@ } }, "node_modules/terser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "version": "5.39.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.2.tgz", + "integrity": "sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.14.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -22064,13 +23681,6 @@ "b4a": "^1.6.4" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/throat": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", @@ -22082,7 +23692,6 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, "license": "MIT" }, "node_modules/through2": { @@ -22149,6 +23758,36 @@ "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", "license": "MIT" }, + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", @@ -22574,9 +24213,9 @@ "license": "0BSD" }, "node_modules/tsx": { - "version": "4.19.3", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.3.tgz", - "integrity": "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==", + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -22744,724 +24383,130 @@ "node": ">=14.17" } }, - "node_modules/typescript-plugin-styled-components": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/typescript-plugin-styled-components/-/typescript-plugin-styled-components-3.0.0.tgz", - "integrity": "sha512-QWlhTl6NqsFxtJyxn7pJjm3RhgzXSByUftZ3AoQClrMMpa4yAaHuJKTN1gFpH3Ti+Rwm56fNUfG9pXSBU+WW3A==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "typescript": "~4.8 || 5" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "node_modules/typescript-eslint": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.1.tgz", + "integrity": "sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" + "@typescript-eslint/eslint-plugin": "8.32.1", + "@typescript-eslint/parser": "8.32.1", + "@typescript-eslint/utils": "8.32.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/underscore.string": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", - "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "^1.1.1", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/undici": { - "version": "6.21.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.1.tgz", - "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unixify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", - "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "normalize-path": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unixify/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unzip-crx-3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/unzip-crx-3/-/unzip-crx-3-0.2.0.tgz", - "integrity": "sha512-0+JiUq/z7faJ6oifVB5nSwt589v1KCduqIJupNVDoWSXZtWDmjDGO3RAEOvwJ07w90aoXoP4enKsR7ecMrJtWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "jszip": "^3.1.0", - "mkdirp": "^0.5.1", - "yaku": "^0.16.6" - } - }, - "node_modules/unzip-crx-3/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, - "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" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "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==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz", + "integrity": "sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==", "dev": true, "license": "MIT", "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.32.1", + "@typescript-eslint/type-utils": "8.32.1", + "@typescript-eslint/utils": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/use-composed-ref": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.4.0.tgz", - "integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.0.tgz", - "integrity": "sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.3.0.tgz", - "integrity": "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.1.tgz", + "integrity": "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==", + "dev": true, "license": "MIT", "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" + "@typescript-eslint/scope-manager": "8.32.1", + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/typescript-estree": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz", + "integrity": "sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==", + "dev": true, "license": "MIT", "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz", + "integrity": "sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.32.1", + "@typescript-eslint/utils": "8.32.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/use-sync-external-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", - "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/value-or-function": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", - "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", - "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/vinyl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", - "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^2.1.2", - "clone-stats": "^1.0.0", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-contents": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", - "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^5.0.0", - "vinyl": "^3.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-contents/node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/vinyl-contents/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/vinyl-fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", - "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fs-mkdirp-stream": "^2.0.1", - "glob-stream": "^8.0.0", - "graceful-fs": "^4.2.11", - "iconv-lite": "^0.6.3", - "is-valid-glob": "^1.0.0", - "lead": "^4.0.0", - "normalize-path": "3.0.0", - "resolve-options": "^2.0.0", - "stream-composer": "^1.0.2", - "streamx": "^2.14.0", - "to-through": "^3.0.0", - "value-or-function": "^4.0.0", - "vinyl": "^3.0.0", - "vinyl-sourcemap": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-sourcemap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", - "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "convert-source-map": "^2.0.0", - "graceful-fs": "^4.2.10", - "now-and-later": "^3.0.0", - "streamx": "^2.12.5", - "vinyl": "^3.0.0", - "vinyl-contents": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-sourcemap/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "license": "MIT", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walk-sync": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-2.2.0.tgz", - "integrity": "sha512-IC8sL7aB4/ZgFcGI2T1LczZeFWZ06b3zoHH7jBPyHxOtIIz1jppWHjjEXkOFvFojBVAK9pV7g47xOZ4LW3QLfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimatch": "^3.0.3", - "ensure-posix-path": "^1.1.0", - "matcher-collection": "^2.0.0", - "minimatch": "^3.0.4" - }, - "engines": { - "node": "8.* || >= 10.*" - } - }, - "node_modules/walk-sync/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==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/walk-sync/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchboy": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/watchboy/-/watchboy-0.4.3.tgz", - "integrity": "sha512-GHs1HxwvxSMBsqd/WfTOZhj5gBdMqf5HQpfgtKxDfZRxrlYPDdVLRB61LCeRzJaWANmvSIMlfmRVDwVmJFgAKA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lodash.difference": "^4.5.0", - "micromatch": "^4.0.2", - "pify": "^4.0.1", - "unixify": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "5.99.7", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.7.tgz", - "integrity": "sha512-CNqKBRMQjwcmKR0idID5va1qlhrqVUKpovi+Ec79ksW8ux7iS1+A6VqzfZXgVYCFRKl7XL5ap3ZoMpwBJxcg0w==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz", + "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==", "dev": true, "license": "MIT", "dependencies": { @@ -39594,415 +40639,661 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz", + "integrity": "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==", "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" } }, - "typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.1.tgz", + "integrity": "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==", "dev": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.32.1", + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/typescript-estree": "8.32.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, - "typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz", + "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==", "dev": true, - "requires": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.32.1", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "node_modules/typescript-eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "node_modules/typescript-eslint/node_modules/ignore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", "dev": true, - "requires": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" + "license": "MIT", + "engines": { + "node": ">= 4" } }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "node_modules/typescript-eslint/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "requires": { - "is-typedarray": "^1.0.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true + "node_modules/typescript-eslint/node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } }, - "typescript-plugin-styled-components": { + "node_modules/typescript-plugin-styled-components": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/typescript-plugin-styled-components/-/typescript-plugin-styled-components-3.0.0.tgz", "integrity": "sha512-QWlhTl6NqsFxtJyxn7pJjm3RhgzXSByUftZ3AoQClrMMpa4yAaHuJKTN1gFpH3Ti+Rwm56fNUfG9pXSBU+WW3A==", - "dev": true + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": "~4.8 || 5" + } }, - "unbox-primitive": { + "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "underscore.string": { + "node_modules/underscore.string": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "sprintf-js": "^1.1.1", "util-deprecate": "^1.0.2" + }, + "engines": { + "node": "*" } }, - "undici": { + "node_modules/undici": { "version": "6.21.1", "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.1.tgz", - "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==" + "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } }, - "undici-types": { + "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "unique-filename": { + "node_modules/unique-filename": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "dev": true, - "requires": { + "license": "ISC", + "dependencies": { "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "unique-slug": { + "node_modules/unique-slug": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "dev": true, - "requires": { + "license": "ISC", + "dependencies": { "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "universalify": { + "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } }, - "unixify": { + "node_modules/unixify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "normalize-path": "^2.1.1" }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "engines": { + "node": ">=0.10.0" } }, - "unpipe": { + "node_modules/unixify/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "unzip-crx-3": { + "node_modules/unzip-crx-3": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/unzip-crx-3/-/unzip-crx-3-0.2.0.tgz", "integrity": "sha512-0+JiUq/z7faJ6oifVB5nSwt589v1KCduqIJupNVDoWSXZtWDmjDGO3RAEOvwJ07w90aoXoP4enKsR7ecMrJtWQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "jszip": "^3.1.0", "mkdirp": "^0.5.1", "yaku": "^0.16.6" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - } } }, - "update-browserslist-db": { + "node_modules/unzip-crx-3/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, - "requires": { + "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" + } + ], + "license": "MIT", + "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "requires": { + "license": "BSD-2-Clause", + "dependencies": { "punycode": "^2.1.0" } }, - "url-loader": { + "node_modules/url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "loader-utils": "^2.0.0", "mime-types": "^2.1.27", "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } } }, - "url-parse": { + "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, - "use-callback-ref": { + "node_modules/use-callback-ref": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", - "requires": { + "license": "MIT", + "dependencies": { "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "use-composed-ref": { + "node_modules/use-composed-ref": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.4.0.tgz", - "integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==" + "integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, - "use-isomorphic-layout-effect": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.0.tgz", - "integrity": "sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==" + "node_modules/use-isomorphic-layout-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz", + "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, - "use-latest": { + "node_modules/use-latest": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.3.0.tgz", "integrity": "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==", - "requires": { + "license": "MIT", + "dependencies": { "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "use-sidecar": { + "node_modules/use-sidecar": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", - "requires": { + "license": "MIT", + "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "use-sync-external-store": { + "node_modules/use-sync-external-store": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==" + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } }, - "utf8-byte-length": { + "node_modules/utf8-byte-length": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", - "dev": true + "dev": true, + "license": "(WTFPL OR MIT)" }, - "util-deprecate": { + "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==", - "dev": true + "dev": true, + "license": "MIT" }, - "utila": { + "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true + "dev": true, + "license": "MIT" }, - "utils-merge": { + "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } }, - "uuid": { + "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "v8-compile-cache-lib": { + "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, - "v8-to-istanbul": { + "node_modules/v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", "dev": true, - "requires": { + "license": "ISC", + "dependencies": { "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0", "source-map": "^0.7.3" }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } + "engines": { + "node": ">=10.12.0" } }, - "validate-npm-package-license": { + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "requires": { + "license": "Apache-2.0", + "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "value-or-function": { + "node_modules/value-or-function": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } }, - "vary": { + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "verror": { + "node_modules/verror": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", "dev": true, + "license": "MIT", "optional": true, - "requires": { + "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" } }, - "vinyl": { + "node_modules/vinyl": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "clone": "^2.1.2", "clone-stats": "^1.0.0", "remove-trailing-separator": "^1.1.0", "replace-ext": "^2.0.0", "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" } }, - "vinyl-contents": { + "node_modules/vinyl-contents": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "bl": "^5.0.0", "vinyl": "^3.0.0" }, - "dependencies": { - "bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dev": true, - "requires": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - } + "engines": { + "node": ">=10.13.0" } }, - "vinyl-fs": { + "node_modules/vinyl-contents/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/vinyl-contents/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/vinyl-fs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "fs-mkdirp-stream": "^2.0.1", "glob-stream": "^8.0.0", "graceful-fs": "^4.2.11", @@ -40017,14 +41308,18 @@ "value-or-function": "^4.0.0", "vinyl": "^3.0.0", "vinyl-sourcemap": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" } }, - "vinyl-sourcemap": { + "node_modules/vinyl-sourcemap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "convert-source-map": "^2.0.0", "graceful-fs": "^4.2.10", "now-and-later": "^3.0.0", @@ -40032,132 +41327,255 @@ "vinyl": "^3.0.0", "vinyl-contents": "^2.0.0" }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-sourcemap/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, + "license": "MIT", "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, - "void-elements": { + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==" + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "w3c-hr-time": { + "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "browser-process-hrtime": "^1.0.0" } }, - "w3c-xmlserializer": { + "node_modules/w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" } }, - "walk-sync": { + "node_modules/walk-sync": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-2.2.0.tgz", "integrity": "sha512-IC8sL7aB4/ZgFcGI2T1LczZeFWZ06b3zoHH7jBPyHxOtIIz1jppWHjjEXkOFvFojBVAK9pV7g47xOZ4LW3QLfg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "@types/minimatch": "^3.0.3", "ensure-posix-path": "^1.1.0", "matcher-collection": "^2.0.0", "minimatch": "^3.0.4" }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "engines": { + "node": "8.* || >= 10.*" } }, - "walker": { + "node_modules/walk-sync/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/walk-sync/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, - "requires": { + "license": "Apache-2.0", + "dependencies": { "makeerror": "1.0.12" } }, - "watchboy": { + "node_modules/watchboy": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/watchboy/-/watchboy-0.4.3.tgz", "integrity": "sha512-GHs1HxwvxSMBsqd/WfTOZhj5gBdMqf5HQpfgtKxDfZRxrlYPDdVLRB61LCeRzJaWANmvSIMlfmRVDwVmJFgAKA==", "dev": true, - "requires": { + "license": "ISC", + "dependencies": { "lodash.difference": "^4.5.0", "micromatch": "^4.0.2", "pify": "^4.0.1", "unixify": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "watchpack": { + "node_modules/watchpack": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "wbuf": { + "node_modules/wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "minimalistic-assert": "^1.0.0" } }, - "wcwidth": { + "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "defaults": "^1.0.3" } }, - "webidl-conversions": { + "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "webpack": { - "version": "5.99.7", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.7.tgz", - "integrity": "sha512-CNqKBRMQjwcmKR0idID5va1qlhrqVUKpovi+Ec79ksW8ux7iS1+A6VqzfZXgVYCFRKl7XL5ap3ZoMpwBJxcg0w==", "dev": true, - "requires": { + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.99.8", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", + "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", + "dev": true, + "license": "MIT", + "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", @@ -40183,64 +41601,29 @@ "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, - "dependencies": { - "ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true } } }, - "webpack-bundle-analyzer": { + "node_modules/webpack-bundle-analyzer": { "version": "4.10.2", "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", @@ -40254,36 +41637,65 @@ "sirv": "^2.0.3", "ws": "^7.3.1" }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", "dependencies": { - "acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "requires": { - "acorn": "^8.11.0" - } + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true + "utf-8-validate": { + "optional": true } } }, - "webpack-cli": { + "node_modules/webpack-cli": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^1.2.0", "@webpack-cli/info": "^1.5.0", @@ -40297,81 +41709,142 @@ "rechoir": "^0.7.0", "webpack-merge": "^5.7.3" }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true } } }, - "webpack-dev-middleware": { + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-cli/node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/webpack-dev-middleware": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.3", "mime-types": "^2.1.31", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, - "dependencies": { - "ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - } + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "webpack-dev-server": { + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { "version": "4.15.2", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", "@types/express": "^4.17.13", @@ -40403,169 +41876,336 @@ "webpack-dev-middleware": "^5.3.4", "ws": "^8.13.0" }, - "dependencies": { - "ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - } + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.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" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } + "webpack-cli": { + "optional": true } } }, - "webpack-merge": { + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "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" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/webpack-dev-server/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-merge": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "webpack-sources": { + "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==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } }, - "websocket-driver": { + "node_modules/webpack/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack/node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, - "requires": { + "license": "Apache-2.0", + "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "websocket-extensions": { + "node_modules/websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } }, - "whatwg-encoding": { + "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" } }, - "whatwg-mimetype": { + "node_modules/whatwg-mimetype": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "dev": true + "license": "MIT", + "engines": { + "node": ">=18" + } }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "lodash": "^4.7.0", "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { + "dev": true, + "license": "ISC", + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-boxed-primitive": { + "node_modules/which-boxed-primitive": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-builtin-type": { + "node_modules/which-builtin-type": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", @@ -40579,26 +42219,40 @@ "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-collection": { + "node_modules/which-collection": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-typed-array": { + "node_modules/which-typed-array": { "version": "1.1.19", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", @@ -40606,117 +42260,215 @@ "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "wildcard": { + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "word-wrap": { + "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "wrap-ansi": { + "node_modules/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==", "dev": true, - "requires": { + "license": "MIT", + "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" } }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", + "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==", - "requires": { + "dev": true, + "license": "MIT", + "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" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, - "write-file-atomic": { + "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "requires": { + "license": "ISC", + "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, - "ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==" + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } }, - "xml-name-validator": { + "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, - "xmlbuilder": { + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } }, - "xmlchars": { + "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "dev": true, + "license": "MIT" }, - "xtend": { + "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } }, - "y18n": { + "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } }, - "yaku": { + "node_modules/yaku": { "version": "0.16.7", "resolved": "https://registry.npmjs.org/yaku/-/yaku-0.16.7.tgz", "integrity": "sha512-Syu3IB3rZvKvYk7yTiyl1bo/jiEFaaStrgv1V2TIJTqYPStSMQVO8EQjg/z+DRzLq/4LIIharNT3iH1hylEIRw==", - "dev": true + "dev": true, + "license": "MIT" }, - "yallist": { + "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, - "yaml": { + "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } }, - "yargs": { + "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -40725,54 +42477,99 @@ "y18n": "^5.0.5", "yargs-parser": "^21.1.1" }, - "dependencies": { - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - } + "engines": { + "node": ">=12" } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } }, - "yauzl": { + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, - "yn": { + "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "yocto-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "zod": { - "version": "3.24.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz", - "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==" + "node_modules/zod": { + "version": "3.24.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", + "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } }, - "zustand": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.6.tgz", - "integrity": "sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==", - "requires": { + "node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } } } } diff --git a/package.json b/package.json index e1f66602..95786724 100644 --- a/package.json +++ b/package.json @@ -1,297 +1,25 @@ { "name": "feishin", - "productName": "Feishin", - "description": "Feishin music server", - "version": "0.13.0", + "version": "1.0.0", + "description": "An Electron application with React and TypeScript", + "main": "./out/main/index.js", + "author": "example.com", + "homepage": "https://electron-vite.org", "scripts": { - "build": "concurrently \"npm run build:main\" \"npm run build:renderer\" \"npm run build:remote\"", - "build:main": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts", - "build:remote": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.remote.prod.ts", - "build:renderer": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.prod.ts", - "build:web": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.web.prod.ts", - "build:docker": "docker build -t jeffvli/feishin .", - "rebuild": "electron-rebuild --parallel --types prod,dev,optional --module-dir release/app", - "lint": "concurrently \"npm run lint:code\" \"npm run lint:styles\"", - "lint:code": "cross-env NODE_ENV=development eslint . --ext .js,.jsx,.ts,.tsx --fix", - "lint:styles": "npx stylelint **/*.tsx --fix", - "package": "node --import tsx ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish never", - "package:pr": "node --import tsx ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish never --win --mac --linux", - "package:pr:macos": "node --import tsx ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish never --mac", - "package:pr:windows": "node --import tsx ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish never --win", - "package:pr:linux": "node --import tsx ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish never --linux", - "package:dev": "node --import tsx ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish never --dir", - "postinstall": "node --import tsx .erb/scripts/check-native-dep.js && electron-builder install-app-deps && cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.dev.dll.ts", - "start": "node --import tsx ./.erb/scripts/check-port-in-use.js && npm run start:renderer", - "start:main": "cross-env NODE_ENV=development NODE_OPTIONS=\"--import tsx\" electron -r ts-node/register/transpile-only ./src/main/main.ts", - "start:preload": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.preload.dev.ts", - "start:remote": "cross-env NODE_ENV=developemnt TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.remote.dev.ts", - "start:renderer": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack serve --config ./.erb/configs/webpack.config.renderer.dev.ts", - "start:web": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack serve --config ./.erb/configs/webpack.config.renderer.web.ts", - "test": "jest", - "prepare": "husky install", - "i18next": "i18next -c src/i18n/i18next-parser.config.js", - "prod:buildserver": "pwsh -c \"./scripts/server-build.ps1\"", - "prod:publishserver": "pwsh -c \"./scripts/server-publish.ps1\"" - }, - "lint-staged": { - "*.{js,jsx,ts,tsx}": [ - "cross-env NODE_ENV=development eslint --cache" - ], - "*.json,.{eslintrc,prettierrc}": [ - "prettier --ignore-path .eslintignore --parser json --write" - ], - "*.{css,scss}": [ - "prettier --ignore-path .eslintignore --single-quote --write" - ], - "*.{html,md,yml}": [ - "prettier --ignore-path .eslintignore --single-quote --write" - ] - }, - "build": { - "productName": "Feishin", - "appId": "org.jeffvli.feishin", - "artifactName": "${productName}-${version}-${os}-${arch}.${ext}", - "asar": true, - "asarUnpack": "**\\*.{node,dll}", - "files": [ - "dist", - "node_modules", - "package.json" - ], - "afterSign": ".erb/scripts/notarize.js", - "electronVersion": "36.1.0", - "mac": { - "target": { - "target": "default", - "arch": [ - "arm64", - "x64" - ] - }, - "icon": "assets/icons/icon.icns", - "type": "distribution", - "hardenedRuntime": true, - "entitlements": "assets/entitlements.mac.plist", - "entitlementsInherit": "assets/entitlements.mac.plist", - "gatekeeperAssess": false - }, - "dmg": { - "contents": [ - { - "x": 130, - "y": 220 - }, - { - "x": 410, - "y": 220, - "type": "link", - "path": "/Applications" - } - ] - }, - "win": { - "target": [ - "nsis", - "zip" - ], - "icon": "assets/icons/icon.ico" - }, - "deb": { - "depends": [ - "libgssapi_krb5.so.2", - "libavahi-common.so.3", - "libavahi-client.so.3", - "libkrb5.so.3", - "libkrb5support.so.0", - "libkeyutils.so.1", - "libcups.so.2" - ] - }, - "rpm": { - "depends": [ - "libgssapi_krb5.so.2", - "libavahi-common.so.3", - "libavahi-client.so.3", - "libkrb5.so.3", - "libkrb5support.so.0", - "libkeyutils.so.1", - "libcups.so.2" - ] - }, - "freebsd": { - "depends": [ - "libgssapi_krb5.so.2", - "libavahi-common.so.3", - "libavahi-client.so.3", - "libkrb5.so.3", - "libkrb5support.so.0", - "libkeyutils.so.1", - "libcups.so.2" - ] - }, - "linux": { - "target": [ - "AppImage", - "tar.xz" - ], - "icon": "assets/icons/icon.png", - "category": "AudioVideo;Audio;Player" - }, - "directories": { - "app": "release/app", - "buildResources": "assets", - "output": "release/build" - }, - "extraResources": [ - "./assets/**" - ], - "publish": { - "provider": "github", - "owner": "jeffvli", - "repo": "feishin" - } - }, - "repository": { - "type": "git", - "url": "git+https://github.com/jeffvli/feishin.git" - }, - "author": { - "name": "jeffvli", - "url": "https://github.com/jeffvli/" - }, - "contributors": [], - "license": "GPL-3.0", - "bugs": { - "url": "https://github.com/jeffvli/feishin/issues" - }, - "keywords": [ - "subsonic", - "navidrome", - "airsonic", - "jellyfin", - "react", - "electron" - ], - "homepage": "https://github.com/jeffvli/feishin", - "jest": { - "testURL": "http://localhost/", - "testEnvironment": "jsdom", - "transform": { - "\\.(ts|tsx|js|jsx)$": "ts-jest" - }, - "moduleNameMapper": { - "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/.erb/mocks/fileMock.js", - "\\.(css|less|sass|scss)$": "identity-obj-proxy" - }, - "moduleFileExtensions": [ - "js", - "jsx", - "ts", - "tsx", - "json" - ], - "moduleDirectories": [ - "node_modules", - "release/app/node_modules" - ], - "testPathIgnorePatterns": [ - "release/app/dist" - ], - "setupFiles": [ - "./.erb/scripts/check-build-exists.ts" - ] - }, - "devDependencies": { - "@electron/rebuild": "^3.6.0", - "@pmmmwh/react-refresh-webpack-plugin": "0.5.5", - "@stylelint/postcss-css-in-js": "^0.38.0", - "@teamsupercell/typings-for-css-modules-loader": "^2.5.1", - "@testing-library/jest-dom": "^5.16.4", - "@testing-library/react": "^13.0.0", - "@types/dompurify": "^3.0.5", - "@types/electron-localshortcut": "^3.1.0", - "@types/jest": "^27.4.1", - "@types/lodash": "^4.14.188", - "@types/md5": "^2.3.2", - "@types/node": "^17.0.23", - "@types/react": "^18.0.25", - "@types/react-dom": "^18.0.8", - "@types/react-test-renderer": "^17.0.1", - "@types/react-virtualized-auto-sizer": "^1.0.1", - "@types/react-window": "^1.8.5", - "@types/react-window-infinite-loader": "^1.0.6", - "@types/styled-components": "^5.1.26", - "@types/terser-webpack-plugin": "^5.0.4", - "@types/webpack-bundle-analyzer": "^4.4.1", - "@types/webpack-env": "^1.16.3", - "@typescript-eslint/eslint-plugin": "^5.47.0", - "@typescript-eslint/parser": "^5.47.0", - "browserslist-config-erb": "^0.0.3", - "chalk": "^4.1.2", - "concurrently": "^7.1.0", - "core-js": "^3.21.1", - "cross-env": "^7.0.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^3.4.1", - "detect-port": "^1.3.0", - "electron": "^36.1.0", - "electron-builder": "^24.13.3", - "electron-devtools-installer": "^3.2.0", - "electron-notarize": "^1.2.1", - "electronmon": "^2.0.2", - "eslint": "^8.30.0", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-erb": "^4.0.3", - "eslint-import-resolver-typescript": "^2.7.1", - "eslint-import-resolver-webpack": "^0.13.2", - "eslint-plugin-compat": "^4.2.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jest": "^26.1.3", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-promise": "^6.0.0", - "eslint-plugin-react": "^7.29.4", - "eslint-plugin-react-hooks": "^4.4.0", - "eslint-plugin-sort-keys-fix": "^1.1.2", - "eslint-plugin-typescript-sort-keys": "^2.1.0", - "file-loader": "^6.2.0", - "html-webpack-plugin": "^5.5.0", - "husky": "^7.0.4", - "i18next-parser": "^9.0.2", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.5.1", - "lint-staged": "^12.3.7", - "mini-css-extract-plugin": "^2.6.0", - "postcss-scss": "^4.0.4", - "postcss-styled-syntax": "^0.5.0", - "postcss-syntax": "^0.36.2", - "prettier": "^3.3.3", - "react-refresh": "^0.12.0", - "react-refresh-typescript": "^2.0.4", - "react-test-renderer": "^18.0.0", - "rimraf": "^3.0.2", - "sass": "^1.49.11", - "sass-loader": "^12.6.0", - "style-loader": "^3.3.1", - "stylelint": "^15.10.3", - "stylelint-config-css-modules": "^4.3.0", - "stylelint-config-recess-order": "^4.3.0", - "stylelint-config-standard": "^34.0.0", - "stylelint-config-standard-scss": "^4.0.0", - "stylelint-config-styled-components": "^0.1.1", - "terser-webpack-plugin": "^5.3.1", - "ts-jest": "^27.1.4", - "ts-loader": "^9.2.8", - "ts-node": "^10.9.2", - "tsconfig-paths-webpack-plugin": "^4.0.0", - "tsx": "^4.16.2", - "typescript": "^5.2.2", - "typescript-plugin-styled-components": "^3.0.0", - "url-loader": "^4.1.1", - "webpack": "^5.94.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-cli": "^4.9.2", - "webpack-dev-server": "^4.8.0", - "webpack-merge": "^5.8.0" + "format": "prettier --write .", + "lint": "eslint --cache --fix .", + "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", + "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false", + "typecheck": "npm run typecheck:node && npm run typecheck:web", + "start": "electron-vite preview", + "dev": "electron-vite dev", + "dev:watch": "electron-vite dev --watch", + "build": "npm run typecheck && electron-vite build", + "postinstall": "electron-builder install-app-deps", + "build:unpack": "npm run build && electron-builder --dir", + "build:win": "npm run build && electron-builder --win", + "build:mac": "electron-vite build && electron-builder --mac", + "build:linux": "electron-vite build && electron-builder --linux" }, "dependencies": { "@ag-grid-community/client-side-row-model": "^28.2.1", @@ -299,6 +27,8 @@ "@ag-grid-community/infinite-row-model": "^28.2.1", "@ag-grid-community/react": "^28.2.1", "@ag-grid-community/styles": "^28.2.1", + "@electron-toolkit/preload": "^3.0.1", + "@electron-toolkit/utils": "^4.0.0", "@emotion/react": "^11.10.4", "@mantine/core": "^6.0.17", "@mantine/dates": "^6.0.17", @@ -315,6 +45,7 @@ "audiomotion-analyzer": "^4.5.0", "auto-text-size": "^0.2.3", "axios": "^1.6.0", + "cheerio": "^1.0.0", "clsx": "^2.0.0", "cmdk": "^0.2.0", "dayjs": "^1.11.6", @@ -323,7 +54,7 @@ "electron-localshortcut": "^3.2.1", "electron-log": "^5.1.1", "electron-store": "^8.1.0", - "electron-updater": "^6.3.1", + "electron-updater": "^6.3.9", "fast-average-color": "^9.3.0", "format-duration": "^2.0.0", "framer-motion": "^11.0.0", @@ -336,11 +67,12 @@ "lodash": "^4.17.21", "md5": "^2.3.0", "memoize-one": "^6.0.0", + "mpris-service": "^2.1.2", "nanoid": "^3.3.3", "net": "^1.0.2", "node-mpv": "github:jeffvli/Node-MPV#32b4d64395289ad710c41d481d2707a7acfc228f", - "overlayscrollbars": "^2.2.1", - "overlayscrollbars-react": "^0.5.1", + "overlayscrollbars": "^2.11.1", + "overlayscrollbars-react": "^0.5.6", "react": "^18.2.0", "react-dom": "^18.2.0", "react-error-boundary": "^3.1.4", @@ -356,33 +88,112 @@ "semver": "^7.5.4", "styled-components": "^6.0.8", "swiper": "^9.3.1", + "ws": "^8.18.2", "zod": "^3.22.3", "zustand": "^4.3.9" }, - "resolutions": { - "styled-components": "^6", - "entities": "2.2.0" - }, - "overrides": { - "entities": "2.2.0" - }, - "devEngines": { - "runtime": { - "name": "node", - "version": ">=18.x", - "onFail": "error" - }, - "packageManager": { - "name": "npm", - "version": ">=7.x", - "onFail": "error" - } - }, - "browserslist": [], - "electronmon": { - "patterns": [ - "!server", - "!src/renderer" - ] + "devDependencies": { + "@electron-toolkit/eslint-config-prettier": "^3.0.0", + "@electron-toolkit/eslint-config-ts": "^3.0.0", + "@electron-toolkit/tsconfig": "^1.0.1", + "@electron/rebuild": "^3.6.0", + "@pmmmwh/react-refresh-webpack-plugin": "0.5.5", + "@stylelint/postcss-css-in-js": "^0.38.0", + "@teamsupercell/typings-for-css-modules-loader": "^2.5.1", + "@testing-library/jest-dom": "^5.16.4", + "@testing-library/react": "^13.0.0", + "@types/dompurify": "^3.0.5", + "@types/electron-localshortcut": "^3.1.0", + "@types/jest": "^27.4.1", + "@types/lodash": "^4.14.188", + "@types/md5": "^2.3.2", + "@types/node": "^22.14.1", + "@types/react": "^19.1.1", + "@types/react-dom": "^19.1.2", + "@types/react-test-renderer": "^17.0.1", + "@types/react-virtualized-auto-sizer": "^1.0.1", + "@types/react-window": "^1.8.5", + "@types/react-window-infinite-loader": "^1.0.6", + "@types/styled-components": "^5.1.26", + "@types/terser-webpack-plugin": "^5.0.4", + "@types/webpack-bundle-analyzer": "^4.4.1", + "@types/webpack-env": "^1.16.3", + "@typescript-eslint/eslint-plugin": "^5.47.0", + "@typescript-eslint/parser": "^5.47.0", + "@vitejs/plugin-react": "^4.3.4", + "browserslist-config-erb": "^0.0.3", + "chalk": "^4.1.2", + "concurrently": "^7.1.0", + "core-js": "^3.21.1", + "cross-env": "^7.0.3", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^3.4.1", + "detect-port": "^1.3.0", + "electron": "^35.1.5", + "electron-builder": "^25.1.8", + "electron-devtools-installer": "^3.2.0", + "electron-notarize": "^1.2.1", + "electron-vite": "^3.1.0", + "electronmon": "^2.0.2", + "eslint": "^9.24.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-erb": "^4.0.3", + "eslint-import-resolver-typescript": "^2.7.1", + "eslint-import-resolver-webpack": "^0.13.2", + "eslint-plugin-compat": "^4.2.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jest": "^26.1.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-perfectionist": "^4.13.0", + "eslint-plugin-prettier": "^5.4.0", + "eslint-plugin-promise": "^6.0.0", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.19", + "eslint-plugin-sort-keys-fix": "^1.1.2", + "eslint-plugin-typescript-sort-keys": "^2.1.0", + "file-loader": "^6.2.0", + "html-webpack-plugin": "^5.5.0", + "husky": "^7.0.4", + "i18next-parser": "^9.0.2", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.5.1", + "lint-staged": "^12.3.7", + "mini-css-extract-plugin": "^2.6.0", + "postcss-scss": "^4.0.4", + "postcss-styled-syntax": "^0.5.0", + "postcss-syntax": "^0.36.2", + "prettier": "^3.5.3", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-refresh": "^0.12.0", + "react-refresh-typescript": "^2.0.4", + "react-test-renderer": "^18.0.0", + "rimraf": "^3.0.2", + "sass": "^1.49.11", + "sass-embedded": "^1.89.0", + "sass-loader": "^12.6.0", + "style-loader": "^3.3.1", + "stylelint": "^15.10.3", + "stylelint-config-css-modules": "^4.3.0", + "stylelint-config-recess-order": "^4.3.0", + "stylelint-config-standard": "^34.0.0", + "stylelint-config-standard-scss": "^4.0.0", + "stylelint-config-styled-components": "^0.1.1", + "terser-webpack-plugin": "^5.3.1", + "ts-jest": "^27.1.4", + "ts-loader": "^9.2.8", + "ts-node": "^10.9.2", + "tsconfig-paths-webpack-plugin": "^4.0.0", + "tsx": "^4.16.2", + "typescript": "^5.8.3", + "typescript-plugin-styled-components": "^3.0.0", + "url-loader": "^4.1.1", + "vite": "^6.2.6", + "webpack": "^5.94.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.8.0", + "webpack-merge": "^5.8.0" } } diff --git a/release/app/package-lock.json b/release/app/package-lock.json deleted file mode 100644 index 585958ec..00000000 --- a/release/app/package-lock.json +++ /dev/null @@ -1,2352 +0,0 @@ -{ - "name": "feishin", - "version": "0.12.8", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "feishin", - "version": "0.12.8", - "hasInstallScript": true, - "license": "GPL-3.0", - "dependencies": { - "cheerio": "^1.0.0-rc.12", - "mpris-service": "^2.1.2", - "ws": "^8.18.0" - }, - "devDependencies": { - "electron": "36.1.0" - } - }, - "node_modules/@electron/get": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz", - "integrity": "sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "global-agent": "^3.0.0" - } - }, - "node_modules/@nornagon/put": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@nornagon/put/-/put-0.0.8.tgz", - "integrity": "sha512-ugvXJjwF5ldtUpa7D95kruNJ41yFQDEKyF5CW4TgKJnh+W/zmlBzXXeKTyqIgwMFrkePN2JqOBqcF0M0oOunow==", - "engines": { - "node": ">=0.3.0" - } - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "22.15.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.12.tgz", - "integrity": "sha512-K0fpC/ZVeb8G9rm7bH7vI0KAec4XHEhBam616nVJCV51bKzJ6oA3luG4WdKoaztxe70QaNjS/xBmcDLmr4PiGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/abstract-socket": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/abstract-socket/-/abstract-socket-2.1.1.tgz", - "integrity": "sha512-YZJizsvS1aBua5Gd01woe4zuyYBGgSMeqDOB6/ChwdTI904KP6QGtJswXl4hcqWxbz86hQBe++HWV0hF1aGUtA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "linux" - ], - "dependencies": { - "bindings": "^1.2.1", - "nan": "^2.12.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true, - "optional": true - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "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==" - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/dbus-next": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/dbus-next/-/dbus-next-0.9.2.tgz", - "integrity": "sha512-tzQq/+wrTZ2yU+U5PoeXc97KABhX2v55C/T0finH3tSKYuI8H/SqppIFymBBrUHcK13LvEGY3vdj3ikPPenL5g==", - "dependencies": { - "@nornagon/put": "0.0.8", - "event-stream": "3.3.4", - "hexy": "^0.2.10", - "jsbi": "^2.0.5", - "long": "^4.0.0", - "safe-buffer": "^5.1.1", - "xml2js": "^0.4.17" - }, - "optionalDependencies": { - "abstract-socket": "^2.0.0" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "optional": true - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/electron": { - "version": "36.1.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-36.1.0.tgz", - "integrity": "sha512-gnp3BnbKdGsVc7cm1qlEaZc8pJsR08mIs8H/yTo8gHEtFkGGJbDTVZOYNAfbQlL0aXh+ozv+CnyiNeDNkT1Upg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^22.7.7", - "extract-zip": "^2.0.1" - }, - "bin": { - "electron": "cli.js" - }, - "engines": { - "node": ">= 12.20.55" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, - "optional": true - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/global-agent/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "optional": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hexy": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/hexy/-/hexy-0.2.11.tgz", - "integrity": "sha512-ciq6hFsSG/Bpt2DmrZJtv+56zpPdnq+NQ4ijEFrveKN0ZG1mhl/LdT1NQZ9se6ty1fACcI4d4vYqC9v8EYpH2A==", - "bin": { - "hexy": "bin/hexy_cmd.js" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsbi": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-2.0.5.tgz", - "integrity": "sha512-TzO/62Hxeb26QMb4IGlI/5X+QLr9Uqp1FPkwp2+KOICW+Q+vSuFj61c8pkT6wAns4WcK56X7CmSHhJeDGWOqxQ==" - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "optional": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" - }, - "node_modules/matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, - "optional": true, - "dependencies": { - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mpris-service": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mpris-service/-/mpris-service-2.1.2.tgz", - "integrity": "sha512-AC6WepCnFWwOME9OWplHZ8ps/BB+g9QrEpUKCv7wX82fDPzR3nPrypOFmL/Fm0JloEAu6QTWSfDLLc6mM/jinw==", - "dependencies": { - "dbus-next": "^0.9.2", - "deep-equal": "^1.0.1", - "source-map-support": "^0.5.11" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "optional": true - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/roarr": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", - "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "engines": { - "node": ">=8.0" - } - }, - "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" - } - ] - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true, - "optional": true - }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "optional": true, - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "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==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true, - "optional": true - }, - "node_modules/stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", - "dependencies": { - "duplexer": "~0.1.1" - } - }, - "node_modules/sumchecker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", - "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, - "dependencies": { - "debug": "^4.1.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "license": "MIT", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } - }, - "dependencies": { - "@electron/get": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz", - "integrity": "sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "global-agent": "^3.0.0", - "got": "^11.8.5", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - } - }, - "@nornagon/put": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@nornagon/put/-/put-0.0.8.tgz", - "integrity": "sha512-ugvXJjwF5ldtUpa7D95kruNJ41yFQDEKyF5CW4TgKJnh+W/zmlBzXXeKTyqIgwMFrkePN2JqOBqcF0M0oOunow==" - }, - "@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "22.15.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.12.tgz", - "integrity": "sha512-K0fpC/ZVeb8G9rm7bH7vI0KAec4XHEhBam616nVJCV51bKzJ6oA3luG4WdKoaztxe70QaNjS/xBmcDLmr4PiGw==", - "dev": true, - "requires": { - "undici-types": "~6.21.0" - } - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "abstract-socket": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/abstract-socket/-/abstract-socket-2.1.1.tgz", - "integrity": "sha512-YZJizsvS1aBua5Gd01woe4zuyYBGgSMeqDOB6/ChwdTI904KP6QGtJswXl4hcqWxbz86hQBe++HWV0hF1aGUtA==", - "optional": true, - "requires": { - "bindings": "^1.2.1", - "nan": "^2.12.1" - } - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true, - "optional": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "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==" - }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true - }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "dbus-next": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/dbus-next/-/dbus-next-0.9.2.tgz", - "integrity": "sha512-tzQq/+wrTZ2yU+U5PoeXc97KABhX2v55C/T0finH3tSKYuI8H/SqppIFymBBrUHcK13LvEGY3vdj3ikPPenL5g==", - "requires": { - "@nornagon/put": "0.0.8", - "abstract-socket": "^2.0.0", - "event-stream": "3.3.4", - "hexy": "^0.2.10", - "jsbi": "^2.0.5", - "long": "^4.0.0", - "safe-buffer": "^5.1.1", - "xml2js": "0.5.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true - } - } - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "optional": true - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "electron": { - "version": "36.1.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-36.1.0.tgz", - "integrity": "sha512-gnp3BnbKdGsVc7cm1qlEaZc8pJsR08mIs8H/yTo8gHEtFkGGJbDTVZOYNAfbQlL0aXh+ozv+CnyiNeDNkT1Upg==", - "dev": true, - "requires": { - "@electron/get": "^2.0.0", - "@types/node": "^22.7.7", - "extract-zip": "^2.0.1" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, - "optional": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "optional": true - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "global-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, - "optional": true, - "requires": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "dependencies": { - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "optional": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hexy": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/hexy/-/hexy-0.2.11.tgz", - "integrity": "sha512-ciq6hFsSG/Bpt2DmrZJtv+56zpPdnq+NQ4ijEFrveKN0ZG1mhl/LdT1NQZ9se6ty1fACcI4d4vYqC9v8EYpH2A==" - }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "jsbi": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-2.0.5.tgz", - "integrity": "sha512-TzO/62Hxeb26QMb4IGlI/5X+QLr9Uqp1FPkwp2+KOICW+Q+vSuFj61c8pkT6wAns4WcK56X7CmSHhJeDGWOqxQ==" - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "optional": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, - "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==", - "dev": true, - "optional": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" - }, - "matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, - "optional": true, - "requires": { - "escape-string-regexp": "^4.0.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "mpris-service": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mpris-service/-/mpris-service-2.1.2.tgz", - "integrity": "sha512-AC6WepCnFWwOME9OWplHZ8ps/BB+g9QrEpUKCv7wX82fDPzR3nPrypOFmL/Fm0JloEAu6QTWSfDLLc6mM/jinw==", - "requires": { - "dbus-next": "^0.9.2", - "deep-equal": "^1.0.1", - "source-map-support": "^0.5.11" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "optional": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true - }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "requires": { - "entities": "^4.4.0" - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - } - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "requires": { - "through": "~2.3" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, - "responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" - } - }, - "roarr": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", - "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, - "optional": true, - "requires": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - } - }, - "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==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true, - "optional": true - }, - "serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "optional": true, - "requires": { - "type-fest": "^0.13.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "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==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", - "requires": { - "through": "2" - } - }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true, - "optional": true - }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", - "requires": { - "duplexer": "~0.1.1" - } - }, - "sumchecker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", - "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, - "requires": { - "debug": "^4.1.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "optional": true - }, - "undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==" - }, - "xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } - } -} diff --git a/release/app/package.json b/release/app/package.json deleted file mode 100644 index 5891dfa0..00000000 --- a/release/app/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "feishin", - "version": "0.13.0", - "description": "", - "main": "./dist/main/main.js", - "author": { - "name": "jeffvli", - "url": "https://github.com/jeffvli/" - }, - "scripts": { - "electron-rebuild": "node -r ts-node/register ../../.erb/scripts/electron-rebuild.js", - "link-modules": "node -r ts-node/register ../../.erb/scripts/link-modules.ts", - "postinstall": "npm run electron-rebuild && npm run link-modules" - }, - "dependencies": { - "cheerio": "^1.0.0-rc.12", - "mpris-service": "^2.1.2", - "ws": "^8.18.0" - }, - "devDependencies": { - "electron": "36.1.0" - }, - "resolutions": { - "xml2js": "0.5.0" - }, - "overrides": { - "xml2js": "0.5.0" - }, - "license": "GPL-3.0" -} diff --git a/resources/icon.png b/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f364f2c17291e4848c5efcb8fb99f06bbb53f229 GIT binary patch literal 49324 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 AZvX%Q literal 0 HcmV?d00001 diff --git a/src/__tests__/App.test.tsx b/src/__tests__/App.test.tsx deleted file mode 100644 index b2f4b7d1..00000000 --- a/src/__tests__/App.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import '@testing-library/jest-dom'; -import { render } from '@testing-library/react'; -import { App } from '../renderer/app'; - -describe('App', () => { - it('should render', () => { - expect(render()).toBeTruthy(); - }); -}); diff --git a/src/i18n/i18n.ts b/src/i18n/i18n.ts index 90fd3013..0656d426 100644 --- a/src/i18n/i18n.ts +++ b/src/i18n/i18n.ts @@ -1,52 +1,53 @@ -import { PostProcessorModule, TOptions, StringMap } from 'i18next'; +import { PostProcessorModule, StringMap, TOptions } from 'i18next'; import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; + +import cs from './locales/cs.json'; +import de from './locales/de.json'; import en from './locales/en.json'; import es from './locales/es.json'; +import fa from './locales/fa.json'; +import fi from './locales/fi.json'; import fr from './locales/fr.json'; -import ja from './locales/ja.json'; -import pl from './locales/pl.json'; -import zhHans from './locales/zh-Hans.json'; -import de from './locales/de.json'; +import hu from './locales/hu.json'; +import id from './locales/id.json'; import it from './locales/it.json'; -import ru from './locales/ru.json'; -import ptBr from './locales/pt-BR.json'; -import sr from './locales/sr.json'; -import sv from './locales/sv.json'; -import cs from './locales/cs.json'; +import ja from './locales/ja.json'; +import ko from './locales/ko.json'; import nbNO from './locales/nb-NO.json'; import nl from './locales/nl.json'; -import zhHant from './locales/zh-Hant.json'; -import fa from './locales/fa.json'; -import ko from './locales/ko.json'; +import pl from './locales/pl.json'; +import ptBr from './locales/pt-BR.json'; +import ru from './locales/ru.json'; +import sr from './locales/sr.json'; +import sv from './locales/sv.json'; import ta from './locales/ta.json'; -import id from './locales/id.json'; -import fi from './locales/fi.json'; -import hu from './locales/hu.json'; +import zhHans from './locales/zh-Hans.json'; +import zhHant from './locales/zh-Hant.json'; const resources = { + cs: { translation: cs }, + de: { translation: de }, en: { translation: en }, es: { translation: es }, - de: { translation: de }, - it: { translation: it }, - ru: { translation: ru }, - 'pt-BR': { translation: ptBr }, fa: { translation: fa }, + fi: { translation: fi }, fr: { translation: fr }, + hu: { translation: hu }, + id: { translation: id }, + it: { translation: it }, ja: { translation: ja }, ko: { translation: ko }, + 'nb-NO': { translation: nbNO }, + nl: { translation: nl }, pl: { translation: pl }, - 'zh-Hans': { translation: zhHans }, - 'zh-Hant': { translation: zhHant }, + 'pt-BR': { translation: ptBr }, + ru: { translation: ru }, sr: { translation: sr }, sv: { translation: sv }, - cs: { translation: cs }, - nl: { translation: nl }, - 'nb-NO': { translation: nbNO }, ta: { translation: ta }, - id: { translation: id }, - fi: { translation: fi }, - hu: { translation: hu }, + 'zh-Hans': { translation: zhHans }, + 'zh-Hant': { translation: zhHant }, }; export const languages = [ @@ -141,35 +142,34 @@ export const languages = [ ]; const lowerCasePostProcessor: PostProcessorModule = { - type: 'postProcessor', name: 'lowerCase', process: (value: string) => { return value.toLocaleLowerCase(); }, + type: 'postProcessor', }; const upperCasePostProcessor: PostProcessorModule = { - type: 'postProcessor', name: 'upperCase', process: (value: string) => { return value.toLocaleUpperCase(); }, + type: 'postProcessor', }; const titleCasePostProcessor: PostProcessorModule = { - type: 'postProcessor', name: 'titleCase', process: (value: string) => { return value.replace(/\S\S*/g, (txt) => { return txt.charAt(0).toLocaleUpperCase() + txt.slice(1).toLowerCase(); }); }, + type: 'postProcessor', }; const ignoreSentenceCaseLanguages = ['de']; const sentenceCasePostProcessor: PostProcessorModule = { - type: 'postProcessor', name: 'sentenceCase', process: (value: string, _key: string, _options: TOptions, translator: any) => { const sentences = value.split('. '); @@ -185,6 +185,7 @@ const sentenceCasePostProcessor: PostProcessorModule = { }) .join('. '); }, + type: 'postProcessor', }; i18n.use(lowerCasePostProcessor) .use(upperCasePostProcessor) diff --git a/src/main/features/core/lyrics/genius.ts b/src/main/features/core/lyrics/genius.ts index f79489f5..e6be1964 100644 --- a/src/main/features/core/lyrics/genius.ts +++ b/src/main/features/core/lyrics/genius.ts @@ -1,12 +1,13 @@ import axios, { AxiosResponse } from 'axios'; import { load } from 'cheerio'; -import { orderSearchResults } from './shared'; + import { - LyricSource, InternetProviderLyricResponse, InternetProviderLyricSearchResponse, LyricSearchQuery, -} from '../../../../renderer/api/types'; + LyricSource, +} from '.'; +import { orderSearchResults } from './shared'; const SEARCH_URL = 'https://genius.com/api/search/song'; @@ -17,20 +18,6 @@ export interface GeniusResponse { response: Response; } -export interface Meta { - status: number; -} - -export interface Response { - next_page: number; - sections: Section[]; -} - -export interface Section { - hits: Hit[]; - type: string; -} - export interface Hit { highlights: any[]; index: string; @@ -38,6 +25,35 @@ export interface Hit { type: string; } +export interface Meta { + status: number; +} + +export interface PrimaryArtist { + _type: string; + api_path: string; + header_image_url: string; + id: number; + image_url: string; + index_character: string; + is_meme_verified: boolean; + is_verified: boolean; + name: string; + slug: string; + url: string; +} + +export interface ReleaseDateComponents { + day: number; + month: number; + year: number; +} + +export interface Response { + next_page: number; + sections: Section[]; +} + export interface Result { _type: string; annotation_count: number; @@ -69,24 +85,9 @@ export interface Result { url: string; } -export interface PrimaryArtist { - _type: string; - api_path: string; - header_image_url: string; - id: number; - image_url: string; - index_character: string; - is_meme_verified: boolean; - is_verified: boolean; - name: string; - slug: string; - url: string; -} - -export interface ReleaseDateComponents { - day: number; - month: number; - year: number; +export interface Section { + hits: Hit[]; + type: string; } export interface Stats { @@ -94,6 +95,27 @@ export interface Stats { unreviewed_annotations: number; } +export async function getLyricsBySongId(url: string): Promise { + let result: AxiosResponse; + try { + result = await axios.get(url, { responseType: 'text' }); + } catch (e) { + console.error('Genius lyrics request got an error!', e); + return null; + } + + const $ = load(result.data.split('
').join('\n')); + const lyricsDiv = $('div.lyrics'); + + if (lyricsDiv.length > 0) return lyricsDiv.text().trim(); + + const lyricSections = $('div[class^=Lyrics__Container]') + .map((_, e) => $(e).text()) + .toArray() + .join('\n'); + return lyricSections; +} + export async function getSearchResults( params: LyricSearchQuery, ): Promise { @@ -133,9 +155,33 @@ export async function getSearchResults( return orderSearchResults({ params, results: songResults }); } +export async function query( + params: LyricSearchQuery, +): Promise { + const response = await getSongId(params); + if (!response) { + console.error('Could not find the song on Genius!'); + return null; + } + + const lyrics = await getLyricsBySongId(response.id); + if (!lyrics) { + console.error('Could not get lyrics on Genius!'); + return null; + } + + return { + artist: response.artist, + id: response.id, + lyrics, + name: response.name, + source: LyricSource.GENIUS, + }; +} + async function getSongId( params: LyricSearchQuery, -): Promise | null> { +): Promise> { let result: AxiosResponse; try { result = await axios.get(SEARCH_URL, { @@ -162,48 +208,3 @@ async function getSongId( source: LyricSource.GENIUS, }; } - -export async function getLyricsBySongId(url: string): Promise { - let result: AxiosResponse; - try { - result = await axios.get(url, { responseType: 'text' }); - } catch (e) { - console.error('Genius lyrics request got an error!', e); - return null; - } - - const $ = load(result.data.split('
').join('\n')); - const lyricsDiv = $('div.lyrics'); - - if (lyricsDiv.length > 0) return lyricsDiv.text().trim(); - - const lyricSections = $('div[class^=Lyrics__Container]') - .map((_, e) => $(e).text()) - .toArray() - .join('\n'); - return lyricSections; -} - -export async function query( - params: LyricSearchQuery, -): Promise { - const response = await getSongId(params); - if (!response) { - console.error('Could not find the song on Genius!'); - return null; - } - - const lyrics = await getLyricsBySongId(response.id); - if (!lyrics) { - console.error('Could not get lyrics on Genius!'); - return null; - } - - return { - artist: response.artist, - id: response.id, - lyrics, - name: response.name, - source: LyricSource.GENIUS, - }; -} diff --git a/src/main/features/core/lyrics/index.ts b/src/main/features/core/lyrics/index.ts index c3fc781e..a4b72c6d 100644 --- a/src/main/features/core/lyrics/index.ts +++ b/src/main/features/core/lyrics/index.ts @@ -1,36 +1,76 @@ import { ipcMain } from 'electron'; + +import { store } from '../settings/index'; import { + getLyricsBySongId as getGenius, query as queryGenius, getSearchResults as searchGenius, - getLyricsBySongId as getGenius, } from './genius'; import { + getLyricsBySongId as getLrcLib, query as queryLrclib, getSearchResults as searchLrcLib, - getLyricsBySongId as getLrcLib, } from './lrclib'; import { + getLyricsBySongId as getNetease, query as queryNetease, getSearchResults as searchNetease, - getLyricsBySongId as getNetease, } from './netease'; -import { - InternetProviderLyricResponse, - InternetProviderLyricSearchResponse, - LyricSearchQuery, - QueueSong, - LyricGetQuery, - LyricSource, -} from '../../../../renderer/api/types'; -import { store } from '../settings/index'; -type SongFetcher = (params: LyricSearchQuery) => Promise; +export enum LyricSource { + GENIUS = 'Genius', + LRCLIB = 'lrclib.net', + NETEASE = 'NetEase', +} + +export type FullLyricsMetadata = Omit & { + lyrics: LyricsResponse; + remote: boolean; + source: string; +}; + +export type InternetProviderLyricResponse = { + artist: string; + id: string; + lyrics: string; + name: string; + source: LyricSource; +}; + +export type InternetProviderLyricSearchResponse = { + artist: string; + id: string; + name: string; + score?: number; + source: LyricSource; +}; + +export type LyricGetQuery = { + remoteSongId: string; + remoteSource: LyricSource; + song: Song; +}; + +export type LyricOverride = Omit; + +export type LyricSearchQuery = { + album?: string; + artist?: string; + duration?: number; + name?: string; +}; + +export type LyricsResponse = string | SynchronizedLyricsArray; + +export type SynchronizedLyricsArray = Array<[number, string]>; + +type CachedLyrics = Record; +type GetFetcher = (id: string) => Promise; type SearchFetcher = ( params: LyricSearchQuery, ) => Promise; -type GetFetcher = (id: string) => Promise; -type CachedLyrics = Record; +type SongFetcher = (params: LyricSearchQuery) => Promise; const FETCHERS: Record = { [LyricSource.GENIUS]: queryGenius, @@ -54,7 +94,7 @@ const MAX_CACHED_ITEMS = 10; const lyricCache = new Map(); -const getRemoteLyrics = async (song: QueueSong) => { +const getRemoteLyrics = async (song: any) => { const sources = store.get('lyrics', []) as LyricSource[]; const cached = lyricCache.get(song.id); @@ -122,7 +162,7 @@ const searchRemoteLyrics = async (params: LyricSearchQuery) => { return results; }; -const getRemoteLyricsById = async (params: LyricGetQuery): Promise => { +const getRemoteLyricsById = async (params: LyricGetQuery): Promise => { const { remoteSongId, remoteSource } = params; const response = await GET_FETCHERS[remoteSource](remoteSongId); @@ -133,7 +173,7 @@ const getRemoteLyricsById = async (params: LyricGetQuery): Promise { +ipcMain.handle('lyric-by-song', async (_event, song: any) => { const lyric = await getRemoteLyrics(song); return lyric; }); diff --git a/src/main/features/core/lyrics/lrclib.ts b/src/main/features/core/lyrics/lrclib.ts index 3074b73d..d2ac0512 100644 --- a/src/main/features/core/lyrics/lrclib.ts +++ b/src/main/features/core/lyrics/lrclib.ts @@ -1,12 +1,13 @@ // Credits to https://github.com/tranxuanthang/lrcget for API implementation import axios, { AxiosResponse } from 'axios'; -import { orderSearchResults } from './shared'; + import { InternetProviderLyricResponse, InternetProviderLyricSearchResponse, LyricSearchQuery, LyricSource, -} from '../../../../renderer/api/types'; +} from '.'; +import { orderSearchResults } from './shared'; const FETCH_URL = 'https://lrclib.net/api/get'; const SEEARCH_URL = 'https://lrclib.net/api/search'; @@ -29,10 +30,23 @@ export interface LrcLibTrackResponse { isrc: string; lang: string; name: string; - plainLyrics: string | null; + plainLyrics: null | string; releaseDate: string; spotifyId: string; - syncedLyrics: string | null; + syncedLyrics: null | string; +} + +export async function getLyricsBySongId(songId: string): Promise { + let result: AxiosResponse; + + try { + result = await axios.get(`${FETCH_URL}/${songId}`); + } catch (e) { + console.error('LrcLib lyrics request got an error!', e); + return null; + } + + return result.data.syncedLyrics || result.data.plainLyrics || null; } export async function getSearchResults( @@ -69,19 +83,6 @@ export async function getSearchResults( return orderSearchResults({ params, results: songResults }); } -export async function getLyricsBySongId(songId: string): Promise { - let result: AxiosResponse; - - try { - result = await axios.get(`${FETCH_URL}/${songId}`); - } catch (e) { - console.error('LrcLib lyrics request got an error!', e); - return null; - } - - return result.data.syncedLyrics || result.data.plainLyrics || null; -} - export async function query( params: LyricSearchQuery, ): Promise { diff --git a/src/main/features/core/lyrics/netease.ts b/src/main/features/core/lyrics/netease.ts index b97ca3f8..d59f9faf 100644 --- a/src/main/features/core/lyrics/netease.ts +++ b/src/main/features/core/lyrics/netease.ts @@ -1,46 +1,18 @@ import axios, { AxiosResponse } from 'axios'; -import { LyricSource } from '../../../../renderer/api/types'; -import { orderSearchResults } from './shared'; -import type { + +import { InternetProviderLyricResponse, InternetProviderLyricSearchResponse, LyricSearchQuery, -} from '/@/renderer/api/types'; + LyricSource, +} from '.'; +import { orderSearchResults } from './shared'; const SEARCH_URL = 'https://music.163.com/api/search/get'; const LYRICS_URL = 'https://music.163.com/api/song/lyric'; // Adapted from https://github.com/NyaomiDEV/Sunamu/blob/master/src/main/lyricproviders/netease.ts -export interface NetEaseResponse { - code: number; - result: Result; -} - -export interface Result { - hasMore: boolean; - songCount: number; - songs: Song[]; -} - -export interface Song { - album: Album; - alias: string[]; - artists: Artist[]; - copyrightId: number; - duration: number; - fee: number; - ftype: number; - id: number; - mark: number; - mvid: number; - name: string; - rUrl: null; - rtype: number; - status: number; - transNames?: string[]; -} - export interface Album { artist: Artist; copyrightId: number; @@ -67,6 +39,53 @@ export interface Artist { trans: null; } +export interface NetEaseResponse { + code: number; + result: Result; +} + +export interface Result { + hasMore: boolean; + songCount: number; + songs: Song[]; +} + +export interface Song { + album: Album; + alias: string[]; + artists: Artist[]; + copyrightId: number; + duration: number; + fee: number; + ftype: number; + id: number; + mark: number; + mvid: number; + name: string; + rtype: number; + rUrl: null; + status: number; + transNames?: string[]; +} + +export async function getLyricsBySongId(songId: string): Promise { + let result: AxiosResponse; + try { + result = await axios.get(LYRICS_URL, { + params: { + id: songId, + kv: '-1', + lv: '-1', + }, + }); + } catch (e) { + console.error('NetEase lyrics request got an error!', e); + return null; + } + + return result.data.klyric?.lyric || result.data.lrc?.lyric; +} + export async function getSearchResults( params: LyricSearchQuery, ): Promise { @@ -110,38 +129,6 @@ export async function getSearchResults( return orderSearchResults({ params, results: songResults }); } -async function getMatchedLyrics( - params: LyricSearchQuery, -): Promise | null> { - const results = await getSearchResults(params); - - const firstMatch = results?.[0]; - - if (!firstMatch || (firstMatch?.score && firstMatch.score > 0.5)) { - return null; - } - - return firstMatch; -} - -export async function getLyricsBySongId(songId: string): Promise { - let result: AxiosResponse; - try { - result = await axios.get(LYRICS_URL, { - params: { - id: songId, - kv: '-1', - lv: '-1', - }, - }); - } catch (e) { - console.error('NetEase lyrics request got an error!', e); - return null; - } - - return result.data.klyric?.lyric || result.data.lrc?.lyric; -} - export async function query( params: LyricSearchQuery, ): Promise { @@ -165,3 +152,17 @@ export async function query( source: LyricSource.NETEASE, }; } + +async function getMatchedLyrics( + params: LyricSearchQuery, +): Promise> { + const results = await getSearchResults(params); + + const firstMatch = results?.[0]; + + if (!firstMatch || (firstMatch?.score && firstMatch.score > 0.5)) { + return null; + } + + return firstMatch; +} diff --git a/src/main/features/core/lyrics/shared.ts b/src/main/features/core/lyrics/shared.ts index bb926f28..44dc4853 100644 --- a/src/main/features/core/lyrics/shared.ts +++ b/src/main/features/core/lyrics/shared.ts @@ -1,4 +1,5 @@ import Fuse from 'fuse.js'; + import { InternetProviderLyricSearchResponse, LyricSearchQuery, diff --git a/src/main/features/core/player/index.ts b/src/main/features/core/player/index.ts index 67152b65..b0e88582 100644 --- a/src/main/features/core/player/index.ts +++ b/src/main/features/core/player/index.ts @@ -1,10 +1,11 @@ import console from 'console'; -import { rm } from 'fs/promises'; -import { pid } from 'node:process'; import { app, ipcMain } from 'electron'; +import { rm } from 'fs/promises'; import uniq from 'lodash/uniq'; import MpvAPI from 'node-mpv'; -import { getMainWindow, sendToastToRenderer } from '../../../main'; +import { pid } from 'node:process'; + +import { getMainWindow, sendToastToRenderer } from '../../../index'; import { createLog, isWindows } from '../../../utils'; import { store } from '../settings'; @@ -86,7 +87,7 @@ const createMpv = async (data: { extraParameters?: string[]; properties?: Record; }): Promise => { - const { extraParameters, properties, binaryPath } = data; + const { binaryPath, extraParameters, properties } = data; const params = uniq([...DEFAULT_MPV_PARAMETERS(extraParameters), ...(extraParameters || [])]); @@ -174,7 +175,7 @@ ipcMain.on('player-set-properties', async (_event, data: Record) => } else { getMpvInstance()?.setMultipleProperties(data); } - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: `Failed to set properties: ${JSON.stringify(data)}` }, err); } }); @@ -199,7 +200,7 @@ ipcMain.handle( mpvInstance = await createMpv(data); mpvLog({ action: 'Restarted mpv', toast: 'success' }); setAudioPlayerFallback(false); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: 'Failed to restart mpv, falling back to web player' }, err); setAudioPlayerFallback(true); } @@ -215,7 +216,7 @@ ipcMain.handle( }); mpvInstance = await createMpv(data); setAudioPlayerFallback(false); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: 'Failed to initialize mpv, falling back to web player' }, err); setAudioPlayerFallback(true); } @@ -226,7 +227,7 @@ ipcMain.on('player-quit', async () => { try { await getMpvInstance()?.stop(); await quit(); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: 'Failed to quit mpv' }, err); } finally { mpvInstance = null; @@ -245,7 +246,7 @@ ipcMain.handle('player-clean-up', async () => { ipcMain.on('player-start', async () => { try { await getMpvInstance()?.play(); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: 'Failed to start mpv playback' }, err); } }); @@ -254,7 +255,7 @@ ipcMain.on('player-start', async () => { ipcMain.on('player-play', async () => { try { await getMpvInstance()?.play(); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: 'Failed to start mpv playback' }, err); } }); @@ -263,7 +264,7 @@ ipcMain.on('player-play', async () => { ipcMain.on('player-pause', async () => { try { await getMpvInstance()?.pause(); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: 'Failed to pause mpv playback' }, err); } }); @@ -272,7 +273,7 @@ ipcMain.on('player-pause', async () => { ipcMain.on('player-stop', async () => { try { await getMpvInstance()?.stop(); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: 'Failed to stop mpv playback' }, err); } }); @@ -281,7 +282,7 @@ ipcMain.on('player-stop', async () => { ipcMain.on('player-next', async () => { try { await getMpvInstance()?.next(); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: 'Failed to go to next track' }, err); } }); @@ -290,7 +291,7 @@ ipcMain.on('player-next', async () => { ipcMain.on('player-previous', async () => { try { await getMpvInstance()?.prev(); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: 'Failed to go to previous track' }, err); } }); @@ -299,7 +300,7 @@ ipcMain.on('player-previous', async () => { ipcMain.on('player-seek', async (_event, time: number) => { try { await getMpvInstance()?.seek(time); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: `Failed to seek by ${time} seconds` }, err); } }); @@ -308,7 +309,7 @@ ipcMain.on('player-seek', async (_event, time: number) => { ipcMain.on('player-seek-to', async (_event, time: number) => { try { await getMpvInstance()?.goToPosition(time); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: `Failed to seek to ${time} seconds` }, err); } }); @@ -320,7 +321,7 @@ ipcMain.on('player-set-queue', async (_event, current?: string, next?: string, p await getMpvInstance()?.clearPlaylist(); await getMpvInstance()?.pause(); return; - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: `Failed to clear play queue` }, err); } } @@ -344,7 +345,7 @@ ipcMain.on('player-set-queue', async (_event, current?: string, next?: string, p // Only force play if pause is explicitly false await getMpvInstance()?.play(); } - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: `Failed to set play queue` }, err); } }); @@ -365,7 +366,7 @@ ipcMain.on('player-set-queue-next', async (_event, url?: string) => { if (url) { await getMpvInstance()?.load(url, 'append'); } - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: `Failed to set play queue` }, err); } }); @@ -385,7 +386,7 @@ ipcMain.on('player-auto-next', async (_event, url?: string) => { if (url) { await getMpvInstance()?.load(url, 'append'); } - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: `Failed to load next song` }, err); } }); @@ -398,7 +399,7 @@ ipcMain.on('player-volume', async (_event, value: number) => { } await getMpvInstance()?.volume(value); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: `Failed to set volume to ${value}` }, err); } }); @@ -407,7 +408,7 @@ ipcMain.on('player-volume', async (_event, value: number) => { ipcMain.on('player-mute', async (_event, mute: boolean) => { try { await getMpvInstance()?.mute(mute); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: `Failed to set mute status` }, err); } }); @@ -415,7 +416,7 @@ ipcMain.on('player-mute', async (_event, mute: boolean) => { ipcMain.handle('player-get-time', async (): Promise => { try { return getMpvInstance()?.getTimePosition(); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: `Failed to get current time` }, err); return 0; } @@ -442,7 +443,7 @@ app.on('before-quit', async (event) => { event.preventDefault(); await getMpvInstance()?.stop(); await quit(); - } catch (err: NodeMpvError | any) { + } catch (err: any | NodeMpvError) { mpvLog({ action: `Failed to cleanly before-quit` }, err); } finally { mpvState = MpvState.DONE; diff --git a/src/main/features/core/player/media-keys.ts b/src/main/features/core/player/media-keys.ts index b87f9ee1..e919fb29 100644 --- a/src/main/features/core/player/media-keys.ts +++ b/src/main/features/core/player/media-keys.ts @@ -1,5 +1,6 @@ /* eslint-disable promise/always-return */ import { BrowserWindow, globalShortcut, systemPreferences } from 'electron'; + import { isMacOS } from '../../../utils'; import { store } from '../settings'; diff --git a/src/main/features/core/remote/index.ts b/src/main/features/core/remote/index.ts index 0adcf835..9fd0a686 100644 --- a/src/main/features/core/remote/index.ts +++ b/src/main/features/core/remote/index.ts @@ -1,32 +1,22 @@ -import { Stats, promises } from 'fs'; -import { readFile } from 'fs/promises'; -import { IncomingMessage, Server, ServerResponse, createServer } from 'http'; -import { join } from 'path'; -import { deflate, gzip } from 'zlib'; import axios from 'axios'; import { app, ipcMain } from 'electron'; -import { Server as WsServer, WebSocketServer, WebSocket } from 'ws'; -import manifest from './manifest.json'; -import { ClientEvent, ServerEvent } from '../../../../remote/types'; -import { PlayerRepeat, PlayerStatus, SongState } from '../../../../renderer/types'; -import { getMainWindow } from '../../../main'; +import { promises, Stats } from 'fs'; +import { readFile } from 'fs/promises'; +import { createServer, IncomingMessage, Server, ServerResponse } from 'http'; +import { join } from 'path'; +import { WebSocket, WebSocketServer, Server as WsServer } from 'ws'; +import { deflate, gzip } from 'zlib'; + +import { getMainWindow } from '../../..'; import { isLinux } from '../../../utils'; -import type { QueueSong } from '/@/renderer/api/types'; +import manifest from './manifest.json'; let mprisPlayer: any | undefined; if (isLinux()) { - // eslint-disable-next-line global-require mprisPlayer = require('../../linux/mpris').mprisPlayer; } -interface RemoteConfig { - enabled: boolean; - password: string; - port: number; - username: string; -} - interface MimeType { css: string; html: string; @@ -34,6 +24,13 @@ interface MimeType { js: string; } +interface RemoteConfig { + enabled: boolean; + password: string; + port: number; + username: string; +} + declare class StatefulWebSocket extends WebSocket { alive: boolean; @@ -41,7 +38,7 @@ declare class StatefulWebSocket extends WebSocket { } let server: Server | undefined; -let wsServer: WsServer | undefined; +let wsServer: undefined | WsServer; const settings: RemoteConfig = { enabled: false, @@ -54,14 +51,6 @@ type SendData = ServerEvent & { client: StatefulWebSocket; }; -function send({ client, event, data }: SendData): void { - if (client.readyState === WebSocket.OPEN) { - if (client.alive && client.auth) { - client.send(JSON.stringify({ data, event })); - } - } -} - function broadcast(message: ServerEvent): void { if (wsServer) { for (const client of wsServer.clients) { @@ -70,6 +59,14 @@ function broadcast(message: ServerEvent): void { } } +function send({ client, data, event }: SendData): void { + if (client.readyState === WebSocket.OPEN) { + if (client.alive && client.auth) { + client.send(JSON.stringify({ data, event })); + } + } +} + const shutdownServer = () => { if (wsServer) { wsServer.clients.forEach((client) => client.close(4000)); @@ -121,21 +118,17 @@ const getEncoding = (encoding: string | string[]): Encoding => { const cache = new Map>(); -function setOk( - res: ServerResponse, - mtimeMs: number, - extension: keyof MimeType, - encoding: Encoding, - data?: Buffer, -) { - res.statusCode = data ? 200 : 304; +function authorize(req: IncomingMessage): boolean { + if (settings.username || settings.password) { + // https://stackoverflow.com/questions/23616371/basic-http-authentication-with-node-and-express-4 - res.setHeader('Content-Type', MIME_TYPES[extension]); - res.setHeader('ETag', `"${mtimeMs}"`); - res.setHeader('Cache-Control', 'public'); + const authorization = req.headers.authorization?.split(' ')[1] || ''; + const [login, password] = Buffer.from(authorization, 'base64').toString().split(':'); - if (encoding !== 'none') res.setHeader('Content-Encoding', encoding); - res.end(data); + return login === settings.username && password === settings.password; + } + + return true; } async function serveFile( @@ -252,17 +245,21 @@ async function serveFile( return Promise.resolve(); } -function authorize(req: IncomingMessage): boolean { - if (settings.username || settings.password) { - // https://stackoverflow.com/questions/23616371/basic-http-authentication-with-node-and-express-4 +function setOk( + res: ServerResponse, + mtimeMs: number, + extension: keyof MimeType, + encoding: Encoding, + data?: Buffer, +) { + res.statusCode = data ? 200 : 304; - const authorization = req.headers.authorization?.split(' ')[1] || ''; - const [login, password] = Buffer.from(authorization, 'base64').toString().split(':'); + res.setHeader('Content-Type', MIME_TYPES[extension]); + res.setHeader('ETag', `"${mtimeMs}"`); + res.setHeader('Cache-Control', 'public'); - return login === settings.username && password === settings.password; - } - - return true; + if (encoding !== 'none') res.setHeader('Content-Encoding', encoding); + res.end(data); } const enableServer = (config: RemoteConfig): Promise => { @@ -286,28 +283,28 @@ const enableServer = (config: RemoteConfig): Promise => { await serveFile(req, 'index', 'html', res); break; } + case '/credentials': { + res.statusCode = 200; + res.setHeader('Content-Type', 'text/plain'); + res.end(req.headers.authorization); + break; + } case '/favicon.ico': { await serveFile(req, 'favicon', 'ico', res); break; } - case '/remote.css': { - await serveFile(req, 'remote', 'css', res); - break; - } - case '/remote.js': { - await serveFile(req, 'remote', 'js', res); - break; - } case '/manifest.json': { res.statusCode = 200; res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify(manifest)); break; } - case '/credentials': { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/plain'); - res.end(req.headers.authorization); + case '/remote.css': { + await serveFile(req, 'remote', 'css', res); + break; + } + case '/remote.js': { + await serveFile(req, 'remote', 'js', res); break; } default: { @@ -371,6 +368,21 @@ const enableServer = (config: RemoteConfig): Promise => { } switch (event) { + case 'favorite': { + const { favorite, id } = json; + if (id && id === currentState.song?.id) { + getMainWindow()?.webContents.send('request-favorite', { + favorite, + id, + serverId: currentState.song.serverId, + }); + } + break; + } + case 'next': { + getMainWindow()?.webContents.send('renderer-player-next'); + break; + } case 'pause': { getMainWindow()?.webContents.send('renderer-player-pause'); break; @@ -379,10 +391,6 @@ const enableServer = (config: RemoteConfig): Promise => { getMainWindow()?.webContents.send('renderer-player-play'); break; } - case 'next': { - getMainWindow()?.webContents.send('renderer-player-next'); - break; - } case 'previous': { getMainWindow()?.webContents.send('renderer-player-previous'); break; @@ -421,6 +429,17 @@ const enableServer = (config: RemoteConfig): Promise => { break; } + case 'rating': { + const { id, rating } = json; + if (id && id === currentState.song?.id) { + getMainWindow()?.webContents.send('request-rating', { + id, + rating, + serverId: currentState.song.serverId, + }); + } + break; + } case 'repeat': { getMainWindow()?.webContents.send('renderer-player-toggle-repeat'); break; @@ -450,28 +469,6 @@ const enableServer = (config: RemoteConfig): Promise => { } break; } - case 'favorite': { - const { favorite, id } = json; - if (id && id === currentState.song?.id) { - getMainWindow()?.webContents.send('request-favorite', { - favorite, - id, - serverId: currentState.song.serverId, - }); - } - break; - } - case 'rating': { - const { rating, id } = json; - if (id && id === currentState.song?.id) { - getMainWindow()?.webContents.send('request-rating', { - id, - rating, - serverId: currentState.song.serverId, - }); - } - break; - } case 'position': { const { position } = json; if (mprisPlayer) { @@ -631,12 +628,7 @@ ipcMain.on('update-volume', (_event, volume: number) => { if (mprisPlayer) { mprisPlayer.on('loopStatus', (event: string) => { - const repeat = - event === 'Playlist' - ? PlayerRepeat.ALL - : event === 'Track' - ? PlayerRepeat.ONE - : PlayerRepeat.NONE; + const repeat = event === 'Playlist' ? 'all' : event === 'Track' ? 'one' : 'none'; currentState.repeat = repeat; broadcast({ data: repeat, event: 'repeat' }); diff --git a/src/main/features/core/settings/index.ts b/src/main/features/core/settings/index.ts index f829ea58..05cd0ad3 100644 --- a/src/main/features/core/settings/index.ts +++ b/src/main/features/core/settings/index.ts @@ -1,6 +1,7 @@ +import type { TitleTheme } from '/@/renderer/types'; + import { ipcMain, nativeTheme, safeStorage } from 'electron'; import Store from 'electron-store'; -import type { TitleTheme } from '/@/renderer/types'; export const store = new Store(); @@ -12,7 +13,7 @@ ipcMain.on('settings-set', (__event, data: { property: string; value: any }) => store.set(`${data.property}`, data.value); }); -ipcMain.handle('password-get', (_event, server: string): string | null => { +ipcMain.handle('password-get', (_event, server: string): null | string => { if (safeStorage.isEncryptionAvailable()) { const servers = store.get('server') as Record | undefined; diff --git a/src/main/features/index.ts b/src/main/features/index.ts index e64d7d9f..b80182ff 100644 --- a/src/main/features/index.ts +++ b/src/main/features/index.ts @@ -1,4 +1,3 @@ import './core'; -// eslint-disable-next-line import/no-dynamic-require -require(`./${process.platform}`); +// require(`./${process.platform}`) diff --git a/src/main/features/linux/mpris.ts b/src/main/features/linux/mpris.ts index 6d400f8e..f53eeb8d 100644 --- a/src/main/features/linux/mpris.ts +++ b/src/main/features/linux/mpris.ts @@ -1,7 +1,9 @@ import { ipcMain } from 'electron'; import Player from 'mpris-service'; + import { PlayerRepeat, PlayerStatus } from '../../../renderer/types'; import { getMainWindow } from '../../main'; + import { QueueSong } from '/@/renderer/api/types'; const mprisPlayer = Player({ @@ -124,8 +126,8 @@ ipcMain.on('update-playback', (_event, status: PlayerStatus) => { const REPEAT_TO_MPRIS: Record = { [PlayerRepeat.ALL]: 'Playlist', - [PlayerRepeat.ONE]: 'Track', [PlayerRepeat.NONE]: 'None', + [PlayerRepeat.ONE]: 'Track', }; ipcMain.on('update-repeat', (_event, arg: PlayerRepeat) => { diff --git a/src/main/features/win32/index.ts b/src/main/features/win32/index.ts index e69de29b..1b7c8727 100644 --- a/src/main/features/win32/index.ts +++ b/src/main/features/win32/index.ts @@ -0,0 +1,3 @@ +// Dummy file to satisfy the build system + +export {}; diff --git a/src/main/main.ts b/src/main/index.ts similarity index 91% rename from src/main/main.ts rename to src/main/index.ts index 802fc3b9..ed679488 100644 --- a/src/main/main.ts +++ b/src/main/index.ts @@ -1,51 +1,40 @@ -/* eslint global-require: off, no-console: off, promise/always-return: off */ - -/** - * This module executes inside of electron's main process. You can start - * electron renderer process from here and communicate with the other processes - * through IPC. - * - * When running `npm run build` or `npm run build:main`, this file is compiled to - * `./src/main.js` using webpack. This gives us some performance wins. - */ -import { access, constants, readFile, writeFile } from 'fs'; -import path, { join } from 'path'; -import { deflate, inflate } from 'zlib'; +import { electronApp, is, optimizer } from '@electron-toolkit/utils'; +import { constants } from 'buffer'; import { app, BrowserWindow, - shell, - ipcMain, + BrowserWindowConstructorOptions, globalShortcut, - Tray, + ipcMain, Menu, nativeImage, nativeTheme, - BrowserWindowConstructorOptions, - protocol, net, + protocol, Rectangle, screen, + shell, + Tray, } from 'electron'; import electronLocalShortcut from 'electron-localshortcut'; import log from 'electron-log/main'; import { autoUpdater } from 'electron-updater'; +import { access, readFile, writeFile } from 'fs'; +import path, { join } from 'path'; +import { deflate, inflate } from 'zlib'; + import { disableMediaKeys, enableMediaKeys } from './features/core/player/media-keys'; -import { store } from './features/core/settings/index'; +import { store } from './features/core/settings'; import MenuBuilder from './menu'; import { + autoUpdaterLogInterface, + createLog, hotkeyToElectronAccelerator, isLinux, isMacOS, isWindows, - resolveHtmlPath, - createLog, - autoUpdaterLogInterface, } from './utils'; import './features'; -import type { TitleTheme } from '/@/renderer/types'; - -declare module 'node-mpv'; export default class AppUpdater { constructor() { @@ -72,7 +61,7 @@ if (isLinux() && !process.argv.some((a) => a.startsWith('--password-store='))) { } let mainWindow: BrowserWindow | null = null; -let tray: Tray | null = null; +let tray: null | Tray = null; let exitFromTray = false; let forceQuit = false; @@ -117,7 +106,7 @@ export const sendToastToRenderer = ({ type, }: { message: string; - type: 'success' | 'error' | 'warning' | 'info'; + type: 'error' | 'info' | 'success' | 'warning'; }) => { getMainWindow()?.webContents.send('toast-from-main', { message, @@ -208,7 +197,7 @@ const createTray = () => { tray.setContextMenu(contextMenu); }; -const createWindow = async (first = true) => { +async function createWindow(first = true): Promise { if (isDevelopment) { await installExtensions().catch(console.log); } @@ -233,6 +222,7 @@ const createWindow = async (first = true) => { }, }; + // Create the browser window. mainWindow = new BrowserWindow({ autoHideMenuBar: true, frame: false, @@ -247,9 +237,8 @@ const createWindow = async (first = true) => { contextIsolation: true, devTools: true, nodeIntegration: true, - preload: app.isPackaged - ? path.join(__dirname, 'preload.js') - : path.join(__dirname, '../../.erb/dll/preload.js'), + preload: join(__dirname, '../preload/index.js'), + sandbox: false, webSecurity: !store.get('ignore_cors'), }, width: 1440, @@ -374,11 +363,11 @@ const createWindow = async (first = true) => { enableMediaKeys(mainWindow); } - mainWindow.loadURL(resolveHtmlPath('index.html')); - const startWindowMinimized = store.get('window_start_minimized', false) as boolean; mainWindow.on('ready-to-show', () => { + // mainWindow.show() + if (!mainWindow) { throw new Error('"mainWindow" is not defined'); } @@ -404,7 +393,7 @@ const createWindow = async (first = true) => { mainWindow = null; }); - let saved = false; + const saved = false; mainWindow.on('close', (event) => { store.set('bounds', mainWindow?.getNormalBounds()); @@ -484,13 +473,25 @@ const createWindow = async (first = true) => { }); if (store.get('disable_auto_updates') !== true) { - // eslint-disable-next-line new AppUpdater(); } const theme = store.get('theme') as TitleTheme | undefined; nativeTheme.themeSource = theme || 'dark'; -}; + + mainWindow.webContents.setWindowOpenHandler((details) => { + shell.openExternal(details.url); + return { action: 'deny' }; + }); + + // HMR for renderer base on electron-vite cli. + // Load the remote URL for development or the local html file for production. + if (is.dev && process.env['ELECTRON_RENDERER_URL']) { + mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']); + } else { + mainWindow.loadFile(join(__dirname, '../renderer/index.html')); + } +} app.commandLine.appendSwitch('disable-features', 'HardwareMediaKeyHandling,MediaSessionService'); @@ -519,6 +520,8 @@ enum BindingActions { } const HOTKEY_ACTIONS: Record void> = { + [BindingActions.GLOBAL_SEARCH]: () => {}, + [BindingActions.LOCAL_SEARCH]: () => {}, [BindingActions.MUTE]: () => getMainWindow()?.webContents.send('renderer-player-volume-mute'), [BindingActions.NEXT]: () => getMainWindow()?.webContents.send('renderer-player-next'), [BindingActions.PAUSE]: () => getMainWindow()?.webContents.send('renderer-player-pause'), @@ -533,16 +536,14 @@ const HOTKEY_ACTIONS: Record void> = { [BindingActions.SKIP_FORWARD]: () => getMainWindow()?.webContents.send('renderer-player-skip-forward'), [BindingActions.STOP]: () => getMainWindow()?.webContents.send('renderer-player-stop'), + [BindingActions.TOGGLE_FULLSCREEN_PLAYER]: () => {}, + [BindingActions.TOGGLE_QUEUE]: () => {}, [BindingActions.TOGGLE_REPEAT]: () => getMainWindow()?.webContents.send('renderer-player-toggle-repeat'), - [BindingActions.VOLUME_UP]: () => - getMainWindow()?.webContents.send('renderer-player-volume-up'), [BindingActions.VOLUME_DOWN]: () => getMainWindow()?.webContents.send('renderer-player-volume-down'), - [BindingActions.GLOBAL_SEARCH]: () => {}, - [BindingActions.LOCAL_SEARCH]: () => {}, - [BindingActions.TOGGLE_QUEUE]: () => {}, - [BindingActions.TOGGLE_FULLSCREEN_PLAYER]: () => {}, + [BindingActions.VOLUME_UP]: () => + getMainWindow()?.webContents.send('renderer-player-volume-up'), }; ipcMain.on( @@ -585,7 +586,7 @@ ipcMain.on( _event, data: { message: string; - type: 'debug' | 'verbose' | 'success' | 'error' | 'warning' | 'info'; + type: 'debug' | 'error' | 'info' | 'success' | 'verbose' | 'warning'; }, ) => { createLog(data); @@ -597,7 +598,6 @@ app.on('window-all-closed', () => { // Respect the OSX convention of having the application in memory even // after all windows have been closed if (isMacOS()) { - ipcMain.removeHandler('window-clear-cache'); mainWindow = null; } else { app.quit(); @@ -632,22 +632,22 @@ if (!singleInstance) { app.whenReady() .then(() => { - protocol.handle('feishin', async (request) => { - const filePath = `file://${request.url.slice('feishin://'.length)}`; - const response = await net.fetch(filePath); - const contentType = response.headers.get('content-type'); + // protocol.handle('feishin', async (request) => { + // const filePath = `file://${request.url.slice('feishin://'.length)}` + // const response = await net.fetch(filePath) + // const contentType = response.headers.get('content-type') - if (!contentType || !FONT_HEADERS.includes(contentType)) { - getMainWindow()?.webContents.send('custom-font-error', filePath); + // if (!contentType || !FONT_HEADERS.includes(contentType)) { + // getMainWindow()?.webContents.send('custom-font-error', filePath) - return new Response(null, { - status: 403, - statusText: 'Forbidden', - }); - } + // return new Response(null, { + // status: 403, + // statusText: 'Forbidden' + // }) + // } - return response; - }); + // return response + // }) createWindow(); if (store.get('window_enable_tray', true)) { diff --git a/src/main/menu.ts b/src/main/menu.ts index c8c5f77b..f3f12cf0 100644 --- a/src/main/menu.ts +++ b/src/main/menu.ts @@ -1,4 +1,4 @@ -import { app, Menu, shell, BrowserWindow, MenuItemConstructorOptions } from 'electron'; +import { app, BrowserWindow, Menu, MenuItemConstructorOptions, shell } from 'electron'; interface DarwinMenuItemConstructorOptions extends MenuItemConstructorOptions { selector?: string; @@ -12,37 +12,6 @@ export default class MenuBuilder { this.mainWindow = mainWindow; } - buildMenu(): Menu { - if (process.env.NODE_ENV === 'development' || process.env.DEBUG_PROD === 'true') { - this.setupDevelopmentEnvironment(); - } - - const template = - process.platform === 'darwin' - ? this.buildDarwinTemplate() - : this.buildDefaultTemplate(); - - const menu = Menu.buildFromTemplate(template); - Menu.setApplicationMenu(menu); - - return menu; - } - - setupDevelopmentEnvironment(): void { - this.mainWindow.webContents.on('context-menu', (_, props) => { - const { x, y } = props; - - Menu.buildFromTemplate([ - { - click: () => { - this.mainWindow.webContents.inspectElement(x, y); - }, - label: 'Inspect element', - }, - ]).popup({ window: this.mainWindow }); - }); - } - buildDarwinTemplate(): MenuItemConstructorOptions[] { const subMenuAbout: DarwinMenuItemConstructorOptions = { label: 'Electron', @@ -276,4 +245,35 @@ export default class MenuBuilder { return templateDefault; } + + buildMenu(): Menu { + if (process.env.NODE_ENV === 'development' || process.env.DEBUG_PROD === 'true') { + this.setupDevelopmentEnvironment(); + } + + const template = + process.platform === 'darwin' + ? this.buildDarwinTemplate() + : this.buildDefaultTemplate(); + + const menu = Menu.buildFromTemplate(template); + Menu.setApplicationMenu(menu); + + return menu; + } + + setupDevelopmentEnvironment(): void { + this.mainWindow.webContents.on('context-menu', (_, props) => { + const { x, y } = props; + + Menu.buildFromTemplate([ + { + click: () => { + this.mainWindow.webContents.inspectElement(x, y); + }, + label: 'Inspect element', + }, + ]).popup({ window: this.mainWindow }); + }); + } } diff --git a/src/main/preload.ts b/src/main/preload.ts deleted file mode 100644 index d2183785..00000000 --- a/src/main/preload.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { contextBridge } from 'electron'; -import { browser } from './preload/browser'; -import { discordRpc } from './preload/discord-rpc'; -import { ipc } from './preload/ipc'; -import { localSettings } from './preload/local-settings'; -import { lyrics } from './preload/lyrics'; -import { mpris } from './preload/mpris'; -import { mpvPlayer, mpvPlayerListener } from './preload/mpv-player'; -import { remote } from './preload/remote'; -import { utils } from './preload/utils'; - -contextBridge.exposeInMainWorld('electron', { - browser, - discordRpc, - ipc, - localSettings, - lyrics, - mpris, - mpvPlayer, - mpvPlayerListener, - remote, - utils, -}); diff --git a/src/main/utils.ts b/src/main/utils.ts index aa3196eb..fe5ea808 100644 --- a/src/main/utils.ts +++ b/src/main/utils.ts @@ -1,8 +1,7 @@ -/* eslint import/prefer-default-export: off, import/no-mutable-exports: off */ +import log from 'electron-log/main'; import path from 'path'; import process from 'process'; import { URL } from 'url'; -import log from 'electron-log/main'; export let resolveHtmlPath: (htmlFileName: string) => string; @@ -76,7 +75,7 @@ const logColor = { export const createLog = (data: { message: string; - type: 'debug' | 'verbose' | 'success' | 'error' | 'warning' | 'info'; + type: 'debug' | 'error' | 'info' | 'success' | 'verbose' | 'warning'; }) => { logMethod[data.type](`%c${data.message}`, `color: ${logColor[data.type]}`); }; diff --git a/src/main/preload/browser.ts b/src/preload/browser.ts similarity index 100% rename from src/main/preload/browser.ts rename to src/preload/browser.ts diff --git a/src/main/preload/discord-rpc.ts b/src/preload/discord-rpc.ts similarity index 100% rename from src/main/preload/discord-rpc.ts rename to src/preload/discord-rpc.ts diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts new file mode 100644 index 00000000..caecdb7b --- /dev/null +++ b/src/preload/index.d.ts @@ -0,0 +1,10 @@ +import { ElectronAPI } from '@electron-toolkit/preload'; + +import { PreloadApi } from './index'; + +declare global { + interface Window { + api: PreloadApi; + electron: ElectronAPI; + } +} diff --git a/src/preload/index.ts b/src/preload/index.ts new file mode 100644 index 00000000..7115f7b3 --- /dev/null +++ b/src/preload/index.ts @@ -0,0 +1,45 @@ +import { electronAPI } from '@electron-toolkit/preload'; +import { contextBridge } from 'electron'; + +import { browser } from './browser'; +import { discordRpc } from './discord-rpc'; +import { ipc } from './ipc'; +import { localSettings } from './local-settings'; +import { lyrics } from './lyrics'; +import { mpris } from './mpris'; +import { mpvPlayer, mpvPlayerListener } from './mpv-player'; +import { remote } from './remote'; +import { utils } from './utils'; + +// Custom APIs for renderer +const api = { + browser, + discordRpc, + ipc, + localSettings, + lyrics, + mpris, + mpvPlayer, + mpvPlayerListener, + remote, + utils, +}; + +export type PreloadApi = typeof api; + +// Use `contextBridge` APIs to expose Electron APIs to +// renderer only if context isolation is enabled, otherwise +// just add to the DOM global. +if (process.contextIsolated) { + try { + contextBridge.exposeInMainWorld('electron', electronAPI); + contextBridge.exposeInMainWorld('api', api); + } catch (error) { + console.error(error); + } +} else { + // @ts-ignore (define in dts) + window.electron = electronAPI; + // @ts-ignore (define in dts) + window.api = api; +} diff --git a/src/main/preload/ipc.ts b/src/preload/ipc.ts similarity index 100% rename from src/main/preload/ipc.ts rename to src/preload/ipc.ts diff --git a/src/main/preload/local-settings.ts b/src/preload/local-settings.ts similarity index 77% rename from src/main/preload/local-settings.ts rename to src/preload/local-settings.ts index 5f20e574..986f5203 100644 --- a/src/main/preload/local-settings.ts +++ b/src/preload/local-settings.ts @@ -1,12 +1,11 @@ -import { IpcRendererEvent, ipcRenderer, webFrame } from 'electron'; +import { ipcRenderer, IpcRendererEvent, webFrame } from 'electron'; import Store from 'electron-store'; -import { toServerType, type TitleTheme } from '/@/renderer/types'; const store = new Store(); const set = ( property: string, - value: string | Record | boolean | string[] | undefined, + value: boolean | Record | string | string[] | undefined, ) => { if (value === undefined) { store.delete(property); @@ -32,7 +31,7 @@ const disableMediaKeys = () => { ipcRenderer.send('global-media-keys-disable'); }; -const passwordGet = async (server: string): Promise => { +const passwordGet = async (server: string): Promise => { return ipcRenderer.invoke('password-get', server); }; @@ -56,6 +55,19 @@ const themeSet = (theme: TitleTheme): void => { ipcRenderer.send('theme-set', theme); }; +export const toServerType = (value?: string): null | string => { + switch (value?.toLowerCase()) { + case 'jellyfin': + return 'jellyfin'; + case 'navidrome': + return 'navidrome'; + case 'subsonic': + return 'subsonic'; + default: + return null; + } +}; + const SERVER_TYPE = toServerType(process.env.SERVER_TYPE); const env = { diff --git a/src/main/preload/lyrics.ts b/src/preload/lyrics.ts similarity index 94% rename from src/main/preload/lyrics.ts rename to src/preload/lyrics.ts index 1b6694cc..3c0cbb75 100644 --- a/src/main/preload/lyrics.ts +++ b/src/preload/lyrics.ts @@ -1,11 +1,11 @@ import { ipcRenderer } from 'electron'; + import { InternetProviderLyricSearchResponse, LyricGetQuery, LyricSearchQuery, LyricSource, - QueueSong, -} from '/@/renderer/api/types'; +} from '../main/features/core/lyrics'; const getRemoteLyricsBySong = (song: QueueSong) => { const result = ipcRenderer.invoke('lyric-by-song', song); diff --git a/src/main/preload/mpris.ts b/src/preload/mpris.ts similarity index 88% rename from src/main/preload/mpris.ts rename to src/preload/mpris.ts index 9777201e..0edb90c3 100644 --- a/src/main/preload/mpris.ts +++ b/src/preload/mpris.ts @@ -1,5 +1,4 @@ -import { IpcRendererEvent, ipcRenderer } from 'electron'; -import type { PlayerRepeat } from '/@/renderer/types'; +import { ipcRenderer, IpcRendererEvent } from 'electron'; const updatePosition = (timeSec: number) => { ipcRenderer.send('mpris-update-position', timeSec); diff --git a/src/main/preload/mpv-player.ts b/src/preload/mpv-player.ts similarity index 99% rename from src/main/preload/mpv-player.ts rename to src/preload/mpv-player.ts index e0be6fd9..8370db3c 100644 --- a/src/main/preload/mpv-player.ts +++ b/src/preload/mpv-player.ts @@ -1,5 +1,4 @@ import { ipcRenderer, IpcRendererEvent } from 'electron'; -import { PlayerData } from '/@/renderer/store'; const initialize = (data: { extraParameters?: string[]; properties?: Record }) => { return ipcRenderer.invoke('player-initialize', data); @@ -187,8 +186,8 @@ export const mpvPlayerListener = { rendererNext, rendererPause, rendererPlay, - rendererPlayPause, rendererPlayerFallback, + rendererPlayPause, rendererPrevious, rendererQuit, rendererSkipBackward, diff --git a/src/main/preload/remote.ts b/src/preload/remote.ts similarity index 89% rename from src/main/preload/remote.ts rename to src/preload/remote.ts index a589be68..95f3849f 100644 --- a/src/main/preload/remote.ts +++ b/src/preload/remote.ts @@ -1,6 +1,4 @@ -import { IpcRendererEvent, ipcRenderer } from 'electron'; -import { QueueSong } from '/@/renderer/api/types'; -import { PlayerStatus } from '/@/renderer/types'; +import { ipcRenderer, IpcRendererEvent } from 'electron'; const requestFavorite = ( cb: ( @@ -29,12 +27,12 @@ const requestVolume = (cb: (event: IpcRendererEvent, data: { volume: number }) = ipcRenderer.on('request-volume', cb); }; -const setRemoteEnabled = (enabled: boolean): Promise => { +const setRemoteEnabled = (enabled: boolean): Promise => { const result = ipcRenderer.invoke('remote-enable', enabled); return result; }; -const setRemotePort = (port: number): Promise => { +const setRemotePort = (port: number): Promise => { const result = ipcRenderer.invoke('remote-port', port); return result; }; @@ -56,7 +54,7 @@ const updateSetting = ( port: number, username: string, password: string, -): Promise => { +): Promise => { return ipcRenderer.invoke('remote-settings', enabled, port, username, password); }; diff --git a/src/main/preload/utils.ts b/src/preload/utils.ts similarity index 79% rename from src/main/preload/utils.ts rename to src/preload/utils.ts index bd90f956..17fcfb80 100644 --- a/src/main/preload/utils.ts +++ b/src/preload/utils.ts @@ -1,6 +1,6 @@ -import { IpcRendererEvent, ipcRenderer } from 'electron'; -import { isMacOS, isWindows, isLinux } from '../utils'; -import { PlayerState } from '/@/renderer/store'; +import { ipcRenderer, IpcRendererEvent } from 'electron'; + +import { isLinux, isMacOS, isWindows } from '../main/utils'; const saveQueue = (data: Record) => { ipcRenderer.send('player-save-queue', data); @@ -18,7 +18,7 @@ const onSaveQueue = (cb: (event: IpcRendererEvent) => void) => { ipcRenderer.on('renderer-save-queue', cb); }; -const onRestoreQueue = (cb: (event: IpcRendererEvent, data: Partial) => void) => { +const onRestoreQueue = (cb: (event: IpcRendererEvent, data: Partial) => void) => { ipcRenderer.on('renderer-restore-queue', cb); }; @@ -29,7 +29,7 @@ const playerErrorListener = (cb: (event: IpcRendererEvent, data: { code: number const mainMessageListener = ( cb: ( event: IpcRendererEvent, - data: { message: string; type: 'success' | 'error' | 'warning' | 'info' }, + data: { message: string; type: 'error' | 'info' | 'success' | 'warning' }, ) => void, ) => { ipcRenderer.on('toast-from-main', cb); @@ -40,7 +40,7 @@ const logger = ( event: IpcRendererEvent, data: { message: string; - type: 'debug' | 'verbose' | 'error' | 'warning' | 'info'; + type: 'debug' | 'error' | 'info' | 'verbose' | 'warning'; }, ) => void, ) => { diff --git a/src/renderer/api/controller.ts b/src/renderer/api/controller.ts index 0eb9958e..c42281f9 100644 --- a/src/renderer/api/controller.ts +++ b/src/renderer/api/controller.ts @@ -1,10 +1,11 @@ -import { useAuthStore } from '/@/renderer/store'; -import { toast } from '/@/renderer/components/toast/index'; -import type { ServerType, ControllerEndpoint, AuthenticationResponse } from '/@/renderer/api/types'; +import type { AuthenticationResponse, ControllerEndpoint, ServerType } from '/@/renderer/api/types'; + +import i18n from '/@/i18n/i18n'; +import { JellyfinController } from '/@/renderer/api/jellyfin/jellyfin-controller'; import { NavidromeController } from '/@/renderer/api/navidrome/navidrome-controller'; import { SubsonicController } from '/@/renderer/api/subsonic/subsonic-controller'; -import { JellyfinController } from '/@/renderer/api/jellyfin/jellyfin-controller'; -import i18n from '/@/i18n/i18n'; +import { toast } from '/@/renderer/components/toast/index'; +import { useAuthStore } from '/@/renderer/store'; type ApiController = { jellyfin: ControllerEndpoint; diff --git a/src/renderer/api/jellyfin.types.ts b/src/renderer/api/jellyfin.types.ts index f22febba..216011db 100644 --- a/src/renderer/api/jellyfin.types.ts +++ b/src/renderer/api/jellyfin.types.ts @@ -1,97 +1,56 @@ -export type JFBasePaginatedResponse = { - StartIndex: number; - TotalRecordCount: number; -}; - -export interface JFMusicFolderListResponse extends JFBasePaginatedResponse { - Items: JFMusicFolder[]; +export enum JFAlbumArtistListSort { + ALBUM = 'Album,SortName', + DURATION = 'Runtime,AlbumArtist,Album,SortName', + NAME = 'SortName,Name', + RANDOM = 'Random,SortName', + RECENTLY_ADDED = 'DateCreated,SortName', + RELEASE_DATE = 'PremiereDate,AlbumArtist,Album,SortName', } -export type JFMusicFolderList = JFMusicFolder[]; - -export interface JFGenreListResponse extends JFBasePaginatedResponse { - Items: JFGenre[]; +export enum JFAlbumListSort { + ALBUM_ARTIST = 'AlbumArtist,SortName', + COMMUNITY_RATING = 'CommunityRating,SortName', + CRITIC_RATING = 'CriticRating,SortName', + NAME = 'SortName', + PLAY_COUNT = 'PlayCount', + RANDOM = 'Random,SortName', + RECENTLY_ADDED = 'DateCreated,SortName', + RELEASE_DATE = 'ProductionYear,PremiereDate,SortName', } -export type JFGenreList = JFGenreListResponse; +export enum JFArtistListSort { + ALBUM = 'Album,SortName', + DURATION = 'Runtime,AlbumArtist,Album,SortName', + NAME = 'SortName,Name', + RANDOM = 'Random,SortName', + RECENTLY_ADDED = 'DateCreated,SortName', + RELEASE_DATE = 'PremiereDate,AlbumArtist,Album,SortName', +} + +export enum JFCollectionType { + MUSIC = 'music', + PLAYLISTS = 'playlists', +} + +export enum JFExternalType { + MUSICBRAINZ = 'MusicBrainz', + THEAUDIODB = 'TheAudioDb', +} export enum JFGenreListSort { NAME = 'SortName', } -export type JFAlbumArtistDetailResponse = JFAlbumArtist; - -export type JFAlbumArtistDetail = JFAlbumArtistDetailResponse; - -export interface JFAlbumArtistListResponse extends JFBasePaginatedResponse { - Items: JFAlbumArtist[]; +export enum JFImageType { + LOGO = 'Logo', + PRIMARY = 'Primary', } -export type JFAlbumArtistList = { - items: JFAlbumArtist[]; - startIndex: number; - totalRecordCount: number; -}; - -export interface JFArtistListResponse extends JFBasePaginatedResponse { - Items: JFAlbumArtist[]; +export enum JFItemType { + AUDIO = 'Audio', + MUSICALBUM = 'MusicAlbum', } -export type JFArtistList = JFArtistListResponse; - -export interface JFAlbumListResponse extends JFBasePaginatedResponse { - Items: JFAlbum[]; -} - -export type JFAlbumList = { - items: JFAlbum[]; - startIndex: number; - totalRecordCount: number; -}; - -export type JFAlbumDetailResponse = JFAlbum; - -export type JFAlbumDetail = JFAlbum & { songs?: JFSong[] }; - -export interface JFSongListResponse extends JFBasePaginatedResponse { - Items: JFSong[]; -} - -export type JFSongList = { - items: JFSong[]; - startIndex: number; - totalRecordCount: number; -}; - -export type JFAddToPlaylistResponse = { - added: number; -}; - -export type JFAddToPlaylistParams = { - ids: string[]; - userId: string; -}; - -export type JFAddToPlaylist = null; - -export type JFRemoveFromPlaylistResponse = null; - -export type JFRemoveFromPlaylistParams = { - entryIds: string[]; -}; - -export type JFRemoveFromPlaylist = null; - -export interface JFPlaylistListResponse extends JFBasePaginatedResponse { - Items: JFPlaylist[]; -} - -export type JFPlaylistList = { - items: JFPlaylist[]; - startIndex: number; - totalRecordCount: number; -}; - export enum JFPlaylistListSort { ALBUM_ARTIST = 'AlbumArtist,SortName', DURATION = 'Runtime', @@ -100,124 +59,34 @@ export enum JFPlaylistListSort { SONG_COUNT = 'ChildCount', } -export type JFPlaylistDetailResponse = JFPlaylist; +export enum JFSongListSort { + ALBUM = 'Album,SortName', + ALBUM_ARTIST = 'AlbumArtist,Album,SortName', + ARTIST = 'Artist,Album,SortName', + COMMUNITY_RATING = 'CommunityRating,SortName', + DURATION = 'Runtime,AlbumArtist,Album,SortName', + NAME = 'Name', + PLAY_COUNT = 'PlayCount,SortName', + RANDOM = 'Random,SortName', + RECENTLY_ADDED = 'DateCreated,SortName', + RECENTLY_PLAYED = 'DatePlayed,SortName', + RELEASE_DATE = 'PremiereDate,AlbumArtist,Album,SortName', +} -export type JFPlaylistDetail = JFPlaylist & { songs?: JFSong[] }; +export enum JFSortOrder { + ASC = 'Ascending', + DESC = 'Descending', +} -export type JFPlaylist = { - BackdropImageTags: string[]; - ChannelId: null; - ChildCount?: number; - DateCreated: string; - GenreItems: GenreItem[]; - Genres: string[]; - Id: string; - ImageBlurHashes: ImageBlurHashes; - ImageTags: ImageTags; - IsFolder: boolean; - LocationType: string; - MediaType: string; - Name: string; - Overview?: string; - RunTimeTicks: number; - ServerId: string; - Type: string; - UserData: UserData; +export type JFAddToPlaylist = null; + +export type JFAddToPlaylistParams = { + ids: string[]; + userId: string; }; -export type JFRequestParams = { - albumArtistIds?: string; - artistIds?: string; - enableImageTypes?: string; - enableTotalRecordCount?: boolean; - enableUserData?: boolean; - excludeItemTypes?: string; - fields?: string; - imageTypeLimit?: number; - includeItemTypes?: string; - isFavorite?: boolean; - limit?: number; - parentId?: string; - recursive?: boolean; - searchTerm?: string; - sortBy?: string; - sortOrder?: 'Ascending' | 'Descending'; - startIndex?: number; - userId?: string; -}; - -export type JFMusicFolder = { - BackdropImageTags: string[]; - ChannelId: null; - CollectionType: string; - Id: string; - ImageBlurHashes: ImageBlurHashes; - ImageTags: ImageTags; - IsFolder: boolean; - LocationType: string; - Name: string; - ServerId: string; - Type: string; - UserData: UserData; -}; - -export type JFGenre = { - BackdropImageTags: any[]; - ChannelId: null; - Id: string; - ImageBlurHashes: any; - ImageTags: ImageTags; - LocationType: string; - Name: string; - ServerId: string; - Type: string; -}; - -export type JFAlbumArtist = { - BackdropImageTags: string[]; - ChannelId: null; - DateCreated: string; - ExternalUrls: ExternalURL[]; - GenreItems: GenreItem[]; - Genres: string[]; - Id: string; - ImageBlurHashes: any; - ImageTags: ImageTags; - LocationType: string; - Name: string; - Overview?: string; - RunTimeTicks: number; - ServerId: string; - Type: string; - UserData: { - IsFavorite: boolean; - Key: string; - PlayCount: number; - PlaybackPositionTicks: number; - Played: boolean; - }; -} & { - similarArtists: { - items: JFAlbumArtist[]; - }; -}; - -export type JFArtist = { - BackdropImageTags: string[]; - ChannelId: null; - DateCreated: string; - ExternalUrls: ExternalURL[]; - GenreItems: GenreItem[]; - Genres: string[]; - Id: string; - ImageBlurHashes: any; - ImageTags: string[]; - LocationType: string; - Name: string; - Overview?: string; - RunTimeTicks: number; - ServerId: string; - Type: string; +export type JFAddToPlaylistResponse = { + added: number; }; export type JFAlbum = { @@ -251,6 +120,244 @@ export type JFAlbum = { songs?: JFSong[]; }; +export type JFAlbumArtist = { + BackdropImageTags: string[]; + ChannelId: null; + DateCreated: string; + ExternalUrls: ExternalURL[]; + GenreItems: GenreItem[]; + Genres: string[]; + Id: string; + ImageBlurHashes: any; + ImageTags: ImageTags; + LocationType: string; + Name: string; + Overview?: string; + RunTimeTicks: number; + ServerId: string; + Type: string; + UserData: { + IsFavorite: boolean; + Key: string; + PlaybackPositionTicks: number; + PlayCount: number; + Played: boolean; + }; +} & { + similarArtists: { + items: JFAlbumArtist[]; + }; +}; + +export type JFAlbumArtistDetail = JFAlbumArtistDetailResponse; + +export type JFAlbumArtistDetailResponse = JFAlbumArtist; + +export type JFAlbumArtistList = { + items: JFAlbumArtist[]; + startIndex: number; + totalRecordCount: number; +}; + +export type JFAlbumArtistListParams = JFBaseParams & + JFPaginationParams & { + filters?: string; + genres?: string; + sortBy?: JFAlbumArtistListSort; + years?: string; + }; + +export interface JFAlbumArtistListResponse extends JFBasePaginatedResponse { + Items: JFAlbumArtist[]; +} + +export type JFAlbumDetail = JFAlbum & { songs?: JFSong[] }; + +export type JFAlbumDetailResponse = JFAlbum; + +export type JFAlbumList = { + items: JFAlbum[]; + startIndex: number; + totalRecordCount: number; +}; + +export type JFAlbumListParams = JFBaseParams & + JFPaginationParams & { + albumArtistIds?: string; + artistIds?: string; + filters?: string; + genreIds?: string; + genres?: string; + includeItemTypes: 'MusicAlbum'; + isFavorite?: boolean; + searchTerm?: string; + sortBy?: JFAlbumListSort; + tags?: string; + years?: string; + }; + +export interface JFAlbumListResponse extends JFBasePaginatedResponse { + Items: JFAlbum[]; +} + +export type JFArtist = { + BackdropImageTags: string[]; + ChannelId: null; + DateCreated: string; + ExternalUrls: ExternalURL[]; + GenreItems: GenreItem[]; + Genres: string[]; + Id: string; + ImageBlurHashes: any; + ImageTags: string[]; + LocationType: string; + Name: string; + Overview?: string; + RunTimeTicks: number; + ServerId: string; + Type: string; +}; + +export type JFArtistList = JFArtistListResponse; + +export type JFArtistListParams = JFBaseParams & + JFPaginationParams & { + filters?: string; + genres?: string; + sortBy?: JFArtistListSort; + years?: string; + }; + +export interface JFArtistListResponse extends JFBasePaginatedResponse { + Items: JFAlbumArtist[]; +} + +export interface JFAuthenticate { + AccessToken: string; + ServerId: string; + SessionInfo: SessionInfo; + User: User; +} + +export type JFBasePaginatedResponse = { + StartIndex: number; + TotalRecordCount: number; +}; + +export type JFCreatePlaylist = JFCreatePlaylistResponse; + +export type JFCreatePlaylistResponse = { + Id: string; +}; + +export type JFGenericItem = { + Id: string; + Name: string; +}; + +export type JFGenre = { + BackdropImageTags: any[]; + ChannelId: null; + Id: string; + ImageBlurHashes: any; + ImageTags: ImageTags; + LocationType: string; + Name: string; + ServerId: string; + Type: string; +}; + +export type JFGenreList = JFGenreListResponse; + +export interface JFGenreListResponse extends JFBasePaginatedResponse { + Items: JFGenre[]; +} + +export type JFMusicFolder = { + BackdropImageTags: string[]; + ChannelId: null; + CollectionType: string; + Id: string; + ImageBlurHashes: ImageBlurHashes; + ImageTags: ImageTags; + IsFolder: boolean; + LocationType: string; + Name: string; + ServerId: string; + Type: string; + UserData: UserData; +}; + +export type JFMusicFolderList = JFMusicFolder[]; + +export interface JFMusicFolderListResponse extends JFBasePaginatedResponse { + Items: JFMusicFolder[]; +} + +export type JFPlaylist = { + BackdropImageTags: string[]; + ChannelId: null; + ChildCount?: number; + DateCreated: string; + GenreItems: GenreItem[]; + Genres: string[]; + Id: string; + ImageBlurHashes: ImageBlurHashes; + ImageTags: ImageTags; + IsFolder: boolean; + LocationType: string; + MediaType: string; + Name: string; + Overview?: string; + RunTimeTicks: number; + ServerId: string; + Type: string; + UserData: UserData; +}; + +export type JFPlaylistDetail = JFPlaylist & { songs?: JFSong[] }; + +export type JFPlaylistDetailResponse = JFPlaylist; + +export type JFPlaylistList = { + items: JFPlaylist[]; + startIndex: number; + totalRecordCount: number; +}; + +export interface JFPlaylistListResponse extends JFBasePaginatedResponse { + Items: JFPlaylist[]; +} + +export type JFRemoveFromPlaylist = null; + +export type JFRemoveFromPlaylistParams = { + entryIds: string[]; +}; + +export type JFRemoveFromPlaylistResponse = null; + +export type JFRequestParams = { + albumArtistIds?: string; + artistIds?: string; + enableImageTypes?: string; + enableTotalRecordCount?: boolean; + enableUserData?: boolean; + excludeItemTypes?: string; + fields?: string; + imageTypeLimit?: number; + includeItemTypes?: string; + isFavorite?: boolean; + limit?: number; + parentId?: string; + recursive?: boolean; + searchTerm?: string; + sortBy?: string; + sortOrder?: 'Ascending' | 'Descending'; + startIndex?: number; + userId?: string; +}; + export type JFSong = { Album: string; AlbumArtist: string; @@ -285,23 +392,56 @@ export type JFSong = { UserData?: UserData; }; -type ImageBlurHashes = { - Backdrop?: any; - Logo?: any; - Primary?: any; +export type JFSongList = { + items: JFSong[]; + startIndex: number; + totalRecordCount: number; }; -type ImageTags = { - Logo?: string; - Primary?: string; +export type JFSongListParams = JFBaseParams & + JFPaginationParams & { + albumArtistIds?: string; + albumIds?: string; + artistIds?: string; + contributingArtistIds?: string; + filters?: string; + genreIds?: string; + genres?: string; + ids?: string; + includeItemTypes: 'Audio'; + searchTerm?: string; + sortBy?: JFSongListSort; + years?: string; + }; + +export interface JFSongListResponse extends JFBasePaginatedResponse { + Items: JFSong[]; +} + +type Capabilities = { + PlayableMediaTypes: any[]; + SupportedCommands: any[]; + SupportsContentUploading: boolean; + SupportsMediaControl: boolean; + SupportsPersistentIdentifier: boolean; + SupportsSync: boolean; }; -type UserData = { - IsFavorite: boolean; - Key: string; - PlayCount: number; - PlaybackPositionTicks: number; - Played: boolean; +type Configuration = { + DisplayCollectionsView: boolean; + DisplayMissingEpisodes: boolean; + EnableLocalPassword: boolean; + EnableNextEpisodeAutoPlay: boolean; + GroupedFolders: any[]; + HidePlayedInLatest: boolean; + LatestItemsExcludes: any[]; + MyMediaExcludes: any[]; + OrderedViews: any[]; + PlayDefaultAudioTrack: boolean; + RememberAudioSelections: boolean; + RememberSubtitleSelections: boolean; + SubtitleLanguagePreference: string; + SubtitleMode: string; }; type ExternalURL = { @@ -314,9 +454,32 @@ type GenreItem = { Name: string; }; -export type JFGenericItem = { - Id: string; - Name: string; +type ImageBlurHashes = { + Backdrop?: any; + Logo?: any; + Primary?: any; +}; + +type ImageTags = { + Logo?: string; + Primary?: string; +}; + +type JFBaseParams = { + enableImageTypes?: JFImageType[]; + fields?: string; + imageTypeLimit?: number; + parentId?: string; + recursive?: boolean; + searchTerm?: string; + userId?: string; +}; + +type JFPaginationParams = { + limit?: number; + nameStartsWith?: string; + sortOrder?: JFSortOrder; + startIndex?: number; }; type MediaSources = { @@ -380,32 +543,53 @@ type MediaStream = { Width?: number; }; -export enum JFExternalType { - MUSICBRAINZ = 'MusicBrainz', - THEAUDIODB = 'TheAudioDb', -} +type PlayState = { + CanSeek: boolean; + IsMuted: boolean; + IsPaused: boolean; + RepeatMode: string; +}; -export enum JFImageType { - LOGO = 'Logo', - PRIMARY = 'Primary', -} - -export enum JFItemType { - AUDIO = 'Audio', - MUSICALBUM = 'MusicAlbum', -} - -export enum JFCollectionType { - MUSIC = 'music', - PLAYLISTS = 'playlists', -} - -export interface JFAuthenticate { - AccessToken: string; - ServerId: string; - SessionInfo: SessionInfo; - User: User; -} +type Policy = { + AccessSchedules: any[]; + AuthenticationProviderId: string; + BlockedChannels: any[]; + BlockedMediaFolders: any[]; + BlockedTags: any[]; + BlockUnratedItems: any[]; + EnableAllChannels: boolean; + EnableAllDevices: boolean; + EnableAllFolders: boolean; + EnableAudioPlaybackTranscoding: boolean; + EnableContentDeletion: boolean; + EnableContentDeletionFromFolders: any[]; + EnableContentDownloading: boolean; + EnabledChannels: any[]; + EnabledDevices: any[]; + EnabledFolders: any[]; + EnableLiveTvAccess: boolean; + EnableLiveTvManagement: boolean; + EnableMediaConversion: boolean; + EnableMediaPlayback: boolean; + EnablePlaybackRemuxing: boolean; + EnablePublicSharing: boolean; + EnableRemoteAccess: boolean; + EnableRemoteControlOfOtherUsers: boolean; + EnableSharedDeviceControl: boolean; + EnableSyncTranscoding: boolean; + EnableUserPreferenceAccess: boolean; + EnableVideoPlaybackTranscoding: boolean; + ForceRemoteSourceTranscoding: boolean; + InvalidLoginAttemptCount: number; + IsAdministrator: boolean; + IsDisabled: boolean; + IsHidden: boolean; + LoginAttemptsBeforeLockout: number; + MaxActiveSessions: number; + PasswordResetProviderId: string; + RemoteClientBitrateLimit: number; + SyncPlayAccess: string; +}; type SessionInfo = { AdditionalUsers: any[]; @@ -421,8 +605,8 @@ type SessionInfo = { LastPlaybackCheckIn: string; NowPlayingQueue: any[]; NowPlayingQueueFullItems: any[]; - PlayState: PlayState; PlayableMediaTypes: any[]; + PlayState: PlayState; RemoteEndPoint: string; ServerId: string; SupportedCommands: any[]; @@ -432,22 +616,6 @@ type SessionInfo = { UserName: string; }; -type Capabilities = { - PlayableMediaTypes: any[]; - SupportedCommands: any[]; - SupportsContentUploading: boolean; - SupportsMediaControl: boolean; - SupportsPersistentIdentifier: boolean; - SupportsSync: boolean; -}; - -type PlayState = { - CanSeek: boolean; - IsMuted: boolean; - IsPaused: boolean; - RepeatMode: string; -}; - type User = { Configuration: Configuration; EnableAutoLogin: boolean; @@ -462,178 +630,10 @@ type User = { ServerId: string; }; -type Configuration = { - DisplayCollectionsView: boolean; - DisplayMissingEpisodes: boolean; - EnableLocalPassword: boolean; - EnableNextEpisodeAutoPlay: boolean; - GroupedFolders: any[]; - HidePlayedInLatest: boolean; - LatestItemsExcludes: any[]; - MyMediaExcludes: any[]; - OrderedViews: any[]; - PlayDefaultAudioTrack: boolean; - RememberAudioSelections: boolean; - RememberSubtitleSelections: boolean; - SubtitleLanguagePreference: string; - SubtitleMode: string; +type UserData = { + IsFavorite: boolean; + Key: string; + PlaybackPositionTicks: number; + PlayCount: number; + Played: boolean; }; - -type Policy = { - AccessSchedules: any[]; - AuthenticationProviderId: string; - BlockUnratedItems: any[]; - BlockedChannels: any[]; - BlockedMediaFolders: any[]; - BlockedTags: any[]; - EnableAllChannels: boolean; - EnableAllDevices: boolean; - EnableAllFolders: boolean; - EnableAudioPlaybackTranscoding: boolean; - EnableContentDeletion: boolean; - EnableContentDeletionFromFolders: any[]; - EnableContentDownloading: boolean; - EnableLiveTvAccess: boolean; - EnableLiveTvManagement: boolean; - EnableMediaConversion: boolean; - EnableMediaPlayback: boolean; - EnablePlaybackRemuxing: boolean; - EnablePublicSharing: boolean; - EnableRemoteAccess: boolean; - EnableRemoteControlOfOtherUsers: boolean; - EnableSharedDeviceControl: boolean; - EnableSyncTranscoding: boolean; - EnableUserPreferenceAccess: boolean; - EnableVideoPlaybackTranscoding: boolean; - EnabledChannels: any[]; - EnabledDevices: any[]; - EnabledFolders: any[]; - ForceRemoteSourceTranscoding: boolean; - InvalidLoginAttemptCount: number; - IsAdministrator: boolean; - IsDisabled: boolean; - IsHidden: boolean; - LoginAttemptsBeforeLockout: number; - MaxActiveSessions: number; - PasswordResetProviderId: string; - RemoteClientBitrateLimit: number; - SyncPlayAccess: string; -}; - -type JFBaseParams = { - enableImageTypes?: JFImageType[]; - fields?: string; - imageTypeLimit?: number; - parentId?: string; - recursive?: boolean; - searchTerm?: string; - userId?: string; -}; - -type JFPaginationParams = { - limit?: number; - nameStartsWith?: string; - sortOrder?: JFSortOrder; - startIndex?: number; -}; - -export enum JFSortOrder { - ASC = 'Ascending', - DESC = 'Descending', -} - -export enum JFAlbumListSort { - ALBUM_ARTIST = 'AlbumArtist,SortName', - COMMUNITY_RATING = 'CommunityRating,SortName', - CRITIC_RATING = 'CriticRating,SortName', - NAME = 'SortName', - PLAY_COUNT = 'PlayCount', - RANDOM = 'Random,SortName', - RECENTLY_ADDED = 'DateCreated,SortName', - RELEASE_DATE = 'ProductionYear,PremiereDate,SortName', -} - -export type JFAlbumListParams = { - albumArtistIds?: string; - artistIds?: string; - filters?: string; - genreIds?: string; - genres?: string; - includeItemTypes: 'MusicAlbum'; - isFavorite?: boolean; - searchTerm?: string; - sortBy?: JFAlbumListSort; - tags?: string; - years?: string; -} & JFBaseParams & - JFPaginationParams; - -export enum JFSongListSort { - ALBUM = 'Album,SortName', - ALBUM_ARTIST = 'AlbumArtist,Album,SortName', - ARTIST = 'Artist,Album,SortName', - COMMUNITY_RATING = 'CommunityRating,SortName', - DURATION = 'Runtime,AlbumArtist,Album,SortName', - NAME = 'Name', - PLAY_COUNT = 'PlayCount,SortName', - RANDOM = 'Random,SortName', - RECENTLY_ADDED = 'DateCreated,SortName', - RECENTLY_PLAYED = 'DatePlayed,SortName', - RELEASE_DATE = 'PremiereDate,AlbumArtist,Album,SortName', -} - -export type JFSongListParams = { - albumArtistIds?: string; - albumIds?: string; - artistIds?: string; - contributingArtistIds?: string; - filters?: string; - genreIds?: string; - genres?: string; - ids?: string; - includeItemTypes: 'Audio'; - searchTerm?: string; - sortBy?: JFSongListSort; - years?: string; -} & JFBaseParams & - JFPaginationParams; - -export enum JFAlbumArtistListSort { - ALBUM = 'Album,SortName', - DURATION = 'Runtime,AlbumArtist,Album,SortName', - NAME = 'SortName,Name', - RANDOM = 'Random,SortName', - RECENTLY_ADDED = 'DateCreated,SortName', - RELEASE_DATE = 'PremiereDate,AlbumArtist,Album,SortName', -} - -export type JFAlbumArtistListParams = { - filters?: string; - genres?: string; - sortBy?: JFAlbumArtistListSort; - years?: string; -} & JFBaseParams & - JFPaginationParams; - -export enum JFArtistListSort { - ALBUM = 'Album,SortName', - DURATION = 'Runtime,AlbumArtist,Album,SortName', - NAME = 'SortName,Name', - RANDOM = 'Random,SortName', - RECENTLY_ADDED = 'DateCreated,SortName', - RELEASE_DATE = 'PremiereDate,AlbumArtist,Album,SortName', -} - -export type JFArtistListParams = { - filters?: string; - genres?: string; - sortBy?: JFArtistListSort; - years?: string; -} & JFBaseParams & - JFPaginationParams; - -export type JFCreatePlaylistResponse = { - Id: string; -}; - -export type JFCreatePlaylist = JFCreatePlaylistResponse; diff --git a/src/renderer/api/jellyfin/jellyfin-api.ts b/src/renderer/api/jellyfin/jellyfin-api.ts index acb50b51..82fc61cc 100644 --- a/src/renderer/api/jellyfin/jellyfin-api.ts +++ b/src/renderer/api/jellyfin/jellyfin-api.ts @@ -1,15 +1,17 @@ -import { useAuthStore } from '/@/renderer/store'; -import { jfType } from '/@/renderer/api/jellyfin/jellyfin-types'; import { initClient, initContract } from '@ts-rest/core'; import axios, { AxiosError, AxiosResponse, isAxiosError, Method } from 'axios'; -import qs from 'qs'; -import { ServerListItem } from '/@/renderer/api/types'; import omitBy from 'lodash/omitBy'; +import qs from 'qs'; import { z } from 'zod'; -import { authenticationFailure, getClientType } from '/@/renderer/api/utils'; -import i18n from '/@/i18n/i18n'; + import packageJson from '../../../../package.json'; +import i18n from '/@/i18n/i18n'; +import { jfType } from '/@/renderer/api/jellyfin/jellyfin-types'; +import { ServerListItem } from '/@/renderer/api/types'; +import { authenticationFailure, getClientType } from '/@/renderer/api/utils'; +import { useAuthStore } from '/@/renderer/store'; + const c = initContract(); export const contract = c.router({ @@ -356,14 +358,14 @@ export const createAuthHeader = (): string => { }; export const jfApiClient = (args: { - server: ServerListItem | null; + server: null | ServerListItem; signal?: AbortSignal; url?: string; }) => { - const { server, url, signal } = args; + const { server, signal, url } = args; return initClient(contract, { - api: async ({ path, method, headers, body }) => { + api: async ({ body, headers, method, path }) => { let baseUrl: string | undefined; let token: string | undefined; @@ -395,7 +397,7 @@ export const jfApiClient = (args: { headers: result.headers as any, status: result.status, }; - } catch (e: Error | AxiosError | any) { + } catch (e: any | AxiosError | Error) { if (isAxiosError(e)) { if (e.code === 'ERR_NETWORK') { throw new Error( diff --git a/src/renderer/api/jellyfin/jellyfin-controller.ts b/src/renderer/api/jellyfin/jellyfin-controller.ts index be1136cd..564c6cba 100644 --- a/src/renderer/api/jellyfin/jellyfin-controller.ts +++ b/src/renderer/api/jellyfin/jellyfin-controller.ts @@ -1,23 +1,25 @@ +import chunk from 'lodash/chunk'; +import { z } from 'zod'; + +import { jfNormalize } from './jellyfin-normalize'; + +import { ServerFeature } from '/@/renderer/api/features-types'; +import { JFSongListSort, JFSortOrder } from '/@/renderer/api/jellyfin.types'; +import { jfApiClient } from '/@/renderer/api/jellyfin/jellyfin-api'; +import { jfType } from '/@/renderer/api/jellyfin/jellyfin-types'; import { albumArtistListSortMap, - sortOrderMap, albumListSortMap, - songListSortMap, - playlistListSortMap, - genreListSortMap, - Song, - Played, ControllerEndpoint, + genreListSortMap, LibraryItem, + Played, + playlistListSortMap, + Song, + songListSortMap, + sortOrderMap, } from '/@/renderer/api/types'; -import { jfApiClient } from '/@/renderer/api/jellyfin/jellyfin-api'; -import { jfNormalize } from './jellyfin-normalize'; -import { jfType } from '/@/renderer/api/jellyfin/jellyfin-types'; -import { z } from 'zod'; -import { JFSongListSort, JFSortOrder } from '/@/renderer/api/jellyfin.types'; -import { ServerFeature } from '/@/renderer/api/features-types'; -import { VersionInfo, getFeatures, hasFeature } from '/@/renderer/api/utils'; -import chunk from 'lodash/chunk'; +import { getFeatures, hasFeature, VersionInfo } from '/@/renderer/api/utils'; const formatCommaDelimitedString = (value: string[]) => { return value.join(','); @@ -41,7 +43,7 @@ const VERSION_INFO: VersionInfo = [ export const JellyfinController: ControllerEndpoint = { addToPlaylist: async (args) => { - const { query, body, apiClientProps } = args; + const { apiClientProps, body, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -89,7 +91,7 @@ export const JellyfinController: ControllerEndpoint = { }; }, createFavorite: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -108,7 +110,7 @@ export const JellyfinController: ControllerEndpoint = { return null; }, createPlaylist: async (args) => { - const { body, apiClientProps } = args; + const { apiClientProps, body } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -132,7 +134,7 @@ export const JellyfinController: ControllerEndpoint = { }; }, deleteFavorite: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -151,7 +153,7 @@ export const JellyfinController: ControllerEndpoint = { return null; }, deletePlaylist: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await jfApiClient(apiClientProps).deletePlaylist({ params: { @@ -166,7 +168,7 @@ export const JellyfinController: ControllerEndpoint = { return null; }, getAlbumArtistDetail: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -201,7 +203,7 @@ export const JellyfinController: ControllerEndpoint = { ); }, getAlbumArtistList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await jfApiClient(apiClientProps).getAlbumArtistList({ query: { @@ -236,7 +238,7 @@ export const JellyfinController: ControllerEndpoint = { query: { ...query, limit: 1, startIndex: 0 }, }).then((result) => result!.totalRecordCount!), getAlbumDetail: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -274,7 +276,7 @@ export const JellyfinController: ControllerEndpoint = { ); }, getAlbumList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -334,7 +336,7 @@ export const JellyfinController: ControllerEndpoint = { query: { ...query, limit: 1, startIndex: 0 }, }).then((result) => result!.totalRecordCount!), getArtistList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await jfApiClient(apiClientProps).getArtistList({ query: { @@ -404,7 +406,7 @@ export const JellyfinController: ControllerEndpoint = { }; }, getLyrics: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -453,7 +455,7 @@ export const JellyfinController: ControllerEndpoint = { }; }, getPlaylistDetail: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -477,7 +479,7 @@ export const JellyfinController: ControllerEndpoint = { return jfNormalize.playlist(res.body, apiClientProps.server); }, getPlaylistList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -515,7 +517,7 @@ export const JellyfinController: ControllerEndpoint = { query: { ...query, limit: 1, startIndex: 0 }, }).then((result) => result!.totalRecordCount!), getPlaylistSongList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -547,7 +549,7 @@ export const JellyfinController: ControllerEndpoint = { }; }, getRandomSongList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -668,7 +670,7 @@ export const JellyfinController: ControllerEndpoint = { }, []); }, getSongDetail: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await jfApiClient(apiClientProps).getSongDetail({ params: { @@ -684,7 +686,7 @@ export const JellyfinController: ControllerEndpoint = { return jfNormalize.song(res.body, apiClientProps.server, ''); }, getSongList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -864,7 +866,7 @@ export const JellyfinController: ControllerEndpoint = { }; }, getTranscodingUrl: (args) => { - const { base, format, bitrate } = args.query; + const { base, bitrate, format } = args.query; let url = base.replace('transcodingProtocol=hls', 'transcodingProtocol=http'); if (format) { url = url.replace('audioCodec=aac', `audioCodec=${format}`); @@ -892,7 +894,7 @@ export const JellyfinController: ControllerEndpoint = { } }, removeFromPlaylist: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const chunks = chunk(query.songId, MAX_ITEMS_PER_PLAYLIST_ADD); @@ -914,7 +916,7 @@ export const JellyfinController: ControllerEndpoint = { return null; }, scrobble: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const position = query.position && Math.round(query.position); @@ -978,7 +980,7 @@ export const JellyfinController: ControllerEndpoint = { return null; }, search: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); @@ -1071,7 +1073,7 @@ export const JellyfinController: ControllerEndpoint = { }; }, updatePlaylist: async (args) => { - const { query, body, apiClientProps } = args; + const { apiClientProps, body, query } = args; if (!apiClientProps.server?.userId) { throw new Error('No userId found'); diff --git a/src/renderer/api/jellyfin/jellyfin-normalize.ts b/src/renderer/api/jellyfin/jellyfin-normalize.ts index 5bfd7b25..f61d86bb 100644 --- a/src/renderer/api/jellyfin/jellyfin-normalize.ts +++ b/src/renderer/api/jellyfin/jellyfin-normalize.ts @@ -1,18 +1,19 @@ import { nanoid } from 'nanoid'; import { z } from 'zod'; -import { JFAlbum, JFPlaylist, JFMusicFolder, JFGenre } from '/@/renderer/api/jellyfin.types'; + +import { JFAlbum, JFGenre, JFMusicFolder, JFPlaylist } from '/@/renderer/api/jellyfin.types'; import { jfType } from '/@/renderer/api/jellyfin/jellyfin-types'; import { - Song, - LibraryItem, Album, AlbumArtist, - Playlist, - MusicFolder, Genre, + LibraryItem, + MusicFolder, + Playlist, + RelatedArtist, ServerListItem, ServerType, - RelatedArtist, + Song, } from '/@/renderer/api/types'; const getStreamUrl = (args: { @@ -21,9 +22,9 @@ const getStreamUrl = (args: { eTag?: string; id: string; mediaSourceId?: string; - server: ServerListItem | null; + server: null | ServerListItem; }) => { - const { id, server, deviceId } = args; + const { deviceId, id, server } = args; return ( `${server?.url}/audio` + @@ -122,9 +123,9 @@ const getPlaylistCoverArtUrl = (args: { baseUrl: string; item: JFPlaylist; size: ); }; -type AlbumOrSong = z.infer | z.infer; +type AlbumOrSong = z.infer | z.infer; -const getPeople = (item: AlbumOrSong): Record | null => { +const getPeople = (item: AlbumOrSong): null | Record => { if (item.People) { const participants: Record = {}; @@ -151,7 +152,7 @@ const getPeople = (item: AlbumOrSong): Record | null => return null; }; -const getTags = (item: AlbumOrSong): Record | null => { +const getTags = (item: AlbumOrSong): null | Record => { if (item.Tags) { const tags: Record = {}; for (const tag of item.Tags) { @@ -166,7 +167,7 @@ const getTags = (item: AlbumOrSong): Record | null => { const normalizeSong = ( item: z.infer, - server: ServerListItem | null, + server: null | ServerListItem, deviceId: string, imageSize?: number, ): Song => { @@ -252,7 +253,7 @@ const normalizeSong = ( const normalizeAlbum = ( item: z.infer, - server: ServerListItem | null, + server: null | ServerListItem, imageSize?: number, ): Album => { return { @@ -312,7 +313,7 @@ const normalizeAlbumArtist = ( item: z.infer & { similarArtists?: z.infer; }, - server: ServerListItem | null, + server: null | ServerListItem, imageSize?: number, ): AlbumArtist => { const similarArtists = @@ -361,7 +362,7 @@ const normalizeAlbumArtist = ( const normalizePlaylist = ( item: z.infer, - server: ServerListItem | null, + server: null | ServerListItem, imageSize?: number, ): Playlist => { const imageUrl = getPlaylistCoverArtUrl({ @@ -445,7 +446,7 @@ const getGenreCoverArtUrl = (args: { ); }; -const normalizeGenre = (item: JFGenre, server: ServerListItem | null): Genre => { +const normalizeGenre = (item: JFGenre, server: null | ServerListItem): Genre => { return { albumCount: undefined, id: item.Id, diff --git a/src/renderer/api/jellyfin/jellyfin-types.ts b/src/renderer/api/jellyfin/jellyfin-types.ts index 4b3e80f4..074a71ba 100644 --- a/src/renderer/api/jellyfin/jellyfin-types.ts +++ b/src/renderer/api/jellyfin/jellyfin-types.ts @@ -95,8 +95,8 @@ const imageBlurHashes = z.object({ const userData = z.object({ IsFavorite: z.boolean(), Key: z.string(), - PlayCount: z.number(), PlaybackPositionTicks: z.number(), + PlayCount: z.number(), Played: z.boolean(), }); @@ -187,13 +187,13 @@ const sessionInfo = z.object({ LastPlaybackCheckIn: z.string(), NowPlayingQueue: z.array(z.any()), NowPlayingQueueFullItems: z.array(z.any()), + PlayableMediaTypes: z.array(z.any()), PlayState: z.object({ CanSeek: z.boolean(), IsMuted: z.boolean(), IsPaused: z.boolean(), RepeatMode: z.string(), }), - PlayableMediaTypes: z.array(z.any()), RemoteEndPoint: z.string(), ServerId: z.string(), SupportedCommands: z.array(z.any()), @@ -223,10 +223,10 @@ const configuration = z.object({ const policy = z.object({ AccessSchedules: z.array(z.any()), AuthenticationProviderId: z.string(), - BlockUnratedItems: z.array(z.any()), BlockedChannels: z.array(z.any()), BlockedMediaFolders: z.array(z.any()), BlockedTags: z.array(z.any()), + BlockUnratedItems: z.array(z.any()), EnableAllChannels: z.boolean(), EnableAllDevices: z.boolean(), EnableAllFolders: z.boolean(), @@ -234,6 +234,9 @@ const policy = z.object({ EnableContentDeletion: z.boolean(), EnableContentDeletionFromFolders: z.array(z.any()), EnableContentDownloading: z.boolean(), + EnabledChannels: z.array(z.any()), + EnabledDevices: z.array(z.any()), + EnabledFolders: z.array(z.any()), EnableLiveTvAccess: z.boolean(), EnableLiveTvManagement: z.boolean(), EnableMediaConversion: z.boolean(), @@ -246,9 +249,6 @@ const policy = z.object({ EnableSyncTranscoding: z.boolean(), EnableUserPreferenceAccess: z.boolean(), EnableVideoPlaybackTranscoding: z.boolean(), - EnabledChannels: z.array(z.any()), - EnabledDevices: z.array(z.any()), - EnabledFolders: z.array(z.any()), ForceRemoteSourceTranscoding: z.boolean(), InvalidLoginAttemptCount: z.number(), IsAdministrator: z.boolean(), @@ -414,8 +414,8 @@ const song = z.object({ ImageTags: imageTags, IndexNumber: z.number(), IsFolder: z.boolean(), - LUFS: z.number().optional(), LocationType: z.string(), + LUFS: z.number().optional(), MediaSources: z.array(mediaSources), MediaType: z.string(), Name: z.string(), @@ -654,8 +654,8 @@ const favorite = z.object({ Key: z.string(), LastPlayedDate: z.string(), Likes: z.boolean(), - PlayCount: z.number(), PlaybackPositionTicks: z.number(), + PlayCount: z.number(), Played: z.boolean(), PlayedPercentage: z.number(), Rating: z.number(), diff --git a/src/renderer/api/navidrome.types.ts b/src/renderer/api/navidrome.types.ts index 81eef3a0..15473f6a 100644 --- a/src/renderer/api/navidrome.types.ts +++ b/src/renderer/api/navidrome.types.ts @@ -1,30 +1,77 @@ import { SSArtistInfo } from '/@/renderer/api/subsonic.types'; -export type NDAuthenticate = { - id: string; - isAdmin: boolean; - name: string; - subsonicSalt: string; - subsonicToken: string; - token: string; - username: string; +export enum NDAlbumArtistListSort { + ALBUM_COUNT = 'albumCount', + FAVORITED = 'starred_at', + NAME = 'name', + PLAY_COUNT = 'playCount', + RATING = 'rating', + SONG_COUNT = 'songCount', +} + +export enum NDAlbumListSort { + ALBUM_ARTIST = 'album_artist', + ARTIST = 'artist', + DURATION = 'duration', + NAME = 'name', + PLAY_COUNT = 'play_count', + PLAY_DATE = 'play_date', + RANDOM = 'random', + RATING = 'rating', + RECENTLY_ADDED = 'recently_added', + SONG_COUNT = 'songCount', + STARRED = 'starred_at', + YEAR = 'max_year', +} + +export enum NDGenreListSort { + NAME = 'name', +} + +export enum NDPlaylistListSort { + DURATION = 'duration', + NAME = 'name', + OWNER = 'owner_name', + PUBLIC = 'public', + SONG_COUNT = 'songCount', + UPDATED_AT = 'updatedAt', +} + +export enum NDSongListSort { + ALBUM = 'album', + ALBUM_ARTIST = 'order_album_artist_name', + ALBUM_SONGS = 'album', + ARTIST = 'artist', + BPM = 'bpm', + CHANNELS = 'channels', + COMMENT = 'comment', + DURATION = 'duration', + FAVORITED = 'starred_at', + GENRE = 'genre', + ID = 'id', + PLAY_COUNT = 'playCount', + PLAY_DATE = 'playDate', + RANDOM = 'random', + RATING = 'rating', + RECENTLY_ADDED = 'createdAt', + TITLE = 'title', + TRACK = 'track', + YEAR = 'year', +} + +export enum NDSortOrder { + ASC = 'ASC', + DESC = 'DESC', +} + +export type NDAddToPlaylist = null; + +export type NDAddToPlaylistBody = { + ids: string[]; }; -export type NDUser = { - createdAt: string; - email: string; - id: string; - isAdmin: boolean; - lastAccessAt: string; - lastLoginAt: string; - name: string; - updatedAt: string; - userName: string; -}; - -export type NDGenre = { - id: string; - name: string; +export type NDAddToPlaylistResponse = { + added: number; }; export type NDAlbum = { @@ -61,6 +108,193 @@ export type NDAlbum = { updatedAt: string; } & { songs?: NDSong[] }; +export type NDAlbumArtist = { + albumCount: number; + biography: string; + externalInfoUpdatedAt: string; + externalUrl: string; + fullText: string; + genres: NDGenre[]; + id: string; + largeImageUrl?: string; + mbzArtistId: string; + mediumImageUrl?: string; + name: string; + orderArtistName: string; + playCount: number; + playDate: string; + rating: number; + size: number; + smallImageUrl?: string; + songCount: number; + starred: boolean; + starredAt: string; +} & { + similarArtists?: SSArtistInfo['similarArtist']; +}; + +export type NDAlbumArtistDetail = NDAlbumArtist; + +export type NDAlbumArtistDetailResponse = NDAlbumArtist; + +export type NDAlbumArtistList = { + items: NDAlbumArtist[]; + startIndex: number; + totalRecordCount: number; +}; + +export type NDAlbumArtistListParams = NDOrder & + NDPagination & { + _sort?: NDAlbumArtistListSort; + genre_id?: string; + starred?: boolean; + }; + +export type NDAlbumDetail = NDAlbum & { songs?: NDSongListResponse }; + +export type NDAlbumDetailResponse = NDAlbum; + +export type NDAlbumList = { + items: NDAlbum[]; + startIndex: number; + totalRecordCount: number; +}; + +export type NDAlbumListParams = NDOrder & + NDPagination & { + _sort?: NDAlbumListSort; + album_id?: string; + artist_id?: string; + compilation?: boolean; + genre_id?: string; + has_rating?: boolean; + id?: string; + name?: string; + recently_played?: boolean; + starred?: boolean; + year?: number; + }; + +export type NDAlbumListResponse = NDAlbum[]; + +export type NDArtistListResponse = NDAlbumArtist[]; + +export type NDAuthenticate = { + id: string; + isAdmin: boolean; + name: string; + subsonicSalt: string; + subsonicToken: string; + token: string; + username: string; +}; + +export type NDAuthenticationResponse = NDAuthenticate; + +export type NDCreatePlaylist = NDCreatePlaylistResponse; + +export type NDCreatePlaylistParams = { + comment?: string; + name: string; + public?: boolean; + rules?: null | Record; +}; + +export type NDCreatePlaylistResponse = { + id: string; +}; + +export type NDDeletePlaylist = NDDeletePlaylistResponse; + +export type NDDeletePlaylistParams = { + id: string; +}; + +export type NDDeletePlaylistResponse = null; + +export type NDGenre = { + id: string; + name: string; +}; + +export type NDGenreList = NDGenre[]; + +export type NDGenreListParams = NDOrder & + NDPagination & { + _sort?: NDGenreListSort; + id?: string; + }; + +export type NDGenreListResponse = NDGenre[]; + +export type NDOrder = { + _order?: NDSortOrder; +}; + +export type NDPagination = { + _end?: number; + _start?: number; +}; + +export type NDPlaylist = { + comment: string; + createdAt: string; + duration: number; + evaluatedAt: string; + id: string; + name: string; + ownerId: string; + ownerName: string; + path: string; + public: boolean; + rules: null | Record; + size: number; + songCount: number; + sync: boolean; + updatedAt: string; +}; + +export type NDPlaylistDetail = NDPlaylist; + +export type NDPlaylistDetailResponse = NDPlaylist; + +export type NDPlaylistList = { + items: NDPlaylist[]; + startIndex: number; + totalRecordCount: number; +}; + +export type NDPlaylistListParams = NDOrder & + NDPagination & { + _sort?: NDPlaylistListSort; + owner_id?: string; + }; + +export type NDPlaylistListResponse = NDPlaylist[]; + +export type NDPlaylistSong = NDSong & { + mediaFileId: string; + playlistId: string; +}; + +export type NDPlaylistSongList = { + items: NDPlaylistSong[]; + startIndex: number; + totalRecordCount: number; +}; + +export type NDPlaylistSongListResponse = NDPlaylistSong[]; + +export type NDRemoveFromPlaylist = null; + +export type NDRemoveFromPlaylistParams = { + id: string[]; +}; + +export type NDRemoveFromPlaylistResponse = { + ids: string[]; +}; + export type NDSong = { album: string; albumArtist: string; @@ -107,275 +341,41 @@ export type NDSong = { year: number; }; -export type NDAlbumArtist = { - albumCount: number; - biography: string; - externalInfoUpdatedAt: string; - externalUrl: string; - fullText: string; - genres: NDGenre[]; - id: string; - largeImageUrl?: string; - mbzArtistId: string; - mediumImageUrl?: string; - name: string; - orderArtistName: string; - playCount: number; - playDate: string; - rating: number; - size: number; - smallImageUrl?: string; - songCount: number; - starred: boolean; - starredAt: string; -} & { - similarArtists?: SSArtistInfo['similarArtist']; -}; - -export type NDAuthenticationResponse = NDAuthenticate; - -export type NDAlbumArtistList = { - items: NDAlbumArtist[]; - startIndex: number; - totalRecordCount: number; -}; - -export type NDAlbumArtistDetail = NDAlbumArtist; - -export type NDAlbumArtistDetailResponse = NDAlbumArtist; - -export type NDGenreList = NDGenre[]; - -export type NDGenreListResponse = NDGenre[]; - -export type NDAlbumDetailResponse = NDAlbum; - -export type NDAlbumDetail = NDAlbum & { songs?: NDSongListResponse }; - -export type NDAlbumListResponse = NDAlbum[]; - -export type NDAlbumList = { - items: NDAlbum[]; - startIndex: number; - totalRecordCount: number; -}; - export type NDSongDetail = NDSong; export type NDSongDetailResponse = NDSong; -export type NDSongListResponse = NDSong[]; - export type NDSongList = { items: NDSong[]; startIndex: number; totalRecordCount: number; }; -export type NDArtistListResponse = NDAlbumArtist[]; +export type NDSongListParams = NDOrder & + NDPagination & { + _sort?: NDSongListSort; + album_id?: string[]; + artist_id?: string[]; + genre_id?: string; + starred?: boolean; + }; -export type NDPagination = { - _end?: number; - _start?: number; -}; - -export enum NDSortOrder { - ASC = 'ASC', - DESC = 'DESC', -} - -export type NDOrder = { - _order?: NDSortOrder; -}; - -export enum NDGenreListSort { - NAME = 'name', -} - -export type NDGenreListParams = { - _sort?: NDGenreListSort; - id?: string; -} & NDPagination & - NDOrder; - -export enum NDAlbumListSort { - ALBUM_ARTIST = 'album_artist', - ARTIST = 'artist', - DURATION = 'duration', - NAME = 'name', - PLAY_COUNT = 'play_count', - PLAY_DATE = 'play_date', - RANDOM = 'random', - RATING = 'rating', - RECENTLY_ADDED = 'recently_added', - SONG_COUNT = 'songCount', - STARRED = 'starred_at', - YEAR = 'max_year', -} - -export type NDAlbumListParams = { - _sort?: NDAlbumListSort; - album_id?: string; - artist_id?: string; - compilation?: boolean; - genre_id?: string; - has_rating?: boolean; - id?: string; - name?: string; - recently_played?: boolean; - starred?: boolean; - year?: number; -} & NDPagination & - NDOrder; - -export enum NDSongListSort { - ALBUM = 'album', - ALBUM_ARTIST = 'order_album_artist_name', - ALBUM_SONGS = 'album', - ARTIST = 'artist', - BPM = 'bpm', - CHANNELS = 'channels', - COMMENT = 'comment', - DURATION = 'duration', - FAVORITED = 'starred_at', - GENRE = 'genre', - ID = 'id', - PLAY_COUNT = 'playCount', - PLAY_DATE = 'playDate', - RANDOM = 'random', - RATING = 'rating', - RECENTLY_ADDED = 'createdAt', - TITLE = 'title', - TRACK = 'track', - YEAR = 'year', -} - -export type NDSongListParams = { - _sort?: NDSongListSort; - album_id?: string[]; - artist_id?: string[]; - genre_id?: string; - starred?: boolean; -} & NDPagination & - NDOrder; - -export enum NDAlbumArtistListSort { - ALBUM_COUNT = 'albumCount', - FAVORITED = 'starred_at', - NAME = 'name', - PLAY_COUNT = 'playCount', - RATING = 'rating', - SONG_COUNT = 'songCount', -} - -export type NDAlbumArtistListParams = { - _sort?: NDAlbumArtistListSort; - genre_id?: string; - starred?: boolean; -} & NDPagination & - NDOrder; - -export type NDAddToPlaylistResponse = { - added: number; -}; - -export type NDAddToPlaylistBody = { - ids: string[]; -}; - -export type NDAddToPlaylist = null; - -export type NDRemoveFromPlaylistResponse = { - ids: string[]; -}; - -export type NDRemoveFromPlaylistParams = { - id: string[]; -}; - -export type NDRemoveFromPlaylist = null; - -export type NDCreatePlaylistParams = { - comment?: string; - name: string; - public?: boolean; - rules?: Record | null; -}; - -export type NDCreatePlaylistResponse = { - id: string; -}; - -export type NDCreatePlaylist = NDCreatePlaylistResponse; +export type NDSongListResponse = NDSong[]; export type NDUpdatePlaylistParams = Partial; export type NDUpdatePlaylistResponse = NDPlaylist; -export type NDDeletePlaylistParams = { - id: string; -}; - -export type NDDeletePlaylistResponse = null; - -export type NDDeletePlaylist = NDDeletePlaylistResponse; - -export type NDPlaylist = { - comment: string; +export type NDUser = { createdAt: string; - duration: number; - evaluatedAt: string; + email: string; id: string; + isAdmin: boolean; + lastAccessAt: string; + lastLoginAt: string; name: string; - ownerId: string; - ownerName: string; - path: string; - public: boolean; - rules: Record | null; - size: number; - songCount: number; - sync: boolean; updatedAt: string; -}; - -export type NDPlaylistDetail = NDPlaylist; - -export type NDPlaylistDetailResponse = NDPlaylist; - -export type NDPlaylistList = { - items: NDPlaylist[]; - startIndex: number; - totalRecordCount: number; -}; - -export type NDPlaylistListResponse = NDPlaylist[]; - -export enum NDPlaylistListSort { - DURATION = 'duration', - NAME = 'name', - OWNER = 'owner_name', - PUBLIC = 'public', - SONG_COUNT = 'songCount', - UPDATED_AT = 'updatedAt', -} - -export type NDPlaylistListParams = { - _sort?: NDPlaylistListSort; - owner_id?: string; -} & NDPagination & - NDOrder; - -export type NDPlaylistSong = NDSong & { - mediaFileId: string; - playlistId: string; -}; - -export type NDPlaylistSongListResponse = NDPlaylistSong[]; - -export type NDPlaylistSongList = { - items: NDPlaylistSong[]; - startIndex: number; - totalRecordCount: number; + userName: string; }; export const NDSongQueryFields = [ @@ -515,12 +515,9 @@ export const NDSongQueryNumberOperators = [ { label: 'is in the range', value: 'inTheRange' }, ]; -export type NDUserListParams = { - _sort?: NDUserListSort; -} & NDPagination & - NDOrder; - -export type NDUserListResponse = NDUser[]; +export enum NDUserListSort { + NAME = 'name', +} export type NDUserList = { items: NDUser[]; @@ -528,6 +525,9 @@ export type NDUserList = { totalRecordCount: number; }; -export enum NDUserListSort { - NAME = 'name', -} +export type NDUserListParams = NDOrder & + NDPagination & { + _sort?: NDUserListSort; + }; + +export type NDUserListResponse = NDUser[]; diff --git a/src/renderer/api/navidrome/navidrome-api.ts b/src/renderer/api/navidrome/navidrome-api.ts index 8e5e7529..551d5bea 100644 --- a/src/renderer/api/navidrome/navidrome-api.ts +++ b/src/renderer/api/navidrome/navidrome-api.ts @@ -1,17 +1,19 @@ import { initClient, initContract } from '@ts-rest/core'; -import axios, { Method, AxiosError, AxiosResponse, isAxiosError } from 'axios'; +import axios, { AxiosError, AxiosResponse, isAxiosError, Method } from 'axios'; import isElectron from 'is-electron'; import debounce from 'lodash/debounce'; import omitBy from 'lodash/omitBy'; import qs from 'qs'; -import { ndType } from './navidrome-types'; -import { authenticationFailure, resultWithHeaders } from '/@/renderer/api/utils'; -import { useAuthStore } from '/@/renderer/store'; -import { ServerListItem } from '/@/renderer/api/types'; -import { toast } from '/@/renderer/components/toast'; -import i18n from '/@/i18n/i18n'; -const localSettings = isElectron() ? window.electron.localSettings : null; +import { ndType } from './navidrome-types'; + +import i18n from '/@/i18n/i18n'; +import { ServerListItem } from '/@/renderer/api/types'; +import { authenticationFailure, resultWithHeaders } from '/@/renderer/api/utils'; +import { toast } from '/@/renderer/components/toast'; +import { useAuthStore } from '/@/renderer/store'; + +const localSettings = isElectron() ? window.api.localSettings : null; const c = initContract(); @@ -275,7 +277,7 @@ axiosClient.interceptors.response.use( // eslint-disable-next-line promise/no-promise-in-callback return localSettings .passwordGet(currentServer.id) - .then(async (password: string | null) => { + .then(async (password: null | string) => { authSuccess = false; if (password === null) { @@ -367,14 +369,14 @@ axiosClient.interceptors.response.use( ); export const ndApiClient = (args: { - server: ServerListItem | null; + server: null | ServerListItem; signal?: AbortSignal; url?: string; }) => { - const { server, url, signal } = args; + const { server, signal, url } = args; return initClient(contract, { - api: async ({ path, method, headers, body }) => { + api: async ({ body, headers, method, path }) => { let baseUrl: string | undefined; let token: string | undefined; @@ -406,7 +408,7 @@ export const ndApiClient = (args: { headers: result.headers as any, status: result.status, }; - } catch (e: Error | AxiosError | any) { + } catch (e: any | AxiosError | Error) { if (isAxiosError(e)) { if (e.code === 'ERR_NETWORK') { throw new Error( diff --git a/src/renderer/api/navidrome/navidrome-controller.ts b/src/renderer/api/navidrome/navidrome-controller.ts index 2d50be8c..84b2b986 100644 --- a/src/renderer/api/navidrome/navidrome-controller.ts +++ b/src/renderer/api/navidrome/navidrome-controller.ts @@ -1,28 +1,29 @@ +import { + albumArtistListSortMap, + albumListSortMap, + AuthenticationResponse, + ControllerEndpoint, + genreListSortMap, + playlistListSortMap, + PlaylistSongListArgs, + PlaylistSongListResponse, + ServerListItem, + Song, + songListSortMap, + sortOrderMap, + userListSortMap, +} from '../types'; + +import { ServerFeature, ServerFeatures } from '/@/renderer/api/features-types'; +import { NDSongListSort } from '/@/renderer/api/navidrome.types'; import { ndApiClient } from '/@/renderer/api/navidrome/navidrome-api'; import { ndNormalize } from '/@/renderer/api/navidrome/navidrome-normalize'; import { ndType } from '/@/renderer/api/navidrome/navidrome-types'; import { ssApiClient } from '/@/renderer/api/subsonic/subsonic-api'; -import { - albumArtistListSortMap, - sortOrderMap, - AuthenticationResponse, - userListSortMap, - albumListSortMap, - songListSortMap, - playlistListSortMap, - PlaylistSongListArgs, - PlaylistSongListResponse, - genreListSortMap, - Song, - ControllerEndpoint, - ServerListItem, -} from '../types'; -import { VersionInfo, getFeatures, hasFeature } from '/@/renderer/api/utils'; -import { ServerFeature, ServerFeatures } from '/@/renderer/api/features-types'; -import { SubsonicExtensions } from '/@/renderer/api/subsonic/subsonic-types'; -import { NDSongListSort } from '/@/renderer/api/navidrome.types'; -import { ssNormalize } from '/@/renderer/api/subsonic/subsonic-normalize'; import { SubsonicController } from '/@/renderer/api/subsonic/subsonic-controller'; +import { ssNormalize } from '/@/renderer/api/subsonic/subsonic-normalize'; +import { SubsonicExtensions } from '/@/renderer/api/subsonic/subsonic-types'; +import { getFeatures, hasFeature, VersionInfo } from '/@/renderer/api/utils'; const VERSION_INFO: VersionInfo = [ ['0.55.0', { [ServerFeature.BFR]: [1] }], @@ -48,7 +49,7 @@ const NAVIDROME_ROLES: Array = [ const EXCLUDED_TAGS = new Set(['disctotal', 'genre', 'tracktotal']); -const excludeMissing = (server: ServerListItem | null) => { +const excludeMissing = (server: null | ServerListItem) => { if (hasFeature(server, ServerFeature.BFR)) { return { missing: false }; } @@ -58,7 +59,7 @@ const excludeMissing = (server: ServerListItem | null) => { export const NavidromeController: ControllerEndpoint = { addToPlaylist: async (args) => { - const { body, query, apiClientProps } = args; + const { apiClientProps, body, query } = args; const res = await ndApiClient(apiClientProps).addToPlaylist({ body: { @@ -98,7 +99,7 @@ export const NavidromeController: ControllerEndpoint = { }, createFavorite: SubsonicController.createFavorite, createPlaylist: async (args) => { - const { body, apiClientProps } = args; + const { apiClientProps, body } = args; const res = await ndApiClient(apiClientProps).createPlaylist({ body: { @@ -120,7 +121,7 @@ export const NavidromeController: ControllerEndpoint = { }, deleteFavorite: SubsonicController.deleteFavorite, deletePlaylist: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ndApiClient(apiClientProps).deletePlaylist({ params: { @@ -135,7 +136,7 @@ export const NavidromeController: ControllerEndpoint = { return null; }, getAlbumArtistDetail: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ndApiClient(apiClientProps).getAlbumArtistDetail({ params: { @@ -176,7 +177,7 @@ export const NavidromeController: ControllerEndpoint = { ); }, getAlbumArtistList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ndApiClient(apiClientProps).getAlbumArtistList({ query: { @@ -217,7 +218,7 @@ export const NavidromeController: ControllerEndpoint = { query: { ...query, limit: 1, startIndex: 0 }, }).then((result) => result!.totalRecordCount!), getAlbumDetail: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const albumRes = await ndApiClient(apiClientProps).getAlbumDetail({ params: { @@ -245,7 +246,7 @@ export const NavidromeController: ControllerEndpoint = { ); }, getAlbumInfo: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const albumInfo = await ssApiClient(apiClientProps).getAlbumInfo2({ query: { @@ -265,7 +266,7 @@ export const NavidromeController: ControllerEndpoint = { }; }, getAlbumList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ndApiClient(apiClientProps).getAlbumList({ query: { @@ -299,7 +300,7 @@ export const NavidromeController: ControllerEndpoint = { query: { ...query, limit: 1, startIndex: 0 }, }).then((result) => result!.totalRecordCount!), getArtistList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ndApiClient(apiClientProps).getAlbumArtistList({ query: { @@ -341,7 +342,7 @@ export const NavidromeController: ControllerEndpoint = { }).then((result) => result!.totalRecordCount!), getDownloadUrl: SubsonicController.getDownloadUrl, getGenreList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ndApiClient(apiClientProps).getGenreList({ query: { @@ -366,7 +367,7 @@ export const NavidromeController: ControllerEndpoint = { getLyrics: SubsonicController.getLyrics, getMusicFolderList: SubsonicController.getMusicFolderList, getPlaylistDetail: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ndApiClient(apiClientProps).getPlaylistDetail({ params: { @@ -381,7 +382,7 @@ export const NavidromeController: ControllerEndpoint = { return ndNormalize.playlist(res.body.data, apiClientProps.server); }, getPlaylistList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const customQuery = query._custom?.navidrome; // Smart playlists only became available in 0.48.0. Do not filter for previous versions @@ -420,7 +421,7 @@ export const NavidromeController: ControllerEndpoint = { query: { ...query, limit: 1, startIndex: 0 }, }).then((result) => result!.totalRecordCount!), getPlaylistSongList: async (args: PlaylistSongListArgs): Promise => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ndApiClient(apiClientProps).getPlaylistSongList({ params: { @@ -548,7 +549,7 @@ export const NavidromeController: ControllerEndpoint = { }, []); }, getSongDetail: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ndApiClient(apiClientProps).getSongDetail({ params: { @@ -563,7 +564,7 @@ export const NavidromeController: ControllerEndpoint = { return ndNormalize.song(res.body.data, apiClientProps.server); }, getSongList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ndApiClient(apiClientProps).getSongList({ query: { @@ -642,7 +643,7 @@ export const NavidromeController: ControllerEndpoint = { getTopSongs: SubsonicController.getTopSongs, getTranscodingUrl: SubsonicController.getTranscodingUrl, getUserList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ndApiClient(apiClientProps).getUserList({ query: { @@ -682,7 +683,7 @@ export const NavidromeController: ControllerEndpoint = { } }, removeFromPlaylist: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ndApiClient(apiClientProps).removeFromPlaylist({ params: { @@ -703,7 +704,7 @@ export const NavidromeController: ControllerEndpoint = { search: SubsonicController.search, setRating: SubsonicController.setRating, shareItem: async (args) => { - const { body, apiClientProps } = args; + const { apiClientProps, body } = args; const res = await ndApiClient(apiClientProps).shareItem({ body: { @@ -724,7 +725,7 @@ export const NavidromeController: ControllerEndpoint = { }; }, updatePlaylist: async (args) => { - const { query, body, apiClientProps } = args; + const { apiClientProps, body, query } = args; const res = await ndApiClient(apiClientProps).updatePlaylist({ body: { diff --git a/src/renderer/api/navidrome/navidrome-normalize.ts b/src/renderer/api/navidrome/navidrome-normalize.ts index d5f4f4ab..70d69cee 100644 --- a/src/renderer/api/navidrome/navidrome-normalize.ts +++ b/src/renderer/api/navidrome/navidrome-normalize.ts @@ -1,22 +1,24 @@ import { nanoid } from 'nanoid'; +import z from 'zod'; + +import { ndType } from './navidrome-types'; + +import { NDGenre } from '/@/renderer/api/navidrome.types'; +import { ssType } from '/@/renderer/api/subsonic/subsonic-types'; import { - Song, - LibraryItem, Album, - Playlist, - User, AlbumArtist, Genre, + LibraryItem, + Playlist, + RelatedArtist, ServerListItem, ServerType, - RelatedArtist, + Song, + User, } from '/@/renderer/api/types'; -import z from 'zod'; -import { ndType } from './navidrome-types'; -import { ssType } from '/@/renderer/api/subsonic/subsonic-types'; -import { NDGenre } from '/@/renderer/api/navidrome.types'; -const getImageUrl = (args: { url: string | null }) => { +const getImageUrl = (args: { url: null | string }) => { const { url } = args; if (url === '/app/artist-placeholder.webp') { return null; @@ -51,19 +53,19 @@ interface WithDate { playDate?: string; } -const normalizePlayDate = (item: WithDate): string | null => { +const normalizePlayDate = (item: WithDate): null | string => { return !item.playDate || item.playDate.includes('0001-') ? null : item.playDate; }; const getArtists = ( item: - | z.infer + | z.infer | z.infer - | z.infer, + | z.infer, ) => { let albumArtists: RelatedArtist[] | undefined; let artists: RelatedArtist[] | undefined; - let participants: Record | null = null; + let participants: null | Record = null; if (item.participants) { participants = {}; @@ -120,8 +122,8 @@ const getArtists = ( }; const normalizeSong = ( - item: z.infer | z.infer, - server: ServerListItem | null, + item: z.infer | z.infer, + server: null | ServerListItem, imageSize?: number, ): Song => { let id; @@ -204,7 +206,7 @@ const normalizeAlbum = ( item: z.infer & { songs?: z.infer; }, - server: ServerListItem | null, + server: null | ServerListItem, imageSize?: number, ): Album => { const imageUrl = getCoverArtUrl({ @@ -268,7 +270,7 @@ const normalizeAlbumArtist = ( item: z.infer & { similarArtists?: z.infer['artistInfo']['similarArtist']; }, - server: ServerListItem | null, + server: null | ServerListItem, ): AlbumArtist => { let imageUrl = getImageUrl({ url: item?.largeImageUrl || null }); @@ -332,7 +334,7 @@ const normalizeAlbumArtist = ( const normalizePlaylist = ( item: z.infer, - server: ServerListItem | null, + server: null | ServerListItem, imageSize?: number, ): Playlist => { const imageUrl = getCoverArtUrl({ diff --git a/src/renderer/api/navidrome/navidrome-types.ts b/src/renderer/api/navidrome/navidrome-types.ts index 253aa9a8..125f1263 100644 --- a/src/renderer/api/navidrome/navidrome-types.ts +++ b/src/renderer/api/navidrome/navidrome-types.ts @@ -1,4 +1,5 @@ import { z } from 'zod'; + import { NDAlbumArtistListSort, NDAlbumListSort, diff --git a/src/renderer/api/query-keys.ts b/src/renderer/api/query-keys.ts index db453566..1c071e3a 100644 --- a/src/renderer/api/query-keys.ts +++ b/src/renderer/api/query-keys.ts @@ -1,28 +1,30 @@ import { QueryFunctionContext } from '@tanstack/react-query'; -import { LyricSource } from './types'; + import type { - AlbumListQuery, - SongListQuery, - AlbumDetailQuery, - AlbumArtistListQuery, - ArtistListQuery, - PlaylistListQuery, - PlaylistDetailQuery, - PlaylistSongListQuery, - UserListQuery, AlbumArtistDetailQuery, - TopSongListQuery, - SearchQuery, - SongDetailQuery, - RandomSongListQuery, - LyricsQuery, - LyricSearchQuery, + AlbumArtistListQuery, + AlbumDetailQuery, + AlbumListQuery, + ArtistListQuery, GenreListQuery, + LyricSearchQuery, + LyricsQuery, + PlaylistDetailQuery, + PlaylistListQuery, + PlaylistSongListQuery, + RandomSongListQuery, + SearchQuery, SimilarSongsQuery, + SongDetailQuery, + SongListQuery, + TopSongListQuery, + UserListQuery, } from './types'; +import { LyricSource } from './types'; + export const splitPaginatedQuery = (key: any) => { - const { startIndex, limit, ...filter } = key || {}; + const { limit, startIndex, ...filter } = key || {}; if (startIndex !== undefined || limit !== undefined) { return { @@ -51,7 +53,7 @@ export const queryKeys: Record< > = { albumArtists: { count: (serverId: string, query?: AlbumArtistListQuery) => { - const { pagination, filter } = splitPaginatedQuery(query); + const { filter, pagination } = splitPaginatedQuery(query); if (query && pagination) { return [serverId, 'albumArtists', 'count', filter, pagination] as const; @@ -68,7 +70,7 @@ export const queryKeys: Record< return [serverId, 'albumArtists', 'detail'] as const; }, list: (serverId: string, query?: AlbumArtistListQuery) => { - const { pagination, filter } = splitPaginatedQuery(query); + const { filter, pagination } = splitPaginatedQuery(query); if (query && pagination) { return [serverId, 'albumArtists', 'list', filter, pagination] as const; } @@ -87,7 +89,7 @@ export const queryKeys: Record< }, albums: { count: (serverId: string, query?: AlbumListQuery, artistId?: string) => { - const { pagination, filter } = splitPaginatedQuery(query); + const { filter, pagination } = splitPaginatedQuery(query); if (query && pagination && artistId) { return [serverId, 'albums', 'count', artistId, filter, pagination] as const; @@ -110,7 +112,7 @@ export const queryKeys: Record< detail: (serverId: string, query?: AlbumDetailQuery) => [serverId, 'albums', 'detail', query] as const, list: (serverId: string, query?: AlbumListQuery, artistId?: string) => { - const { pagination, filter } = splitPaginatedQuery(query); + const { filter, pagination } = splitPaginatedQuery(query); if (query && pagination && artistId) { return [serverId, 'albums', 'list', artistId, filter, pagination] as const; @@ -144,7 +146,7 @@ export const queryKeys: Record< }, artists: { list: (serverId: string, query?: ArtistListQuery) => { - const { pagination, filter } = splitPaginatedQuery(query); + const { filter, pagination } = splitPaginatedQuery(query); if (query && pagination) { return [serverId, 'artists', 'list', filter, pagination] as const; } @@ -159,7 +161,7 @@ export const queryKeys: Record< }, genres: { list: (serverId: string, query?: GenreListQuery) => { - const { pagination, filter } = splitPaginatedQuery(query); + const { filter, pagination } = splitPaginatedQuery(query); if (query && pagination) { return [serverId, 'genres', 'list', filter, pagination] as const; } @@ -177,7 +179,7 @@ export const queryKeys: Record< }, playlists: { detail: (serverId: string, id?: string, query?: PlaylistDetailQuery) => { - const { pagination, filter } = splitPaginatedQuery(query); + const { filter, pagination } = splitPaginatedQuery(query); if (query && pagination) { return [serverId, 'playlists', id, 'detail', filter, pagination] as const; } @@ -190,7 +192,7 @@ export const queryKeys: Record< return [serverId, 'playlists', 'detail'] as const; }, detailSongList: (serverId: string, id: string, query?: PlaylistSongListQuery) => { - const { pagination, filter } = splitPaginatedQuery(query); + const { filter, pagination } = splitPaginatedQuery(query); if (query && id && pagination) { return [serverId, 'playlists', id, 'detailSongList', filter, pagination] as const; @@ -205,7 +207,7 @@ export const queryKeys: Record< return [serverId, 'playlists', 'detailSongList'] as const; }, list: (serverId: string, query?: PlaylistListQuery) => { - const { pagination, filter } = splitPaginatedQuery(query); + const { filter, pagination } = splitPaginatedQuery(query); if (query && pagination) { return [serverId, 'playlists', 'list', filter, pagination] as const; } @@ -218,7 +220,7 @@ export const queryKeys: Record< }, root: (serverId: string) => [serverId, 'playlists'] as const, songList: (serverId: string, id?: string, query?: PlaylistSongListQuery) => { - const { pagination, filter } = splitPaginatedQuery(query); + const { filter, pagination } = splitPaginatedQuery(query); if (query && id && pagination) { return [serverId, 'playlists', id, 'songList', filter, pagination] as const; } @@ -246,7 +248,7 @@ export const queryKeys: Record< }, songs: { count: (serverId: string, query?: SongListQuery) => { - const { pagination, filter } = splitPaginatedQuery(query); + const { filter, pagination } = splitPaginatedQuery(query); if (query && pagination) { return [serverId, 'songs', 'count', filter, pagination] as const; } @@ -262,7 +264,7 @@ export const queryKeys: Record< return [serverId, 'songs', 'detail'] as const; }, list: (serverId: string, query?: SongListQuery) => { - const { pagination, filter } = splitPaginatedQuery(query); + const { filter, pagination } = splitPaginatedQuery(query); if (query && pagination) { return [serverId, 'songs', 'list', filter, pagination] as const; } diff --git a/src/renderer/api/subsonic.types.ts b/src/renderer/api/subsonic.types.ts index 89d103f3..803450df 100644 --- a/src/renderer/api/subsonic.types.ts +++ b/src/renderer/api/subsonic.types.ts @@ -1,32 +1,13 @@ -export type SSBaseResponse = { - serverVersion?: 'string'; - status: 'string'; - type?: 'string'; - version: 'string'; +export type SSAlbum = SSAlbumListEntry & { + song: SSSong[]; }; -export type SSMusicFolderList = SSMusicFolder[]; - -export type SSMusicFolderListResponse = { - musicFolders: { - musicFolder: SSMusicFolder[]; - }; -}; - -export type SSGenreList = SSGenre[]; - -export type SSGenreListResponse = { - genres: { - genre: SSGenre[]; - }; -}; +export type SSAlbumArtistDetail = SSAlbumArtistListEntry & { album: SSAlbumListEntry[] }; export type SSAlbumArtistDetailParams = { id: string; }; -export type SSAlbumArtistDetail = SSAlbumArtistListEntry & { album: SSAlbumListEntry[] }; - export type SSAlbumArtistDetailResponse = { artist: SSAlbumArtistListEntry & { album: SSAlbumListEntry[]; @@ -36,7 +17,19 @@ export type SSAlbumArtistDetailResponse = { export type SSAlbumArtistList = { items: SSAlbumArtistListEntry[]; startIndex: number; - totalRecordCount: number | null; + totalRecordCount: null | number; +}; + +export type SSAlbumArtistListEntry = { + albumCount: string; + artistImageUrl?: string; + coverArt?: string; + id: string; + name: string; +}; + +export type SSAlbumArtistListParams = { + musicFolderId?: string; }; export type SSAlbumArtistListResponse = { @@ -47,72 +40,16 @@ export type SSAlbumArtistListResponse = { }; }; -export type SSAlbumList = { - items: SSAlbumListEntry[]; - startIndex: number; - totalRecordCount: number | null; -}; - -export type SSAlbumListResponse = { - albumList2: { - album: SSAlbumListEntry[]; - }; -}; - export type SSAlbumDetail = Omit & { songs: SSSong[] }; export type SSAlbumDetailResponse = { album: SSAlbum; }; -export type SSArtistInfoParams = { - count?: number; - id: string; - includeNotPresent?: boolean; -}; - -export type SSArtistInfoResponse = { - artistInfo2: SSArtistInfo; -}; - -export type SSArtistInfo = { - biography: string; - largeImageUrl?: string; - lastFmUrl?: string; - mediumImageUrl?: string; - musicBrainzId?: string; - similarArtist?: { - albumCount: string; - artistImageUrl?: string; - coverArt?: string; - id: string; - name: string; - }[]; - smallImageUrl?: string; -}; - -export type SSMusicFolder = { - id: number; - name: string; -}; - -export type SSGenre = { - albumCount?: number; - songCount?: number; - value: string; -}; - -export type SSArtistIndex = { - artist: SSAlbumArtistListEntry[]; - name: string; -}; - -export type SSAlbumArtistListEntry = { - albumCount: string; - artistImageUrl?: string; - coverArt?: string; - id: string; - name: string; +export type SSAlbumList = { + items: SSAlbumListEntry[]; + startIndex: number; + totalRecordCount: null | number; }; export type SSAlbumListEntry = { @@ -135,9 +72,111 @@ export type SSAlbumListEntry = { year: number; }; -export type SSAlbum = { - song: SSSong[]; -} & SSAlbumListEntry; +export type SSAlbumListParams = { + fromYear?: number; + genre?: string; + musicFolderId?: string; + offset?: number; + size?: number; + toYear?: number; + type: string; +}; + +export type SSAlbumListResponse = { + albumList2: { + album: SSAlbumListEntry[]; + }; +}; + +export type SSArtistIndex = { + artist: SSAlbumArtistListEntry[]; + name: string; +}; + +export type SSArtistInfo = { + biography: string; + largeImageUrl?: string; + lastFmUrl?: string; + mediumImageUrl?: string; + musicBrainzId?: string; + similarArtist?: { + albumCount: string; + artistImageUrl?: string; + coverArt?: string; + id: string; + name: string; + }[]; + smallImageUrl?: string; +}; + +export type SSArtistInfoParams = { + count?: number; + id: string; + includeNotPresent?: boolean; +}; + +export type SSArtistInfoResponse = { + artistInfo2: SSArtistInfo; +}; + +export type SSBaseResponse = { + serverVersion?: 'string'; + status: 'string'; + type?: 'string'; + version: 'string'; +}; + +export type SSFavorite = null; + +export type SSFavoriteParams = { + albumId?: string; + artistId?: string; + id?: string; +}; + +export type SSFavoriteResponse = null; + +export type SSGenre = { + albumCount?: number; + songCount?: number; + value: string; +}; + +export type SSGenreList = SSGenre[]; + +export type SSGenreListResponse = { + genres: { + genre: SSGenre[]; + }; +}; + +export type SSMusicFolder = { + id: number; + name: string; +}; + +export type SSMusicFolderList = SSMusicFolder[]; + +export type SSMusicFolderListResponse = { + musicFolders: { + musicFolder: SSMusicFolder[]; + }; +}; + +export type SSRating = null; + +export type SSRatingParams = { + id: string; + rating: number; +}; + +export type SSRatingResponse = null; + +export type SSScrobbleParams = { + id: string; + submission?: boolean; + time?: number; +}; export type SSSong = { album: string; @@ -167,39 +206,12 @@ export type SSSong = { year: number; }; -export type SSAlbumListParams = { - fromYear?: number; - genre?: string; - musicFolderId?: string; - offset?: number; - size?: number; - toYear?: number; - type: string; +export type SSTopSongList = { + items: SSSong[]; + startIndex: number; + totalRecordCount: null | number; }; -export type SSAlbumArtistListParams = { - musicFolderId?: string; -}; - -export type SSFavoriteParams = { - albumId?: string; - artistId?: string; - id?: string; -}; - -export type SSFavorite = null; - -export type SSFavoriteResponse = null; - -export type SSRatingParams = { - id: string; - rating: number; -}; - -export type SSRating = null; - -export type SSRatingResponse = null; - export type SSTopSongListParams = { artist: string; count?: number; @@ -210,15 +222,3 @@ export type SSTopSongListResponse = { song: SSSong[]; }; }; - -export type SSTopSongList = { - items: SSSong[]; - startIndex: number; - totalRecordCount: number | null; -}; - -export type SSScrobbleParams = { - id: string; - submission?: boolean; - time?: number; -}; diff --git a/src/renderer/api/subsonic/subsonic-api.ts b/src/renderer/api/subsonic/subsonic-api.ts index 23c919d1..f11d5734 100644 --- a/src/renderer/api/subsonic/subsonic-api.ts +++ b/src/renderer/api/subsonic/subsonic-api.ts @@ -1,12 +1,13 @@ import { initClient, initContract } from '@ts-rest/core'; -import axios, { Method, AxiosError, isAxiosError, AxiosResponse } from 'axios'; +import axios, { AxiosError, AxiosResponse, isAxiosError, Method } from 'axios'; import omitBy from 'lodash/omitBy'; import qs from 'qs'; import { z } from 'zod'; + +import i18n from '/@/i18n/i18n'; import { ssType } from '/@/renderer/api/subsonic/subsonic-types'; import { ServerListItem } from '/@/renderer/api/types'; import { toast } from '/@/renderer/components/toast/index'; -import i18n from '/@/i18n/i18n'; const c = initContract(); @@ -284,15 +285,15 @@ const silentlyTransformResponse = (data: any) => { }; export const ssApiClient = (args: { - server: ServerListItem | null; + server: null | ServerListItem; signal?: AbortSignal; silent?: boolean; url?: string; }) => { - const { server, url, signal, silent } = args; + const { server, signal, silent, url } = args; return initClient(contract, { - api: async ({ path, method, headers, body }) => { + api: async ({ body, headers, method, path }) => { let baseUrl: string | undefined; const authParams: Record = {}; @@ -339,7 +340,7 @@ export const ssApiClient = (args: { headers: result.headers as any, status: result.status, }; - } catch (e: Error | AxiosError | any) { + } catch (e: any | AxiosError | Error) { if (isAxiosError(e)) { if (e.code === 'ERR_NETWORK') { throw new Error( diff --git a/src/renderer/api/subsonic/subsonic-controller.ts b/src/renderer/api/subsonic/subsonic-controller.ts index b63698b8..6bea97f8 100644 --- a/src/renderer/api/subsonic/subsonic-controller.ts +++ b/src/renderer/api/subsonic/subsonic-controller.ts @@ -2,44 +2,45 @@ import dayjs from 'dayjs'; import filter from 'lodash/filter'; import orderBy from 'lodash/orderBy'; import md5 from 'md5'; + +import { ServerFeatures } from '/@/renderer/api/features-types'; import { ssApiClient } from '/@/renderer/api/subsonic/subsonic-api'; import { ssNormalize } from '/@/renderer/api/subsonic/subsonic-normalize'; import { AlbumListSortType, SubsonicExtensions } from '/@/renderer/api/subsonic/subsonic-types'; import { - LibraryItem, - Song, - ControllerEndpoint, - sortSongList, - sortAlbumArtistList, - PlaylistListSort, - GenreListSort, AlbumListSort, + ControllerEndpoint, + GenreListSort, + LibraryItem, + PlaylistListSort, + Song, + sortAlbumArtistList, sortAlbumList, SortOrder, + sortSongList, } from '/@/renderer/api/types'; import { randomString } from '/@/renderer/utils'; -import { ServerFeatures } from '/@/renderer/api/features-types'; const ALBUM_LIST_SORT_MAPPING: Record = { - [AlbumListSort.RANDOM]: AlbumListSortType.RANDOM, [AlbumListSort.ALBUM_ARTIST]: AlbumListSortType.ALPHABETICAL_BY_ARTIST, - [AlbumListSort.PLAY_COUNT]: AlbumListSortType.FREQUENT, - [AlbumListSort.RECENTLY_ADDED]: AlbumListSortType.NEWEST, - [AlbumListSort.FAVORITED]: AlbumListSortType.STARRED, - [AlbumListSort.YEAR]: AlbumListSortType.BY_YEAR, - [AlbumListSort.NAME]: AlbumListSortType.ALPHABETICAL_BY_NAME, - [AlbumListSort.COMMUNITY_RATING]: undefined, - [AlbumListSort.DURATION]: undefined, - [AlbumListSort.CRITIC_RATING]: undefined, - [AlbumListSort.RATING]: undefined, [AlbumListSort.ARTIST]: undefined, + [AlbumListSort.COMMUNITY_RATING]: undefined, + [AlbumListSort.CRITIC_RATING]: undefined, + [AlbumListSort.DURATION]: undefined, + [AlbumListSort.FAVORITED]: AlbumListSortType.STARRED, + [AlbumListSort.NAME]: AlbumListSortType.ALPHABETICAL_BY_NAME, + [AlbumListSort.PLAY_COUNT]: AlbumListSortType.FREQUENT, + [AlbumListSort.RANDOM]: AlbumListSortType.RANDOM, + [AlbumListSort.RATING]: undefined, + [AlbumListSort.RECENTLY_ADDED]: AlbumListSortType.NEWEST, [AlbumListSort.RECENTLY_PLAYED]: AlbumListSortType.RECENT, [AlbumListSort.RELEASE_DATE]: undefined, [AlbumListSort.SONG_COUNT]: undefined, + [AlbumListSort.YEAR]: AlbumListSortType.BY_YEAR, }; export const SubsonicController: ControllerEndpoint = { - addToPlaylist: async ({ body, query, apiClientProps }) => { + addToPlaylist: async ({ apiClientProps, body, query }) => { const res = await ssApiClient(apiClientProps).updatePlaylist({ query: { playlistId: query.id, @@ -98,7 +99,7 @@ export const SubsonicController: ControllerEndpoint = { }; }, createFavorite: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ssApiClient(apiClientProps).createFavorite({ query: { @@ -114,7 +115,7 @@ export const SubsonicController: ControllerEndpoint = { return null; }, - createPlaylist: async ({ body, apiClientProps }) => { + createPlaylist: async ({ apiClientProps, body }) => { const res = await ssApiClient(apiClientProps).createPlaylist({ query: { name: body.name, @@ -131,7 +132,7 @@ export const SubsonicController: ControllerEndpoint = { }; }, deleteFavorite: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ssApiClient(apiClientProps).removeFavorite({ query: { @@ -148,7 +149,7 @@ export const SubsonicController: ControllerEndpoint = { return null; }, deletePlaylist: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ssApiClient(apiClientProps).deletePlaylist({ query: { @@ -163,7 +164,7 @@ export const SubsonicController: ControllerEndpoint = { return null; }, getAlbumArtistDetail: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const artistInfoRes = await ssApiClient(apiClientProps).getArtistInfo({ query: { @@ -198,7 +199,7 @@ export const SubsonicController: ControllerEndpoint = { }; }, getAlbumArtistList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ssApiClient(apiClientProps).getArtists({ query: { @@ -237,7 +238,7 @@ export const SubsonicController: ControllerEndpoint = { getAlbumArtistListCount: (args) => SubsonicController.getAlbumArtistList(args).then((res) => res!.totalRecordCount!), getAlbumDetail: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ssApiClient(apiClientProps).getAlbum({ query: { @@ -252,7 +253,7 @@ export const SubsonicController: ControllerEndpoint = { return ssNormalize.album(res.body.album, apiClientProps.server); }, getAlbumList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (query.searchTerm) { const res = await ssApiClient(apiClientProps).search3({ @@ -398,7 +399,7 @@ export const SubsonicController: ControllerEndpoint = { }; }, getAlbumListCount: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; if (query.searchTerm) { let fetchNextPage = true; @@ -516,7 +517,7 @@ export const SubsonicController: ControllerEndpoint = { return totalRecordCount; }, getArtistList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ssApiClient(apiClientProps).getArtists({ query: { @@ -570,7 +571,7 @@ export const SubsonicController: ControllerEndpoint = { '&c=Feishin' ); }, - getGenreList: async ({ query, apiClientProps }) => { + getGenreList: async ({ apiClientProps, query }) => { const sortOrder = query.sortOrder.toLowerCase() as 'asc' | 'desc'; const res = await ssApiClient(apiClientProps).getGenres({}); @@ -624,7 +625,7 @@ export const SubsonicController: ControllerEndpoint = { }; }, getPlaylistDetail: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ssApiClient(apiClientProps).getPlaylist({ query: { @@ -638,7 +639,7 @@ export const SubsonicController: ControllerEndpoint = { return ssNormalize.playlist(res.body.playlist, apiClientProps.server); }, - getPlaylistList: async ({ query, apiClientProps }) => { + getPlaylistList: async ({ apiClientProps, query }) => { const sortOrder = query.sortOrder.toLowerCase() as 'asc' | 'desc'; const res = await ssApiClient(apiClientProps).getPlaylists({}); @@ -686,7 +687,7 @@ export const SubsonicController: ControllerEndpoint = { totalRecordCount: results.length, }; }, - getPlaylistListCount: async ({ query, apiClientProps }) => { + getPlaylistListCount: async ({ apiClientProps, query }) => { const res = await ssApiClient(apiClientProps).getPlaylists({}); if (res.status !== 200) { @@ -705,7 +706,7 @@ export const SubsonicController: ControllerEndpoint = { return results.length; }, - getPlaylistSongList: async ({ query, apiClientProps }) => { + getPlaylistSongList: async ({ apiClientProps, query }) => { const res = await ssApiClient(apiClientProps).getPlaylist({ query: { id: query.id, @@ -731,7 +732,7 @@ export const SubsonicController: ControllerEndpoint = { }; }, getRandomSongList: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ssApiClient(apiClientProps).getRandomSongList({ query: { @@ -842,7 +843,7 @@ export const SubsonicController: ControllerEndpoint = { }, []); }, getSongDetail: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ssApiClient(apiClientProps).getSong({ query: { @@ -856,7 +857,7 @@ export const SubsonicController: ControllerEndpoint = { return ssNormalize.song(res.body.song, apiClientProps.server); }, - getSongList: async ({ query, apiClientProps }) => { + getSongList: async ({ apiClientProps, query }) => { const fromAlbumPromises = []; const artistDetailPromises = []; let results: any[] = []; @@ -1028,7 +1029,7 @@ export const SubsonicController: ControllerEndpoint = { }; }, getSongListCount: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; let fetchNextPage = true; let startIndex = 0; @@ -1196,7 +1197,7 @@ export const SubsonicController: ControllerEndpoint = { return totalRecordCount; }, getStructuredLyrics: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ssApiClient(apiClientProps).getStructuredLyrics({ query: { @@ -1238,7 +1239,7 @@ export const SubsonicController: ControllerEndpoint = { }); }, getTopSongs: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ssApiClient(apiClientProps).getTopSongsList({ query: { @@ -1261,7 +1262,7 @@ export const SubsonicController: ControllerEndpoint = { }; }, getTranscodingUrl: (args) => { - const { base, format, bitrate } = args.query; + const { base, bitrate, format } = args.query; let url = base; if (format) { url += `&format=${format}`; @@ -1272,7 +1273,7 @@ export const SubsonicController: ControllerEndpoint = { return url; }, - removeFromPlaylist: async ({ query, apiClientProps }) => { + removeFromPlaylist: async ({ apiClientProps, query }) => { const res = await ssApiClient(apiClientProps).updatePlaylist({ query: { playlistId: query.id, @@ -1287,7 +1288,7 @@ export const SubsonicController: ControllerEndpoint = { return null; }, scrobble: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ssApiClient(apiClientProps).scrobble({ query: { @@ -1304,7 +1305,7 @@ export const SubsonicController: ControllerEndpoint = { }, search: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const res = await ssApiClient(apiClientProps).search3({ query: { @@ -1335,7 +1336,7 @@ export const SubsonicController: ControllerEndpoint = { }; }, setRating: async (args) => { - const { query, apiClientProps } = args; + const { apiClientProps, query } = args; const itemIds = query.item.map((item) => item.id); @@ -1351,7 +1352,7 @@ export const SubsonicController: ControllerEndpoint = { return null; }, updatePlaylist: async (args) => { - const { body, query, apiClientProps } = args; + const { apiClientProps, body, query } = args; const res = await ssApiClient(apiClientProps).updatePlaylist({ query: { diff --git a/src/renderer/api/subsonic/subsonic-normalize.ts b/src/renderer/api/subsonic/subsonic-normalize.ts index 7f0e2b56..beb98643 100644 --- a/src/renderer/api/subsonic/subsonic-normalize.ts +++ b/src/renderer/api/subsonic/subsonic-normalize.ts @@ -1,16 +1,17 @@ import { nanoid } from 'nanoid'; import { z } from 'zod'; + import { ssType } from '/@/renderer/api/subsonic/subsonic-types'; import { - QueueSong, - LibraryItem, - AlbumArtist, Album, + AlbumArtist, + Genre, + LibraryItem, + Playlist, + QueueSong, + RelatedArtist, ServerListItem, ServerType, - Playlist, - Genre, - RelatedArtist, } from '/@/renderer/api/types'; const getCoverArtUrl = (args: { @@ -37,9 +38,9 @@ const getCoverArtUrl = (args: { const getArtists = ( item: - | z.infer | z.infer - | z.infer, + | z.infer + | z.infer, ) => { const albumArtists: RelatedArtist[] = item.albumArtists ? item.albumArtists.map((item) => ({ @@ -69,7 +70,7 @@ const getArtists = ( }, ]; - let participants: Record | null = null; + let participants: null | Record = null; if (item.contributors) { participants = {}; @@ -98,9 +99,9 @@ const getArtists = ( const getGenres = ( item: - | z.infer | z.infer - | z.infer, + | z.infer + | z.infer, ): Genre[] => { return item.genres ? item.genres.map((genre) => ({ @@ -123,7 +124,7 @@ const getGenres = ( const normalizeSong = ( item: z.infer, - server: ServerListItem | null, + server: null | ServerListItem, size?: number, ): QueueSong => { const imageUrl = @@ -194,7 +195,7 @@ const normalizeAlbumArtist = ( item: | z.infer | z.infer, - server: ServerListItem | null, + server: null | ServerListItem, imageSize?: number, ): AlbumArtist => { const imageUrl = @@ -229,7 +230,7 @@ const normalizeAlbumArtist = ( const normalizeAlbum = ( item: z.infer | z.infer, - server: ServerListItem | null, + server: null | ServerListItem, imageSize?: number, ): Album => { const imageUrl = @@ -280,7 +281,7 @@ const normalizePlaylist = ( item: | z.infer | z.infer, - server: ServerListItem | null, + server: null | ServerListItem, ): Playlist => { return { description: item.comment || null, diff --git a/src/renderer/api/types.ts b/src/renderer/api/types.ts index a24abd9e..854721f2 100644 --- a/src/renderer/api/types.ts +++ b/src/renderer/api/types.ts @@ -2,28 +2,29 @@ import orderBy from 'lodash/orderBy'; import reverse from 'lodash/reverse'; import shuffle from 'lodash/shuffle'; import { z } from 'zod'; + import { ServerFeatures } from './features-types'; +import { + JFAlbumArtistListSort, + JFAlbumListSort, + JFArtistListSort, + JFGenreListSort, + JFPlaylistListSort, + JFSongListSort, + JFSortOrder, +} from './jellyfin.types'; import { jfType } from './jellyfin/jellyfin-types'; import { - JFSortOrder, - JFAlbumListSort, - JFSongListSort, - JFAlbumArtistListSort, - JFArtistListSort, - JFPlaylistListSort, - JFGenreListSort, -} from './jellyfin.types'; -import { ndType } from './navidrome/navidrome-types'; -import { - NDSortOrder, - NDOrder, - NDAlbumListSort, NDAlbumArtistListSort, + NDAlbumListSort, + NDGenreListSort, + NDOrder, NDPlaylistListSort, NDSongListSort, + NDSortOrder, NDUserListSort, - NDGenreListSort, } from './navidrome.types'; +import { ndType } from './navidrome/navidrome-types'; export enum LibraryItem { ALBUM = 'album', @@ -34,29 +35,29 @@ export enum LibraryItem { SONG = 'song', } -export type AnyLibraryItem = Album | AlbumArtist | Artist | Playlist | Song | QueueSong; - -export type AnyLibraryItems = - | Album[] - | AlbumArtist[] - | Artist[] - | Playlist[] - | Song[] - | QueueSong[]; +export enum ServerType { + JELLYFIN = 'jellyfin', + NAVIDROME = 'navidrome', + SUBSONIC = 'subsonic', +} export enum SortOrder { ASC = 'ASC', DESC = 'DESC', } -export type User = { - createdAt: string | null; - email: string | null; - id: string; - isAdmin: boolean | null; - lastLoginAt: string | null; - name: string; - updatedAt: string | null; +export type AnyLibraryItem = Album | AlbumArtist | Artist | Playlist | QueueSong | Song; + +export type AnyLibraryItems = + | Album[] + | AlbumArtist[] + | Artist[] + | Playlist[] + | QueueSong[] + | Song[]; + +export type QueueSong = Song & { + uniqueId: string; }; export type ServerListItem = { @@ -68,19 +69,19 @@ export type ServerListItem = { savePassword?: boolean; type: ServerType; url: string; - userId: string | null; + userId: null | string; username: string; version?: string; }; -export enum ServerType { - JELLYFIN = 'jellyfin', - NAVIDROME = 'navidrome', - SUBSONIC = 'subsonic', -} - -export type QueueSong = Song & { - uniqueId: string; +export type User = { + createdAt: null | string; + email: null | string; + id: string; + isAdmin: boolean | null; + lastLoginAt: null | string; + name: string; + updatedAt: null | string; }; type SortOrderMap = { @@ -116,6 +117,10 @@ export enum ExternalType { LINK = 'LINK', } +export enum GenreListSort { + NAME = 'name', +} + export enum ImageType { BACKDROP = 'BACKDROP', LOGO = 'LOGO', @@ -123,212 +128,112 @@ export enum ImageType { SCREENSHOT = 'SCREENSHOT', } -export type EndpointDetails = { - server: ServerListItem; -}; - -export interface BasePaginatedResponse { - error?: string | any; - items: T; - startIndex: number; - totalRecordCount: number | null; -} - -export type AuthenticationResponse = { - credential: string; - ndCredential?: string; - userId: string | null; - username: string; -}; - -export type Genre = { - albumCount?: number; - id: string; - imageUrl: string | null; - itemType: LibraryItem.GENRE; - name: string; - songCount?: number; -}; - export type Album = { albumArtist: string; albumArtists: RelatedArtist[]; artists: RelatedArtist[]; - backdropImageUrl: string | null; - comment: string | null; + backdropImageUrl: null | string; + comment: null | string; createdAt: string; - duration: number | null; + duration: null | number; genres: Genre[]; id: string; - imagePlaceholderUrl: string | null; - imageUrl: string | null; + imagePlaceholderUrl: null | string; + imageUrl: null | string; isCompilation: boolean | null; itemType: LibraryItem.ALBUM; - lastPlayedAt: string | null; - mbzId: string | null; + lastPlayedAt: null | string; + mbzId: null | string; name: string; - originalDate: string | null; - participants: Record | null; - playCount: number | null; - releaseDate: string | null; - releaseYear: number | null; + originalDate: null | string; + participants: null | Record; + playCount: null | number; + releaseDate: null | string; + releaseYear: null | number; serverId: string; serverType: ServerType; - size: number | null; - songCount: number | null; + size: null | number; + songCount: null | number; songs?: Song[]; - tags: Record | null; + tags: null | Record; uniqueId: string; updatedAt: string; userFavorite: boolean; - userRating: number | null; + userRating: null | number; } & { songs?: Song[] }; -export type GainInfo = { - album?: number; - track?: number; -}; - -export type Song = { - album: string | null; - albumArtists: RelatedArtist[]; - albumId: string; - artistName: string; - artists: RelatedArtist[]; - bitRate: number; - bpm: number | null; - channels: number | null; - comment: string | null; - compilation: boolean | null; - container: string | null; - createdAt: string; - discNumber: number; - discSubtitle: string | null; - duration: number; - gain: GainInfo | null; - genres: Genre[]; - id: string; - imagePlaceholderUrl: string | null; - imageUrl: string | null; - itemType: LibraryItem.SONG; - lastPlayedAt: string | null; - lyrics: string | null; - name: string; - participants: Record | null; - path: string | null; - peak: GainInfo | null; - playCount: number; - playlistItemId?: string; - releaseDate: string | null; - releaseYear: string | null; - serverId: string; - serverType: ServerType; - size: number; - streamUrl: string; - tags: Record | null; - trackNumber: number; - uniqueId: string; - updatedAt: string; - userFavorite: boolean; - userRating: number | null; -}; - export type AlbumArtist = { - albumCount: number | null; - backgroundImageUrl: string | null; - biography: string | null; - duration: number | null; + albumCount: null | number; + backgroundImageUrl: null | string; + biography: null | string; + duration: null | number; genres: Genre[]; id: string; - imageUrl: string | null; + imageUrl: null | string; itemType: LibraryItem.ALBUM_ARTIST; - lastPlayedAt: string | null; - mbz: string | null; + lastPlayedAt: null | string; + mbz: null | string; name: string; - playCount: number | null; + playCount: null | number; serverId: string; serverType: ServerType; - similarArtists: RelatedArtist[] | null; - songCount: number | null; + similarArtists: null | RelatedArtist[]; + songCount: null | number; userFavorite: boolean; - userRating: number | null; -}; - -export type RelatedAlbumArtist = { - id: string; - name: string; + userRating: null | number; }; export type Artist = { - biography: string | null; + biography: null | string; createdAt: string; id: string; itemType: LibraryItem.ARTIST; name: string; - remoteCreatedAt: string | null; + remoteCreatedAt: null | string; serverFolderId: string; serverId: string; serverType: ServerType; updatedAt: string; }; -export type RelatedArtist = { - id: string; - imageUrl: string | null; - name: string; +export type AuthenticationResponse = { + credential: string; + ndCredential?: string; + userId: null | string; + username: string; }; -export type MusicFolder = { - id: string; - name: string; -}; - -export type Playlist = { - description: string | null; - duration: number | null; - genres: Genre[]; - id: string; - imagePlaceholderUrl: string | null; - imageUrl: string | null; - itemType: LibraryItem.PLAYLIST; - name: string; - owner: string | null; - ownerId: string | null; - public: boolean | null; - rules?: Record | null; - serverId: string; - serverType: ServerType; - size: number | null; - songCount: number | null; - sync?: boolean | null; -}; - -export type GenresResponse = Genre[]; - -export type MusicFoldersResponse = MusicFolder[]; - -export type ListSortOrder = NDOrder | JFSortOrder; - -type BaseEndpointArgs = { - apiClientProps: { - server: ServerListItem | null; - signal?: AbortSignal; - }; -}; +export interface BasePaginatedResponse { + error?: any | string; + items: T; + startIndex: number; + totalRecordCount: null | number; +} export interface BaseQuery { sortBy: T; sortOrder: SortOrder; } -// Genre List -export type GenreListResponse = BasePaginatedResponse | null | undefined; +export type EndpointDetails = { + server: ServerListItem; +}; -export type GenreListArgs = { query: GenreListQuery } & BaseEndpointArgs; +export type GainInfo = { + album?: number; + track?: number; +}; -export enum GenreListSort { - NAME = 'name', -} +export type Genre = { + albumCount?: number; + id: string; + imageUrl: null | string; + itemType: LibraryItem.GENRE; + name: string; + songCount?: number; +}; + +export type GenreListArgs = BaseEndpointArgs & { query: GenreListQuery }; export interface GenreListQuery extends BaseQuery { _custom?: { @@ -341,6 +246,102 @@ export interface GenreListQuery extends BaseQuery { startIndex: number; } +// Genre List +export type GenreListResponse = BasePaginatedResponse | null | undefined; + +export type GenresResponse = Genre[]; + +export type ListSortOrder = JFSortOrder | NDOrder; + +export type MusicFolder = { + id: string; + name: string; +}; + +export type MusicFoldersResponse = MusicFolder[]; + +export type Playlist = { + description: null | string; + duration: null | number; + genres: Genre[]; + id: string; + imagePlaceholderUrl: null | string; + imageUrl: null | string; + itemType: LibraryItem.PLAYLIST; + name: string; + owner: null | string; + ownerId: null | string; + public: boolean | null; + rules?: null | Record; + serverId: string; + serverType: ServerType; + size: null | number; + songCount: null | number; + sync?: boolean | null; +}; + +export type RelatedAlbumArtist = { + id: string; + name: string; +}; + +export type RelatedArtist = { + id: string; + imageUrl: null | string; + name: string; +}; + +export type Song = { + album: null | string; + albumArtists: RelatedArtist[]; + albumId: string; + artistName: string; + artists: RelatedArtist[]; + bitRate: number; + bpm: null | number; + channels: null | number; + comment: null | string; + compilation: boolean | null; + container: null | string; + createdAt: string; + discNumber: number; + discSubtitle: null | string; + duration: number; + gain: GainInfo | null; + genres: Genre[]; + id: string; + imagePlaceholderUrl: null | string; + imageUrl: null | string; + itemType: LibraryItem.SONG; + lastPlayedAt: null | string; + lyrics: null | string; + name: string; + participants: null | Record; + path: null | string; + peak: GainInfo | null; + playCount: number; + playlistItemId?: string; + releaseDate: null | string; + releaseYear: null | string; + serverId: string; + serverType: ServerType; + size: number; + streamUrl: string; + tags: null | Record; + trackNumber: number; + uniqueId: string; + updatedAt: string; + userFavorite: boolean; + userRating: null | number; +}; + +type BaseEndpointArgs = { + apiClientProps: { + server: null | ServerListItem; + signal?: AbortSignal; + }; +}; + type GenreListSortMap = { jellyfin: Record; navidrome: Record; @@ -359,9 +360,6 @@ export const genreListSortMap: GenreListSortMap = { }, }; -// Album List -export type AlbumListResponse = BasePaginatedResponse | null | undefined; - export enum AlbumListSort { ALBUM_ARTIST = 'albumArtist', ARTIST = 'artist', @@ -380,6 +378,8 @@ export enum AlbumListSort { YEAR = 'year', } +export type AlbumListArgs = BaseEndpointArgs & { query: AlbumListQuery }; + export interface AlbumListQuery extends BaseQuery { _custom?: { jellyfin?: Partial>; @@ -397,7 +397,8 @@ export interface AlbumListQuery extends BaseQuery { startIndex: number; } -export type AlbumListArgs = { query: AlbumListQuery } & BaseEndpointArgs; +// Album List +export type AlbumListResponse = BasePaginatedResponse | null | undefined; type AlbumListSortMap = { jellyfin: Record; @@ -460,21 +461,6 @@ export const albumListSortMap: AlbumListSortMap = { }, }; -// Album Detail -export type AlbumDetailResponse = Album | null | undefined; - -export type AlbumDetailQuery = { id: string }; - -export type AlbumDetailArgs = { query: AlbumDetailQuery } & BaseEndpointArgs; - -export type AlbumInfo = { - imageUrl: string | null; - notes: string | null; -}; - -// Song List -export type SongListResponse = BasePaginatedResponse | null | undefined; - export enum SongListSort { ALBUM = 'album', ALBUM_ARTIST = 'albumArtist', @@ -496,6 +482,20 @@ export enum SongListSort { YEAR = 'year', } +export type AlbumDetailArgs = BaseEndpointArgs & { query: AlbumDetailQuery }; + +export type AlbumDetailQuery = { id: string }; + +// Album Detail +export type AlbumDetailResponse = Album | null | undefined; + +export type AlbumInfo = { + imageUrl: null | string; + notes: null | string; +}; + +export type SongListArgs = BaseEndpointArgs & { query: SongListQuery }; + export interface SongListQuery extends BaseQuery { _custom?: { jellyfin?: Partial>; @@ -516,7 +516,8 @@ export interface SongListQuery extends BaseQuery { startIndex: number; } -export type SongListArgs = { query: SongListQuery } & BaseEndpointArgs; +// Song List +export type SongListResponse = BasePaginatedResponse | null | undefined; type SongListSortMap = { jellyfin: Record; @@ -587,16 +588,6 @@ export const songListSortMap: SongListSortMap = { }, }; -// Song Detail -export type SongDetailResponse = Song | null | undefined; - -export type SongDetailQuery = { id: string }; - -export type SongDetailArgs = { query: SongDetailQuery } & BaseEndpointArgs; - -// Album Artist List -export type AlbumArtistListResponse = BasePaginatedResponse | null | undefined; - export enum AlbumArtistListSort { ALBUM = 'album', ALBUM_COUNT = 'albumCount', @@ -611,6 +602,8 @@ export enum AlbumArtistListSort { SONG_COUNT = 'songCount', } +export type AlbumArtistListArgs = BaseEndpointArgs & { query: AlbumArtistListQuery }; + export interface AlbumArtistListQuery extends BaseQuery { _custom?: { jellyfin?: Partial>; @@ -622,7 +615,15 @@ export interface AlbumArtistListQuery extends BaseQuery { startIndex: number; } -export type AlbumArtistListArgs = { query: AlbumArtistListQuery } & BaseEndpointArgs; +// Album Artist List +export type AlbumArtistListResponse = BasePaginatedResponse | null | undefined; + +export type SongDetailArgs = BaseEndpointArgs & { query: SongDetailQuery }; + +export type SongDetailQuery = { id: string }; + +// Song Detail +export type SongDetailResponse = null | Song | undefined; type AlbumArtistListSortMap = { jellyfin: Record; @@ -674,15 +675,6 @@ export const albumArtistListSortMap: AlbumArtistListSortMap = { // Album Artist Detail -export type AlbumArtistDetailResponse = AlbumArtist | null; - -export type AlbumArtistDetailQuery = { id: string }; - -export type AlbumArtistDetailArgs = { query: AlbumArtistDetailQuery } & BaseEndpointArgs; - -// Artist List -export type ArtistListResponse = BasePaginatedResponse | null | undefined; - export enum ArtistListSort { ALBUM = 'album', ALBUM_COUNT = 'albumCount', @@ -697,6 +689,14 @@ export enum ArtistListSort { SONG_COUNT = 'songCount', } +export type AlbumArtistDetailArgs = BaseEndpointArgs & { query: AlbumArtistDetailQuery }; + +export type AlbumArtistDetailQuery = { id: string }; + +export type AlbumArtistDetailResponse = AlbumArtist | null; + +export type ArtistListArgs = BaseEndpointArgs & { query: ArtistListQuery }; + export interface ArtistListQuery extends BaseQuery { _custom?: { jellyfin?: Partial>; @@ -709,7 +709,8 @@ export interface ArtistListQuery extends BaseQuery { startIndex: number; } -export type ArtistListArgs = { query: ArtistListQuery } & BaseEndpointArgs; +// Artist List +export type ArtistListResponse = BasePaginatedResponse | null | undefined; type ArtistListSortMap = { jellyfin: Record; @@ -761,71 +762,33 @@ export const artistListSortMap: ArtistListSortMap = { // Artist Detail -// Favorite -export type FavoriteResponse = null | undefined; +export enum PlaylistListSort { + DURATION = 'duration', + NAME = 'name', + OWNER = 'owner', + PUBLIC = 'public', + SONG_COUNT = 'songCount', + UPDATED_AT = 'updatedAt', +} -export type FavoriteQuery = { - id: string[]; - type: LibraryItem; -}; - -export type FavoriteArgs = { query: FavoriteQuery; serverId?: string } & BaseEndpointArgs; - -// Rating -export type RatingResponse = null | undefined; - -export type RatingQuery = { - item: AnyLibraryItems; - rating: number; -}; - -export type SetRatingArgs = { query: RatingQuery; serverId?: string } & BaseEndpointArgs; - -// Sharing -export type ShareItemResponse = { id: string } | undefined; - -export type ShareItemBody = { - description: string; - downloadable: boolean; - expires: number; - resourceIds: string; - resourceType: string; -}; - -export type ShareItemArgs = { body: ShareItemBody; serverId?: string } & BaseEndpointArgs; - -// Add to playlist -export type AddToPlaylistResponse = null | undefined; - -export type AddToPlaylistQuery = { - id: string; +export type AddToPlaylistArgs = BaseEndpointArgs & { + body: AddToPlaylistBody; + query: AddToPlaylistQuery; + serverId?: string; }; export type AddToPlaylistBody = { songId: string[]; }; -export type AddToPlaylistArgs = { - body: AddToPlaylistBody; - query: AddToPlaylistQuery; - serverId?: string; -} & BaseEndpointArgs; - -// Remove from playlist -export type RemoveFromPlaylistResponse = null | undefined; - -export type RemoveFromPlaylistQuery = { +export type AddToPlaylistQuery = { id: string; - songId: string[]; }; -export type RemoveFromPlaylistArgs = { - query: RemoveFromPlaylistQuery; - serverId?: string; -} & BaseEndpointArgs; +// Add to playlist +export type AddToPlaylistResponse = null | undefined; -// Create Playlist -export type CreatePlaylistResponse = { id: string } | undefined; +export type CreatePlaylistArgs = BaseEndpointArgs & { body: CreatePlaylistBody; serverId?: string }; export type CreatePlaylistBody = { _custom?: { @@ -841,13 +804,84 @@ export type CreatePlaylistBody = { public?: boolean; }; -export type CreatePlaylistArgs = { body: CreatePlaylistBody; serverId?: string } & BaseEndpointArgs; +// Create Playlist +export type CreatePlaylistResponse = undefined | { id: string }; -// Update Playlist -export type UpdatePlaylistResponse = null | undefined; +export type DeletePlaylistArgs = BaseEndpointArgs & { + query: DeletePlaylistQuery; + serverId?: string; +}; -export type UpdatePlaylistQuery = { +export type DeletePlaylistQuery = { id: string }; + +// Delete Playlist +export type DeletePlaylistResponse = null | undefined; + +export type FavoriteArgs = BaseEndpointArgs & { query: FavoriteQuery; serverId?: string }; + +export type FavoriteQuery = { + id: string[]; + type: LibraryItem; +}; + +// Favorite +export type FavoriteResponse = null | undefined; + +export type PlaylistListArgs = BaseEndpointArgs & { query: PlaylistListQuery }; + +export interface PlaylistListQuery extends BaseQuery { + _custom?: { + jellyfin?: Partial>; + navidrome?: Partial>; + }; + limit?: number; + searchTerm?: string; + startIndex: number; +} + +// Playlist List +export type PlaylistListResponse = BasePaginatedResponse | null | undefined; + +export type RatingQuery = { + item: AnyLibraryItems; + rating: number; +}; + +// Rating +export type RatingResponse = null | undefined; + +export type RemoveFromPlaylistArgs = BaseEndpointArgs & { + query: RemoveFromPlaylistQuery; + serverId?: string; +}; + +export type RemoveFromPlaylistQuery = { id: string; + songId: string[]; +}; + +// Remove from playlist +export type RemoveFromPlaylistResponse = null | undefined; + +export type SetRatingArgs = BaseEndpointArgs & { query: RatingQuery; serverId?: string }; + +export type ShareItemArgs = BaseEndpointArgs & { body: ShareItemBody; serverId?: string }; + +export type ShareItemBody = { + description: string; + downloadable: boolean; + expires: number; + resourceIds: string; + resourceType: string; +}; + +// Sharing +export type ShareItemResponse = undefined | { id: string }; + +export type UpdatePlaylistArgs = BaseEndpointArgs & { + body: UpdatePlaylistBody; + query: UpdatePlaylistQuery; + serverId?: string; }; export type UpdatePlaylistBody = { @@ -865,45 +899,12 @@ export type UpdatePlaylistBody = { public?: boolean; }; -export type UpdatePlaylistArgs = { - body: UpdatePlaylistBody; - query: UpdatePlaylistQuery; - serverId?: string; -} & BaseEndpointArgs; +export type UpdatePlaylistQuery = { + id: string; +}; -// Delete Playlist -export type DeletePlaylistResponse = null | undefined; - -export type DeletePlaylistQuery = { id: string }; - -export type DeletePlaylistArgs = { - query: DeletePlaylistQuery; - serverId?: string; -} & BaseEndpointArgs; - -// Playlist List -export type PlaylistListResponse = BasePaginatedResponse | null | undefined; - -export enum PlaylistListSort { - DURATION = 'duration', - NAME = 'name', - OWNER = 'owner', - PUBLIC = 'public', - SONG_COUNT = 'songCount', - UPDATED_AT = 'updatedAt', -} - -export interface PlaylistListQuery extends BaseQuery { - _custom?: { - jellyfin?: Partial>; - navidrome?: Partial>; - }; - limit?: number; - searchTerm?: string; - startIndex: number; -} - -export type PlaylistListArgs = { query: PlaylistListQuery } & BaseEndpointArgs; +// Update Playlist +export type UpdatePlaylistResponse = null | undefined; type PlaylistListSortMap = { jellyfin: Record; @@ -938,17 +939,27 @@ export const playlistListSortMap: PlaylistListSortMap = { }, }; -// Playlist Detail -export type PlaylistDetailResponse = Playlist; +export enum UserListSort { + NAME = 'name', +} + +export type MusicFolderListArgs = BaseEndpointArgs; + +export type MusicFolderListQuery = null; + +// Music Folder List +export type MusicFolderListResponse = BasePaginatedResponse | null | undefined; + +export type PlaylistDetailArgs = BaseEndpointArgs & { query: PlaylistDetailQuery }; export type PlaylistDetailQuery = { id: string; }; -export type PlaylistDetailArgs = { query: PlaylistDetailQuery } & BaseEndpointArgs; +// Playlist Detail +export type PlaylistDetailResponse = Playlist; -// Playlist Songs -export type PlaylistSongListResponse = BasePaginatedResponse | null | undefined; +export type PlaylistSongListArgs = BaseEndpointArgs & { query: PlaylistSongListQuery }; export type PlaylistSongListQuery = { id: string; @@ -958,22 +969,10 @@ export type PlaylistSongListQuery = { startIndex: number; }; -export type PlaylistSongListArgs = { query: PlaylistSongListQuery } & BaseEndpointArgs; +// Playlist Songs +export type PlaylistSongListResponse = BasePaginatedResponse | null | undefined; -// Music Folder List -export type MusicFolderListResponse = BasePaginatedResponse | null | undefined; - -export type MusicFolderListQuery = null; - -export type MusicFolderListArgs = BaseEndpointArgs; - -// User list -// Playlist List -export type UserListResponse = BasePaginatedResponse | null | undefined; - -export enum UserListSort { - NAME = 'name', -} +export type UserListArgs = BaseEndpointArgs & { query: UserListQuery }; export interface UserListQuery extends BaseQuery { _custom?: { @@ -986,7 +985,9 @@ export interface UserListQuery extends BaseQuery { startIndex: number; } -export type UserListArgs = { query: UserListQuery } & BaseEndpointArgs; +// User list +// Playlist List +export type UserListResponse = BasePaginatedResponse | null | undefined; type UserListSortMap = { jellyfin: Record; @@ -1006,16 +1007,13 @@ export const userListSortMap: UserListSortMap = { }, }; -// Top Songs List -export type TopSongListResponse = BasePaginatedResponse | null | undefined; +export enum Played { + All = 'all', + Never = 'never', + Played = 'played', +} -export type TopSongListQuery = { - artist: string; - artistId: string; - limit?: number; -}; - -export type TopSongListArgs = { query: TopSongListQuery } & BaseEndpointArgs; +export type ArtistInfoArgs = BaseEndpointArgs & { query: ArtistInfoQuery }; // Artist Info export type ArtistInfoQuery = { @@ -1024,98 +1022,12 @@ export type ArtistInfoQuery = { musicFolderId?: string; }; -export type ArtistInfoArgs = { query: ArtistInfoQuery } & BaseEndpointArgs; - -// Scrobble -export type ScrobbleResponse = null | undefined; - -export type ScrobbleArgs = { - query: ScrobbleQuery; - serverId?: string; -} & BaseEndpointArgs; - -export type ScrobbleQuery = { - event?: 'pause' | 'unpause' | 'timeupdate' | 'start'; - id: string; - position?: number; - submission: boolean; +export type FullLyricsMetadata = Omit & { + lyrics: LyricsResponse; + remote: boolean; + source: string; }; -export type SearchQuery = { - albumArtistLimit?: number; - albumArtistStartIndex?: number; - albumLimit?: number; - albumStartIndex?: number; - musicFolderId?: string; - query?: string; - songLimit?: number; - songStartIndex?: number; -}; - -export type SearchSongsQuery = { - musicFolderId?: string; - query?: string; - songLimit?: number; - songStartIndex?: number; -}; - -export type SearchAlbumsQuery = { - albumLimit?: number; - albumStartIndex?: number; - musicFolderId?: string; - query?: string; -}; - -export type SearchAlbumArtistsQuery = { - albumArtistLimit?: number; - albumArtistStartIndex?: number; - musicFolderId?: string; - query?: string; -}; - -export type SearchArgs = { - query: SearchQuery; -} & BaseEndpointArgs; - -export type SearchResponse = { - albumArtists: AlbumArtist[]; - albums: Album[]; - songs: Song[]; -}; - -export enum Played { - All = 'all', - Never = 'never', - Played = 'played', -} - -export type RandomSongListQuery = { - genre?: string; - limit?: number; - maxYear?: number; - minYear?: number; - musicFolderId?: string; - played: Played; -}; - -export type RandomSongListArgs = { - query: RandomSongListQuery; -} & BaseEndpointArgs; - -export type RandomSongListResponse = SongListResponse; - -export type LyricsQuery = { - songId: string; -}; - -export type LyricsArgs = { - query: LyricsQuery; -} & BaseEndpointArgs; - -export type SynchronizedLyricsArray = Array<[number, string]>; - -export type LyricsResponse = SynchronizedLyricsArray | string; - export type InternetProviderLyricResponse = { artist: string; id: string; @@ -1132,132 +1044,113 @@ export type InternetProviderLyricSearchResponse = { source: LyricSource; }; -export type FullLyricsMetadata = { - lyrics: LyricsResponse; - remote: boolean; - source: string; -} & Omit; - export type LyricOverride = Omit; +export type LyricsArgs = BaseEndpointArgs & { + query: LyricsQuery; +}; + +export type LyricsQuery = { + songId: string; +}; + +export type LyricsResponse = string | SynchronizedLyricsArray; + +export type RandomSongListArgs = BaseEndpointArgs & { + query: RandomSongListQuery; +}; + +export type RandomSongListQuery = { + genre?: string; + limit?: number; + maxYear?: number; + minYear?: number; + musicFolderId?: string; + played: Played; +}; + +export type RandomSongListResponse = SongListResponse; + +export type ScrobbleArgs = BaseEndpointArgs & { + query: ScrobbleQuery; + serverId?: string; +}; + +export type ScrobbleQuery = { + event?: 'pause' | 'start' | 'timeupdate' | 'unpause'; + id: string; + position?: number; + submission: boolean; +}; + +// Scrobble +export type ScrobbleResponse = null | undefined; + +export type SearchAlbumArtistsQuery = { + albumArtistLimit?: number; + albumArtistStartIndex?: number; + musicFolderId?: string; + query?: string; +}; + +export type SearchAlbumsQuery = { + albumLimit?: number; + albumStartIndex?: number; + musicFolderId?: string; + query?: string; +}; + +export type SearchArgs = BaseEndpointArgs & { + query: SearchQuery; +}; + +export type SearchQuery = { + albumArtistLimit?: number; + albumArtistStartIndex?: number; + albumLimit?: number; + albumStartIndex?: number; + musicFolderId?: string; + query?: string; + songLimit?: number; + songStartIndex?: number; +}; + +export type SearchResponse = { + albumArtists: AlbumArtist[]; + albums: Album[]; + songs: Song[]; +}; + +export type SearchSongsQuery = { + musicFolderId?: string; + query?: string; + songLimit?: number; + songStartIndex?: number; +}; + +export type SynchronizedLyricsArray = Array<[number, string]>; + +export type TopSongListArgs = BaseEndpointArgs & { query: TopSongListQuery }; + +export type TopSongListQuery = { + artist: string; + artistId: string; + limit?: number; +}; + +// Top Songs List +export type TopSongListResponse = BasePaginatedResponse | null | undefined; + export const instanceOfCancellationError = (error: any) => { return 'revert' in error; }; -export type LyricSearchQuery = { - album?: string; - artist?: string; - duration?: number; - name?: string; -}; - -export type LyricGetQuery = { - remoteSongId: string; - remoteSource: LyricSource; - song: Song; -}; - export enum LyricSource { GENIUS = 'Genius', LRCLIB = 'lrclib.net', NETEASE = 'NetEase', } -export type LyricsOverride = Omit & { id: string }; - -// This type from https://wicg.github.io/local-font-access/#fontdata -// NOTE: it is still experimental, so this should be updates as appropriate -export type FontData = { - family: string; - fullName: string; - postscriptName: string; - style: string; -}; - -export type ServerInfoArgs = BaseEndpointArgs; - -export type ServerInfo = { - features: ServerFeatures; - id?: string; - version: string; -}; - -export type StructuredLyricsArgs = { - query: LyricsQuery; -} & BaseEndpointArgs; - -export type StructuredUnsyncedLyric = { - lyrics: string; - synced: false; -} & Omit; - -export type StructuredSyncedLyric = { - lyrics: SynchronizedLyricsArray; - synced: true; -} & Omit; - -export type StructuredLyric = { - lang: string; -} & (StructuredUnsyncedLyric | StructuredSyncedLyric); - -export type SimilarSongsQuery = { - albumArtistIds: string[]; - count?: number; - songId: string; -}; - -export type SimilarSongsArgs = { - query: SimilarSongsQuery; -} & BaseEndpointArgs; - -export type MoveItemQuery = { - endingIndex: number; - playlistId: string; - startingIndex: number; - trackId: string; -}; - -export type MoveItemArgs = { - query: MoveItemQuery; -} & BaseEndpointArgs; - -export type DownloadQuery = { - id: string; -}; - -export type DownloadArgs = { - query: DownloadQuery; -} & BaseEndpointArgs; - -export type TranscodingQuery = { - base: string; - bitrate?: number; - format?: string; -}; - -export type TranscodingArgs = { - query: TranscodingQuery; -} & BaseEndpointArgs; - -export type TagQuery = { - folder?: string; - type: LibraryItem.ALBUM | LibraryItem.SONG; -}; - -export type TagArgs = { - query: TagQuery; -} & BaseEndpointArgs; - -export type Tag = { - name: string; - options: string[]; -}; - -export type TagResponses = { - boolTags?: string[]; - enumTags?: Tag[]; -}; - export type ControllerEndpoint = { addToPlaylist: (args: AddToPlaylistArgs) => Promise; authenticate: ( @@ -1307,6 +1200,114 @@ export type ControllerEndpoint = { updatePlaylist: (args: UpdatePlaylistArgs) => Promise; }; +export type DownloadArgs = BaseEndpointArgs & { + query: DownloadQuery; +}; + +export type DownloadQuery = { + id: string; +}; + +// This type from https://wicg.github.io/local-font-access/#fontdata +// NOTE: it is still experimental, so this should be updates as appropriate +export type FontData = { + family: string; + fullName: string; + postscriptName: string; + style: string; +}; + +export type LyricGetQuery = { + remoteSongId: string; + remoteSource: LyricSource; + song: Song; +}; + +export type LyricSearchQuery = { + album?: string; + artist?: string; + duration?: number; + name?: string; +}; + +export type LyricsOverride = Omit & { id: string }; + +export type MoveItemArgs = BaseEndpointArgs & { + query: MoveItemQuery; +}; + +export type MoveItemQuery = { + endingIndex: number; + playlistId: string; + startingIndex: number; + trackId: string; +}; + +export type ServerInfo = { + features: ServerFeatures; + id?: string; + version: string; +}; + +export type ServerInfoArgs = BaseEndpointArgs; + +export type SimilarSongsArgs = BaseEndpointArgs & { + query: SimilarSongsQuery; +}; + +export type SimilarSongsQuery = { + albumArtistIds: string[]; + count?: number; + songId: string; +}; + +export type StructuredLyric = (StructuredSyncedLyric | StructuredUnsyncedLyric) & { + lang: string; +}; + +export type StructuredLyricsArgs = BaseEndpointArgs & { + query: LyricsQuery; +}; + +export type StructuredSyncedLyric = Omit & { + lyrics: SynchronizedLyricsArray; + synced: true; +}; + +export type StructuredUnsyncedLyric = Omit & { + lyrics: string; + synced: false; +}; + +export type Tag = { + name: string; + options: string[]; +}; + +export type TagArgs = BaseEndpointArgs & { + query: TagQuery; +}; + +export type TagQuery = { + folder?: string; + type: LibraryItem.ALBUM | LibraryItem.SONG; +}; + +export type TagResponses = { + boolTags?: string[]; + enumTags?: Tag[]; +}; + +export type TranscodingArgs = BaseEndpointArgs & { + query: TranscodingQuery; +}; + +export type TranscodingQuery = { + base: string; + bitrate?: number; + format?: string; +}; + export const sortAlbumList = (albums: Album[], sortBy: AlbumListSort, sortOrder: SortOrder) => { let results = albums; @@ -1335,21 +1336,21 @@ export const sortAlbumList = (albums: Album[], sortBy: AlbumListSort, sortOrder: case AlbumListSort.RANDOM: results = shuffle(results); break; + case AlbumListSort.RATING: + results = orderBy(results, ['userRating'], [order]); + break; case AlbumListSort.RECENTLY_ADDED: results = orderBy(results, ['createdAt'], [order]); break; case AlbumListSort.RECENTLY_PLAYED: results = orderBy(results, ['lastPlayedAt'], [order]); break; - case AlbumListSort.RATING: - results = orderBy(results, ['userRating'], [order]); + case AlbumListSort.SONG_COUNT: + results = orderBy(results, ['songCount'], [order]); break; case AlbumListSort.YEAR: results = orderBy(results, ['releaseYear'], [order]); break; - case AlbumListSort.SONG_COUNT: - results = orderBy(results, ['songCount'], [order]); - break; default: break; } @@ -1463,14 +1464,14 @@ export const sortAlbumArtistList = ( results = orderBy(artists, ['albumCount', (v) => v.name.toLowerCase()], [order, 'asc']); break; - case AlbumArtistListSort.NAME: - results = orderBy(artists, [(v) => v.name.toLowerCase()], [order]); - break; - case AlbumArtistListSort.FAVORITED: results = orderBy(artists, ['starred'], [order]); break; + case AlbumArtistListSort.NAME: + results = orderBy(artists, [(v) => v.name.toLowerCase()], [order]); + break; + case AlbumArtistListSort.RATING: results = orderBy(artists, ['userRating'], [order]); break; diff --git a/src/renderer/api/utils.ts b/src/renderer/api/utils.ts index d995b18b..00914d12 100644 --- a/src/renderer/api/utils.ts +++ b/src/renderer/api/utils.ts @@ -3,10 +3,11 @@ import isElectron from 'is-electron'; import semverCoerce from 'semver/functions/coerce'; import semverGte from 'semver/functions/gte'; import { z } from 'zod'; + +import { ServerFeature } from '/@/renderer/api/features-types'; +import { ServerListItem } from '/@/renderer/api/types'; import { toast } from '/@/renderer/components/toast'; import { useAuthStore } from '/@/renderer/store'; -import { ServerListItem } from '/@/renderer/api/types'; -import { ServerFeature } from '/@/renderer/api/features-types'; // Since ts-rest client returns a strict response type, we need to add the headers to the body object export const resultWithHeaders = (itemSchema: ItemType) => { @@ -29,7 +30,7 @@ export const resultSubsonicBaseResponse = ( }); }; -export const authenticationFailure = (currentServer: ServerListItem | null) => { +export const authenticationFailure = (currentServer: null | ServerListItem) => { toast.error({ message: 'Your session has expired.', }); @@ -43,7 +44,7 @@ export const authenticationFailure = (currentServer: ServerListItem | null) => { } }; -export const hasFeature = (server: ServerListItem | null, feature: ServerFeature): boolean => { +export const hasFeature = (server: null | ServerListItem, feature: ServerFeature): boolean => { if (!server || !server.features) { return false; } diff --git a/src/renderer/app.tsx b/src/renderer/app.tsx index 6637b28b..b5deb049 100644 --- a/src/renderer/app.tsx +++ b/src/renderer/app.tsx @@ -1,33 +1,39 @@ -import { useEffect, useMemo, useState, useRef } from 'react'; import { ClientSideRowModelModule } from '@ag-grid-community/client-side-row-model'; import { ModuleRegistry } from '@ag-grid-community/core'; import { InfiniteRowModelModule } from '@ag-grid-community/infinite-row-model'; import { MantineProvider } from '@mantine/core'; import isElectron from 'is-electron'; +import { useEffect, useMemo, useRef, useState } from 'react'; import { initSimpleImg } from 'react-simple-img'; + +import i18n from '../i18n/i18n'; import { toast } from './components'; import { useTheme } from './hooks'; -import { IsUpdatedDialog } from './is-updated-dialog'; import { AppRouter } from './router/app-router'; +import './styles/global.scss'; + +import '@ag-grid-community/styles/ag-grid.css'; +import 'overlayscrollbars/overlayscrollbars.css'; + import { + useCssSettings, useHotkeySettings, usePlaybackSettings, useRemoteSettings, useSettingsStore, } from './store/settings.store'; -import './styles/global.scss'; + import { ContextMenuProvider } from '/@/renderer/features/context-menu'; -import { useHandlePlayQueueAdd } from '/@/renderer/features/player/hooks/use-handle-playqueue-add'; -import { PlayQueueHandlerContext } from '/@/renderer/features/player'; -import { getMpvProperties } from '/@/renderer/features/settings/components/playback/mpv-settings'; -import { PlayerState, useCssSettings, usePlayerStore, useQueueControls } from '/@/renderer/store'; -import { FontType, PlaybackType, PlayerStatus, WebAudio } from '/@/renderer/types'; -import '@ag-grid-community/styles/ag-grid.css'; -import { WebAudioContext } from '/@/renderer/features/player/context/webaudio-context'; import { useDiscordRpc } from '/@/renderer/features/discord-rpc/use-discord-rpc'; -import i18n from '/@/i18n/i18n'; -import { useServerVersion } from '/@/renderer/hooks/use-server-version'; +import { PlayQueueHandlerContext } from '/@/renderer/features/player'; +import { WebAudioContext } from '/@/renderer/features/player/context/webaudio-context'; +import { useHandlePlayQueueAdd } from '/@/renderer/features/player/hooks/use-handle-playqueue-add'; import { updateSong } from '/@/renderer/features/player/update-remote-song'; +import { getMpvProperties } from '/@/renderer/features/settings/components/playback/mpv-settings'; +import { useServerVersion } from '/@/renderer/hooks/use-server-version'; +import { IsUpdatedDialog } from '/@/renderer/is-updated-dialog'; +import { PlayerState, usePlayerStore, useQueueControls } from '/@/renderer/store'; +import { FontType, PlaybackType, PlayerStatus, WebAudio } from '/@/renderer/types'; import { sanitizeCss } from '/@/renderer/utils/sanitize'; import { setQueue } from '/@/renderer/utils/set-transcoded-queue-data'; @@ -35,10 +41,10 @@ ModuleRegistry.registerModules([ClientSideRowModelModule, InfiniteRowModelModule initSimpleImg({ threshold: 0.05 }, true); -const mpvPlayer = isElectron() ? window.electron.mpvPlayer : null; -const ipc = isElectron() ? window.electron.ipc : null; -const remote = isElectron() ? window.electron.remote : null; -const utils = isElectron() ? window.electron.utils : null; +const mpvPlayer = isElectron() ? window.api.mpvPlayer : null; +const ipc = isElectron() ? window.api.ipc : null; +const remote = isElectron() ? window.api.remote : null; +const utils = isElectron() ? window.api.utils : null; export const App = () => { const theme = useTheme(); @@ -46,7 +52,7 @@ export const App = () => { const language = useSettingsStore((store) => store.general.language); const nativeImageAspect = useSettingsStore((store) => store.general.nativeAspectRatio); const { builtIn, custom, system, type } = useSettingsStore((state) => state.font); - const { enabled, content } = useCssSettings(); + const { content, enabled } = useCssSettings(); const { type: playbackType } = usePlaybackSettings(); const { bindings } = useHotkeySettings(); const handlePlayQueueAdd = useHandlePlayQueueAdd(); @@ -230,10 +236,8 @@ export const App = () => { return ( { xs: '0rem', }, }} + withGlobalStyles + withNormalizeCSS > diff --git a/src/renderer/assets/assets.d.ts b/src/renderer/assets/assets.d.ts new file mode 100644 index 00000000..cf652454 --- /dev/null +++ b/src/renderer/assets/assets.d.ts @@ -0,0 +1,31 @@ +type Styles = Record; + +declare module '*.svg' { + const content: string; + export default content; +} + +declare module '*.png' { + const content: string; + export default content; +} + +declare module '*.jpg' { + const content: string; + export default content; +} + +declare module '*.scss' { + const content: Styles; + export default content; +} + +declare module '*.sass' { + const content: Styles; + export default content; +} + +declare module '*.css' { + const content: Styles; + export default content; +} diff --git a/src/renderer/assets/entitlements.mac.plist b/src/renderer/assets/entitlements.mac.plist new file mode 100644 index 00000000..dad3e20e --- /dev/null +++ b/src/renderer/assets/entitlements.mac.plist @@ -0,0 +1,10 @@ + + + + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.allow-jit + + + diff --git a/src/renderer/assets/icons/1024x1024.png b/src/renderer/assets/icons/1024x1024.png new file mode 100644 index 0000000000000000000000000000000000000000..62563d85b033a35a11c60bcad8a870a16aac0702 GIT binary patch literal 158010 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
(#1>E7mUU?3vEmi3~KNjF4EYHDhQ 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

OGHnwzjFXFbBlT&Bd@ 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�rLsPF;k#g`d zEQfVVHO?_Jgb%w+oK@K!t;VJxPQT;4Uy9A`@H0Sk)_B?r7cYbK2l!OEVC__=pVC1W zF8>%N6n@7y|M|_YTe_#vp+WtWuWM5^64Q#FvbZH3D(UC9kNTdWVxko@HK%&E233%o zfQXxP9ZgDJZ>MyjDe)jYeI$zA+3-GEU#;u|78d)X*M*)F*+v)V6^N8gJ;N6>8ReXW z^scCe-%Vh)<4ZyTNXIVYotC8AE;9lP0PPq-8j$gQw-RPImH*$~!X}{FZsgpc6rN2l z{!gne5&DlJWAxW=j1?_JeySka!M97GY`VJ|Gv#Q^T`%1Q?2V~c`=!(S_HEPqs#ehG z2JRdf)nF(feH@yb1SRLF03jX(fZ$aQUBJ*rv{T4I&uaAH<)G3ReBiEKnlhdKDrm25 zgAw$CMxH#d2kH`bMtCoAg^ptjEgnF^iX|?*wGv~^mFrJAo1jl>)7%WhzU4|D#}@UN zYV*rlyY$ZjlcdY|;5M*MqgcOh?wy45KnG+#qpJoR8U9)9OWjDLVp3Kk(Uf&iJ22Nl z{?zHH80dkWd}a~w?G=Z(qTkQ22fBxzOx%h-%F!0lkJH#Y3a^ywM=N_o`at#K#bY5J z!m;JGk4!DL_@+1VR*W?j1a2zk>z%{wp1G!Sr8S{i|LX9o`pYY3W2yT}heUsaSvp8h zR|r$3Yh}dMyZkQMnP?PJCqJGk|CiAH?bE;wPI&-zez z(*pB74QV_VkdEfdAz8E)5c#TF8mI*UqY0RMQJ%t>a}(%`EQADT2Ss;bj3~dL{pdxE z{)m@HL?prxPWYZ%VBH(5k*%tQX|Kj+(^HnmWRUkuZ*jC)o&0&htytB0rdX<&XMIAA zL6_8>YfKKZs1Ye6yMY?1lLsFPhsymbUQEdHaFA}cWw^Y7*(%)-a2m{N{n$r)2!pMc z0JH?zWvl(PJ90+1eSmcr!K}%l&^|H;S~$*()tJMd1AcXC$Vd2LCX6OOTA*%tt3bG3TC?9PwhMuHlj1AQ2hL zc)K}xdHp^2R{(Gb+@W7+WNjx@(x3MBZm9TJ3ByRK=)0769q-=U*){79f)HP8<&@tb z`nSS_!^ywwG|%)a6r1o3pE}XY=PtM`@2!~aCmiy>-Rf9Wnm9a=T`v51eqJ~!*LXF_ z1{ikgy14QRq38vlv0qjL6R;Ze7MWujfmOH3u1n5UUWqlcnTaW`zs3O;&_RfN9 zyL*6J1iZ851?!O=q-lgp1i1JzV2povdoRm@izh2K9*PCc#IZuYXH%#~dL0bfB{2$m>o6lnpu}BJ1KG z>ql)GLpd_mJ&&|}6#f%`l*9}!@OFX!{<&aE8}Y>;sx^{sn*FvZpK9LjUAd*5`ED&D zx_FnnST$2X=nMyZNy|hf8zpVlCDI!%w92(;DjW;6yl;@Mi)dlwFa38)SY2j8d+`|e zb>!Ncb+3{I4&g!<+T=ITy6)$T z@mroZfc6XAX=r3xk-2}|M0jrhyUZnz$U#(43Z&S0K?`K8&o1W{_Eo%>XH$j*uGS1nufuY^)yqlXFv>vu! z0V5(0@1^kE=Q} zBAEEjDjd`sT?rZ;rDcWfG2@tnnTXE@MKTGHKG19~+gRA8IjbDUN@!l8V=hAGo=p~z z93Vqp+g+?pJcDL>eW0otMkr9T@?3uU&@JLvXM5!hltl8vjY}46le@zk6>ld=2d{`- zH?AdG3wtJY?2L~?BeyWjX+1!TKaL~cvQH}r5JQRq5%SOduImB-QQCR>BHX*pSL*!4 zdd1TX-?q&1b`@&bTTRgI7A>qbR42&4y?V_C0Gx`QiTY<@@=I1qa>^t6lf9`Y6^ zUB-rUszjX5tqsa=`G~I2wK6PNr$%^DIiF0?BBII78sWCMC6{T4GqK+GtmDxskRLLk%0#wdUUq^*U{Nh+|W zz8Hno#FZR?UQ9SljW3kt$A!n<}*nsqj+_*PzY{<@&z7+EG5`e;J+} z;vasSAdJZ?D+e71kz7rJ04s*O16OtYB(IaKqrK4tq4%5vLAL@?)QVZ3;Ji_rnN2l` zq{y<$SgSDbPH@{k%VO57;^lTq#X0<|Y4j~vE6+wG?s7KT%S_=zvXmCpzmp~|hH8RR zq(Ps!2*l+;SdcCmcV9SgG9a|`6t7VPY7`Ml?3pMibwGr7P4R9FSDC=eRKyeI--&NF zeSW+h2-p+Pd>JwEJhd9>d|`g8DX&|iIWGx0+%$e+Bo5DNU$-_AhO$rfS^?J3!Bbj4 zWl+as2DU+soSHe8Ek%jO0>ZYy^@oVDc?DgHQ+MUg7<}l*lcfA)VxS5jSq;-%y%XJ% z^cT_2jW2?uI(eKI(Am%J0u}__O#qN{Bi=O)vJ$YisczofaWrcU2ZhV^fwXHK(yd`d z>LFz8TbI^IY%N0HDAlWVIQNr0QZP#Q>WExQ6;CM z5AFVn*t1s!MK_x56_#>8rT*U0=;uY^YoA;W?1ok+I5Zn8DX?bFAO8X{xQQmF_KMNWeZBqkNxTB!Fb_tay;k$n-|>a&Xxh zDI1sW@+X=omw4o8ty`mYeN73|#GK=`II-(Io6}Z{)mQI+f`H1 z+Hi^6=jWHJXH$u}*?w6u>G^n*X;bU41?TLs9^uZxxQ5vV1o<{btrxO>M|7mH`^TLw z#qo45-OX7PP+CcPiXNl2y}N`LX|3U$6;IBLfT)L3rX0+4eJ^%}3DWzOpj8`vff2_0 zlor^^gWRK~z?PPnF5dXbEEY5mAN^r(3ORC#-UMV?fCgv$%4DR!sn+G943Yke@W6p+ z0)trCd#2V`npW-{0#`PKteVa_ z#P4goJ%*%1XMfPR`z|vMSodu2tuWa!{`@pOJv}%*C%6_&?V{sIlRS^4wC-ra*+y@H zRy2-D(Bi@CeF81kUJ&eo{R*L#=WyB-MgRajskS`kyHXv@eEYcXVQ5D-<+F#@+bPf{ zdQ&$?{~NbS#06B-{qyr%9SsgozpkRbnkBCsA6;XaGfvJ6bS10ysr;q8`g3%g6^AP7 z6cOLAN=7?n;N|rbcA4b{#ImNTEOkMn{B1AMg%9+?(T;(3=zv^q+>(bTiX#XBOP@+89e zP7BW<33uPVKQUW_WGfO0F>^C)R#iPB=R!6v_AYJn0xd(wqEQo!lbWo z0MvRtKK@0ssQq0>e$N^V@<3(^V5XgudF-c55lA)b1mYbdYSGm8Yyb2s1lo$wWS)nq7vf-xr+vZO25_+M&dN z^RLXXMGJkPJDhCKM&v?=bWT};dThn1s?!pn{E#l8A;c(4y=u z)zX?!qk$t?PzAIcU4p6uG591os^QAz*(H}@y29Y7M$PR7Y=>Lepy0Y*gm#FN$ES-! z|v|j3^DG@vlTVm{_Jl|B#4We zPS?$(=si}ReDjE7Xm%W!A1S~@tjj1M0g}Sq-_Xbl96bv^Xn=!7!E&kQ(f%6s@Ib{M zxRwxKh~1uarm~{bCk*m$$1)H>0v z7N$;!TVJ_3jgNm+Kb~zqHt100f-6s(n@8;o;Ho+swtSZ>wkPI5y>*bqbe4q$e&8F< zw5M=qJj_c=+qW#Ypv%V!se{8#0HQiJj^e4~j<<{y2p{INRSxRW=-rmGEp2qxAkU3| zz7Fng;Au0ypUQy`?K3b5>gJpQ?7QFh9~F;YS~2&UJZ_$L)UxeXqC1z57!K|9`dyBQ zN^u1Ryej}UIxK(`VxOHw18%|p*AjJ1Vx1?@#2DubO<2Le3uDPHZ;5U@ zO=5MsXN$``t*Wih2xid))FucD9<6B)4#RbtDGpCRqpf8-$EIJc<<0Lj4TClbLNMZi zF%Bny7+n`x7zuFexRKA_JZ>;zuh=KyN;RB*5>!Wuv;O*`dL}jV7RmTFx1rC{~jvS_$eBcE{19b?DN>TK?g!q@z+J=1l z+EvwwcCBH~yrv;T0^<8YJY1LOV6!&4NuHci*rhGsp?MA|aezA1x)L(gS(#$Hk7^&! zP|>_uw=Y#3z}g#YQ={(crF$g@B0M7ev|h68&`6|SQ*~5Lto#vgGN=R=R+-A|*f%JV zuqNcFh-0J|TT~CO=HKf!?X?_PWy&AXOH{3DBDf1f_tgEV}3ev z>&cJ=2ob7T({YBni0rec_>mJk33F}>y|b!O6N)WN`2c@NvQR9|u$VSRY$wmD)lQ%V zb8ZZ=sfZ^uAO28@KUCL+xDoZmo4)4={@gfTP~)_e0BreX>GW+{1~&;RLv~|i=4lxQ z#XvR{_1se2##Q!r!$#*?0DVY+4rsy_+WGB89L6P3YvEl>c?X4lB`kp)0YyHIw#tXC z=il%I415uu&u@N~g~s_AqwIpF*BuU0MFZ=2!b|nLuX5IL3-OpefIzb(L;%gnZ)$^Q zoIiKPS49>Wr<%`hxn)}WWGD4RE>}`=N$OKs^i~-jh7C_?*>z87#obHp5I+KcvK4U- zTrDU4)+oQZj_?}a&lpGc)m7ih>}gP;TImxXA=lqiKujP1Mu5B5M(66^eN+|GdesY= z5WvJ|Gl+9ML`SP_j zF?z|3ofxl0dGm4)IAEkB-ADAhML?WgEc zFfNRgw>A||`;r0=3MmExikf(X@%vUr?orD*%v-ld`CybQa(3Hk*^Zj3{;H_OrW^zW_YIY5>9%6*7Q*l3lw`jbSF;%3A^Fw~SgmPpI+ z(=}s6)oE<>F>i=vsP2)#E}ft-h0ES|7sHnLc25u{+K$hU78^~N5wpz*gu$b2{Y;cj zVEL!YwLPBTQbEAmSQ6YNBVtI^Es%1Rv#`1p3&b_@Q2KqIPTw)*$&k)o0f*JI8$!$T zW7UR3O$d<;fNmtj|ubT+9!lsXzQ51{y+S ze9u;9fd?>Xb#+y+^vsOY>iicPjZ6;=XQC#R)`|rgIzR}?Z>9a&v3hg0hA+Z6m)YZ~ zyG9JwoZ}2F5^_oCrh2s;Oo2KJB6a5(%3j6I{L?*9;b(nq_JCz$OUhz=ckB|j@J-8y zRjK0}jLV2Gux&1Wd?o4Xlx9(S+?PA(`l)K%ZoMb7d2*b;y;-Ix8C(3Ziu?6GG3Q5@ z_us&}SsNv7J3`-=v$yDBDdGe3rhEiQe`d@wC^w@y`#b#nn%J zf4Z582$;INyTeQI8#IoRk`hnc%#4++dCrimY>UBLE3RXvHq9~-7Vwz?gC~YPdriZd zlLRzsm177hA~+2^6Y$WBtlI$!q>$xH=}F2F(Ytc5lLsWrB{UzYmD#+2D;>cZxpI6& z%cm-vBjfTeynB(qKc$+!S+oLi<|cgC!eNDAtf>C$u3+cl6M93& zT;xUThcD2C9<#;T`%`k?HquM!B~B1+&j`FhJHhkv@l<Q={sg~i#SdmK?iX+HPQ6J5?DFD?n4$Wa+iK`KRG^DvvrVJmsk z!N!Ka8ezhftPNOa(>VF{IZ_Ba2Z!FRHYk;yr>O2@IPdq%RG|ii{Kk-VyV7cFFTlQy zv5mw42Worh7$cKaxyq@@g3ai^5;KSV!$hILB-Q=EA!c=WgP{^jlR7Z52@N~`X70_w|h4L`}EW?|Xr)7~HT@!W! z$5$KFwsA?$&a$MqeV#D82| zTvigR+{l19t77!cJfh}s}Fe3o#C)}Z(XuYKqWh^^3` zKGBKAD@2Je9NX*}k@bwrKza;yvl&=_IXSc+-^tH2VjeM`eRWH#v;yV~`u7k5I0*?p zo~!S=HXoUCS6;qD(C7rN7ylKkdiW;7@+v~<(mp@&jP|nyxq#)T33LPl@rTZf44-0j8CjeJYT7_=oFJo1Ljf22fWn~CJM!1H!pg54IJW`eQy@F*` z+Xx=lCtKlu;=$Yck*k_<4p(K`ilVPyk!q9E3vX)I1L+gJ)!;L(zAT4#yrdv!d-*%h z0o9v;B?(x&B*R&F89M@UFd@9jhWA<~r8FnciD2q$Ykd}H8olvm=H}#iP|@>bb=79C zNp`E1$hda7puUTPf$1iDyTBo8in!itvw=gyle$!kB&+N;WZVafaBN#iJzRBbw)X`N zh9k$VYfeoqbGCfq2`AgP?D@~{Io=C0zQ*Ulk>Eb^NN_wA%=v2f4^{ho11yIW%E#d> zp+caRM*?xk-~9RuO83z3`q`~6zm2U=P~jR8uM2aExyW-m-a!fd2z$M*nHYtv<@)PO zxYc-M3gVO{Lkzc)Z@9^8W=ngDf63oS!q@jNDy*SUUaPl;$I}E{88-D`s$Ny^oex|Q z&oa$;1+CE_L&IHp+cePBj%udYje?~qK4hJ=vvM#)gaHeTLzf)qa5-#Dsl*#hQ}r|H zt=x|ygI>XqDIulBiTxI3Y;?&nx$mwUT7A5|LgXr4%ZbO^>Tt+?8@uYrNADh|%0i`ozP|9nSv+GirZBA1nDCr2OgQQ>;(|@k&$I-Vil~K!{)pN^U zAiC_e0am7GsWVx=uY5E2_cuOo{igWys|BOcd>&gKcQ8Z4OYSs$pA||0-`>!*Jp0^N zDm^`2r3Q4|+bg|HX(?7uPD*+JIG=mZ++}we{yu;iCn%+!jfgxmF8?SyX>C%&@rA7y z?8&vnW4gXW;}U_}kp&HLyto^RMOJSK%j+Fj;I;wvB?|#l1AjT2sxT{q+$8-^<&W(y zDngWy*b>1@a%+*_bc;{#JE8zHWt&5noF;eWvuzNHP^A+!J?W(JKqyY$H>hni zuMrgtuv|1Rppb!ozn*7hc*apioN-?+6A<+GeEC;x(PxIgxn6bCZut=*HE9U>LJtWU5p?}daslbX-&-duBOXqOFW6M;Grh0`diWA!?Y0yX z=H7rpl6l@lGaFdz5VRURq%Vj^(42xGrK>*g8L_n*iY8+_vF|NG@#rDwH=*p%ON;DI z)g})G_j*Co4jsT)m1=jvS?US;o_kR`XFbR?51IUn)CKM&Mm%T|Wk7)C4Kj zyT>|ipx}@;)p#V&!vX9}v_b}Km9K9(1vf>UT7TU!sVrvu+|03Y5hThnu8H51b%IJv zGCl$u?wN}TLbh-67CqgC><8VbTGm5v|1}99!Hq!J<~OuN3m@2sl}B33eLkMUDHxJ? ztW7kG$|aTUoUZa~&yEW)9V_sep76_+vvJ8uf_^Fo9#y}7ME~mjh!+BY)d{5~T7jPZ zzG0VqCJkGd^8jF;1hD;h_A-<@Ef&!88x=qvZlw(JDEfRyRv-Qxy>!Vx6@K(hd!$60 z-?VUV{{t@%sU5aN&1h%&yB}4ZHQF}yO5VE$)$QnUCGt)v{RM%F${TLkr(dlD4)^?YQAR+=N_is_Qocb?WodL6>T$!-gybAU{W zu%FH;PrFvhl>T!MT>bI!iHVJx1^ntx0A(4o)Yk<)rg4${$F0=aToh!##pKOF*;#yJ zRn=yZE_EU)IoZiDyt84|wFkv(aF-uI$1$&!&#qgPcLuVJu*sj!#u(FqOrTM!%2>}Z z^<5%|%LR_}{J#}f_l+nes&h|;S1i_u>uLCR!1nFx``XhC@P}^6*#qxk9d`IsI@Dg=>BlU&sN*`0ul8Zf_ONzxS$R1% zM>Yjo-Lqp#57LZ*piZ032HZML?YOD^u8(=eprr_-Qt!~lP8!r-yMx3foC||ny5bgW zGkq?~hLGKGQLVKCPS8_gR6eVR^8n{%bgIYx?C{ZA* zieySw0fmKEMYLS3t+as1c3rf5kvB2`J_g3xqQ-HM3TKi{*A!~I)jXWokAV> zajclSZ~Hj9g^RFAKeb(96-C}m!9m_`lC#xZm(pinxM7d}?2TC#Da7#q|7RN!Q2g%v zFWUkREbJr@p3&!44%m*leanzPo5A@#D5gX>cSi%ONaVq?9yq)Qyv?Zs@viq1MhZkb zi{Hk&p4VFVMKXbV17u#f^E8g<5E1U4{}{wEOQiH>e~EgWi{uYd-YQ9B6CqmQcr9^a z9#lWY>%265A*QIs_v$line+M4kXD`URQU2 zU-{RQp{W`t&!24XUJ#P8PiKG(%X|?Fd8mwa+A^6x^Up+GT7{ z@2WLnQITl#Rgp6M^wF~Z6e_Qjf@7SGE@$Pec%TtJfr-|t@RD{yEf$mt)%h~WbOOy?lA z=9@;y79lw(P8hV=Y6|f8C(~RL50Z6*a6kZAO8g{{ryh=zPB1oIIkzLwlw=f1uLrj1 z*s1^W!{R2wbJe1)Xg%4WSDU_ZSEqzz5aEQBX}`jI6OUatWt*`2kquNd&N{Md17_XJ zQFkcq>L35STLnsmLZK=yD?tDgJqcf<1p(w$;h_3eU0^P7-w4{@7D`{kJ4DKxJ1VIi zpFfPxe10OdlACZd`g2_dr-b!qsUq)S3pg9gmb`%_G{LLB{^j6=K--xfm15$ri2%R! zVpo*b#ACY_pCR8CQ&yJV;{VUTy!WbcVs~FZHGtLo`l9nvtLBAA$kB70ZaTe!`dKX< z!n5kS)ZLz*9wlI3sXc;5MEeMW-o#NBF~njcfFlIRmI*(W`U*FMlxy3kyq@1TK2^Rc zhS9CV%M$n4jnG<-GZ7ISmJ>gVH0|R(lx-@n$L95%=Rn(A?#nSNwN_Pmq53~k!@K*{ zV=nr4ueGj!&U*$Puw%xe!YL-TjHN?g9V60$f!?Sh3>zfJBrDCp&`VFWj|244%94Aed> z@63p7`{uS%}?M+-9<$Bi2Z&r9SoegmZB7Y#Esr>%)e;^{tZqI{3kN3;LxPkH1~nc#N$Wr zcYUSz_TRxqU^wsU49ZgnNX+7M+r$`kDyqDq0{M9uipL;njG|xk36sUlN0~mN*V&iz zxHfBhzPQY7q;6Bwd>VgmF34pbAC*SVfM`j1PRg~3#&;xJ#{1vHanvjHaiYG z{gMPj)cZ#7B@$0NhrGPJXKjR^AqRsyD9(dC3@oV9t+HCSSv(Je!qRggLIoxszeKY; z=kKn&!(H5bXGG-p&mDn*CX<@9B+X>`laoBw43eZ8q6V8@dXbBJR1cPuK04e-3_)taH}4xKsz(*9~6m9o?7$jb4A) zGWkNToPX8AAbDcKCUAWpRIME5iOs@@I|vM|$mFv({O#je@uOkp^8aAkuGQq!dZ@OU zORw(m|Jp!NF0U3j7dYAAk($dFeuFicR9|v#yH$h&ySK=q89Ev&kNX0YG(1jW($`G- zsQ;0Nr%SJRv~EUwS^*OV_^D+N6fjkFbx$(>(!QJ4g`FRgyBF&@-La#m{phw!s{zH1jgwsMyUL$g|s*f;rV+BzzcM`VVXQJAsZ-tYC5LyF?^qpFn+-? z>+7E6Q#+pRXcdnn(4qj{pyXzGVyC&{bvmo5AM@ZTO% zXSVU~msPQ4-?1;C;vblr;-^=4n5K!;0ui6cV8jcCk zkwJ~1rnI*!!Klg-TO4Q$Z#ujnmzG$C%0x zzh~X=fw^A4dvHi|cX3&^FTmJ>*xvn$34%z{sV_IihQf+ALSh)x5EK9Xnj&|H2j-D} zoWo*=S9;MD$CHco>0N~sInaA@yS6`fVA|8aZ_!YG%4%f~#CAy@I>c0*nFn`@&jXHPaFyz{Eyj+Y@6p>4Su2~v)~N7dwb3|BOtln$%f*XLt`fhNB9lXA^5$KUES1?@6254fsG5Qw4zVgp`(*wK}s? zy&r6yK_)4@?hkMKlo8e#+Zec%8)yEy zX5hRXdj>PDj920D{AO8M8Lsrm47#zAoYx()`~r3K3Rrh{#vP9J-_L+>8h#S)6sf>W z--W(cDXdcR(%nv$P8v20ljjHMa5ue@we0KU2Ne^6-CVa(U3ULXLeuw{4xJaoD)hgP z`+^qX#?snEYA4fUke@T9yNl`|2!?S#L-+!qD>nd3-TPcA97}iBy|U{ztYuU5o7i}T zsk$1c7w1s%UY+(DK&}XumX`QR1!g311G!K_!(Hx<0tp4**M-@L{Xb0GOE1I6N0TeP zUWsa+kTevHKIgXk@42M%&CD$FFW&46N;w9@#c^NCW|#!5dFTi7a&iy=)}swPJH|K* zJaF-vkgAr(##AKBrC(A2zE@D)N+8zgaadK-7Sw4#OG0k~yp$<$+^L};$5b(CNcb1#YmR)b#2 zLMgI1eTc<@J?c_0xTuW(@b}FRfx~akueabMm)E6wQ_6I>Vr4VdKm9k0IPwdHQ{Ehl zl6{UTBa-z~S%jOeaZhQ#zc;g=lvbz#`2qH7%d+>MHL}pPo@Y+teI0(yAo4lS>qIcl z+M|>j$)~nVHOk42nT==YQxNbs^=1O)+}<70^0R(T_zk?n`XbcwnE&Ub!OtN?lmA_i zMfOGEKJ%1j$xvIc3nAd^jP*(frcdSz7pof^{TBcWNQK2mvZLD#mB6p<&msd_XCZF4 za4i3w#?`H7kbSWKjU#fQOmA(dtS`1*927Yq*VQ4fqY@)I3{s zq~MW0Bt-JRH8?On)XPz)0c%rV%1LUA_xi8BScE%B>jODZ=;Z2KeE)(m8@w%zK|o9% zT~~Hk)^xK<_y0danRzE3xhT+Q(AQzL@aVTVWT12wqk#}~nSC^u_aEgNffdZoZ0zw? z%lV2!kNtKBU?flhL;j}=reKzm2mJS{tF7liI4HkXWHrkDzyMQ|o zVt`hxs3QhUJmz1}SspifSWdN_ik*bir zAZ_X=t_!9!F(tPJ{`)l@t}p*M{CIz{LkC%_EU0-ds)eC4c;?B3byw;8FLglLx-!D>55fA=1j?c?(m486@ZU%Z99OmH_ncCI>)O{gPxPE=x zlt9`k4X{^lK7Y*u&5i}#H|5fQ;_afhS=^!u#lDPYGv~DU^_;|;|o+&P#*2(Y5A|W~cw}hmEd-P^Mu%uNg@9leyAYGq4*}0^D zLCatKx-O1?#fk=s;8)pQ*HM9Lh&tJHE%#5 z;ne9fo;2#AVEu);e(+$_o96}%51-NAT=+lRCG!FPtnuTnd}qVXV8-*tPFSC8inrw6 zL#FCXe)C)4fW_OnzAe)YEr&A+nA890WAMmsu9e=3qyN*1wa*m(@IJZ7)+d%?FFEmW zpo%+AR1%yl$HQo^k$EyOHJZg*yQf#>MT5vC8R!g-qyNg{@t0Di$qrnTS843tCl=4* zyd%=lOPqu0?o1iocj7r1d|B`$tbB}wgaj>I_AAoy%r@h=Go!C1Pu_oreU(4u`X#t} z-y*BZL%sJi&lRw~8r7#hrG68ipYM+Mw6wN9v>Xqnl>yU1ewrwJ=KQmkORs^6^XdCo z?^-W?OE+a6 ztS#;WjV#4~hlJ_#0CM7eg7wEPa(a;o`6*+rMSe;bXreDCD~`gw=^Dtg%?;R-=i_;T$b?XNb3?i+V#{7Li#ryc;=||1I?(j`o`ne<&b>j~G z1m>S_A=3!+ARN_-rZ58WI5qx8f0OMNuz&tNgp-nFC&a_8S4Ms3Qw@9)g%T}n zsD7ISg3$FakDnM1S|es7efz|-?s7ix@^^mzM>k8d@rwWzIlH>k=CN#EPK3#m{*#7X z&c5U54NCTxEIx{YcgT9ozbr5#T$o-xcX;%3>AT2R>uJ_c}vV~ zK3l$Vh>P@8XMAVie+Sddi>2at4=tVa+Gm0lj?%XlXWK0P380~}Tw9#h-_EA!T4?Ws1K5IPc9kMml?Li;v za(N4}=QObj*DDvSl-ys5{PP?TJ!VOb@>0@*;7aC{h}9i zvt&kSZOY?FyT4zrxe$-uy3_TKEAYE*RJKYHwc^$evu z0KfkFc)3cpI+2o@RTN$+v{Tfe84@i0CYZDT`Bl!WdOgAbxQKY?6>hL~`kO?MtGOcT=bx`Zk|*5K-WPK6Dz$@ZUMk zVfB+`^#+x7_5SQ5?r!!13G*iAs)hCMAY&ra)XUral0FNto^a5|U1y)g@`vR<1t^3d zAm2#2|EH-pfronk{>R4>i9$Yw5HYyjNGRLHa3jsNRc<%3mWkA4EE!pcxFP!}3^6U1 z+fBxnCCd;ElQp{84H+TB*coQ|zee5f@86?`9*-X5HRt_0=RD6j&vRa{H#>tj1AvgL zK>Nh1QzFCom6+PIzZAFJ$ApKo57=`phyyz>@&qSxAf~ZD!xof6|K#wr%+TW=`Fr9} z*P50L*xnur_Oh}T1Zq*-;y~J2ti!tJf;*}sxKR7xz0&=OmT-NvSBhwPQWMAfl1%!4+$a&l+uZ%e2XoqM^8nTZ9m3LoM5@Lmo0NR%N zLSY@UO37+OgKS8`L!nd2=BKWZA*Y0d0fj2&Gqs$)v&jIHRc<=$RS@IdS4et$f5-8I zR-(@Tj3nkS9DSQSeK?1O9Wu%dwQ-%@+{s}=fwfVNMxAW@+%-T4Vo}UL-FFJ&$R_Bj z>DOjz8+inh>4r?ZY>?U`RKBF4>Ot|G;^4Jv;lz0fZW+2Vf2+HXZ!YIQ;KNx|4%pI)7f3K`HVpaq?O29$2E!KeEpYF8&cVKKrw3#ZO78rH1_dWiPd1A3m8Lstc0RixeS*28xYrUUwX?NgjXX2 z%?Z^9X8OU-+v?8zUuvLZac_od&>{1*%)rB+{0%(FJ5Z0~Y#oFHJ{n~+26s~mef%go zx5vski53oBr9*YG=)?|0;I=X@@Qg% zY_#rSFKgcRyrF=-^(w9yDo>tmwUBmcorgrL^J#=P^-ZZU2mbF@1y4t81aXq4MtHxk zuPfxG(VZ0rbHY^u2!~GjE`kKsIiA&DP@oFT)=u#MrIR{Bi@97dx5jWK4=2{jhI+K5 zL0|H=A#L)Xmz3py|NVF8js4e9NPG0R5GDdr;(E>Ni5+l79k~^kbzrJUzEAgus7!s` zAdX_C#W<4`udVNaCQn3LBY5Pm5?*koSY`V>aG15ezCMCe2q6%>66HS>yJs52x%(B| z`Z~VK4UoHv-3EiC)Kfv@Ogl19aF3QN7t%9b?@#`P&Iw5m{4-2?;*cFbDhT=iRzSU6 zE=wwK^P3@*o%Xox)EKY50S+8)AM{u>D}>5MhbigcWxfPoA|(5uP%Kp^&b*bCm11@G z{5w!hN8dwvDz<)V{=sPQd{A3w_8~qga{yHwR+RLdgqkb5E6CeW2s4+`8uP}7$M`tQ_Ar1Dg=>-wRRi!9ycYVGB3 zVB6zCrok8*+|mVHmYYuP7|U7W0xmvXk|dbnueFzF8HLg=6`xCC6A0< zAZVB4IWgJ+5esm<9#5M`&X%`ITMMdBhFlr9CFw9sZe!lv+m0-oaMR8OT9x)R&kY!=@p zFYPIb0Cruc(Cy*+1N}A*Pj+)f6aSKx%9&S7-{A>zR8XDrKZ@g39o=Gkr|M*ei50ig zs1bge`OkXPo$nGq!5pdoLe4cYTvkB$u%~ssv7Re0D7{MWaaPxDGpc_ADB7UmuWcwM z+M#XJzAEfhV1(6|<9*r(zJl4_`mEeB+aD?rP-Dj>1@9Cd1uic>l(m_1mstqR4n4fW z47#3Fi=@uuQh0w89+E46-d&DUXfbLWr=+VZ8isDrr9trJ-~;2_ zDs5L1hgScCaLW7l4jI~SlF&V;$Szi$@AzK=|EPXGg z8stUib;m%jXFXqYa|Q9A6qnrJGZtB!GX2@i1LT^-Kv^J(v0^S1b}l061YWc_`fLq2 z9CLgAG}TLi)`Mq#Tv=JUxuvJKvi`R*B8(0XeZ9Lg-(7HG^TW*8^X^nDE>LI|O==Fl$nuQAc#f;#YBjZ`S&VjiW=0 zK%c*w-mQ%*19(PAL8Ht6~kwn1|MsK*AI}36J4s?N=ZF5DyzrQ0cfoDn3p}pxg4Zi z-hdV*7I4+=;kW#g0-sslpS`+s^z(YJ-y8b2~K+^%38W&i@g- z#y!K1AYA3+g!eP8_%fGDo(z5Fo7wZ90sK144@t)Y69_RzY2i6%bh&8Hy0JCI?C#eP zgibYW6zV8bY#*L(vxWVj#!@`9z5sCR>hOx08pm01>8fWCFG1XWxN_Lil$9EHHlqZ* z9Kfq9jHpRPrDHjx)J>r%gwD+FN+=w*33tLK;)~H3w<54ov1)n%6x@s%eu$j_=sNs_ zZM7(1P2pI%=#|+y@y>|XNoL%?G_f5t$JJbwlZbD*PjjH6v4J(xL?V$}r}v2)Ls|ba z+2{%CUgh~Lt%=_t{IKw2NeF{ApdcgJ zDL3fndZ(W+t9T&Dj}tXzJ+kMWMm)OZWTSNscTuqAaWu_7K7ZBh8Jzj!K z9+wmJ8awN(DZkEOl_Z^AQ`&o-f*pj&5$)1%L{|#nGIYIqaCx zlFHVa4a8_O?8r|QEQ3{2*wIOfcEb)U{d$EgoF?`rAe%(wJibx4><;HW-LG0FG++O! z2hEG;Woy)G+wC`=p-(7(MMI(w9F3}%*|jiA{Xw+$%-=W5x0atNN)2xyyk%$~q}|Sj(Av|2fJ1T~1%72z+j912 zxZap6FR0f^{lP9FFW;)lF8Uk~D&4|pMXt7*x&9o!9$D3fO5D0q!F`>sZWl3C-fpV$NH))yU7pH+UIv=<`7KlIjC&>Y0&Ho05rNwWJ|c#FcM998@+F(8PX#mbq72 zHlZ{L2{W#hu<=FvW&7>QZYauYkdP7`9I>{&3fGAks zV#Io_*>J&*|EDTe&E@mkMENPVPI3BMspJ@tQf*b@8D(pF72(^x&(Bef74guzbl}qT z5YTivkX8TjF!rO-hFdKdi8Hy8%d!JAavFYzvKas6Hg$@5g41(7APjQ=xyz_7o6rPV z9rvTNIR30xRX}tTbf^GqG_uD%opTQ0TBZg&CXl6ACDk;4mw9l0ZPO|HzdVV4c{G=6 zW99aJJp^7#;l8P2smh5)eCewId0P2vkb6_|nvH_L?@WW@1YK#%nc)#DDfoq{FLR3T zdtSPqmHf$2(T~vvMh$W#` z7J=7);;~g%((iPI{T0X(zQ4~@ns4RCkHnaA<9)u{tE6?Af#qA=RlP5vgR~ydT0-kl z^{rQ2dXaWO>p0{1K$a!w2@}g~xnr2iTXA?!cJ5x+*pzruo=`94C%@w;cKYE|35o0v zj;3hsa9<_yp|!dCU>1N-u027C(nV}Y7}kNBn0IXPZ7yWoOZ@@q`gdRzu$9Wwqc=Uj)F0gN zXC)4f*$crOozaEZk(eU>lK^zp#q)%IV(z!t;XUB>Z0{hYfFyZ3I*%+L z?CfFm0AGL#Y@mw}t~@A3 zj3Sf`h}u+N^q%V|vdkMQ1Fhq!E9FtG<+yD@zL&V*ze0e*l?fm~DbDccFx)^BbU6g} zDy(Aic}?lOj?AL_!3Wv}USzKYn$z0B2F6)l9{@~E@}k(7EvTRe-_3PbB&h=l|AijLYBSymxjz1U<#y1PYm*&NWY1t+V$=Le0LezaX~e2%L46 zx0_kViF-g#qI~HQV@!S9k-_<)1rhE53birgS*NAWLG)Q4xC@rT_}5M_X9#eVb7Osd z*c&`Y0X7F({Di9X?um{_;2}UX1kc={h=YJ7?w$G65x%onT{fhd!MRfbM|o6A19tb3 zy`G*uBNvMJi?@N6^q2rpj**ZFiq%qG!kge6cSwbc&m68Gx(Jl#c!^ybLfW;sU>7+f zTmPWvL^C)|WGB{#LM?EpyTa262JjCd=YK05s!*2Ry@xlM$O4BEi52O+!q(iZ+^~r2 zU^-y7ihGDC=-c-@4rva`KtRUiy-y*WX2ybWKN^O;zHQ^l{rJkh=qTKu)-GE3y3H0m zuwf+vr|sb6wBrq14r`|oHMO)z|Eh7W4pQPt2TMCeP5|m@*T7FpsdHxalE334KCaD# zHjE2+?%1b~@Mg8SN(KmAH!TtH8%?&>vB2(2N~J#KST}UvbKQTxDEIG^GlFEwJnQxC z|C}ZN;YrAnw`$UJl=C|9YVWCE!I6<%y>HujNws+Gwf}UG#_Gt7iXKt<5^EO_-( z*4{~e$e_XPmNi&sPzAX2Tz=iSKX`!KsRUfU%z)Yl&h^UKT4Pp1SRiMa?x=L5Z|>-4 zFT4i-^InbXWkB)spZcU{YWX9xijXJoE%5uTt5IfaS=>XJe13Msqd;8-ru|T7Q(D$u zyXqqai?dFy-;amdPYjlMWXgl7;cOsT^$22~jrnb7Pr81NNzE*|9}=S4#QI6D(=2a+ zHzSCg*}3tI0++%Hf_`^lQf#Bgiu5<`KXaQP_1}2KyEd}G3>buziq}zujs+cxc}uC& z)6zC7L=tN2T{p&>BgKGQs;fMQG4Jk-NPIrHjiG3W8B~iVYl}UfOo?i9H zi0}Y>Vt{Ae2yM>H7p$r7CC6JczuKR*wX6c*t_B4Lh`l=3Ixv@ao(*BI*$Mda$NbF4 zDJg@w(vY=ZX&WxwovxnO=>%=|2(KHtJp1XTdRL=1ARLijX($zhXH4!yayIKwdI}2E z98I>7#ER(-a0deE_S}Tv@&C)dUVLrSbw!C)`phMOIPNDW5dI+pt<8KuSvGqJMHK$t zeF}#>KNz11<79%)EC~Z-H^zM3DV>9p0H%L8i)=o@x7QbEy{jWfb5Lcqu_doh5!Aaj znSkDQ0s|h4*FZY+zEf+sW`+g%1%Z2o(@lg9@u6_sbTx)9(*icx&|-ach_d{5L97A7 zU(!_F7Q5#McZ_ts-uYsA-z&NPr)La(s=PEB+WLC%j5}&n1wk-Dr|W+{4GN3QWgWj1!DDCW!pa?2#Z<<9mqmu<8_r0w6k4hUV{>v1^g>RJgY$xEjFEUJ-+XRPYY zk=oXZ?lNO2!%9Fje46ef=+Jf0J|Xg2cqf3fD4tq3g2^_1vBfd(@-*wx&2(j3A{lua z$`N7j6|hP6s4(68160=8uUIcY!h!JiQCj2ME1tc;e#^UqL&la#P4RH!WZmqG1XmCB zj?Llt<>(B~6REg!u$j$af-LDRFKnL%IV`e`$As!w4pMMvfm4&DKHGdo>6+F^ zJ~zaQ`T{L5tIUJ#aur^H8Co42q)k)cgXY+dHDQ~@Qtgk@cSrqG3VO1;+qf$(Tqs_O zhoPOvF@5!59EJO|K(SIvohY<)H`1yruzk%e(N*+k)H{^DHc}HqD^9XX9?GJL^pku# zssTcsw;~)BR7L1q<$WLCo(_HYJ_ZX;Q~Zlj4$ssiQEdz1UMrcbczvxOS*y+ondm_W zWNAJ7kFP3f)?1`u#wNqn(J{C$BLz>Z;~;cmc`G?Wc<<7b0*mwjYv~z^&qNED{V{H;aZt+D$UHH$xg4 zHL)!;y>zTcVXTI+=TvI?;UFK0$56^Bu80nGJOxVXOC&0{Ml)j2wnni$ePO-}^D6hg z)-|0@y&8$8JyB4^;pnG!zz5K$^4!1n+<#A2u->-I>8|6zPmSC??EiW{tPxe!KNA2n zwwETOf;cP&n{##dp996o6;LRn%ceK8e9b1j=;mP*=HJa!>X<8lj&Ys|;5y~>3I|<} zBp!Dyr;SKE`!;9VES77xN9zd%lQVz~G7O*;{xpw7sG~b@6)ix%!RxTx2yo>>hwXd# zP5*yE3{&+CW&R7+g03QX6hQuYx_DurUiETI2frS9qJ(Ru7jd5)Lz==?4}nyno~0@0 zQE$LQugP}p^Pu~W`OS6rzCWu(V53I5;rBs=Zt>*)U0~U5nM>N+bcYX7K7b#H$Ly|7 z*3g0swnjL~)zA09*!qAsaUKT59QLrVD1& zwl{^nf#z;3VEj4yo;&rFB)v&&FU=bkML3pW$z;U?6k#sf2S`RH@PXyPOxXUcwUI3MQdD}x`05P8YPK%vE(T?BJ$k9a|(?tic}V)oKizLKhRrrpR&C>_a>v;va{TrI3(Q#X6W z>c@JRwHi2zG=n82N%`>V#KrPybPk>f(y;OflV8E0r8!SF<0b%XB~?ymTgsIGRo6AJ9k&OlJ?Xa?=2v%(gyEM z`D$c#gZ1ipdQN~rbgjpBN~#ouf_*h>9igHjygYUEE=c-&t9U%qSJu%e_gvF`B$S9K7(y?^$>}@kSX#JPI zmwFc`yd$G054`UXNc=H-Vh@1KxNBpQI_%oZ%!-Hm=2Zo3WY3MR!+nfWwx~XS?RVAA zill=5RON}=RuT$8 zvD*d!uVe{2pY{B52F|zMOYvRhwUO2U^#rq?S&t;R0;PvZAWuo8MeaW-1_nG z>I*7^U|dDL&`y*C9{vvWlS zV*xcI6dp&CF#Rt4qc4^C5MG44J=ERx^j^=fA+shoo$z)#wwkd`^_lsG#F5FU#+To8xZq!f$?iOY-fSXJhqFb@KPfWj}Q^^ z-FPFn;o!hjehiGrX+nVj>QhJ@Vs0W5jD0$aG+g8a0sVeDRb>SX`0#E_U^oEPbPK65 zs?8{GGa85cI#8+pWkXl1T7(3o%{zj%L6#5JWj&o$XR{-)Eo)L3+we~}@+uz_nb?2n zLA*=3@)k3s0Y-F0M#Ito6fppLU=1HC~M(PJM(WK zU2OYBTZ(rXx9h!OBJw@0HfrB6hK0g*mg1FCo zF#DBWzg5p{^qd>eNah7+LqBlA+DbLc?rtowzC?@Unsg|BA4{aUn#5jUyyZKPjy3t; z{Wo~6YO_vNz0yfJzJJyEf6!Lta!WI(FJmL-Wib(FuP10Zj*3=wQdhV}(vZc5&2i!k zVZ{oEJVN^g29oS$)@qMiXFo)5$Z{(^s{Y85YiowvnZ3j30SU${ZV}~9y@r~$oaa;q z+^dQ>!d#jMU6}*@ic`s4a2(Xm+3&+4XBhyscmuqjYVzBWGbYqjMSSS`je*E?2;APzU>tVc1Xd;xzApTuxu-MM=;b z+|4k=};DAxyK7$+I=dEX=qgb-dJl51Tz~uW`v5Z}#EdS-yT;_eis)%=C)NgdS zRjiIrVQkNO&$LQ8%M5~+7?>yBt%((y)i$iG!3k>Pd^Nat^o!TlCwY^@{LN-^@(rVw ze#dqV2NxVoF;PZ6=n=WorM98IFdEoNlU>CQ&}=KH7PtEpK}mt@f&Ha0bQMGn5oj6jvC<`0# zD{!n8X z!xVFG-avP>b%OrKxo_`AF4J;mQ~;D>GIr$}b&oDgK&9Sm6}og*cInrC>h*0H3NI=! za8gs#MQ`sYucr?Tx`Nzo1;_9`0~mR$D)#Pj4hFnt9Q3a?i-|-y7<=M#<(o+6&aI|_ z&%&&DfgI^G1g^yUB6I~^@gZoa>APk|BSq*^=7{_EQi=uOeuagjMjTihmwBdboop~y z9nhaWS7c*5R6DarH@v6YO8i<#b#BgLMZlrmLE&%7Kjgg;eOzrTmUqv<36$x&ryPo1 zImb9fwHr~IPihTbQRZ2q4uU>f(Xgfh0x4sYicZ)ZWX?vwHp9F?u^HTNckG)JXb^$i zls5!}(-6~Ze;2~Lx(^g*&X6rfU3TUE@{-E6(*2Fe8k(AZWfO-SoEz16ta0W0?&HLo zel5CuOMagCW^Q@F$BK+`^ma9<@{RSDxyhPvV;)%I19n|PGFd8A0c7+6az;k8SR^XXs8YbJ}cNb>xCrJr3`#djk_6 zR=D_AoxC!+BV21d10)Ma>4}Byt$@f3RP`g#1 zs@xCbe(vi#sJJwh3=i65RId5J2%~p8z~!*=%ixm<=XX{0yo_&X0>+o2GfDbP+pm{3 z^#Fo3o>=h2M(_W+(j(04k`k46J$tirBTIAqPI}ll!|Q!YH(^7rp5NWOkxGD4-tV$- zLste{32@c+Rsus%39Z9El5T}!a;f9Brz`{IuYdluPXwBJKROr`!w>UuAGzE^eqRMW z~Dy!!q=7*jk(52*`-Sr$e~t9#9{HB$ zx(5P5e_`|v)F-mNYilh&nt)}(uG7)Q@auF^)W_v;>XQD~UpJjUM6^>=FLP3ovlI@4 zAR-tUmuPI@C!I<>l@7U}tW+c{e@-27F|U2Wmma2Fp)^7TLakmcJu4} zrsiq~<=^804RF-i!J(ZTd6Ni{Z`Kg6Nn}0QxM~njTsS0A)0nq+0{_CooW|}wiq$_7 zEwWZo#XT}Wyn!8gyj{dU!L0D=$v7-6T~S3HiU9JhIa`gp6x)uSs(E zN)&VNf}=d8F*pAo-6J;wu>A)m)83piC_Io%OdP;BV=cIsV|LtnBO*C^?|s9caG?AV z8sc$r)&?Q3l$G~yrBxWjs}2_7|A|b$kRg<>Jh2b=JyO)*v2f|mGpx&M@{NSJ_Aj?m zUbT?_BrjyHc}+FaX#@q9Za-ne7&^0|eyp^$hP_WyS!a2+;89#6WM<`m-8T`Ci8wXB z)L)}?*A&jHJD!ToYpbO{+liYR#<&8TI33t2ujiw4H0Tn3&h8@NE!(cQ+M65mSP&A< z^*Gy@psB2UuJ^kw4Wqh=pNJ~jVT%zv6GP+g9(UV!5hv&$D%2eWB z%`aZ?l5f;AHfBpr`C>MuCDUwP%p6x<$(RVkERNL$O|-^KskXa0I^wC-XzHbt1&&zJe)s zM=s$epR#f}V(qMjd6h`m7dzkcq*+Xz+Y2jxNca)2w|@vK4W0EpP!t5;KJ$;g^O>H* zn#$#w?J{}>5qD4LY5SafsWZaW$==bK;>uw>w@F}2sLx4Wqb$6Mq~wrtNT#y#h+s0x zR?;A{;+g=bz3sw3{5XlNvqxe#0_e|u$AC}Ly>%YGZ6jXtaI79_=w9z!x~fncU6~1~ zf9fxdl}x*9#<*;b6mIsjNxI{BxOaZN+|NBj7|DqAn7wxBB2H*c!SvRKl-Ik1p@YWC z%8Cz~wY^_zi@nliefm(yIJSMnNS6ioee-zdCD%bk6-blpnjhDG;M|1UgRp!dR&1*M z1sq?dZ-l+1L~V=|YuN9>u><%1ZIMSwriq({S`Xhsea$;;k?#wu7m*mr;T^w60rHb~d>ia?T(T;4ppx zj45s6v`c(8W~@nZ?ZUs=T{1^zMoEQBuFGCN2uaHA5)_|u=;_ZiH?ut$*ZK8AinE@? z4W5iiGV&^VN3?3RDmI9{Lk(E`j?M@vCO2TaBA6P&ucS9+Ul|uiKe#4jVUCe)_;xx9 z5S0P}0RbW_QcGIO(y4Z-b}9yApJseZD~g&fe*Jv4A?=)&a^F#v^GSzBGtcZ)_v-iR z*XSEru8o=JDQmga-!D50hr4C)oieEn1)`q(4SmrZnF5rY{1v4xk~#tZmrs??lq$Q% zUruPeCVNqE238~?_E+eDl%TSXA+$;H5KZ?BQktXFqBuGJLRKs9I+fh`K~vu-*Vc0r z-HT0s{!Ow9i0p3-0Y4>u%Paic_b<-tL{kEah{hU#hR|eqkivI ztnGzDOq!3wqr&$Z4?xAs>)rMA%$md&_D|-K52iH;QCG=F4tS9FZ6g1Kt8NpIz+fA2 zOKK6ri+*ib5hfBP%(JCfZ9XMs9ifTRnXIPE3Xv|a1(ih&7QE(QDK3Jr4xw%pN25~* z7w>9F4xLyU^C?c6tP7W8{uPS;)Tx1`yUp$#+L7(M%1Nnj#bmgFZS>#?*xCFXp7{6~ z!4m;7R~fQXY7@=)7-=@iNjt=UXnepyxx9a=0ag5IslnOo$q<_laf&NL>Ewj)NA4sf zA@#8U_Uw6kmuP6PVW?L6m~A;Vq25G1#2=fcA!`u(^h0vK&IJAQ=g)E{1o?Z;WW>== z=h#5Njl!renM14>!6$L<@F?s9mQF>_W;Il(CIeGh!2*FW5d^|CkyyyYY5&HNg}jA( zMk3oirzw$t?2|vH^h>va?CtFlClh04j#!zG3sS4e!!i$c{13x%jvSr- zo&eR{iSbG83TL6nuH4)C>@`~hns%I)bcdGkh7 zf<~}916j~r!*;GeHSj$Gqdc%c+AoE9#J4Mj5suukKRdni7|#}5C0(aZGDq<1mOeIi zb~81NP=VV++>i&5hDV2i+#djJ#U;i>Dz}LhDo=Pkh{ZvaO5?zn58wpb%VOT@JhQv6 zCi2kcI?j|V*(i{-?zwdUYD(1IiN<+s<|&J(jnr=*cn5{_rnwar7W&(mn~QF}4`+b?n&4QaplAAI$M&oJcF2IUq%&VDfG!H%32GHejV|BT5dB|!fswFP|I zeAyp6dd~jl6bVija@>#cq^l?>W{N>e8BI6x&lLaVb z5uAao11brs8(VC!EwVodaSn}?nE;_1#xpkaDlxv!)0dMEm=iO(U~;5WkS@qY2to~g z`4R7*eZNq0GbKvj=U0Qh1YmeDQ4%3(9kT?>er9}ULuwR$i)LcR5qQAb8N?6uyoK`p zUdsh!&qvUizPi;3-S1>fAwofDn^^ znVTe(0%qS-W?xoT%rsqEH2l5y@yxhL9$Eu$zGZy7xH^`a+xgK;lcO?jADBEIdI769 znE>tW@nQFrcF68rpdO4QpUkczr2^NV%7REprnv|=bNKl#{VMqTQi}ZDgOIkp+g8ev zcMyWKtoOlmDF5xirnO%t8zej5G<%)N2-{mV&y}Fi*%u}&4*pH_L;t>k8N@-4F9HzhqIzA*28w+G?(__^nRFobE0!QzuzTEwpI?hM)Re6@Y$&}SO^O+zXz%*`?TckQ~TpRSeqD3X4xH{-~X`f-Um zDBmr`{9F~WbklZnG~#4sAi)=FYjppOxTfM>4!pc<{M{1wlLGw?!gFQBh>s---mm~O z3m4&dXCh5i9IL4rmL>flF=|NOHStx6nrVjPD~YC)1)M8;>5qKY)qU;unBs(1FW~rN zulbkWoCz7eYupB_pt~P!c=JTC+;FS9hrWH#XnM;~3U1UK<^)GW7j9c#&LGT-eAD%C zJ19_3e7v*Tz23+D6Pr6({rQ}^`NrwpXSs1~u!Gu+GBVKM^G%J^ii#LMvqcn%yk;h0 zXbOvug&r;(S7O#*Uzjz4Ep>0aH4|x}zdGv_Qni;rh}6GH|8!t?1Jr7ft$$z0#PEwslMxVc0mv>*n_?Me0(ZAM{Txxqu z-2cWzY;3QpUQeCz%pu(ASZeG{o?$VI@7VP|#X!x1b5*r;XRp*$cfZJ7U(!52Ga`Or zOqR5WQ+$QF_e7Ab6&$pE=M~mwAIgD4h`1M#7burYZ~@XN^P-k=`F;tc+HA=azPHz& zoz(sN34eeyG5)~?8+kFceK@hWlX40xop&gF$WzBtk*2|lJ^AR4rCJf1RG9jb?S%7# z*^IS4%rKwiHY-yCChwJ5#Qxcr^EPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D7{^IOK~#8N?VV|m z6xEi;vzulIMcJBtS6rS%$l?SJ!AL7UL2w@x+=x&<=yL%K0Ywodg7+o_d_Kny;|E0r z^=Y^~Wtd^a8H12eKqK%8;(|2VECMPjdqXqlcdJglTiIDvSyfq8Sxx?l!_CaDy!YJm zKX=WWH!GYbhPt}C%KG~HzH&HNWS~etk)9&eBArA!h_n@HEm9={j)@!+IUur6WUt6B zkvfsBBHvV0RBV=bYX=P))F9_g24(L6wY9YnJ4$5ai4!M=OE^TNok$_DUu1*GI&p|K z60Yvsw=a%TwkSIX*tTt3b0K=P9F7+mD{?m1ONdP(D@B%zQ+&{;PoH{owM-T0)IbJAe@1Ux>d$4sR9dW-gWwc8V+!M|f5o z;oI1y@FA2AAjDrJ!3-h)G6^fq#qtH6#uefS3&j!sH+CsJ2#o`*U%%ez+`01vIh-Rh z!dz^6SSvDr&z?Q+3>!8qcBRA!g#$>5r+r@_LNESgz&erHQX{O2ot6$Ib%5`_`);sQ z^NZw=s{Ule3X$pJ2%BT4#YagTK!|4&X0DJwO~MxD;>nAn(mz-%;k@3xdovkTR21C- zgnT-9&x#B%7a}OOh}eY+K)qx^#2N3d^ zvwufqsJRd!D10I^L7aeR41pm~2dJy7>m%(wvs=*+uQ1qBQBhITvuDq3@$`4aq}NJM^dP%H8;LDU3!JHYns+q;QJu9m~7 z+Al6>4o3Cp(Ic-uL0%3ZC7<5@2O?32uQZ@zI9h6goJR*aJHU<|J6NX0@~3F1S6Z;x zWMcR3-E*2J$ayAE$Y+u#BER&wEY3wv$f*X9cAqKAmttoTLV}y5Kd>}@>>F7-fK>fF z*kNwJP3%g9kl>&+1;eB%$m#)7Rt_NK^GG*(uoGVJ6cH!z{U|xxJ^;`2Bl5!wxPc?z z@LdB)>1QPm)4Vy493m72EGnsyTEN%JB41?g+_|&0wEKUT!)UUnJisK;@49vCmT`@t zUk6~AF*9}+p-k{6ae!IzmS@TBh$-a8G+;CK6h&VyoCFg!Rfvnq)$S*&@ z8Qi5s+8SWju3a_K_P-ZDjZmJrSZaZkZy=>~03qJ_;fEi1m#s;>u0?(n_OT7=IK_{W zkINkEx_0e4B2|7;HUUCDFKRX^@(FEeXlO9vzOKJ*A{ZX$(i17&T&n+%B`Ev1bZtUa zwrttry!-CECIkZp3~1qs}X@yps5v0-|rY;Rf^fwr$&*^UBIt1=&QLV2n6HqsgIE4)Cr7?7>r( zfLyoy_Sf8GIj!XDj6hBkhEQm7s>3&(`3ls zw{M?w+ikb`CLi!y?%`fLE}&r<0#4yJ2}$m}d-raZd3`5`<+dS{0p!?(LEw}rQ=E0{ z*pMT83?Dw+dG5LAoDLm2B-I3ETnp?J-FtWG(j~Ec%UCfTAi5ftR$M&mbL%zZ$pP}9@x7-pq`GAfgag&CoSB^D+0FL3>z-|J@QIVL@T3H(t&NHMSCf=r})9$tUwn z`}XhO-|61HyL0;Kr{17~P7Lu^b2-F-EI0X?diz6$3~}zd>n`WaGtYF| zv}t3=fh?dz5hox{j(KMA<(FSN&ph*tvta{^p}a9-#0cm4=bvxn1m)lWqT|1I>eT5q zbpSRhypQ8BLWx)M2_ZjIhwq9ju5j+W^G>H@$Bu@aX3d%YiqxMT-_j zI8Jwta1Zwq$5mHd6_2$s&;ebvW9Zg5#4wy!h?iH2qQA&-p+2*cGt_{Dlt=_a-*nSW zX?y#O*`Ijg2{U^~J5R}1@mm9^96NT*Oey0CpM1jG*xn$`mtK0QoaPDki(aQzNcGRt zzu3x%kijO!FZs0dbj}718kFeh*$$w@yGgN~!0iBZ5Wo8BE7RYgqnHY*oWPw{h%lg1 zlpCx{hDCrE`F_Uv*IaXrS=poH6S^G%V(8(2`st^pR3AQk*j&@UyYC|;&U8%yu;&R> zZ_Nkr%4>;bFns_%tri-nv49%SPlpdc)b-b2pG2HZJeel0S+iz2=bn46GhxC6XX3<( z=9nt}r=NZ@zi~SPA^ieY3~`;Yo-0FF zbVhf(CIBIGf__+rk1B=+Zt^KjexK@Hc;SVnglY*^2LQzT*kg}5Uwo1J^?7Ci=ggUt zAW0oSg}6z>571d_0=E-{2tDZoRL9$ck_o^#Hu>7-`z0Ur>C-1cx`rA*)%)wOziy7x zfz`shcE!F0$-Ts(LY#g3`rio;-9z3dsHS-EIn|QEE){AVp19H5&(!9-aoTC8C5X~Y z0^IoIZfAlEtO8Nu8MHhuS6GC4gTaXv>6v9412du)h`!gGRLK%U53$od3r=>xPTgT)k}#2_~L*|hm?&~|&J1#kc! z-ekgg=bh*D?%mrQyW=6${y{F#K7l%cZ3AGZS0rgoQOUke%LAHO5G48F7%^Qh}F29(dq^Mq~ZBv5e%aqn8sX?BgP#>K}Dw5uh1V;)5g~f=7-VnIH<- z#8G`S;q&B^PkN5!&p6`@XVIcX&iUt`Z+>gX1N4|Qa_I-ya65tR2*q}Sil2Y}nZD(cE_Utj!!1{7%zkdCkp+kq7r++*Z zcqTw^o>#{fE?nqqRFMueNlTY5E#@+Q-fd10~)~{-jBha_;acAZhya z>Bf=TwQFYx#39t6nx+zns6!}${2n1Lh}Ux^M0Ms~9BBXk{f0Pd4C2ZMtS4BuY?-GM z6u}XGqX`K7J2W;RK%q{cB|l&CG1jzc)65(_%e)}aHl8i~7E-lz<0#yN*ri?_Aypjw zjeAIww7HfKumJ@Do2Y#h_Hlu50PR^PUJz&o2(=W^?gdfpYsrTQ9sw(Hb_oJXoRSC0 zy66Mq5qlAc#-Z_O92yUQCoR$>ZFJyTKEMe|G*7S(2Z%lWC=d!o{(bk|XP*4I$wvTf z^{Q2?5(ab=s3l&-?LdHgiG#R+#;?5!fj+mLP?K2 z=Zfvyw;MaLWev@fre&uWAXZk0x7{NLe~z8!2PI#LNAPAkIYE{D8*jYPRK0HUF$|@a z(wfTAI(6z~-VflB?%=_LP0t(PpgbmCvu2H{@^wvs8y8$~f$9B|zUEO!6O0f@pLGSy zHRL-wV2H@*puq1P+*=`;A19ev9>0(mFp5n+hJ~;o$*1Hi@izIC{2=-lnV`cq^l&=? zf*yr-f&d+0JPwfeqEIEiP~_`SPsykBa~%O%?dRLX_ysiqi$85A(0K-R0yd&rym)aS zPJlyETajPm0F@&A%ij?OREk0Q2HpPHdG^2n3N;4Reh}p2@sO`2AL6y@S7TsoR_hjv zd_Y>HN!sX$F6x*Fx}tLs^90zCxUebCWb7R`xo!I#uwNXuwo=+NdMv5me@X*YK#5oK zgQ$uzDr0OipQ_DQ@<06W!}wjr18J%gpbI*we&~wM=pMv80k*`Z*jDXq+dfBZ=-9Di zgSuzVQ*t)>EV@kB3G)jKrX^p=SK)6Mn+_KXFH1qbg0#^AU9={!byX)IFZntFHpRBs z*zE*4!fhX1q%;M1>JL&>MZ$51Z_^6$O(-URt-NUkgSC{Nh6YuET) zr3bp$y18ot@`8QHTM$k_T(%P^?Bh%jT@B~P0ou23&oY-y9A|=hoJ~GG^nA(3Xp|B% zXOoX$Gz^OX&L4mLakGxU)If*%^XD6#)BzCA?L3etN-udNulWF5Q%JDAT@z%1O>xeh zgeDI@_~0N3e9Z_d`SePsOqt@WUY%0~k^lzddA^eGuJ*O`D@dQeGaO@^MY`~jEylbE@p(^=EyqYzk3fGx{V$A|Gm06OO1ZE63ZQ5jBSF_Uq z8m7V01q&9Kt>O~D+`oVS#S;8a?5r_VS%_Ei*-3*=P(HvYkndIP+eRf*=s>!NKAUIO zZr;3kMwd(=9^MS%0Zx}LU5pa};@Q1>xAW?&uR3qM@rKD?CNNdYa|UJ?nX}n!s^8mhzuhblrH8IH4bS)4FNk=!&V0V+ z)e9J$H;AY?R9AHLB0=@G_2+jyJD?_@I!~8YCh%hGl~-PwGF=bw`2P=50~pUs)T=@O zOT+jYcv_&WdiH0ZeHOo(Jurff^WEgz#M>Fua}|Dr@geWwhaWb?cma}mA(XT*x)SeR z55R02%gXM)`)(7z7l;G$NmHFvby2=6juxm*?x zQvwG-r~w$0<^l|tZm6eX8`BmwD)AuP2O(06HF5&tojG%+d2O7ul=M_W|A1lLJ@?#` zL=5TDM?r7WB27)-kFF}*r}*kbF))CNGQSwv8!+ma@>~s5A&jI%{I>08`_6aV%^ipT+*s)1@@k%3( zf0yb%siWWM7t%xZ{9uHZdb>x<7HSMb((R|GKtag&8t2{hBwD^QBJa?*|SZN<~Yr+-KIJ@+Xoh>}h_ zZ8tH9{>Dzz7X7>ao_pyS^47676RNYuW9y8hf?H=5O$Wg?*a%zkw{##bY!3&S(vD+= zn|$DT*TI7a`BHe|qfvM+aCNP-I8o!;6I}JM?TkLocx4yPyf~}XvkIuT7#I6b0oA9Zpo-%tCx`9)&{~>E2 zIL3Kwd#2E7jP!&2eKZP)6EL@%c$?BTke9+=fBm(ya^*_XC*Yjn7B5;}a>*s;%^TWg zB_Ad8Azz`!RK08+32j3lZt^v>)5a z6d+!2qs?a*G_L~X)-8^;Lcagc#sP5vJ~o&%FQ7`Js4A@rbBxkF8s%@0i-NXys_-{A z`PmrJhHX#{Re;8Ar;#cxuQq^YovfgOLQw1SGq4~SpI zb^^7j9`iRqnuyvnolPyQlTlF0PsgUsg*ZTs1c{GFyA^gT&AI+v712^|E2*MNrBW^% zkfsgQ!G_;-f{ZI2G#x^6li#|0$XW_s4e~2RLQrmBNkQ&`Qzfpp77%UgC$_iVC>PE0A(~p+=?n} zr6S_fL+z$E48W#5+a4kgusL?>4PPvX6Z}zvnX$8fKo#>+RG|u{P%?rG0owFWLjJ7y zaZ31NLwfhECHT9@0COP@TUmvDY%7*Q*$8oX*)j*4@}9@#}arSFBUz~~%I&75EKTI6paQr+YvM!#|A2=)S1Z`qhB7_77Az#}4)VpDOz;_d% zh$k>Lb`~Kl5b~#HOFqcj0YJ-^Etg8LFm@Ip1Xw8K!%5c2xrbI?UtiVG(7?l@#4KTi zl3+z;W#z=?&70@6X<=Sn^dm=(w3YtA2XZ(xb|pfQ@rhLZqoqd9d8@y?8~_|WdbFDa zyc(1=Nfe>r*dpYQ67uu<{*d$sF)0vaor)r`(Dfu1d8qepuWDo zb!BDcTsfR3l2~nglH#b8_{Adgq@$N{4PVeGi32F4HW*w{QL#u4Pu3@jD}?yzQtHz# z-7X|b>Hv!4$B*+YVSz~EHMAxUwrQQ+tXZ>^Z|oEcp>O~oC4rYAcp-I;Nak<6mM3`E za=tWw??}xTyHa9=#sO?djldH08FEO|P?V8M0l}M{RP_s`#22-L=Ley50EN^DY*%xK z2)j|T?x38&wCxfh{#hZu(as!UL8u)-Ax5kcp`S2Ggem3@Tn{1GH;-j<%Xlg(lHa#w zi-59l02|^6%|&?F#D;)lMH+tzy0~DI?Uf?Sh42qV5}PoV1Io?;+>mCXT7pqxcs_r} zC}N06JCQL0Bra0l>h($ M07*qoM6N<$g13-5BLDyZ literal 0 HcmV?d00001 diff --git a/src/renderer/assets/icons/256x256.png b/src/renderer/assets/icons/256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..932f7d33945a275477af1d65b13c1660ea29c1bf GIT binary patch literal 15855 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 PX@k_2wUlZUEW-Z}gJyUD literal 0 HcmV?d00001 diff --git a/src/renderer/assets/icons/32x32.png b/src/renderer/assets/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..ecdac26b0c63f940b79331140b5363e4770d736f GIT binary patch literal 1393 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 AZvX%Q literal 0 HcmV?d00001 diff --git a/src/renderer/assets/icons/64x64.png b/src/renderer/assets/icons/64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..7534b9f51b15cbb1bd122d90d5c3ac670cb560b2 GIT binary patch literal 2825 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 bpI7StPYHEKe@Q0S00000NkvXXu0mjfsYYBm literal 0 HcmV?d00001 diff --git a/src/renderer/assets/icons/favicon.ico b/src/renderer/assets/icons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..50d1d2364e72e102812bd3bfde4ece744d98af29 GIT binary patch literal 5238 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
- + )} diff --git a/src/renderer/components/paper/index.tsx b/src/renderer/components/paper/index.tsx index cad38ff2..4162a76a 100644 --- a/src/renderer/components/paper/index.tsx +++ b/src/renderer/components/paper/index.tsx @@ -1,6 +1,7 @@ -import { ReactNode } from 'react'; import type { PaperProps as MantinePaperProps } from '@mantine/core'; + import { Paper as MantinePaper } from '@mantine/core'; +import { ReactNode } from 'react'; import styled from 'styled-components'; export interface PaperProps extends MantinePaperProps { diff --git a/src/renderer/components/popover/index.tsx b/src/renderer/components/popover/index.tsx index 9d30dbba..c72b098d 100644 --- a/src/renderer/components/popover/index.tsx +++ b/src/renderer/components/popover/index.tsx @@ -1,12 +1,13 @@ import type { - PopoverProps as MantinePopoverProps, PopoverDropdownProps as MantinePopoverDropdownProps, + PopoverProps as MantinePopoverProps, } from '@mantine/core'; + import { Popover as MantinePopover } from '@mantine/core'; import styled from 'styled-components'; -type PopoverProps = MantinePopoverProps; type PopoverDropdownProps = MantinePopoverDropdownProps; +type PopoverProps = MantinePopoverProps; const StyledPopover = styled(MantinePopover)``; @@ -21,13 +22,13 @@ const StyledDropdown = styled(MantinePopover.Dropdown)` export const Popover = ({ children, ...props }: PopoverProps) => { return ( {children} diff --git a/src/renderer/components/query-builder/index.tsx b/src/renderer/components/query-builder/index.tsx index f6dab1d9..f2bb3afe 100644 --- a/src/renderer/components/query-builder/index.tsx +++ b/src/renderer/components/query-builder/index.tsx @@ -1,12 +1,13 @@ import { Group, Stack } from '@mantine/core'; -import { Select } from '/@/renderer/components/select'; import { AnimatePresence, motion } from 'framer-motion'; import { RiAddFill, RiAddLine, RiDeleteBinFill, RiMore2Line, RiRestartLine } from 'react-icons/ri'; + +import i18n from '/@/i18n/i18n'; import { Button } from '/@/renderer/components/button'; import { DropdownMenu } from '/@/renderer/components/dropdown-menu'; import { QueryBuilderOption } from '/@/renderer/components/query-builder/query-builder-option'; +import { Select } from '/@/renderer/components/select'; import { QueryBuilderGroup, QueryBuilderRule } from '/@/renderer/types'; -import i18n from '/@/i18n/i18n'; const FILTER_GROUP_OPTIONS_DATA = [ { @@ -63,22 +64,22 @@ interface QueryBuilderProps { export const QueryBuilder = ({ data, + filters, + groupIndex, level, onAddRule, - onDeleteRuleGroup, - onDeleteRule, onAddRuleGroup, - onChangeType, onChangeField, - operators, onChangeOperator, + onChangeType, onChangeValue, onClearFilters, + onDeleteRule, + onDeleteRuleGroup, onResetFilters, + operators, playlists, - groupIndex, uniqueId, - filters, }: QueryBuilderProps) => { const handleAddRule = () => { onAddRule({ groupIndex, level }); @@ -92,7 +93,7 @@ export const QueryBuilder = ({ onDeleteRuleGroup({ groupIndex, level, uniqueId }); }; - const handleChangeType = (value: string | null) => { + const handleChangeType = (value: null | string) => { onChangeType({ groupIndex, level, value }); }; @@ -105,17 +106,17 @@ export const QueryBuilder = ({ { {...props} /> ); + case 'date': + return ( + + ); + case 'dateRange': + return ( + <> + { + const newRange = [e || 0, numberRange[1]]; + setNumberRange(newRange); + onChange(newRange); + }} + width="10%" + /> + { + const newRange = [numberRange[0], e || 0]; + setNumberRange(newRange); + onChange(newRange); + }} + width="10%" + /> + + ); + case 'number': + return ( + + ); case 'playlist': return ( diff --git a/src/renderer/features/albums/context/album-list-context.tsx b/src/renderer/features/albums/context/album-list-context.tsx index 8a232c31..bd7a6bbb 100644 --- a/src/renderer/features/albums/context/album-list-context.tsx +++ b/src/renderer/features/albums/context/album-list-context.tsx @@ -1,4 +1,5 @@ import { createContext, useContext } from 'react'; + import { ListKey } from '/@/renderer/store'; export const AlbumListContext = createContext<{ id?: string; pageKey: ListKey }>({ diff --git a/src/renderer/features/albums/queries/album-detail-query.ts b/src/renderer/features/albums/queries/album-detail-query.ts index 96d7726f..648dd65b 100644 --- a/src/renderer/features/albums/queries/album-detail-query.ts +++ b/src/renderer/features/albums/queries/album-detail-query.ts @@ -1,9 +1,12 @@ -import { useQuery } from '@tanstack/react-query'; -import { queryKeys } from '/@/renderer/api/query-keys'; -import type { QueryHookArgs } from '/@/renderer/lib/react-query'; -import { getServerById } from '../../../store/auth.store'; import type { AlbumDetailQuery } from '/@/renderer/api/types'; +import type { QueryHookArgs } from '/@/renderer/lib/react-query'; + +import { useQuery } from '@tanstack/react-query'; + +import { getServerById } from '../../../store/auth.store'; + import { controller } from '/@/renderer/api/controller'; +import { queryKeys } from '/@/renderer/api/query-keys'; export const useAlbumDetail = (args: QueryHookArgs) => { const { options, query, serverId } = args; diff --git a/src/renderer/features/albums/queries/album-list-count-query.ts b/src/renderer/features/albums/queries/album-list-count-query.ts index e4c13042..2282cb6a 100644 --- a/src/renderer/features/albums/queries/album-list-count-query.ts +++ b/src/renderer/features/albums/queries/album-list-count-query.ts @@ -1,8 +1,10 @@ -import { useQuery } from '@tanstack/react-query'; -import { api } from '/@/renderer/api'; -import { queryKeys } from '/@/renderer/api/query-keys'; import type { AlbumListQuery } from '/@/renderer/api/types'; import type { QueryHookArgs } from '/@/renderer/lib/react-query'; + +import { useQuery } from '@tanstack/react-query'; + +import { api } from '/@/renderer/api'; +import { queryKeys } from '/@/renderer/api/query-keys'; import { getServerById } from '/@/renderer/store'; export const useAlbumListCount = (args: QueryHookArgs) => { diff --git a/src/renderer/features/albums/queries/album-list-query.ts b/src/renderer/features/albums/queries/album-list-query.ts index 8c65b744..7e9c6e63 100644 --- a/src/renderer/features/albums/queries/album-list-query.ts +++ b/src/renderer/features/albums/queries/album-list-query.ts @@ -1,9 +1,11 @@ +import type { AlbumListQuery, AlbumListResponse } from '/@/renderer/api/types'; +import type { QueryHookArgs } from '/@/renderer/lib/react-query'; + import { useInfiniteQuery, useQuery } from '@tanstack/react-query'; + import { api } from '/@/renderer/api'; import { controller } from '/@/renderer/api/controller'; import { queryKeys } from '/@/renderer/api/query-keys'; -import type { AlbumListQuery, AlbumListResponse } from '/@/renderer/api/types'; -import type { QueryHookArgs } from '/@/renderer/lib/react-query'; import { getServerById } from '/@/renderer/store'; export const useAlbumList = (args: QueryHookArgs) => { diff --git a/src/renderer/features/albums/routes/album-detail-route.tsx b/src/renderer/features/albums/routes/album-detail-route.tsx index 8dab5922..660675ac 100644 --- a/src/renderer/features/albums/routes/album-detail-route.tsx +++ b/src/renderer/features/albums/routes/album-detail-route.tsx @@ -1,16 +1,18 @@ -import { NativeScrollArea, Spinner } from '/@/renderer/components'; -import { AnimatedPage, LibraryHeaderBar } from '/@/renderer/features/shared'; -import { useRef } from 'react'; import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; -import { useAlbumDetail } from '/@/renderer/features/albums/queries/album-detail-query'; + +import { useRef } from 'react'; import { useParams } from 'react-router'; -import { useFastAverageColor } from '/@/renderer/hooks'; + +import { LibraryItem } from '/@/renderer/api/types'; +import { NativeScrollArea, Spinner } from '/@/renderer/components'; import { AlbumDetailContent } from '/@/renderer/features/albums/components/album-detail-content'; import { AlbumDetailHeader } from '/@/renderer/features/albums/components/album-detail-header'; +import { useAlbumDetail } from '/@/renderer/features/albums/queries/album-detail-query'; import { usePlayQueueAdd } from '/@/renderer/features/player'; -import { usePlayButtonBehavior } from '/@/renderer/store/settings.store'; -import { LibraryItem } from '/@/renderer/api/types'; +import { AnimatedPage, LibraryHeaderBar } from '/@/renderer/features/shared'; +import { useFastAverageColor } from '/@/renderer/hooks'; import { useCurrentServer, useGeneralSettings } from '/@/renderer/store'; +import { usePlayButtonBehavior } from '/@/renderer/store/settings.store'; const AlbumDetailRoute = () => { const tableRef = useRef(null); @@ -49,7 +51,6 @@ const AlbumDetailRoute = () => { return ( { offset: 200, target: headerRef, }} + ref={scrollAreaRef} > { const { t } = useTranslation(); - const gridRef = useRef(null); + const gridRef = useRef(null); const tableRef = useRef(null); const server = useCurrentServer(); const [searchParams] = useSearchParams(); diff --git a/src/renderer/features/albums/routes/dummy-album-detail-route.tsx b/src/renderer/features/albums/routes/dummy-album-detail-route.tsx index e199a22c..998485fc 100644 --- a/src/renderer/features/albums/routes/dummy-album-detail-route.tsx +++ b/src/renderer/features/albums/routes/dummy-album-detail-route.tsx @@ -1,4 +1,19 @@ +import { Box, Center, Group, Stack } from '@mantine/core'; +import { useQuery } from '@tanstack/react-query'; +import { Fragment } from 'react'; +import { useTranslation } from 'react-i18next'; +import { RiErrorWarningLine, RiHeartFill, RiHeartLine, RiMoreFill } from 'react-icons/ri'; +import { generatePath, useParams } from 'react-router'; +import { Link } from 'react-router-dom'; +import { styled } from 'styled-components'; + +import { api } from '/@/renderer/api'; +import { queryKeys } from '/@/renderer/api/query-keys'; +import { LibraryItem, SongDetailResponse } from '/@/renderer/api/types'; import { Button, Spinner, Spoiler, Text } from '/@/renderer/components'; +import { useHandleGeneralContextMenu } from '/@/renderer/features/context-menu'; +import { SONG_ALBUM_PAGE } from '/@/renderer/features/context-menu/context-menu-items'; +import { usePlayQueueAdd } from '/@/renderer/features/player'; import { AnimatedPage, LibraryHeader, @@ -6,27 +21,13 @@ import { useCreateFavorite, useDeleteFavorite, } from '/@/renderer/features/shared'; -import { Fragment } from 'react'; -import { generatePath, useParams } from 'react-router'; import { useContainerQuery, useFastAverageColor } from '/@/renderer/hooks'; -import { usePlayQueueAdd } from '/@/renderer/features/player'; -import { usePlayButtonBehavior } from '/@/renderer/store/settings.store'; -import { LibraryItem, SongDetailResponse } from '/@/renderer/api/types'; -import { useCurrentServer } from '/@/renderer/store'; -import { Stack, Group, Box, Center } from '@mantine/core'; -import { Link } from 'react-router-dom'; -import { AppRoute } from '/@/renderer/router/routes'; -import { formatDurationString } from '/@/renderer/utils'; -import { RiErrorWarningLine, RiHeartFill, RiHeartLine, RiMoreFill } from 'react-icons/ri'; -import { replaceURLWithHTMLLinks } from '/@/renderer/utils/linkify'; -import { SONG_ALBUM_PAGE } from '/@/renderer/features/context-menu/context-menu-items'; -import { useHandleGeneralContextMenu } from '/@/renderer/features/context-menu'; -import { styled } from 'styled-components'; import { queryClient } from '/@/renderer/lib/react-query'; -import { useQuery } from '@tanstack/react-query'; -import { api } from '/@/renderer/api'; -import { queryKeys } from '/@/renderer/api/query-keys'; -import { useTranslation } from 'react-i18next'; +import { AppRoute } from '/@/renderer/router/routes'; +import { useCurrentServer } from '/@/renderer/store'; +import { usePlayButtonBehavior } from '/@/renderer/store/settings.store'; +import { formatDurationString } from '/@/renderer/utils'; +import { replaceURLWithHTMLLinks } from '/@/renderer/utils/linkify'; const DetailContainer = styled.div` display: flex; @@ -152,17 +153,17 @@ const DummyAlbumDetailRoute = () => { mah="4rem" spacing="md" sx={{ + overflow: 'hidden', WebkitBoxOrient: 'vertical', WebkitLineClamp: 2, - overflow: 'hidden', }} > {detailQuery?.data?.albumArtists.map((artist) => ( { createFavoriteMutation.isLoading || deleteFavoriteMutation.isLoading } - variant="subtle" onClick={handleFavorite} + variant="subtle" > {detailQuery?.data?.userFavorite ? ( { @@ -220,9 +221,9 @@ const DummyAlbumDetailRoute = () => { {detailQuery?.data?.genres?.map((genre) => ( @@ -412,18 +413,18 @@ export const AlbumArtistDetailContent = ({ background }: AlbumArtistDetailConten @@ -473,8 +476,8 @@ export const AlbumArtistListHeaderFilters = ({ {t('table.config.view.card', { postProcess: 'sentenceCase', @@ -482,8 +485,8 @@ export const AlbumArtistListHeaderFilters = ({ {t('table.config.view.poster', { postProcess: 'sentenceCase', @@ -491,8 +494,8 @@ export const AlbumArtistListHeaderFilters = ({ {t('table.config.view.table', { postProcess: 'sentenceCase', @@ -563,8 +566,8 @@ export const AlbumArtistListHeaderFilters = ({ defaultValue={table?.columns.map( (column) => column.column, )} - width={300} onChange={handleTableColumns} + width={300} /> diff --git a/src/renderer/features/artists/components/album-artist-list-header.tsx b/src/renderer/features/artists/components/album-artist-list-header.tsx index 6ce0cfd4..5e5aa5f5 100644 --- a/src/renderer/features/artists/components/album-artist-list-header.tsx +++ b/src/renderer/features/artists/components/album-artist-list-header.tsx @@ -1,27 +1,30 @@ -import type { ChangeEvent, MutableRefObject } from 'react'; import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; +import type { ChangeEvent, MutableRefObject } from 'react'; + import { Flex, Group, Stack } from '@mantine/core'; import debounce from 'lodash/debounce'; import { useTranslation } from 'react-i18next'; + import { FilterBar } from '../../shared/components/filter-bar'; + import { AlbumArtistListQuery, LibraryItem } from '/@/renderer/api/types'; import { PageHeader, SearchInput } from '/@/renderer/components'; import { VirtualInfiniteGridRef } from '/@/renderer/components/virtual-grid'; import { AlbumArtistListHeaderFilters } from '/@/renderer/features/artists/components/album-artist-list-header-filters'; import { LibraryHeaderBar } from '/@/renderer/features/shared'; import { useContainerQuery } from '/@/renderer/hooks'; -import { AlbumArtistListFilter, useCurrentServer } from '/@/renderer/store'; import { useDisplayRefresh } from '/@/renderer/hooks/use-display-refresh'; +import { AlbumArtistListFilter, useCurrentServer } from '/@/renderer/store'; interface AlbumArtistListHeaderProps { - gridRef: MutableRefObject; + gridRef: MutableRefObject; itemCount?: number; tableRef: MutableRefObject; } export const AlbumArtistListHeader = ({ - itemCount, gridRef, + itemCount, tableRef, }: AlbumArtistListHeaderProps) => { const { t } = useTranslation(); @@ -64,8 +67,8 @@ export const AlbumArtistListHeader = ({ diff --git a/src/renderer/features/artists/components/album-artist-list-table-view.tsx b/src/renderer/features/artists/components/album-artist-list-table-view.tsx index 6cf560df..1fd57275 100644 --- a/src/renderer/features/artists/components/album-artist-list-table-view.tsx +++ b/src/renderer/features/artists/components/album-artist-list-table-view.tsx @@ -1,7 +1,10 @@ import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; + import { MutableRefObject } from 'react'; + import { useListContext } from '../../../context/list-context'; import { ARTIST_CONTEXT_MENU_ITEMS } from '../../context-menu/context-menu-items'; + import { LibraryItem } from '/@/renderer/api/types'; import { VirtualGridAutoSizerContainer } from '/@/renderer/components/virtual-grid'; import { VirtualTable } from '/@/renderer/components/virtual-table'; diff --git a/src/renderer/features/artists/components/artist-list-content.tsx b/src/renderer/features/artists/components/artist-list-content.tsx index 436184b4..f36af5f7 100644 --- a/src/renderer/features/artists/components/artist-list-content.tsx +++ b/src/renderer/features/artists/components/artist-list-content.tsx @@ -1,10 +1,13 @@ import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; + import { lazy, MutableRefObject, Suspense } from 'react'; + +import { useListStoreByKey } from '../../../store/list.store'; + import { Spinner } from '/@/renderer/components'; import { VirtualInfiniteGridRef } from '/@/renderer/components/virtual-grid'; -import { ListDisplayType } from '/@/renderer/types'; -import { useListStoreByKey } from '../../../store/list.store'; import { useListContext } from '/@/renderer/context/list-context'; +import { ListDisplayType } from '/@/renderer/types'; const ArtistListGridView = lazy(() => import('/@/renderer/features/artists/components/artist-list-grid-view').then((module) => ({ @@ -19,12 +22,12 @@ const ArtistListTableView = lazy(() => ); interface ArtistListContentProps { - gridRef: MutableRefObject; + gridRef: MutableRefObject; itemCount?: number; tableRef: MutableRefObject; } -export const ArtistListContent = ({ itemCount, gridRef, tableRef }: ArtistListContentProps) => { +export const ArtistListContent = ({ gridRef, itemCount, tableRef }: ArtistListContentProps) => { const { pageKey } = useListContext(); const { display } = useListStoreByKey({ key: pageKey }); const isGrid = display === ListDisplayType.CARD || display === ListDisplayType.POSTER; diff --git a/src/renderer/features/artists/components/artist-list-grid-view.tsx b/src/renderer/features/artists/components/artist-list-grid-view.tsx index 9734da73..e72a63ca 100644 --- a/src/renderer/features/artists/components/artist-list-grid-view.tsx +++ b/src/renderer/features/artists/components/artist-list-grid-view.tsx @@ -2,8 +2,10 @@ import { QueryKey, useQueryClient } from '@tanstack/react-query'; import { MutableRefObject, useCallback, useMemo } from 'react'; import AutoSizer, { Size } from 'react-virtualized-auto-sizer'; import { ListOnScrollProps } from 'react-window'; + import { VirtualGridAutoSizerContainer } from '../../../components/virtual-grid/virtual-grid-wrapper'; import { useListStoreByKey } from '../../../store/list.store'; + import { api } from '/@/renderer/api'; import { queryKeys } from '/@/renderer/api/query-keys'; import { @@ -17,28 +19,28 @@ import { ALBUMARTIST_CARD_ROWS } from '/@/renderer/components'; import { VirtualInfiniteGrid, VirtualInfiniteGridRef } from '/@/renderer/components/virtual-grid'; import { useListContext } from '/@/renderer/context/list-context'; import { usePlayQueueAdd } from '/@/renderer/features/player'; +import { useHandleFavorite } from '/@/renderer/features/shared/hooks/use-handle-favorite'; import { AppRoute } from '/@/renderer/router/routes'; import { useCurrentServer, useListStoreActions } from '/@/renderer/store'; import { CardRow, ListDisplayType } from '/@/renderer/types'; -import { useHandleFavorite } from '/@/renderer/features/shared/hooks/use-handle-favorite'; interface ArtistListGridViewProps { - gridRef: MutableRefObject; + gridRef: MutableRefObject; itemCount?: number; } -export const ArtistListGridView = ({ itemCount, gridRef }: ArtistListGridViewProps) => { +export const ArtistListGridView = ({ gridRef, itemCount }: ArtistListGridViewProps) => { const queryClient = useQueryClient(); const server = useCurrentServer(); const handlePlayQueueAdd = usePlayQueueAdd(); const { pageKey } = useListContext(); - const { grid, display, filter } = useListStoreByKey({ key: pageKey }); + const { display, filter, grid } = useListStoreByKey({ key: pageKey }); const { setGrid } = useListStoreActions(); const handleFavorite = useHandleFavorite({ gridRef, server }); const fetchInitialData = useCallback(() => { - const query: Omit = { + const query: Omit = { ...filter, }; @@ -109,6 +111,9 @@ export const ArtistListGridView = ({ itemCount, gridRef }: ArtistListGridViewPro const rows: CardRow[] = [ALBUMARTIST_CARD_ROWS.name]; switch (filter.sortBy) { + case ArtistListSort.ALBUM_COUNT: + rows.push(ALBUMARTIST_CARD_ROWS.albumCount); + break; case ArtistListSort.DURATION: rows.push(ALBUMARTIST_CARD_ROWS.duration); break; @@ -116,9 +121,6 @@ export const ArtistListGridView = ({ itemCount, gridRef }: ArtistListGridViewPro break; case ArtistListSort.NAME: break; - case ArtistListSort.ALBUM_COUNT: - rows.push(ALBUMARTIST_CARD_ROWS.albumCount); - break; case ArtistListSort.PLAY_COUNT: rows.push(ALBUMARTIST_CARD_ROWS.playCount); break; @@ -129,11 +131,11 @@ export const ArtistListGridView = ({ itemCount, gridRef }: ArtistListGridViewPro break; case ArtistListSort.RECENTLY_ADDED: break; + case ArtistListSort.RELEASE_DATE: + break; case ArtistListSort.SONG_COUNT: rows.push(ALBUMARTIST_CARD_ROWS.songCount); break; - case ArtistListSort.RELEASE_DATE: - break; } return rows; @@ -144,7 +146,6 @@ export const ArtistListGridView = ({ itemCount, gridRef }: ArtistListGridViewPro {({ height, width }: Size) => ( )} diff --git a/src/renderer/features/artists/components/artist-list-header-filters.tsx b/src/renderer/features/artists/components/artist-list-header-filters.tsx index a6ac45cf..1551c0d1 100644 --- a/src/renderer/features/artists/components/artist-list-header-filters.tsx +++ b/src/renderer/features/artists/components/artist-list-header-filters.tsx @@ -1,12 +1,16 @@ -import { ChangeEvent, MouseEvent, MutableRefObject, useCallback } from 'react'; -import { IDatasource } from '@ag-grid-community/core'; import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; + +import { IDatasource } from '@ag-grid-community/core'; import { Divider, Flex, Group, Stack } from '@mantine/core'; import { useQueryClient } from '@tanstack/react-query'; import debounce from 'lodash/debounce'; +import { ChangeEvent, MouseEvent, MutableRefObject, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { RiFolder2Line, RiMoreFill, RiRefreshLine, RiSettings3Fill } from 'react-icons/ri'; + import { useListContext } from '../../../context/list-context'; + +import i18n from '/@/i18n/i18n'; import { api } from '/@/renderer/api'; import { queryKeys } from '/@/renderer/api/query-keys'; import { @@ -27,6 +31,7 @@ import { } from '/@/renderer/components'; import { VirtualInfiniteGridRef } from '/@/renderer/components/virtual-grid'; import { ALBUMARTIST_TABLE_COLUMNS } from '/@/renderer/components/virtual-table'; +import { useRoles } from '/@/renderer/features/artists/queries/roles-query'; import { OrderToggleButton, useMusicFolders } from '/@/renderer/features/shared'; import { useContainerQuery } from '/@/renderer/hooks'; import { @@ -36,8 +41,6 @@ import { useListStoreByKey, } from '/@/renderer/store'; import { ListDisplayType, TableColumn } from '/@/renderer/types'; -import i18n from '/@/i18n/i18n'; -import { useRoles } from '/@/renderer/features/artists/queries/roles-query'; const FILTERS = { jellyfin: [ @@ -124,7 +127,7 @@ const FILTERS = { }; interface ArtistListHeaderFiltersProps { - gridRef: MutableRefObject; + gridRef: MutableRefObject; tableRef: MutableRefObject; } @@ -133,10 +136,10 @@ export const ArtistListHeaderFilters = ({ gridRef, tableRef }: ArtistListHeaderF const queryClient = useQueryClient(); const server = useCurrentServer(); const { pageKey } = useListContext(); - const { display, table, grid, filter } = useListStoreByKey({ + const { display, filter, grid, table } = useListStoreByKey({ key: pageKey, }); - const { setFilter, setTable, setTablePagination, setDisplayType, setGrid } = + const { setDisplayType, setFilter, setGrid, setTable, setTablePagination } = useListStoreActions(); const cq = useContainerQuery(); const roles = useRoles({ @@ -369,7 +372,7 @@ export const ArtistListHeaderFilters = ({ gridRef, tableRef }: ArtistListHeaderF }, [filter, handleFilterChange, queryClient, server?.id]); const handleSetRole = useCallback( - (e: string | null) => { + (e: null | string) => { const updatedFilters = setFilter({ data: { role: e || '', @@ -403,10 +406,10 @@ export const ArtistListHeaderFilters = ({ gridRef, tableRef }: ArtistListHeaderF {FILTERS[server?.type as keyof typeof FILTERS].map((f) => ( {f.name} @@ -415,8 +418,8 @@ export const ArtistListHeaderFilters = ({ gridRef, tableRef }: ArtistListHeaderF {server?.type === ServerType.JELLYFIN && ( <> @@ -435,10 +438,10 @@ export const ArtistListHeaderFilters = ({ gridRef, tableRef }: ArtistListHeaderF {musicFoldersQuery.data?.items.map((folder) => ( {folder.name} @@ -452,18 +455,18 @@ export const ArtistListHeaderFilters = ({ gridRef, tableRef }: ArtistListHeaderF setStore({ genre: e || '' })} + value={genre} /> { setStore({ played: e as Played }); }} + value={played} /> )} @@ -210,18 +211,18 @@ export const ShuffleAllModal = ({ @@ -229,9 +230,9 @@ export const ShuffleAllModal = ({ diff --git a/src/renderer/features/player/components/visualizer.tsx b/src/renderer/features/player/components/visualizer.tsx index 3e633eec..e1405a51 100644 --- a/src/renderer/features/player/components/visualizer.tsx +++ b/src/renderer/features/player/components/visualizer.tsx @@ -1,7 +1,8 @@ -import { createRef, useCallback, useEffect, useState } from 'react'; -import { useWebAudio } from '/@/renderer/features/player/hooks/use-webaudio'; import AudioMotionAnalyzer from 'audiomotion-analyzer'; +import { createRef, useCallback, useEffect, useState } from 'react'; import styled from 'styled-components'; + +import { useWebAudio } from '/@/renderer/features/player/hooks/use-webaudio'; import { useSettingsStore } from '/@/renderer/store'; const StyledContainer = styled.div` diff --git a/src/renderer/features/player/context/play-queue-handler-context.ts b/src/renderer/features/player/context/play-queue-handler-context.ts index ae1d0265..dc45db08 100644 --- a/src/renderer/features/player/context/play-queue-handler-context.ts +++ b/src/renderer/features/player/context/play-queue-handler-context.ts @@ -1,4 +1,5 @@ import { createContext } from 'react'; + import { PlayQueueAddOptions } from '/@/renderer/types'; export const PlayQueueHandlerContext = createContext<{ diff --git a/src/renderer/features/player/context/webaudio-context.ts b/src/renderer/features/player/context/webaudio-context.ts index caabca8d..710cf933 100644 --- a/src/renderer/features/player/context/webaudio-context.ts +++ b/src/renderer/features/player/context/webaudio-context.ts @@ -1,4 +1,5 @@ import { createContext } from 'react'; + import { WebAudio } from '/@/renderer/types'; export const WebAudioContext = createContext<{ diff --git a/src/renderer/features/player/hooks/use-center-controls.ts b/src/renderer/features/player/hooks/use-center-controls.ts index ac34f0e8..b6f5f53f 100644 --- a/src/renderer/features/player/hooks/use-center-controls.ts +++ b/src/renderer/features/player/hooks/use-center-controls.ts @@ -1,6 +1,11 @@ -import { useCallback, useEffect } from 'react'; import isElectron from 'is-electron'; -import { PlaybackType, PlayerRepeat, PlayerShuffle, PlayerStatus } from '/@/renderer/types'; +import debounce from 'lodash/debounce'; +import { useCallback, useEffect } from 'react'; +import { useTranslation } from 'react-i18next'; + +import { toast } from '/@/renderer/components'; +import { useScrobble } from '/@/renderer/features/player/hooks/use-scrobble'; +import { updateSong } from '/@/renderer/features/player/update-remote-song'; import { useCurrentPlayer, useCurrentStatus, @@ -12,19 +17,15 @@ import { useShuffleStatus, } from '/@/renderer/store'; import { usePlaybackType } from '/@/renderer/store/settings.store'; -import { useScrobble } from '/@/renderer/features/player/hooks/use-scrobble'; -import debounce from 'lodash/debounce'; -import { toast } from '/@/renderer/components'; -import { useTranslation } from 'react-i18next'; -import { updateSong } from '/@/renderer/features/player/update-remote-song'; +import { PlaybackType, PlayerRepeat, PlayerShuffle, PlayerStatus } from '/@/renderer/types'; import { setAutoNext, setQueue, setQueueNext } from '/@/renderer/utils/set-transcoded-queue-data'; -const mpvPlayer = isElectron() ? window.electron.mpvPlayer : null; -const mpvPlayerListener = isElectron() ? window.electron.mpvPlayerListener : null; -const ipc = isElectron() ? window.electron.ipc : null; -const utils = isElectron() ? window.electron.utils : null; -const mpris = isElectron() && utils?.isLinux() ? window.electron.mpris : null; -const remote = isElectron() ? window.electron.remote : null; +const mpvPlayer = isElectron() ? window.api.mpvPlayer : null; +const mpvPlayerListener = isElectron() ? window.api.mpvPlayerListener : null; +const ipc = isElectron() ? window.api.ipc : null; +const utils = isElectron() ? window.api.utils : null; +const mpris = isElectron() && utils?.isLinux() ? window.api.mpris : null; +const remote = isElectron() ? window.api.remote : null; const mediaSession = navigator.mediaSession; export const useCenterControls = (args: { playersRef: any }) => { @@ -32,7 +33,7 @@ export const useCenterControls = (args: { playersRef: any }) => { const { playersRef } = args; const currentPlayer = useCurrentPlayer(); - const { setShuffle, setRepeat, play, pause, previous, next, setCurrentIndex, autoNext } = + const { autoNext, next, pause, play, previous, setCurrentIndex, setRepeat, setShuffle } = usePlayerControls(); const setCurrentTime = useSetCurrentTime(); const queue = useDefaultQueue(); @@ -45,7 +46,7 @@ export const useCenterControls = (args: { playersRef: any }) => { const currentPlayerRef = currentPlayer === 1 ? player1Ref : player2Ref; const nextPlayerRef = currentPlayer === 1 ? player2Ref : player1Ref; - const { handleScrobbleFromSongRestart, handleScrobbleFromSeek } = useScrobble(); + const { handleScrobbleFromSeek, handleScrobbleFromSongRestart } = useScrobble(); useEffect(() => { if (mediaSession) { @@ -226,12 +227,12 @@ export const useCenterControls = (args: { playersRef: any }) => { }; switch (repeatStatus) { - case PlayerRepeat.NONE: - handleRepeatNone[playbackType](); - break; case PlayerRepeat.ALL: handleRepeatAll[playbackType](); break; + case PlayerRepeat.NONE: + handleRepeatNone[playbackType](); + break; case PlayerRepeat.ONE: handleRepeatOne[playbackType](); break; @@ -310,12 +311,12 @@ export const useCenterControls = (args: { playersRef: any }) => { }; switch (repeatStatus) { - case PlayerRepeat.NONE: - handleRepeatNone[playbackType](); - break; case PlayerRepeat.ALL: handleRepeatAll[playbackType](); break; + case PlayerRepeat.NONE: + handleRepeatNone[playbackType](); + break; case PlayerRepeat.ONE: handleRepeatOne[playbackType](); break; @@ -418,12 +419,12 @@ export const useCenterControls = (args: { playersRef: any }) => { }; switch (repeatStatus) { - case PlayerRepeat.NONE: - handleRepeatNone[playbackType](); - break; case PlayerRepeat.ALL: handleRepeatAll[playbackType](); break; + case PlayerRepeat.NONE: + handleRepeatNone[playbackType](); + break; case PlayerRepeat.ONE: handleRepeatOne[playbackType](); break; @@ -510,7 +511,7 @@ export const useCenterControls = (args: { playersRef: any }) => { }, 100); const handleSeekSlider = useCallback( - (e: number | any) => { + (e: any | number) => { setCurrentTime(e, true); handleScrobbleFromSeek(e); debouncedSeek(e); @@ -564,6 +565,7 @@ export const useCenterControls = (args: { playersRef: any }) => { }); mpvPlayerListener.rendererCurrentTime((_event: any, time: number) => { + console.log('time :>> ', time); setCurrentTime(time); }); diff --git a/src/renderer/features/player/hooks/use-handle-playqueue-add.ts b/src/renderer/features/player/hooks/use-handle-playqueue-add.ts index b25f9e8c..f19cd4d4 100644 --- a/src/renderer/features/player/hooks/use-handle-playqueue-add.ts +++ b/src/renderer/features/player/hooks/use-handle-playqueue-add.ts @@ -1,31 +1,32 @@ -import { useCallback, useRef } from 'react'; import { useQueryClient } from '@tanstack/react-query'; -import { useCurrentServer, usePlayerControls, usePlayerStore } from '/@/renderer/store'; -import { useGeneralSettings, usePlaybackType } from '/@/renderer/store/settings.store'; -import { PlayQueueAddOptions, Play, PlaybackType } from '/@/renderer/types'; -import { toast } from '/@/renderer/components/toast/index'; import isElectron from 'is-electron'; import { nanoid } from 'nanoid/non-secure'; +import { useCallback, useRef } from 'react'; +import { useTranslation } from 'react-i18next'; + +import { queryKeys } from '/@/renderer/api/query-keys'; import { + instanceOfCancellationError, LibraryItem, QueueSong, Song, SongListResponse, - instanceOfCancellationError, } from '/@/renderer/api/types'; -import { - getPlaylistSongsById, - getSongById, - getAlbumSongsById, - getAlbumArtistSongsById, - getSongsByQuery, - getGenreSongsById, - getArtistSongsById, -} from '/@/renderer/features/player/utils'; -import { queryKeys } from '/@/renderer/api/query-keys'; -import { useTranslation } from 'react-i18next'; +import { toast } from '/@/renderer/components/toast/index'; import { PlayersRef } from '/@/renderer/features/player/ref/players-ref'; import { updateSong } from '/@/renderer/features/player/update-remote-song'; +import { + getAlbumArtistSongsById, + getAlbumSongsById, + getArtistSongsById, + getGenreSongsById, + getPlaylistSongsById, + getSongById, + getSongsByQuery, +} from '/@/renderer/features/player/utils'; +import { useCurrentServer, usePlayerControls, usePlayerStore } from '/@/renderer/store'; +import { useGeneralSettings, usePlaybackType } from '/@/renderer/store/settings.store'; +import { Play, PlaybackType, PlayQueueAddOptions } from '/@/renderer/types'; import { setQueue, setQueueNext } from '/@/renderer/utils/set-transcoded-queue-data'; const getRootQueryKey = (itemType: LibraryItem, serverId: string) => { @@ -55,7 +56,7 @@ const getRootQueryKey = (itemType: LibraryItem, serverId: string) => { return queryKey; }; -const mpvPlayer = isElectron() ? window.electron.mpvPlayer : null; +const mpvPlayer = isElectron() ? window.api.mpvPlayer : null; const addToQueue = usePlayerStore.getState().actions.addToQueue; @@ -65,20 +66,20 @@ export const useHandlePlayQueueAdd = () => { const playbackType = usePlaybackType(); const server = useCurrentServer(); const { play } = usePlayerControls(); - const timeoutIds = useRef> | null>({}); + const timeoutIds = useRef>>({}); const { doubleClickQueueAll } = useGeneralSettings(); const handlePlayQueueAdd = useCallback( async (options: PlayQueueAddOptions) => { if (!server) return toast.error({ message: 'No server selected', type: 'error' }); - const { initialIndex, initialSongId, playType, byData, byItemType, query } = options; - let songs: QueueSong[] | null = null; + const { byData, byItemType, initialIndex, initialSongId, playType, query } = options; + let songs: null | QueueSong[] = null; let initialSongIndex = 0; if (byItemType) { let songList: SongListResponse | undefined; - const { type: itemType, id } = byItemType; + const { id, type: itemType } = byItemType; const fetchId = nanoid(); timeoutIds.current = { diff --git a/src/renderer/features/player/hooks/use-playqueue-add.ts b/src/renderer/features/player/hooks/use-playqueue-add.ts index 4703cb61..bfda2a7b 100644 --- a/src/renderer/features/player/hooks/use-playqueue-add.ts +++ b/src/renderer/features/player/hooks/use-playqueue-add.ts @@ -1,4 +1,5 @@ import { useContext } from 'react'; + import { PlayQueueHandlerContext } from '/@/renderer/features/player/context/play-queue-handler-context'; export const usePlayQueueAdd = () => { diff --git a/src/renderer/features/player/hooks/use-right-controls.ts b/src/renderer/features/player/hooks/use-right-controls.ts index eac4e805..526291ca 100644 --- a/src/renderer/features/player/hooks/use-right-controls.ts +++ b/src/renderer/features/player/hooks/use-right-controls.ts @@ -1,5 +1,6 @@ -import { useCallback, useEffect, WheelEvent } from 'react'; import isElectron from 'is-electron'; +import { useCallback, useEffect, WheelEvent } from 'react'; + import { useMuted, usePlayerControls, @@ -9,10 +10,10 @@ import { } from '/@/renderer/store'; import { useGeneralSettings } from '/@/renderer/store/settings.store'; -const mpvPlayer = isElectron() ? window.electron.mpvPlayer : null; -const mpvPlayerListener = isElectron() ? window.electron.mpvPlayerListener : null; -const ipc = isElectron() ? window.electron.ipc : null; -const remote = isElectron() ? window.electron.remote : null; +const mpvPlayer = isElectron() ? window.api.mpvPlayer : null; +const mpvPlayerListener = isElectron() ? window.api.mpvPlayerListener : null; +const ipc = isElectron() ? window.api.ipc : null; +const remote = isElectron() ? window.api.remote : null; const calculateVolumeUp = (volume: number, volumeWheelStep: number) => { let volumeToSet; @@ -39,7 +40,7 @@ const calculateVolumeDown = (volume: number, volumeWheelStep: number) => { }; export const useRightControls = () => { - const { setVolume, setMuted } = usePlayerControls(); + const { setMuted, setVolume } = usePlayerControls(); const volume = useVolume(); const muted = useMuted(); const { volumeWheelStep } = useGeneralSettings(); @@ -98,7 +99,7 @@ export const useRightControls = () => { }, [setVolume, volume, volumeWheelStep]); const handleVolumeWheel = useCallback( - (e: WheelEvent) => { + (e: WheelEvent) => { let volumeToSet; if (e.deltaY > 0 || e.deltaX > 0) { volumeToSet = calculateVolumeDown(volume, volumeWheelStep); diff --git a/src/renderer/features/player/hooks/use-scrobble.ts b/src/renderer/features/player/hooks/use-scrobble.ts index fc9a833b..281c78d1 100644 --- a/src/renderer/features/player/hooks/use-scrobble.ts +++ b/src/renderer/features/player/hooks/use-scrobble.ts @@ -1,4 +1,5 @@ -import { useEffect, useCallback, useState, useRef } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; + import { QueueSong, ServerType } from '/@/renderer/api/types'; import { useSendScrobble } from '/@/renderer/features/player/mutations/scrobble-mutation'; import { usePlayerStore } from '/@/renderer/store'; @@ -82,12 +83,12 @@ export const useScrobble = () => { [isScrobbleEnabled, sendScrobble], ); - const progressIntervalId = useRef | null>(null); - const songChangeTimeoutId = useRef | null>(null); + const progressIntervalId = useRef>(null); + const songChangeTimeoutId = useRef>(null); const handleScrobbleFromSongChange = useCallback( ( - current: (QueueSong | number | undefined)[], - previous: (QueueSong | number | undefined)[], + current: (number | QueueSong | undefined)[], + previous: (number | QueueSong | undefined)[], ) => { if (!isScrobbleEnabled) return; @@ -179,8 +180,8 @@ export const useScrobble = () => { const handleScrobbleFromStatusChange = useCallback( ( - current: (PlayerStatus | number | undefined)[], - previous: (PlayerStatus | number | undefined)[], + current: (number | PlayerStatus | undefined)[], + previous: (number | PlayerStatus | undefined)[], ) => { if (!isScrobbleEnabled) return; diff --git a/src/renderer/features/player/hooks/use-webaudio.ts b/src/renderer/features/player/hooks/use-webaudio.ts index 5b8bc334..209e732f 100644 --- a/src/renderer/features/player/hooks/use-webaudio.ts +++ b/src/renderer/features/player/hooks/use-webaudio.ts @@ -1,7 +1,8 @@ import { useContext } from 'react'; + import { WebAudioContext } from '/@/renderer/features/player/context/webaudio-context'; export const useWebAudio = () => { - const { webAudio, setWebAudio } = useContext(WebAudioContext); + const { setWebAudio, webAudio } = useContext(WebAudioContext); return { setWebAudio, webAudio }; }; diff --git a/src/renderer/features/player/mutations/scrobble-mutation.ts b/src/renderer/features/player/mutations/scrobble-mutation.ts index 8b1688d1..7445fb07 100644 --- a/src/renderer/features/player/mutations/scrobble-mutation.ts +++ b/src/renderer/features/player/mutations/scrobble-mutation.ts @@ -1,7 +1,8 @@ import { useMutation } from '@tanstack/react-query'; import { AxiosError } from 'axios'; + import { api } from '/@/renderer/api'; -import { ScrobbleResponse, ScrobbleArgs } from '/@/renderer/api/types'; +import { ScrobbleArgs, ScrobbleResponse } from '/@/renderer/api/types'; import { MutationOptions } from '/@/renderer/lib/react-query'; import { getServerById, useIncrementQueuePlayCount } from '/@/renderer/store'; import { usePlayEvent } from '/@/renderer/store/event.store'; @@ -13,7 +14,7 @@ export const useSendScrobble = (options?: MutationOptions) => { return useMutation< ScrobbleResponse, AxiosError, - Omit, + Omit, null >({ mutationFn: (args) => { diff --git a/src/renderer/features/player/update-remote-song.tsx b/src/renderer/features/player/update-remote-song.tsx index 1941e60e..a091068d 100644 --- a/src/renderer/features/player/update-remote-song.tsx +++ b/src/renderer/features/player/update-remote-song.tsx @@ -1,7 +1,8 @@ import isElectron from 'is-electron'; + import { QueueSong } from '/@/renderer/api/types'; -const remote = isElectron() ? window.electron.remote : null; +const remote = isElectron() ? window.api.remote : null; const mediaSession = navigator.mediaSession; export const updateSong = (song: QueueSong | undefined) => { diff --git a/src/renderer/features/player/utils.ts b/src/renderer/features/player/utils.ts index 6fa6a312..c0f2b284 100644 --- a/src/renderer/features/player/utils.ts +++ b/src/renderer/features/player/utils.ts @@ -1,14 +1,15 @@ import { QueryClient } from '@tanstack/react-query'; + import { api } from '/@/renderer/api'; import { queryKeys } from '/@/renderer/api/query-keys'; import { PlaylistSongListQuery, + ServerListItem, SongDetailQuery, SongListQuery, SongListResponse, SongListSort, SortOrder, - ServerListItem, } from '/@/renderer/api/types'; export const getPlaylistSongsById = async (args: { @@ -17,7 +18,7 @@ export const getPlaylistSongsById = async (args: { queryClient: QueryClient; server: ServerListItem; }) => { - const { id, queryClient, server, query } = args; + const { id, query, queryClient, server } = args; const queryFilter: PlaylistSongListQuery = { id, @@ -55,7 +56,7 @@ export const getAlbumSongsById = async (args: { queryClient: QueryClient; server: ServerListItem; }) => { - const { id, queryClient, server, query } = args; + const { id, query, queryClient, server } = args; const queryFilter: SongListQuery = { albumIds: id, @@ -91,9 +92,9 @@ export const getGenreSongsById = async (args: { orderByIds?: boolean; query?: Partial; queryClient: QueryClient; - server: ServerListItem | null; + server: null | ServerListItem; }) => { - const { id, queryClient, server, query } = args; + const { id, query, queryClient, server } = args; const data: SongListResponse = { items: [], @@ -143,7 +144,7 @@ export const getAlbumArtistSongsById = async (args: { queryClient: QueryClient; server: ServerListItem; }) => { - const { id, queryClient, server, query } = args; + const { id, query, queryClient, server } = args; const queryFilter: SongListQuery = { albumArtistIds: id || [], @@ -180,7 +181,7 @@ export const getArtistSongsById = async (args: { queryClient: QueryClient; server: ServerListItem; }) => { - const { id, queryClient, server, query } = args; + const { id, query, queryClient, server } = args; const queryFilter: SongListQuery = { artistIds: id, @@ -216,7 +217,7 @@ export const getSongsByQuery = async (args: { queryClient: QueryClient; server: ServerListItem; }) => { - const { queryClient, server, query } = args; + const { query, queryClient, server } = args; const queryFilter: SongListQuery = { sortBy: SongListSort.ALBUM, diff --git a/src/renderer/features/playlists/components/add-to-playlist-context-modal.tsx b/src/renderer/features/playlists/components/add-to-playlist-context-modal.tsx index c20c76ac..9fddb545 100644 --- a/src/renderer/features/playlists/components/add-to-playlist-context-modal.tsx +++ b/src/renderer/features/playlists/components/add-to-playlist-context-modal.tsx @@ -1,7 +1,9 @@ -import { useMemo, useState } from 'react'; import { Box, Group, Stack } from '@mantine/core'; import { useForm } from '@mantine/form'; import { closeModal, ContextModalProps } from '@mantine/modals'; +import { useMemo, useState } from 'react'; +import { useTranslation } from 'react-i18next'; + import { api } from '/@/renderer/api'; import { queryKeys } from '/@/renderer/api/query-keys'; import { PlaylistListSort, SongListQuery, SongListSort, SortOrder } from '/@/renderer/api/types'; @@ -11,7 +13,6 @@ import { useAddToPlaylist } from '/@/renderer/features/playlists/mutations/add-t import { usePlaylistList } from '/@/renderer/features/playlists/queries/playlist-list-query'; import { queryClient } from '/@/renderer/lib/react-query'; import { useCurrentServer } from '/@/renderer/store'; -import { useTranslation } from 'react-i18next'; export const AddToPlaylistContextModal = ({ id, @@ -217,13 +218,13 @@ export const AddToPlaylistContextModal = ({ @@ -238,9 +239,9 @@ export const AddToPlaylistContextModal = ({ diff --git a/src/renderer/features/playlists/components/create-playlist-form.tsx b/src/renderer/features/playlists/components/create-playlist-form.tsx index 13f8609b..fbd3a3ae 100644 --- a/src/renderer/features/playlists/components/create-playlist-form.tsx +++ b/src/renderer/features/playlists/components/create-playlist-form.tsx @@ -1,7 +1,11 @@ -import { useRef, useState } from 'react'; import { Group, Stack } from '@mantine/core'; import { useForm } from '@mantine/form'; +import { useRef, useState } from 'react'; +import { useTranslation } from 'react-i18next'; + +import { ServerFeature } from '/@/renderer/api/features-types'; import { CreatePlaylistBody, ServerType, SongListSort } from '/@/renderer/api/types'; +import { hasFeature } from '/@/renderer/api/utils'; import { Button, Switch, Text, TextInput, toast } from '/@/renderer/components'; import { PlaylistQueryBuilder, @@ -10,9 +14,6 @@ import { import { useCreatePlaylist } from '/@/renderer/features/playlists/mutations/create-playlist-mutation'; import { convertQueryGroupToNDQuery } from '/@/renderer/features/playlists/utils'; import { useCurrentServer } from '/@/renderer/store'; -import { useTranslation } from 'react-i18next'; -import { hasFeature } from '/@/renderer/api/utils'; -import { ServerFeature } from '/@/renderer/api/features-types'; interface CreatePlaylistFormProps { onCancel: () => void; @@ -95,11 +96,11 @@ export const CreatePlaylistForm = ({ onCancel }: CreatePlaylistFormProps) => { {server?.type === ServerType.NAVIDROME && ( @@ -135,10 +136,10 @@ export const CreatePlaylistForm = ({ onCancel }: CreatePlaylistFormProps) => { Query Editor @@ -147,8 +148,8 @@ export const CreatePlaylistForm = ({ onCancel }: CreatePlaylistFormProps) => { diff --git a/src/renderer/features/playlists/components/playlist-detail-song-list-content.tsx b/src/renderer/features/playlists/components/playlist-detail-song-list-content.tsx index 445cde53..9d39dbd8 100644 --- a/src/renderer/features/playlists/components/playlist-detail-song-list-content.tsx +++ b/src/renderer/features/playlists/components/playlist-detail-song-list-content.tsx @@ -8,11 +8,13 @@ import type { RowDragEvent, } from '@ag-grid-community/core'; import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; + import { useQueryClient } from '@tanstack/react-query'; import { AnimatePresence } from 'framer-motion'; import debounce from 'lodash/debounce'; import { MutableRefObject, useCallback, useMemo } from 'react'; import { useParams } from 'react-router'; + import { api } from '/@/renderer/api'; import { queryKeys } from '/@/renderer/api/query-keys'; import { @@ -23,8 +25,9 @@ import { SongListSort, SortOrder, } from '/@/renderer/api/types'; +import { toast } from '/@/renderer/components'; import { VirtualGridAutoSizerContainer } from '/@/renderer/components/virtual-grid'; -import { TablePagination, VirtualTable, getColumnDefs } from '/@/renderer/components/virtual-table'; +import { getColumnDefs, TablePagination, VirtualTable } from '/@/renderer/components/virtual-table'; import { useCurrentSongRowStyles } from '/@/renderer/components/virtual-table/hooks/use-current-song-row-styles'; import { useHandleTableContextMenu } from '/@/renderer/features/context-menu'; import { @@ -34,6 +37,7 @@ import { import { usePlayQueueAdd } from '/@/renderer/features/player'; import { usePlaylistDetail } from '/@/renderer/features/playlists/queries/playlist-detail-query'; import { usePlaylistSongList } from '/@/renderer/features/playlists/queries/playlist-song-list-query'; +import { useAppFocus } from '/@/renderer/hooks'; import { useCurrentServer, useCurrentSong, @@ -45,8 +49,6 @@ import { } from '/@/renderer/store'; import { usePlayButtonBehavior } from '/@/renderer/store/settings.store'; import { ListDisplayType, ServerType } from '/@/renderer/types'; -import { useAppFocus } from '/@/renderer/hooks'; -import { toast } from '/@/renderer/components'; interface PlaylistDetailContentProps { songs?: Song[]; @@ -290,12 +292,7 @@ export const PlaylistDetailSongListContent = ({ songs, tableRef }: PlaylistDetai <> {isPaginationEnabled && ( {page.display === ListDisplayType.TABLE_PAGINATED && ( { const { t } = useTranslation(); const { playlistId } = useParams() as { playlistId: string }; @@ -493,10 +495,10 @@ export const PlaylistDetailSongListHeaderFilters = ({ {FILTERS[server?.type as keyof typeof FILTERS].map((filter) => ( {filter.name} @@ -506,8 +508,8 @@ export const PlaylistDetailSongListHeaderFilters = ({ @@ -601,8 +603,8 @@ export const PlaylistDetailSongListHeaderFilters = ({ Table @@ -642,8 +644,8 @@ export const PlaylistDetailSongListHeaderFilters = ({ defaultValue={page.table?.columns.map( (column) => column.column, )} - width={300} onChange={handleTableColumns} + width={300} /> Auto Fit Columns diff --git a/src/renderer/features/playlists/components/playlist-detail-song-list-header.tsx b/src/renderer/features/playlists/components/playlist-detail-song-list-header.tsx index 29e7a51e..ae28ef50 100644 --- a/src/renderer/features/playlists/components/playlist-detail-song-list-header.tsx +++ b/src/renderer/features/playlists/components/playlist-detail-song-list-header.tsx @@ -1,8 +1,10 @@ -import { MutableRefObject } from 'react'; import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; + import { Stack } from '@mantine/core'; +import { MutableRefObject } from 'react'; import { useTranslation } from 'react-i18next'; import { useParams } from 'react-router'; + import { LibraryItem } from '/@/renderer/api/types'; import { Badge, PageHeader, Paper, SpinnerIcon } from '/@/renderer/components'; import { usePlayQueueAdd } from '/@/renderer/features/player'; @@ -20,9 +22,9 @@ interface PlaylistDetailHeaderProps { } export const PlaylistDetailSongListHeader = ({ - tableRef, - itemCount, handleToggleShowQueryBuilder, + itemCount, + tableRef, }: PlaylistDetailHeaderProps) => { const { t } = useTranslation(); const { playlistId } = useParams() as { playlistId: string }; diff --git a/src/renderer/features/playlists/components/playlist-list-content.tsx b/src/renderer/features/playlists/components/playlist-list-content.tsx index ed40b04d..61427068 100644 --- a/src/renderer/features/playlists/components/playlist-list-content.tsx +++ b/src/renderer/features/playlists/components/playlist-list-content.tsx @@ -1,10 +1,13 @@ -import { lazy, MutableRefObject, Suspense } from 'react'; import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; + +import { lazy, MutableRefObject, Suspense } from 'react'; + +import { useListContext } from '../../../context/list-context'; +import { useListStoreByKey } from '../../../store/list.store'; + import { Spinner } from '/@/renderer/components'; import { VirtualInfiniteGridRef } from '/@/renderer/components/virtual-grid'; import { ListDisplayType } from '/@/renderer/types'; -import { useListContext } from '../../../context/list-context'; -import { useListStoreByKey } from '../../../store/list.store'; const PlaylistListTableView = lazy(() => import('/@/renderer/features/playlists/components/playlist-list-table-view').then((module) => ({ @@ -19,12 +22,12 @@ const PlaylistListGridView = lazy(() => ); interface PlaylistListContentProps { - gridRef: MutableRefObject; + gridRef: MutableRefObject; itemCount?: number; tableRef: MutableRefObject; } -export const PlaylistListContent = ({ gridRef, tableRef, itemCount }: PlaylistListContentProps) => { +export const PlaylistListContent = ({ gridRef, itemCount, tableRef }: PlaylistListContentProps) => { const { pageKey } = useListContext(); const { display } = useListStoreByKey({ key: pageKey }); diff --git a/src/renderer/features/playlists/components/playlist-list-grid-view.tsx b/src/renderer/features/playlists/components/playlist-list-grid-view.tsx index 9dad4a9e..3038f1d8 100644 --- a/src/renderer/features/playlists/components/playlist-list-grid-view.tsx +++ b/src/renderer/features/playlists/components/playlist-list-grid-view.tsx @@ -2,8 +2,10 @@ import { QueryKey, useQueryClient } from '@tanstack/react-query'; import { MutableRefObject, useCallback, useMemo } from 'react'; import AutoSizer, { Size } from 'react-virtualized-auto-sizer'; import { ListOnScrollProps } from 'react-window'; + import { useListContext } from '../../../context/list-context'; import { useListStoreActions } from '../../../store/list.store'; + import { controller } from '/@/renderer/api/controller'; import { queryKeys } from '/@/renderer/api/query-keys'; import { @@ -20,13 +22,13 @@ import { VirtualInfiniteGridRef, } from '/@/renderer/components/virtual-grid'; import { usePlayQueueAdd } from '/@/renderer/features/player'; +import { useHandleFavorite } from '/@/renderer/features/shared/hooks/use-handle-favorite'; import { AppRoute } from '/@/renderer/router/routes'; import { useCurrentServer, useListStoreByKey } from '/@/renderer/store'; import { CardRow, ListDisplayType } from '/@/renderer/types'; -import { useHandleFavorite } from '/@/renderer/features/shared/hooks/use-handle-favorite'; interface PlaylistListGridViewProps { - gridRef: MutableRefObject; + gridRef: MutableRefObject; itemCount?: number; } @@ -35,7 +37,7 @@ export const PlaylistListGridView = ({ gridRef, itemCount }: PlaylistListGridVie const queryClient = useQueryClient(); const server = useCurrentServer(); const handlePlayQueueAdd = usePlayQueueAdd(); - const { display, grid, filter } = useListStoreByKey({ key: pageKey }); + const { display, filter, grid } = useListStoreByKey({ key: pageKey }); const { setGrid } = useListStoreActions(); const handleFavorite = useHandleFavorite({ gridRef, server }); @@ -49,15 +51,15 @@ export const PlaylistListGridView = ({ gridRef, itemCount }: PlaylistListGridVie case PlaylistListSort.NAME: rows.push(PLAYLIST_CARD_ROWS.songCount); break; - case PlaylistListSort.SONG_COUNT: - rows.push(PLAYLIST_CARD_ROWS.songCount); - break; case PlaylistListSort.OWNER: rows.push(PLAYLIST_CARD_ROWS.owner); break; case PlaylistListSort.PUBLIC: rows.push(PLAYLIST_CARD_ROWS.public); break; + case PlaylistListSort.SONG_COUNT: + rows.push(PLAYLIST_CARD_ROWS.songCount); + break; case PlaylistListSort.UPDATED_AT: break; } @@ -73,7 +75,7 @@ export const PlaylistListGridView = ({ gridRef, itemCount }: PlaylistListGridVie ); const fetchInitialData = useCallback(() => { - const query: Omit = { + const query: Omit = { ...filter, }; @@ -140,8 +142,6 @@ export const PlaylistListGridView = ({ gridRef, itemCount }: PlaylistListGridVie {({ height, width }: Size) => ( )} diff --git a/src/renderer/features/playlists/components/playlist-list-header-filters.tsx b/src/renderer/features/playlists/components/playlist-list-header-filters.tsx index 771dd592..5a44e87b 100644 --- a/src/renderer/features/playlists/components/playlist-list-header-filters.tsx +++ b/src/renderer/features/playlists/components/playlist-list-header-filters.tsx @@ -1,12 +1,16 @@ -import { ChangeEvent, MouseEvent, MutableRefObject, useCallback } from 'react'; -import { IDatasource } from '@ag-grid-community/core'; import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; + +import { IDatasource } from '@ag-grid-community/core'; import { Divider, Flex, Group, Stack } from '@mantine/core'; import { useQueryClient } from '@tanstack/react-query'; +import { ChangeEvent, MouseEvent, MutableRefObject, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { RiMoreFill, RiRefreshLine, RiSettings3Fill } from 'react-icons/ri'; + import { useListContext } from '../../../context/list-context'; import { useListStoreByKey } from '../../../store/list.store'; + +import i18n from '/@/i18n/i18n'; import { api } from '/@/renderer/api'; import { queryKeys } from '/@/renderer/api/query-keys'; import { LibraryItem, PlaylistListQuery, PlaylistListSort, SortOrder } from '/@/renderer/api/types'; @@ -17,7 +21,6 @@ import { OrderToggleButton } from '/@/renderer/features/shared'; import { useContainerQuery } from '/@/renderer/hooks'; import { PlaylistListFilter, useCurrentServer, useListStoreActions } from '/@/renderer/store'; import { ListDisplayType, TableColumn } from '/@/renderer/types'; -import i18n from '/@/i18n/i18n'; const FILTERS = { jellyfin: [ @@ -104,7 +107,7 @@ const FILTERS = { }; interface PlaylistListHeaderFiltersProps { - gridRef: MutableRefObject; + gridRef: MutableRefObject; tableRef: MutableRefObject; } @@ -116,9 +119,9 @@ export const PlaylistListHeaderFilters = ({ const { pageKey } = useListContext(); const queryClient = useQueryClient(); const server = useCurrentServer(); - const { setFilter, setTable, setTablePagination, setGrid, setDisplayType } = + const { setDisplayType, setFilter, setGrid, setTable, setTablePagination } = useListStoreActions(); - const { display, filter, table, grid } = useListStoreByKey({ key: pageKey }); + const { display, filter, grid, table } = useListStoreByKey({ key: pageKey }); const cq = useContainerQuery(); const isGrid = display === ListDisplayType.CARD || display === ListDisplayType.POSTER; @@ -337,10 +340,10 @@ export const PlaylistListHeaderFilters = ({ {FILTERS[server?.type as keyof typeof FILTERS].map((f) => ( {f.name} @@ -349,16 +352,16 @@ export const PlaylistListHeaderFilters = ({ @@ -404,22 +407,22 @@ export const PlaylistListHeaderFilters = ({ {t('table.config.view.card', { postProcess: 'titleCase' })} {t('table.config.view.poster', { postProcess: 'titleCase' })} {t('table.config.view.table', { postProcess: 'titleCase' })} @@ -478,8 +481,8 @@ export const PlaylistListHeaderFilters = ({ defaultValue={table?.columns.map( (column) => column.column, )} - width={300} onChange={handleTableColumns} + width={300} /> diff --git a/src/renderer/features/playlists/components/playlist-list-header.tsx b/src/renderer/features/playlists/components/playlist-list-header.tsx index ccb57dd6..b9cccbed 100644 --- a/src/renderer/features/playlists/components/playlist-list-header.tsx +++ b/src/renderer/features/playlists/components/playlist-list-header.tsx @@ -1,27 +1,29 @@ -import { ChangeEvent, MutableRefObject } from 'react'; import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; + import { Flex, Group, Stack } from '@mantine/core'; -import { openModal, closeAllModals } from '@mantine/modals'; -import { PageHeader, SpinnerIcon, Paper, Button, SearchInput } from '/@/renderer/components'; +import { closeAllModals, openModal } from '@mantine/modals'; +import debounce from 'lodash/debounce'; +import { ChangeEvent, MutableRefObject } from 'react'; +import { useTranslation } from 'react-i18next'; +import { RiFileAddFill } from 'react-icons/ri'; + +import { LibraryItem, PlaylistListQuery, ServerType } from '/@/renderer/api/types'; +import { Button, PageHeader, Paper, SearchInput, SpinnerIcon } from '/@/renderer/components'; import { VirtualInfiniteGridRef } from '/@/renderer/components/virtual-grid'; import { CreatePlaylistForm } from '/@/renderer/features/playlists/components/create-playlist-form'; import { PlaylistListHeaderFilters } from '/@/renderer/features/playlists/components/playlist-list-header-filters'; import { LibraryHeaderBar } from '/@/renderer/features/shared'; import { useContainerQuery } from '/@/renderer/hooks'; -import { PlaylistListFilter, useCurrentServer } from '/@/renderer/store'; -import debounce from 'lodash/debounce'; -import { useTranslation } from 'react-i18next'; -import { RiFileAddFill } from 'react-icons/ri'; -import { LibraryItem, PlaylistListQuery, ServerType } from '/@/renderer/api/types'; import { useDisplayRefresh } from '/@/renderer/hooks/use-display-refresh'; +import { PlaylistListFilter, useCurrentServer } from '/@/renderer/store'; interface PlaylistListHeaderProps { - gridRef: MutableRefObject; + gridRef: MutableRefObject; itemCount?: number; tableRef: MutableRefObject; } -export const PlaylistListHeader = ({ itemCount, tableRef, gridRef }: PlaylistListHeaderProps) => { +export const PlaylistListHeader = ({ gridRef, itemCount, tableRef }: PlaylistListHeaderProps) => { const { t } = useTranslation(); const cq = useContainerQuery(); const server = useCurrentServer(); @@ -78,12 +80,12 @@ export const PlaylistListHeader = ({ itemCount, tableRef, gridRef }: PlaylistLis )} @@ -91,8 +93,8 @@ export const PlaylistListHeader = ({ itemCount, tableRef, gridRef }: PlaylistLis diff --git a/src/renderer/features/playlists/components/playlist-list-table-view.tsx b/src/renderer/features/playlists/components/playlist-list-table-view.tsx index af5fe0e3..744b58ca 100644 --- a/src/renderer/features/playlists/components/playlist-list-table-view.tsx +++ b/src/renderer/features/playlists/components/playlist-list-table-view.tsx @@ -1,7 +1,9 @@ -import { MutableRefObject } from 'react'; -import { RowDoubleClickedEvent } from '@ag-grid-community/core'; import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; + +import { RowDoubleClickedEvent } from '@ag-grid-community/core'; +import { MutableRefObject } from 'react'; import { generatePath, useNavigate } from 'react-router'; + import { LibraryItem } from '/@/renderer/api/types'; import { VirtualGridAutoSizerContainer } from '/@/renderer/components/virtual-grid'; import { VirtualTable } from '/@/renderer/components/virtual-table'; @@ -15,7 +17,7 @@ interface PlaylistListTableViewProps { tableRef: MutableRefObject; } -export const PlaylistListTableView = ({ tableRef, itemCount }: PlaylistListTableViewProps) => { +export const PlaylistListTableView = ({ itemCount, tableRef }: PlaylistListTableViewProps) => { const navigate = useNavigate(); const server = useCurrentServer(); const pageKey = 'playlist'; diff --git a/src/renderer/features/playlists/components/playlist-query-builder.tsx b/src/renderer/features/playlists/components/playlist-query-builder.tsx index dde8c42d..82bda953 100644 --- a/src/renderer/features/playlists/components/playlist-query-builder.tsx +++ b/src/renderer/features/playlists/components/playlist-query-builder.tsx @@ -1,4 +1,3 @@ -import { forwardRef, Ref, useImperativeHandle, useMemo, useState } from 'react'; import { Group } from '@mantine/core'; import { useForm } from '@mantine/form'; import { openModal } from '@mantine/modals'; @@ -6,6 +5,19 @@ import clone from 'lodash/clone'; import get from 'lodash/get'; import setWith from 'lodash/setWith'; import { nanoid } from 'nanoid'; +import { forwardRef, Ref, useImperativeHandle, useMemo, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { RiMore2Fill, RiSaveLine } from 'react-icons/ri'; + +import { + NDSongQueryBooleanOperators, + NDSongQueryDateOperators, + NDSongQueryFields, + NDSongQueryNumberOperators, + NDSongQueryPlaylistOperators, + NDSongQueryStringOperators, +} from '/@/renderer/api/navidrome.types'; +import { PlaylistListSort, SongListSort, SortOrder } from '/@/renderer/api/types'; import { Button, DropdownMenu, @@ -15,25 +27,14 @@ import { ScrollArea, Select, } from '/@/renderer/components'; +import { usePlaylistList } from '/@/renderer/features/playlists/queries/playlist-list-query'; import { convertNDQueryToQueryGroup, convertQueryGroupToNDQuery, } from '/@/renderer/features/playlists/utils'; -import { QueryBuilderGroup, QueryBuilderRule } from '/@/renderer/types'; -import { useTranslation } from 'react-i18next'; -import { RiMore2Fill, RiSaveLine } from 'react-icons/ri'; -import { PlaylistListSort, SongListSort, SortOrder } from '/@/renderer/api/types'; -import { - NDSongQueryBooleanOperators, - NDSongQueryDateOperators, - NDSongQueryFields, - NDSongQueryNumberOperators, - NDSongQueryPlaylistOperators, - NDSongQueryStringOperators, -} from '/@/renderer/api/navidrome.types'; -import { usePlaylistList } from '/@/renderer/features/playlists/queries/playlist-list-query'; -import { useCurrentServer } from '/@/renderer/store'; import { JsonPreview } from '/@/renderer/features/shared/components/json-preview'; +import { useCurrentServer } from '/@/renderer/store'; +import { QueryBuilderGroup, QueryBuilderRule } from '/@/renderer/types'; type AddArgs = { groupIndex: number[]; @@ -91,14 +92,14 @@ export type PlaylistQueryBuilderRef = { export const PlaylistQueryBuilder = forwardRef( ( { - sortOrder, - sortBy, - limit, isSaving, - query, + limit, onSave, onSaveAs, playlistId, + query, + sortBy, + sortOrder, }: PlaylistQueryBuilderProps, ref: Ref, ) => { @@ -177,7 +178,7 @@ export const PlaylistQueryBuilder = forwardRef( }; const handleAddRuleGroup = (args: AddArgs) => { - const { level, groupIndex } = args; + const { groupIndex, level } = args; const filtersCopy = clone(filters); const getPath = (level: number) => { @@ -218,7 +219,7 @@ export const PlaylistQueryBuilder = forwardRef( }; const handleDeleteRuleGroup = (args: DeleteArgs) => { - const { uniqueId, level, groupIndex } = args; + const { groupIndex, level, uniqueId } = args; const filtersCopy = clone(filters); const getPath = (level: number) => { @@ -264,7 +265,7 @@ export const PlaylistQueryBuilder = forwardRef( }; const handleAddRule = (args: AddArgs) => { - const { level, groupIndex } = args; + const { groupIndex, level } = args; const filtersCopy = clone(filters); const path = getRulePath(level, groupIndex); @@ -287,7 +288,7 @@ export const PlaylistQueryBuilder = forwardRef( }; const handleDeleteRule = (args: DeleteArgs) => { - const { uniqueId, level, groupIndex } = args; + const { groupIndex, level, uniqueId } = args; const filtersCopy = clone(filters); const path = getRulePath(level, groupIndex); @@ -304,7 +305,7 @@ export const PlaylistQueryBuilder = forwardRef( }; const handleChangeField = (args: any) => { - const { uniqueId, level, groupIndex, value } = args; + const { groupIndex, level, uniqueId, value } = args; const filtersCopy = clone(filters); const path = getRulePath(level, groupIndex); @@ -327,7 +328,7 @@ export const PlaylistQueryBuilder = forwardRef( }; const handleChangeType = (args: any) => { - const { level, groupIndex, value } = args; + const { groupIndex, level, value } = args; const filtersCopy = clone(filters); @@ -359,7 +360,7 @@ export const PlaylistQueryBuilder = forwardRef( }; const handleChangeOperator = (args: any) => { - const { uniqueId, level, groupIndex, value } = args; + const { groupIndex, level, uniqueId, value } = args; const filtersCopy = clone(filters); const path = getRulePath(level, groupIndex); @@ -380,7 +381,7 @@ export const PlaylistQueryBuilder = forwardRef( }; const handleChangeValue = (args: any) => { - const { uniqueId, level, groupIndex, value } = args; + const { groupIndex, level, uniqueId, value } = args; const filtersCopy = clone(filters); const path = getRulePath(level, groupIndex); @@ -424,15 +425,6 @@ export const PlaylistQueryBuilder = forwardRef( filters={NDSongQueryFields} groupIndex={[]} level={0} - operators={{ - boolean: NDSongQueryBooleanOperators, - date: NDSongQueryDateOperators, - number: NDSongQueryNumberOperators, - playlist: NDSongQueryPlaylistOperators, - string: NDSongQueryStringOperators, - }} - playlists={playlistData} - uniqueId={filters.uniqueId} onAddRule={handleAddRule} onAddRuleGroup={handleAddRuleGroup} onChangeField={handleChangeField} @@ -443,12 +435,21 @@ export const PlaylistQueryBuilder = forwardRef( onDeleteRule={handleDeleteRule} onDeleteRuleGroup={handleDeleteRuleGroup} onResetFilters={handleResetFilters} + operators={{ + boolean: NDSongQueryBooleanOperators, + date: NDSongQueryDateOperators, + number: NDSongQueryNumberOperators, + playlist: NDSongQueryPlaylistOperators, + string: NDSongQueryStringOperators, + }} + playlists={playlistData} + uniqueId={filters.uniqueId} /> ), description: t('setting.language', { @@ -173,7 +175,6 @@ export const ApplicationSettings = () => { control: ( { if (!e) return; setSettings({ @@ -207,6 +207,8 @@ export const ApplicationSettings = () => { }, }); }} + searchable + value={fontSettings.builtIn} /> ), description: t('setting.font', { context: 'description', postProcess: 'sentenceCase' }), @@ -216,10 +218,7 @@ export const ApplicationSettings = () => { { control: ( { setSettings({ lyrics: { ...settings, translationTargetLanguage: value } }); }} + value={settings.translationTargetLanguage} /> ), description: t('setting.translationTargetLanguage', { @@ -145,10 +146,10 @@ export const LyricSettings = () => { control: ( { if (!e) return; @@ -49,7 +50,7 @@ export const WindowSettings = () => { postProcess: 'sentenceCase', }), onClose: () => { - window.electron.ipc!.send('app-restart'); + window.api.ipc!.send('app-restart'); }, title: t('common.restartRequired', { postProcess: 'sentenceCase', @@ -72,6 +73,7 @@ export const WindowSettings = () => { }, }); }} + value={settings.windowBarStyle} /> ), description: t('setting.windowBarStyle', { diff --git a/src/renderer/features/settings/components/window/window-tab.tsx b/src/renderer/features/settings/components/window/window-tab.tsx index 14b5c6a4..3e280385 100644 --- a/src/renderer/features/settings/components/window/window-tab.tsx +++ b/src/renderer/features/settings/components/window/window-tab.tsx @@ -1,11 +1,12 @@ import { Stack } from '@mantine/core'; +import isElectron from 'is-electron'; + +import { DiscordSettings } from '/@/renderer/features/settings/components/window/discord-settings'; +import { PasswordSettings } from '/@/renderer/features/settings/components/window/password-settings'; import { UpdateSettings } from '/@/renderer/features/settings/components/window/update-settings'; import { WindowSettings } from '/@/renderer/features/settings/components/window/window-settings'; -import { DiscordSettings } from '/@/renderer/features/settings/components/window/discord-settings'; -import isElectron from 'is-electron'; -import { PasswordSettings } from '/@/renderer/features/settings/components/window/password-settings'; -const utils = isElectron() ? window.electron.utils : null; +const utils = isElectron() ? window.api.utils : null; export const WindowTab = () => { return ( diff --git a/src/renderer/features/settings/routes/settings-route.tsx b/src/renderer/features/settings/routes/settings-route.tsx index 54f402ce..a3c41a61 100644 --- a/src/renderer/features/settings/routes/settings-route.tsx +++ b/src/renderer/features/settings/routes/settings-route.tsx @@ -1,9 +1,10 @@ import { Flex } from '@mantine/core'; +import { useState } from 'react'; + import { SettingsContent } from '/@/renderer/features/settings/components/settings-content'; import { SettingsHeader } from '/@/renderer/features/settings/components/settings-header'; -import { AnimatedPage } from '/@/renderer/features/shared'; import { SettingSearchContext } from '/@/renderer/features/settings/context/search-context'; -import { useState } from 'react'; +import { AnimatedPage } from '/@/renderer/features/shared'; const SettingsRoute = () => { const [search, setSearch] = useState(''); diff --git a/src/renderer/features/shared/components/animated-page.tsx b/src/renderer/features/shared/components/animated-page.tsx index aa0e5dc6..f5ab231a 100644 --- a/src/renderer/features/shared/components/animated-page.tsx +++ b/src/renderer/features/shared/components/animated-page.tsx @@ -1,6 +1,8 @@ import type { ReactNode, Ref } from 'react'; -import { forwardRef } from 'react'; + import { motion } from 'framer-motion'; +import { forwardRef } from 'react'; + import styles from './animated-page.module.scss'; interface AnimatedPageProps { @@ -17,9 +19,9 @@ export const AnimatedPage = forwardRef( ({ children }: AnimatedPageProps, ref: Ref) => { return ( ; - case LibraryItem.ARTIST: - return ; case LibraryItem.ALBUM_ARTIST: return ; + case LibraryItem.ARTIST: + return ; case LibraryItem.PLAYLIST: return ; default: diff --git a/src/renderer/features/shared/components/json-preview.tsx b/src/renderer/features/shared/components/json-preview.tsx index 51fbf13d..32a35ff8 100644 --- a/src/renderer/features/shared/components/json-preview.tsx +++ b/src/renderer/features/shared/components/json-preview.tsx @@ -1,5 +1,5 @@ interface JsonPreviewProps { - value: string | Record; + value: Record | string; } export const JsonPreview = ({ value }: JsonPreviewProps) => { diff --git a/src/renderer/features/shared/components/library-header-bar.tsx b/src/renderer/features/shared/components/library-header-bar.tsx index 3acfce5c..b746b8b9 100644 --- a/src/renderer/features/shared/components/library-header-bar.tsx +++ b/src/renderer/features/shared/components/library-header-bar.tsx @@ -1,8 +1,9 @@ -import { ReactNode } from 'react'; import { Box } from '@mantine/core'; +import { ReactNode } from 'react'; +import styled from 'styled-components'; + import { Paper, PaperProps, SpinnerIcon, TextTitle } from '/@/renderer/components'; import { PlayButton as PlayBtn } from '/@/renderer/features/shared/components/play-button'; -import styled from 'styled-components'; interface LibraryHeaderBarProps { children: ReactNode; @@ -47,8 +48,8 @@ const PlayButton = ({ onClick }: PlayButtonProps) => { ); diff --git a/src/renderer/features/shared/components/library-header.module.scss b/src/renderer/features/shared/components/library-header.module.css similarity index 100% rename from src/renderer/features/shared/components/library-header.module.scss rename to src/renderer/features/shared/components/library-header.module.css diff --git a/src/renderer/features/shared/components/library-header.tsx b/src/renderer/features/shared/components/library-header.tsx index 9bb9b833..f321f29d 100644 --- a/src/renderer/features/shared/components/library-header.tsx +++ b/src/renderer/features/shared/components/library-header.tsx @@ -1,11 +1,13 @@ -import { forwardRef, ReactNode, Ref, useCallback, useState } from 'react'; import { Center, Group } from '@mantine/core'; import { closeAllModals, openModal } from '@mantine/modals'; import { AutoTextSize } from 'auto-text-size'; import clsx from 'clsx'; +import { forwardRef, ReactNode, Ref, useCallback, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; -import styles from './library-header.module.scss'; + +import styles from './library-header.module.css'; + import { LibraryItem } from '/@/renderer/api/types'; import { Text } from '/@/renderer/components'; import { ItemImagePlaceholder } from '/@/renderer/features/shared/components/item-image-placeholder'; @@ -15,8 +17,8 @@ interface LibraryHeaderProps { background: string; blur?: number; children?: ReactNode; - imagePlaceholderUrl?: string | null; - imageUrl?: string | null; + imagePlaceholderUrl?: null | string; + imageUrl?: null | string; item: { route: string; type: LibraryItem }; title: string; } @@ -24,13 +26,13 @@ interface LibraryHeaderProps { export const LibraryHeader = forwardRef( ( { - imageUrl, - imagePlaceholderUrl, background, blur, - title, - item, children, + imagePlaceholderUrl, + imageUrl, + item, + title, }: LibraryHeaderProps, ref: Ref, ) => { @@ -46,10 +48,10 @@ export const LibraryHeader = forwardRef( switch (item.type) { case LibraryItem.ALBUM: return t('entity.album', { count: 1 }); - case LibraryItem.ARTIST: - return t('entity.artist', { count: 1 }); case LibraryItem.ALBUM_ARTIST: return t('entity.albumArtist', { count: 1 }); + case LibraryItem.ARTIST: + return t('entity.artist', { count: 1 }); case LibraryItem.PLAYLIST: return t('entity.playlist', { count: 1 }); case LibraryItem.SONG: @@ -66,12 +68,12 @@ export const LibraryHeader = forwardRef( openModal({ children: (
closeAllModals()} style={{ cursor: 'pointer', height: 'calc(100vh - 80px)', width: '100%', }} - onClick={() => closeAllModals()} > cover
openImage()} + onKeyDown={(event) => + [' ', 'Enter', 'Spacebar'].includes(event.key) && openImage() + } role="button" style={{ cursor: 'pointer' }} tabIndex={0} - onClick={() => openImage()} - onKeyDown={(event) => - ['Spacebar', ' ', 'Enter'].includes(event.key) && openImage() - } > {imageUrl && !isImageError ? ( cover ) : ( diff --git a/src/renderer/features/shared/components/order-toggle-button.tsx b/src/renderer/features/shared/components/order-toggle-button.tsx index d223374b..16435d55 100644 --- a/src/renderer/features/shared/components/order-toggle-button.tsx +++ b/src/renderer/features/shared/components/order-toggle-button.tsx @@ -1,6 +1,7 @@ import { ButtonProps } from '@mantine/core'; import { useTranslation } from 'react-i18next'; import { RiSortAsc, RiSortDesc } from 'react-icons/ri'; + import { SortOrder } from '/@/renderer/api/types'; import { Button, Tooltip } from '/@/renderer/components'; @@ -10,7 +11,7 @@ interface OrderToggleButtonProps { sortOrder: SortOrder; } -export const OrderToggleButton = ({ sortOrder, onToggle, buttonProps }: OrderToggleButtonProps) => { +export const OrderToggleButton = ({ buttonProps, onToggle, sortOrder }: OrderToggleButtonProps) => { const { t } = useTranslation(); return ( <> diff --git a/src/renderer/features/shared/components/resize-handle.tsx b/src/renderer/features/shared/components/resize-handle.tsx index 81e6d11e..9446af64 100644 --- a/src/renderer/features/shared/components/resize-handle.tsx +++ b/src/renderer/features/shared/components/resize-handle.tsx @@ -2,7 +2,7 @@ import styled from 'styled-components'; export const ResizeHandle = styled.div<{ $isResizing: boolean; - $placement: 'top' | 'left' | 'bottom' | 'right'; + $placement: 'bottom' | 'left' | 'right' | 'top'; }>` position: absolute; top: ${(props) => props.$placement === 'top' && 0}; diff --git a/src/renderer/features/shared/hooks/use-handle-favorite.ts b/src/renderer/features/shared/hooks/use-handle-favorite.ts index ecdc1a36..b8ab1f40 100644 --- a/src/renderer/features/shared/hooks/use-handle-favorite.ts +++ b/src/renderer/features/shared/hooks/use-handle-favorite.ts @@ -1,4 +1,5 @@ import { MutableRefObject, useCallback } from 'react'; + import { LibraryItem } from '/@/renderer/api/types'; import { VirtualInfiniteGridRef } from '/@/renderer/components/virtual-grid'; import { useCreateFavorite } from '/@/renderer/features/shared/mutations/create-favorite-mutation'; @@ -6,8 +7,8 @@ import { useDeleteFavorite } from '/@/renderer/features/shared/mutations/delete- import { ServerListItem } from '/@/renderer/types'; interface HandleFavoriteProps { - gridRef: MutableRefObject; - server: ServerListItem | null; + gridRef: MutableRefObject; + server: null | ServerListItem; } export const useHandleFavorite = ({ gridRef, server }: HandleFavoriteProps) => { @@ -16,7 +17,7 @@ export const useHandleFavorite = ({ gridRef, server }: HandleFavoriteProps) => { const handleFavorite = useCallback( async (options: { id: string[]; isFavorite: boolean; itemType: LibraryItem }) => { - const { id, itemType, isFavorite } = options; + const { id, isFavorite, itemType } = options; try { if (isFavorite) { await deleteFavoriteMutation.mutateAsync({ diff --git a/src/renderer/features/shared/mutations/create-favorite-mutation.ts b/src/renderer/features/shared/mutations/create-favorite-mutation.ts index 8a811ff1..035ea324 100644 --- a/src/renderer/features/shared/mutations/create-favorite-mutation.ts +++ b/src/renderer/features/shared/mutations/create-favorite-mutation.ts @@ -1,5 +1,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { AxiosError } from 'axios'; +import isElectron from 'is-electron'; + import { api } from '/@/renderer/api'; import { queryKeys } from '/@/renderer/api/query-keys'; import { @@ -11,10 +13,9 @@ import { } from '/@/renderer/api/types'; import { MutationHookArgs } from '/@/renderer/lib/react-query'; import { getServerById, useSetAlbumListItemDataById, useSetQueueFavorite } from '/@/renderer/store'; -import isElectron from 'is-electron'; import { useFavoriteEvent } from '/@/renderer/store/event.store'; -const remote = isElectron() ? window.electron.remote : null; +const remote = isElectron() ? window.api.remote : null; export const useCreateFavorite = (args: MutationHookArgs) => { const { options } = args || {}; @@ -26,7 +27,7 @@ export const useCreateFavorite = (args: MutationHookArgs) => { return useMutation< FavoriteResponse, AxiosError, - Omit, + Omit, null >({ mutationFn: (args) => { diff --git a/src/renderer/features/shared/mutations/delete-favorite-mutation.ts b/src/renderer/features/shared/mutations/delete-favorite-mutation.ts index a0275704..59b16a9a 100644 --- a/src/renderer/features/shared/mutations/delete-favorite-mutation.ts +++ b/src/renderer/features/shared/mutations/delete-favorite-mutation.ts @@ -1,5 +1,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { AxiosError } from 'axios'; +import isElectron from 'is-electron'; + import { api } from '/@/renderer/api'; import { queryKeys } from '/@/renderer/api/query-keys'; import { @@ -11,10 +13,9 @@ import { } from '/@/renderer/api/types'; import { MutationHookArgs } from '/@/renderer/lib/react-query'; import { getServerById, useSetAlbumListItemDataById, useSetQueueFavorite } from '/@/renderer/store'; -import isElectron from 'is-electron'; import { useFavoriteEvent } from '/@/renderer/store/event.store'; -const remote = isElectron() ? window.electron.remote : null; +const remote = isElectron() ? window.api.remote : null; export const useDeleteFavorite = (args: MutationHookArgs) => { const { options } = args || {}; @@ -26,7 +27,7 @@ export const useDeleteFavorite = (args: MutationHookArgs) => { return useMutation< FavoriteResponse, AxiosError, - Omit, + Omit, null >({ mutationFn: (args) => { diff --git a/src/renderer/features/shared/mutations/set-rating-mutation.ts b/src/renderer/features/shared/mutations/set-rating-mutation.ts index eb3f1e5c..841fbc8b 100644 --- a/src/renderer/features/shared/mutations/set-rating-mutation.ts +++ b/src/renderer/features/shared/mutations/set-rating-mutation.ts @@ -1,23 +1,24 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { AxiosError } from 'axios'; +import isElectron from 'is-electron'; + import { api } from '/@/renderer/api'; import { queryKeys } from '/@/renderer/api/query-keys'; import { Album, AlbumArtist, + AlbumArtistDetailResponse, + AlbumDetailResponse, AnyLibraryItems, LibraryItem, - SetRatingArgs, RatingResponse, - AlbumDetailResponse, - AlbumArtistDetailResponse, + SetRatingArgs, } from '/@/renderer/api/types'; import { MutationHookArgs } from '/@/renderer/lib/react-query'; import { getServerById, useSetAlbumListItemDataById, useSetQueueRating } from '/@/renderer/store'; -import isElectron from 'is-electron'; import { useRatingEvent } from '/@/renderer/store/event.store'; -const remote = isElectron() ? window.electron.remote : null; +const remote = isElectron() ? window.api.remote : null; export const useSetRating = (args: MutationHookArgs) => { const { options } = args || {}; @@ -29,8 +30,8 @@ export const useSetRating = (args: MutationHookArgs) => { return useMutation< RatingResponse, AxiosError, - Omit, - { previous: { items: AnyLibraryItems } | undefined } + Omit, + { previous: undefined | { items: AnyLibraryItems } } >({ mutationFn: (args) => { const server = getServerById(args.serverId); diff --git a/src/renderer/features/shared/queries/music-folders-query.ts b/src/renderer/features/shared/queries/music-folders-query.ts index 97042a42..40363f12 100644 --- a/src/renderer/features/shared/queries/music-folders-query.ts +++ b/src/renderer/features/shared/queries/music-folders-query.ts @@ -1,9 +1,11 @@ import { useQuery } from '@tanstack/react-query'; + +import { MusicFolderListQuery } from '../../../api/types'; +import { QueryHookArgs } from '../../../lib/react-query'; + import { api } from '/@/renderer/api'; import { queryKeys } from '/@/renderer/api/query-keys'; import { getServerById } from '/@/renderer/store'; -import { MusicFolderListQuery } from '../../../api/types'; -import { QueryHookArgs } from '../../../lib/react-query'; export const useMusicFolders = (args: QueryHookArgs) => { const { options, serverId } = args || {}; diff --git a/src/renderer/features/sharing/components/share-item-context-modal.tsx b/src/renderer/features/sharing/components/share-item-context-modal.tsx index ca915093..61d45f48 100644 --- a/src/renderer/features/sharing/components/share-item-context-modal.tsx +++ b/src/renderer/features/sharing/components/share-item-context-modal.tsx @@ -2,10 +2,12 @@ import { Box, Group, Stack, TextInput } from '@mantine/core'; import { DateTimePicker } from '@mantine/dates'; import { useForm } from '@mantine/form'; import { closeModal, ContextModalProps } from '@mantine/modals'; +import { useTranslation } from 'react-i18next'; + +import { useShareItem } from '../mutations/share-item-mutation'; + import { Button, Switch, toast } from '/@/renderer/components'; import { useCurrentServer } from '/@/renderer/store'; -import { useTranslation } from 'react-i18next'; -import { useShareItem } from '../mutations/share-item-mutation'; export const ShareItemContextModal = ({ id, @@ -122,9 +124,9 @@ export const ShareItemContextModal = ({ diff --git a/src/renderer/features/sharing/mutations/share-item-mutation.ts b/src/renderer/features/sharing/mutations/share-item-mutation.ts index ae774df0..30aae5ba 100644 --- a/src/renderer/features/sharing/mutations/share-item-mutation.ts +++ b/src/renderer/features/sharing/mutations/share-item-mutation.ts @@ -1,7 +1,8 @@ import { useMutation } from '@tanstack/react-query'; -import { AnyLibraryItems, ShareItemResponse, ShareItemArgs } from '/@/renderer/api/types'; import { AxiosError } from 'axios'; + import { api } from '/@/renderer/api'; +import { AnyLibraryItems, ShareItemArgs, ShareItemResponse } from '/@/renderer/api/types'; import { MutationHookArgs } from '/@/renderer/lib/react-query'; import { getServerById } from '/@/renderer/store'; @@ -11,8 +12,8 @@ export const useShareItem = (args: MutationHookArgs) => { return useMutation< ShareItemResponse, AxiosError, - Omit, - { previous: { items: AnyLibraryItems } | undefined } + Omit, + { previous: undefined | { items: AnyLibraryItems } } >({ mutationFn: (args) => { const server = getServerById(args.serverId); diff --git a/src/renderer/features/sidebar/components/action-bar.tsx b/src/renderer/features/sidebar/components/action-bar.tsx index b92d3dca..35376a42 100644 --- a/src/renderer/features/sidebar/components/action-bar.tsx +++ b/src/renderer/features/sidebar/components/action-bar.tsx @@ -1,8 +1,9 @@ import { Grid, Group } from '@mantine/core'; import { useTranslation } from 'react-i18next'; -import { RiSearchLine, RiMenuFill, RiArrowLeftSLine, RiArrowRightSLine } from 'react-icons/ri'; +import { RiArrowLeftSLine, RiArrowRightSLine, RiMenuFill, RiSearchLine } from 'react-icons/ri'; import { useNavigate } from 'react-router'; import styled from 'styled-components'; + import { Button, DropdownMenu, TextInput } from '/@/renderer/components'; import { AppMenu } from '/@/renderer/features/titlebar/components/app-menu'; import { useContainerQuery } from '/@/renderer/hooks'; @@ -36,16 +37,16 @@ export const ActionBar = () => { > } - placeholder={t('common.search', { postProcess: 'titleCase' })} - size="md" onClick={open} onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { open(); } }} + placeholder={t('common.search', { postProcess: 'titleCase' })} + readOnly + size="md" /> @@ -69,18 +70,18 @@ export const ActionBar = () => { @@ -95,10 +96,10 @@ export const ActionBar = () => { w="100%" > @@ -117,18 +118,18 @@ export const ActionBar = () => { diff --git a/src/renderer/features/sidebar/components/collapsed-sidebar-button.tsx b/src/renderer/features/sidebar/components/collapsed-sidebar-button.tsx index 73f35ef8..c927e827 100644 --- a/src/renderer/features/sidebar/components/collapsed-sidebar-button.tsx +++ b/src/renderer/features/sidebar/components/collapsed-sidebar-button.tsx @@ -1,5 +1,5 @@ -import { forwardRef, ReactNode } from 'react'; import { createPolymorphicComponent, Flex } from '@mantine/core'; +import { forwardRef, ReactNode } from 'react'; import styled from 'styled-components'; const Container = styled(Flex)<{ $active?: boolean; $disabled?: boolean }>` @@ -48,9 +48,9 @@ const _CollapsedSidebarButton = forwardRef { return ( {children} diff --git a/src/renderer/features/sidebar/components/collapsed-sidebar-item.tsx b/src/renderer/features/sidebar/components/collapsed-sidebar-item.tsx index e30122d3..3562e43a 100644 --- a/src/renderer/features/sidebar/components/collapsed-sidebar-item.tsx +++ b/src/renderer/features/sidebar/components/collapsed-sidebar-item.tsx @@ -3,6 +3,7 @@ import { motion } from 'framer-motion'; import { forwardRef, ReactNode } from 'react'; import { useMatch } from 'react-router'; import styled from 'styled-components'; + import { Text } from '/@/renderer/components'; const Container = styled(Flex)<{ $active?: boolean; $disabled?: boolean }>` @@ -71,17 +72,17 @@ interface CollapsedSidebarItemProps { } const _CollapsedSidebarItem = forwardRef( - ({ route, activeIcon, icon, label, disabled, ...props }: CollapsedSidebarItemProps, ref) => { + ({ activeIcon, disabled, icon, label, route, ...props }: CollapsedSidebarItemProps, ref) => { const match = useMatch(route || '/null'); const isMatch = Boolean(match); return ( {isMatch ? : null} diff --git a/src/renderer/features/sidebar/components/collapsed-sidebar.tsx b/src/renderer/features/sidebar/components/collapsed-sidebar.tsx index 4abadf10..606ba65e 100644 --- a/src/renderer/features/sidebar/components/collapsed-sidebar.tsx +++ b/src/renderer/features/sidebar/components/collapsed-sidebar.tsx @@ -1,10 +1,11 @@ -import { useMemo } from 'react'; import { Group, UnstyledButton } from '@mantine/core'; import { motion } from 'framer-motion'; +import { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { RiArrowLeftSLine, RiArrowRightSLine, RiMenuFill } from 'react-icons/ri'; import { NavLink, useNavigate } from 'react-router-dom'; import styled from 'styled-components'; + import { DropdownMenu, ScrollArea } from '/@/renderer/components'; import { CollapsedSidebarButton } from '/@/renderer/features/sidebar/components/collapsed-sidebar-button'; import { CollapsedSidebarItem } from '/@/renderer/features/sidebar/components/collapsed-sidebar-item'; @@ -28,7 +29,7 @@ export const CollapsedSidebar = () => { const { t } = useTranslation(); const navigate = useNavigate(); const { windowBarStyle } = useWindowSettings(); - const { sidebarItems, sidebarCollapsedNavigation } = useGeneralSettings(); + const { sidebarCollapsedNavigation, sidebarItems } = useGeneralSettings(); const translatedSidebarItemMap = useMemo( () => ({ @@ -68,8 +69,8 @@ export const CollapsedSidebar = () => { return ( {sidebarCollapsedNavigation && ( { {sidebarItemsWithRoute.map((item) => ( { size="25" /> } + key={item.id} label={item.label} route={item.route} to={item.route} diff --git a/src/renderer/features/sidebar/components/sidebar-icon.tsx b/src/renderer/features/sidebar/components/sidebar-icon.tsx index ef87e702..6ed341ac 100644 --- a/src/renderer/features/sidebar/components/sidebar-icon.tsx +++ b/src/renderer/features/sidebar/components/sidebar-icon.tsx @@ -20,9 +20,10 @@ import { RiUserVoiceFill, RiUserVoiceLine, } from 'react-icons/ri'; -import { AppRoute } from '/@/renderer/router/routes'; import { generatePath } from 'react-router'; + import { LibraryItem } from '/@/renderer/api/types'; +import { AppRoute } from '/@/renderer/router/routes'; interface SidebarIconProps { active?: boolean; @@ -35,36 +36,36 @@ export const SidebarIcon = ({ active, route, size }: SidebarIconProps) => { case AppRoute.HOME: if (active) return ; return ; - case AppRoute.LIBRARY_ALBUMS: - if (active) return ; - return ; case AppRoute.LIBRARY_ALBUM_ARTISTS: if (active) return ; return ; + case AppRoute.LIBRARY_ALBUMS: + if (active) return ; + return ; case AppRoute.LIBRARY_ARTISTS: if (active) return ; return ; - case AppRoute.PLAYLISTS: - if (active) return ; - return ; - case AppRoute.LIBRARY_SONGS: - if (active) return ; - return ; case AppRoute.LIBRARY_FOLDERS: if (active) return ; return ; case AppRoute.LIBRARY_GENRES: if (active) return ; return ; - case generatePath(AppRoute.SEARCH, { itemType: LibraryItem.SONG }): - if (active) return ; - return ; - case AppRoute.SETTINGS: - if (active) return ; - return ; + case AppRoute.LIBRARY_SONGS: + if (active) return ; + return ; case AppRoute.NOW_PLAYING: if (active) return ; return ; + case AppRoute.PLAYLISTS: + if (active) return ; + return ; + case AppRoute.SETTINGS: + if (active) return ; + return ; + case generatePath(AppRoute.SEARCH, { itemType: LibraryItem.SONG }): + if (active) return ; + return ; default: return ; } diff --git a/src/renderer/features/sidebar/components/sidebar-item.tsx b/src/renderer/features/sidebar/components/sidebar-item.tsx index f23ffdc5..5a8f00b4 100644 --- a/src/renderer/features/sidebar/components/sidebar-item.tsx +++ b/src/renderer/features/sidebar/components/sidebar-item.tsx @@ -1,6 +1,7 @@ import type { ReactNode } from 'react'; -import { createPolymorphicComponent, Flex, FlexProps } from '@mantine/core'; import type { LinkProps } from 'react-router-dom'; + +import { createPolymorphicComponent, Flex, FlexProps } from '@mantine/core'; import { Link } from 'react-router-dom'; import styled, { css } from 'styled-components'; @@ -46,7 +47,7 @@ const _ItemLink = styled(StyledItem)` const ItemLink = createPolymorphicComponent<'a', ListItemProps>(_ItemLink); -export const SidebarItem = ({ to, children, ...props }: ListItemProps) => { +export const SidebarItem = ({ children, to, ...props }: ListItemProps) => { if (to) { return ( { +const PlaylistRow = ({ data, index, style }: ListChildComponentProps) => { const { t } = useTranslation(); if (Array.isArray(data?.items[index])) { @@ -40,6 +41,7 @@ const PlaylistRow = ({ index, data, style }: ListChildComponentProps) => { {t('page.sidebar.shared', { postProcess: 'titleCase' })} @@ -174,7 +175,7 @@ const PlaylistRow = ({ index, data, style }: ListChildComponentProps) => { }; export const SidebarPlaylistList = () => { - const { isScrollbarHidden, hideScrollbarElementProps } = useHideScrollbar(0); + const { hideScrollbarElementProps, isScrollbarHidden } = useHideScrollbar(0); const handlePlayQueueAdd = usePlayQueueAdd(); const { sidebarCollapseShared } = useGeneralSettings(); const { toggleSidebarCollapseShare } = useSettingsStoreActions(); @@ -218,7 +219,7 @@ export const SidebarPlaylistList = () => { return { ...base, items: data?.items }; } - const owned: Array void]> = []; + const owned: Array<[boolean, () => void] | Playlist> = []; const shared: Playlist[] = []; for (const playlist of data.items) { diff --git a/src/renderer/features/sidebar/components/sidebar.tsx b/src/renderer/features/sidebar/components/sidebar.tsx index 3ba5602b..8cd901aa 100644 --- a/src/renderer/features/sidebar/components/sidebar.tsx +++ b/src/renderer/features/sidebar/components/sidebar.tsx @@ -1,16 +1,18 @@ -import { MouseEvent, useMemo } from 'react'; import { Box, Center, Divider, Group, Stack } from '@mantine/core'; import { closeAllModals, openModal } from '@mantine/modals'; import { AnimatePresence, motion } from 'framer-motion'; +import { MouseEvent, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { RiAddFill, RiArrowDownSLine, RiDiscLine, RiListUnordered } from 'react-icons/ri'; import { Link, useLocation } from 'react-router-dom'; import styled from 'styled-components'; + import { SidebarItemType, useGeneralSettings, useWindowSettings, } from '../../../store/settings.store'; + import { ServerType } from '/@/renderer/api/types'; import { Button, MotionStack, Tooltip } from '/@/renderer/components'; import { CreatePlaylistForm } from '/@/renderer/features/playlists'; @@ -137,8 +139,8 @@ export const Sidebar = () => { return ( { @@ -233,14 +235,14 @@ export const Sidebar = () => { > {showImage && ( { @@ -637,22 +640,22 @@ export const SongListHeaderFilters = ({ {t('table.config.view.card', { postProcess: 'sentenceCase' })} {t('table.config.view.poster', { postProcess: 'sentenceCase' })} {t('table.config.view.table', { postProcess: 'sentenceCase' })} @@ -707,8 +710,8 @@ export const SongListHeaderFilters = ({ clearable data={SONG_TABLE_COLUMNS} defaultValue={table?.columns.map((column) => column.column)} - width={300} onChange={handleTableColumns} + width={300} /> diff --git a/src/renderer/features/songs/components/song-list-header.tsx b/src/renderer/features/songs/components/song-list-header.tsx index 055d3ce8..ac48198a 100644 --- a/src/renderer/features/songs/components/song-list-header.tsx +++ b/src/renderer/features/songs/components/song-list-header.tsx @@ -1,21 +1,23 @@ -import { ChangeEvent, MutableRefObject, useEffect, useRef } from 'react'; import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; + import { Flex, Group, Stack } from '@mantine/core'; import debounce from 'lodash/debounce'; +import { ChangeEvent, MutableRefObject, useEffect, useRef } from 'react'; import { useTranslation } from 'react-i18next'; + import { LibraryItem, SongListQuery } from '/@/renderer/api/types'; import { PageHeader, SearchInput } from '/@/renderer/components'; +import { VirtualInfiniteGridRef } from '/@/renderer/components/virtual-grid'; import { FilterBar, LibraryHeaderBar } from '/@/renderer/features/shared'; import { SongListHeaderFilters } from '/@/renderer/features/songs/components/song-list-header-filters'; import { useContainerQuery } from '/@/renderer/hooks'; +import { useDisplayRefresh } from '/@/renderer/hooks/use-display-refresh'; import { SongListFilter, useCurrentServer } from '/@/renderer/store'; import { usePlayButtonBehavior } from '/@/renderer/store/settings.store'; -import { VirtualInfiniteGridRef } from '/@/renderer/components/virtual-grid'; -import { useDisplayRefresh } from '/@/renderer/hooks/use-display-refresh'; interface SongListHeaderProps { genreId?: string; - gridRef: MutableRefObject; + gridRef: MutableRefObject; itemCount?: number; tableRef: MutableRefObject; title?: string; @@ -24,9 +26,9 @@ interface SongListHeaderProps { export const SongListHeader = ({ genreId, gridRef, - title, itemCount, tableRef, + title, }: SongListHeaderProps) => { const { t } = useTranslation(); const server = useCurrentServer(); @@ -90,8 +92,8 @@ export const SongListHeader = ({ diff --git a/src/renderer/features/songs/components/song-list-table-view.tsx b/src/renderer/features/songs/components/song-list-table-view.tsx index ff498dd3..4574529c 100644 --- a/src/renderer/features/songs/components/song-list-table-view.tsx +++ b/src/renderer/features/songs/components/song-list-table-view.tsx @@ -1,6 +1,8 @@ -import { RowDoubleClickedEvent } from '@ag-grid-community/core'; import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; + +import { RowDoubleClickedEvent } from '@ag-grid-community/core'; import { MutableRefObject } from 'react'; + import { LibraryItem, QueueSong, SongListQuery } from '/@/renderer/api/types'; import { VirtualGridAutoSizerContainer } from '/@/renderer/components/virtual-grid'; import { VirtualTable } from '/@/renderer/components/virtual-table'; @@ -21,9 +23,9 @@ interface SongListTableViewProps { tableRef: MutableRefObject; } -export const SongListTableView = ({ tableRef, itemCount }: SongListTableViewProps) => { +export const SongListTableView = ({ itemCount, tableRef }: SongListTableViewProps) => { const server = useCurrentServer(); - const { pageKey, id, handlePlay, customFilters } = useListContext(); + const { customFilters, handlePlay, id, pageKey } = useListContext(); const isFocused = useAppFocus(); const currentSong = useCurrentSong(); const status = useCurrentStatus(); @@ -56,15 +58,15 @@ export const SongListTableView = ({ tableRef, itemCount }: SongListTableViewProp key={`table-${tableProps.rowHeight}-${server?.id}`} ref={tableRef} {...tableProps} - shouldUpdateSong context={{ ...tableProps.context, currentSong, isFocused, status, }} - rowClassRules={rowClassRules} onRowDoubleClicked={handleRowDoubleClick} + rowClassRules={rowClassRules} + shouldUpdateSong /> ); diff --git a/src/renderer/features/songs/components/subsonic-song-filter.tsx b/src/renderer/features/songs/components/subsonic-song-filter.tsx index fae5546b..a29f67d8 100644 --- a/src/renderer/features/songs/components/subsonic-song-filter.tsx +++ b/src/renderer/features/songs/components/subsonic-song-filter.tsx @@ -1,11 +1,12 @@ -import { ChangeEvent, useMemo } from 'react'; import { Divider, Group, Stack } from '@mantine/core'; import debounce from 'lodash/debounce'; +import { ChangeEvent, useMemo } from 'react'; +import { useTranslation } from 'react-i18next'; + import { GenreListSort, LibraryItem, SongListQuery, SortOrder } from '/@/renderer/api/types'; import { Select, Switch, Text } from '/@/renderer/components'; import { useGenreList } from '/@/renderer/features/genres'; import { SongListFilter, useListFilterByKey, useListStoreActions } from '/@/renderer/store'; -import { useTranslation } from 'react-i18next'; interface SubsonicSongFiltersProps { customFilters?: Partial; @@ -43,7 +44,7 @@ export const SubsonicSongFilters = ({ })); }, [genreListQuery.data]); - const handleGenresFilter = debounce((e: string | null) => { + const handleGenresFilter = debounce((e: null | string) => { const updatedFilters = setFilter({ customFilters, data: { @@ -87,8 +88,8 @@ export const SubsonicSongFilters = ({ ))} @@ -97,13 +98,13 @@ export const SubsonicSongFilters = ({ {!isGenrePage && (

@&@JU*{6zJZ#@wL&1 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 aY_54(pTTJN;aUj%V`_NZpx~%e`2Pcbj}(0X literal 0 HcmV?d00001 diff --git a/src/renderer/assets/icons/icon.ico b/src/renderer/assets/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1e9d1e045c4bd0f218140ac2bc569ca192ce80d1 GIT binary patch literal 179695 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%0Dpre?f}J4>1fJF>3Hs0=;hh$@^7d7 zgRmh_kki4AasoR1K*o*k9adG%0v0i7ySGn!5^Vu|h6#y(;Opya_z)2RwbWl>GTUKW zlcsw1icOZu${qV_!zAbsNoMnrda2-do1cj5SPe%SiZZU-(AZeYzL)B|%GrN_*%R~@ z@IAfdxlid{zy)>l{vPivY)rN!jai4h>I^yZCTO{xM0mnl_zWr^)!Kf5nXGFwO8id9 zpz7vgO7PkkzX4R-&%8-WAAxs6dHxGlRzb!rX8u?4b^}=|t^xTR%Lq0hXbFmVfJkR< zyBn_+ZL@gDoUpA6Obfux%aCEWX~QGMESmprbXB>b&a)rz#qw{s%K#v>)p_K7vY1Y7 zK~A6}cMa~2kB?_m@URzZ&e2+pVGAP8*KKskxW7Zi0h`QuU^3M1zd7;t%VvPoSuQek zH9BH_v|7H&*)X%_;C1D2h+$%9n0)egFUN2CdOxG=EUtE(u2llbW=OK(L(}Ib({vc} zc^Tacuzxovnjq3KG@MMx6<+@TsY!2Z)_isk+X1G1+_uC?{*FDQ1U{v-Y#l_}W2$H? z#-*7p$fYJZ?qXVSpX&Gpja^)q<2P1GU9t-~Vg+8V;oxw7e2?8BV2D?QH@qkhxOAjn8?fAR_g0#F4vC(My*D=aQ9UoPTC(AlOmc2XsH^$(t~Ra$1l z6+Jq3?iG3M%+VH@*tGjs_fvMU$Vuc^ z16n~EAHLK=iJjG(HKhyhsk84J2brrkQT^@>3mAy$GEg7^i|(Ua<Oo!m*meQ-ojqDb4%>juObF7^`+;a`T(pv|P(?Ne%PF71S1j`_A!pTBRnP22 zDX~ZdG{hID`e7b&i%i8_BD#C#ae-&V4AfH(FC8c;rerO`RMEMpDvM){IskeoGM9hXA zP-21yq+HIDxHg0P5n(ButCnbJDHliXQB6 z_yxCwAng%UaU?T2S&3o4>+D|<7R#w~0&ohE7~aG%HC(7R} zNLfNjyMz<;WH@H>1kdu#!TMM>h3)z2K|l2miD*-*$6f73l&fz-s`xv5`0)K3CLgyJ zw|yp6IZ6630HFe~SO7>Xu;OlD;J#K)t3xHBs}F4mrU1dg3+I!Vg-{v7dX`ukORp%B z2eu7-c(g0E&0Cr$kLqE-C>qGR=^C$jTx}F~D2Gia zw*7V#fE@D!%3OxL&r*g7tgXhUhtXuaM5$6a{`}fN;DH5N@#J)tcNj-KR zWZWnUu43!zs;Wi>7&WY+!LM6~SOv1xbtXQ0{x2Y*6w({)d|%+>mcMh^uS|!_H$^{% zw6(RX%$tN4@c?1Tx3>U`$8j+4Tc%Uq7ho)vS5@(`-|`C;Whw&f5nOXUNNzL1>tetI z@g8Ne8Z+w%ydh#z^B5FMppy=+Z+^73QfMlDP^%ns0TcYo@6Hp4qkq$( z%Zjt}A+u-K0i9xzF|Inw{rAHppPd1@0eScC-GlQRk2`sO*TqHCNC+A{i;JEVwQGUo zg`c{BQkOBAclg5Kjc(~oI3|>|l1?uP7(;|h?N1efdcTDOrYQ$Nj#;fOw88P)+va9} z+)QLe7!dYA0ZsoZfz1J6hY$=Rm<}YMMaGjw>k2@n{F7$k{s?4$aQP+;DpuHv>G<43 zBfWQ65q_?czw>dN;_;h3z-#-o6@H}X-gUAxGK(LjejJb9bwDf@Y@$hoAl;Hb{5q+R ziMBOFA4We4-Hu#dI|6M7+s6w@l`FT^>+*+OnJ;{u4uY4wx0p*!URWu8)v0Cm2rC}5nPl!@YQ((uMtw(=bA5@=avo`wk*Mgh? zaIyu^7Mtnx1ZltJtLA5Au>#Y>;Dpq=Ul>>t#>V$RWdHj0iy(E3+b5mO(2ifx9wtb; zU(+RY0l_Flb2?=h9aoP=GLJ6eZc{58dOn;3O0E;oKSMz)#C0xCop@W8hf%y4Qpzir zq(YG(5En_Eq1Fy$6kNF{)Jx)x0A##vZ&y_9+<2M|G~0{OXtb}6>RHuRYF@buD^P%B zZr=0)(gO`e%s5E($>~IZ^({!}pHNXUiOw|+>+rH)4T%-3p3Q#JP|uVmZWT}Sl=Jeq z@3t`v=oWz9?yc%Z1V?V4X>;p3!9?ytT7{wOm%{u7qESfUsDJ<50m$hwGOJYydvZxz~5LR8Pr3+mTnA_*L%R>va5JKXBP^;oS zKQyzedd@+ttgKv$xNrY`PGgr+v!3|1U!4M&%mf@9P19b2maxlXlM~%|)`7uDlsyuV zFnlxk_HII~C|)N!*nDUA!Q@zl&U-rJe8{l@O!HWxeWPCeW4^eh%Vl1b>k}Y~+~Lv6 zkc=vMn9ftO??5gzkDZTY%TNgm?kAl`4|;5xl-(*_w{Mz45lvxKaTV}lw9@WpUSfS1 z2L}g1jX%Cx-%1q-f?7^EBY8N2PqC3LkhQgUv#qeeU8{s=iJl+-FimuaA8)Or`b*b( z+{T1x7-8_EhOGbV*Dw)+C;=3#MPYn6GHo=<$*pX+S%ly7myroHP#DUOCv@h3P-Wx7 zhdV~7a;v#=PUco-$`Kne&cES*NP}efL??tmc)etBh?3iGMAuJlh7FS+3fSh;{Mq-- z|10=R>q_mLH*^9z16%shqaX9MDo^o$Puiz3!>7O8JSUuPf@EB0M~o!9_20PU19E`y zw}GA>9=Y9KT{q2;F@4{@1u{}pTpUeKFR)!m9roEz-j*@^=3d!e^|4<~@IhS@rdsEN z@4`@)U_lzu$sswxRR$-#@A~5#-ENUkG5So>VVv=J1i>^kJNu2WmtOc1uP~0#p4YHX1S<93+rLAxjut@*sJpOh_*EcX&aPEBk zrf$UqD#S18_2(0sE^zw;DQG~LBV1no=}1`yu;KViN}Ru_>@Qe&`M?woUKrT4Xa3L$ z+ic>z-6ad7g04*B-$uirjZw8yAd0|+b!|cZsIq+jhG59ZFS9QV=5K)poB)aN_@=4r!gm5e zaB)Y^ZO?ZT?D6uOz>;@Haw*}3!@q@N!!}FcIn4zDY(@QokoPTcU|{tF?z<_(+r3ZP zLDIn$UE9CQWyz>!W_As9TYwF~0SK%v*n*P(QOB@af=+b;FjLyb5y_XU`DCB?h~bTg zzUhUFL0!GUb@`aq+1;&pJ6L``8h6UBy3}MK^rKqUFdHcRt$_J~Mnfmia|SfLtMzX; zq$31eFSO1kzGkLr%+E@@#0`$ak8y zmo)i;^jZGy0B)Fw;%&}^G~Cseb9>!WF2~>d;N|Og=fA1C$FJbSTV?;_JO;?)&r-HW zDQG8f%{8~N83gKaEI-~|{^It{FF7;aUy7SszD&&M3890*?JNA#%=u0|C%7O!eW@7c z$VXRLT>Mx~anr58^mo37jUs}hY-{F=MDZ>hVDgUu=QOnS*}A!j$%g zC2N1TJ{#FsG>D&zwpW>oL7UiFYIF;LH9H8<254Hu)v-@pOe;)hlWyW9{H&5fGB4sA zDGE9}t*Y0pKT?s0k8GNU@TWYfO(91_1Ivd{2b%x82BhQsi~TY}gYfOO5im})lQ|d~ z3mPCpg3sbumj`=sjTBgemt$@JniUsvqQ6bl_zFY_^bd&78Q=Zec*pbf(pU4#!!M2v znBhfoQ^u;{<;vv>f6yyIz#>kx&6 zw0Dpk(>S(rA2dxWBT5`~gX zIiSfA5m#=0>vuYjj>}IKAg*r9BNpjjKlo(g{L{qa=XJX(EcdJCjP}$LtcXp>bduF^3HljB$QpAEazDp+j^{9T2s z<`U112w)D!86(r}yr0}wIh(-Hd9q?gy})ZOfR98fsFO1XnwG)*TC#m#V&T9=H4Tz z6G{Yr_4MnyLd$xbh_kVvL))P##^+2FlUb=3wt4V=bS2vRs(IfFE9fyt*_xApMZeQF z$01P?7=Dmppl~pB$=1)rP!y4Ihv!;S;I-Qlo2lK)k`uDu)W&*jj7_FKHz+%O6>+vQ zm-B~D%N@3`%!-+fn-IXpe;Hh6uE^iqY@*1%NoPyVII%UTa_{`*urED2Wq5Gr9C#NR&T&R+11!-lZ88p{i{r`98Ze*GzWW5Dykc&*=(51M)?vCZXacye9p z(Py?Wa0Ab-`E(3jWSMlZk!&ryYx~v(RAt}uS+kU#Kay$~Xk7hsEyrEpiNf&B-15AH z!@#h6H4`af_>n87dz>S>?NYUZ59OyZlPucl^=?}d>0OgN(Z|}Q(h+OQal5){-8?EJ zc$W0x=yL_DoIJ&#+)a-8B?HgX>EO=6L@~MB7bqWJ)t=G3|7Mab(A_Emo7fQkyYkhm z()k5SXBhfp(QO;G-Ud~wh)Rr8!^1-Y`TPXcZ!=dP;@M^z z&{ie8t}DCzpe>QzbL4YcEw0kqk{aorZ*+c4Yn7`V6Lqj~FZiZQu6z3vb)mwiS(;^li zG5>~VV^qWXAzYPX{jg*F&mfdHj)$`>40q|o(n};v?jlEJ!6Ql=<&{Aj<$8|K&o1>l zo&MJ7y;f!03nsxbUmBck$+MQ}+67+#)tUkW!8O9(yiiVusgjlkTIK6>w^=O&5~(Oi z32LgnDVd=ZGOm}`;qK(@?~_x0e$6Z7k&uR}j&pZ7sgC?TAXDc{iV)MU)&$T^{iie( zrZY+w9Wk;XQ$r!ALysdW)LYU0%|2`vBKQ?mphLDJS1Xiq$@zrc=f@Rdfe5v$h&j1w zvZ?5xai`J5(Xa8u5Jx7Il&|+4%^-=TFCVY@eb#f@n8$mlsR=MR=afFyGaFseUH&A9Wz-}|3YLf^vwhLqAFNwmk{10BvJD!e85A_b=# z>3=6klP6@j87R*6HG=@f7XYVzwu(m0fVNxCC@5R%Qhbg`(Hf8XSYK;#&^XpsBRS(5Oyq`@m>Eb4fwV}H~=@1^~Ql(7L; zKPr|VLM5T_bRS|Ete3?iY7zOI$vIBe!OHr&0Yw4v@qOF-Dyphn1!TXW_#&FO z{I4IF@;U`^Z@q5{3kw@P9}{OrD#2xz+Bu-myK0o4325(zH!mz>@j0I>i6KPxS)gxU zx|T#PYs()FXUHhRWr3ILd|N|Tg;J_As6lavEk~Z$U?fw-R#`nz(sttqc@;AfugQ4y zw|imhjyeM*XUHGbAC2C#ea zfCk4NltQ6B52?4oUfu!|--Vvi*tZ1~xCtn#-+E3lBj$D#=%jVqw@uvK;_D0k5W@*Z zV{ws*db#^Sc#Uldk+_0?{Ubad7@mrT^cg{N<)qumu>M7(Ue3fb^rm+E)z%~~H@SjVFs{fFyCb4KOox1)DEVPJWt%9?%z%PIO5z zAVN43`#2O2hBYUv9PxI!CyaN&KA$qC8sI=h(=6KwM-`yu3Npqi@I_$WE_Kpo06Z$8 zUC2@4~psd+!a^g!tPTA5_OG=|!|MqLo8M{^ZO z`ciOr#by2-{=ZpP-h0Q7q7e{DT_<31^0Qy%jTU;1nt@Nz3wI&;M~hSvFWE@w zu>*)dv2|hnp0TSKUo`{(N}%Yx2jiw6-V;Gj=7Z+e&(F^zL=gyeP5HNuVIsW7P{@;z z8%<%mRNS9TA{jHvKS80tOW6Wh8jKzCvo`nM$JsPr`w3RX4E9B=w?A?adU>aokLrq9^d^)PKYWzk-vK2t?s`s(fTEz!-yZk6%D2*(}`T8 zh;g5-s)+xlz-x(HO@i1hEx{BKWgPxubvlZ#K<{`;(E{#gVNz&4=$KT`MUll`EkShZ|L| z#Xfp~KpfiT%}WXN#@w`g=Q1HTN1`Y`1UiTnRE)M=;-hX2h_b5O(>c7A#Ob%jmXenDJ}kD8a;WhSN=&H1U3 zq(fE=zlW z`v+Dr2n|vz871CbwbK=OgW(2?!#-4kC<#CkHHYawh=pZRx+}LpkXK`&^}zD0dqK} zn!h2U@S2altfRF1JD#sI?#fHRbcwQ~X{u5EP(@@VnU0zx{FzUNsb~}$qeezcoF$q1 zfoINA%R%y1gSM1l6k;C(V~f(pxg#7}{M@LcGF2^~&V1$Zw~6YPLZfckiPJCHFEMIy zkGK5Lk#$7;`-usKY?&>w_AUpq=dV0s@<9-jcs_ z*k=^*gMoqX03yXG4&?J(Toh>hq5tVTVqQ!PN9I#My)F*9PEkm=N477Yk@n%*mu2ZF z;Q>ASI*$j;-BdsQAR$q*QL@G82u5TFIr}EiPYhum{4~elRU3g(bs|J;+yyY{JK4$Pq7O!BC6 ztCwNs>YQAuB$l)Tyt+d5CF0mELpr<#T|fJiZ6f? literal 0 HcmV?d00001 diff --git a/src/renderer/assets/icons/icon.png b/src/renderer/assets/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f364f2c17291e4848c5efcb8fb99f06bbb53f229 GIT binary patch literal 49324 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 AZvX%Q literal 0 HcmV?d00001 diff --git a/src/renderer/assets/pause-circle.png b/src/renderer/assets/pause-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..2636f00b29879958aca4950d8a8a1400a602a97c GIT binary patch literal 896 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmUKs7M+SzC{oH>NS%G|oWRD45dJguM!v-tY$DUh!@P+6=(yLU`z6LcLCBs@Y8vBJ&@uo z@Q5sCVBk9f!i-b3`J@>bm|{I$978hhy`5?3FXAZUe!n3=Ajg5b>4?PQ3)x%R-X|FR z;`I39d}G002@{pFD`H)}obm@8^wrd=n$);Vf*LyQx?7*zxgA};bFb{h>Zj-K-T8g? z&f9Z;*sH$$*v}bSvgjN0^@hv`Tn4N?jECE|zhRu;z?&c&!5Y^tQ0L~m-fso}72ngJ z1NW|<*R5C=R=Y?}#@Xg<2{&`#QY5$C~#XOdu79WsaFzg+mXQKM3MjI5987oVonesdkan+y4(J7)<}U z_a%3h{0Byjt!|#)E2m}Z9}p|BYx%JFXVNvE7=7({;m0c4ckiFzGLXG((mqp(aow?P zXBJ-IiRsIoc{pVvL-I!5;*7%6Tm~@<7Dvp{6MEn>Q8Yn+TL|C%E|woMw~gAxwy$Bx zPmX@JAyDN&RL*Ics5_gO)_}}7y7q3;J6nUmWzVI=ig_P6?V5Gnh`HTdr#$(GRf^?m zk;))56ZQi~1rCMnQvB>H=5&K)-mz_YNt)hrpUl51tMsqE@%xc%!m2OJ>{>Q(-|5xi zH@NP%Pe5(!sR*4CnfSNi^Ia#@FPyh3h0nKZx3=ji`|Yb9nIAv(8 zvb5iGl2gcM!`EsjRdP`( zkYX@0Ff!0JGydYNbP0l+XkK%a3oA literal 0 HcmV?d00001 diff --git a/src/renderer/assets/play-circle.png b/src/renderer/assets/play-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..0d10870e55c816c6ee7a354e008277b29c2e4251 GIT binary patch literal 971 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmUKs7M+SzC{oH>NS%G|oWRD45dJguM!v-tY$DUh!@P+6=(yLU`z6LcLCBs@Y8vBJ&@uo z@Q5sCVBk9f!i-b3`J@>bm{xeYIEG~0dppxQU)WKk_52gnqb+KUOqKyj+?`q)9Y#O- zH8@mKqykia2%0q7IVuJ;Ot^Gm$%BguOW7@XU8h_S)R}N%@xhKA4;Rnan(}7r=H14- zPaj?$^FFTr`MIlS=1Q(yzwckZq`YH;qvz#GX)3;+THaQwnK~6q^6+?Z z<70o$T(vEb+QEONW4-?Y+XN&250ejYUGQMIw~lQC&zuun|Fkx|XWSE8ePF7|!S=@E znho1uD;m6!-p8=#9K*hq;SLAWpKWf*f5mI?=&*xW>Sf>4>pomBYRS)9C%*V4qrGCL zcaYiT=yF*PEy?6>hw5Zre0+FFouH|iZw#Kb8 z58|1e&#^HHv%YD}4y$ThfB3GL@Zl6=W8KQrHR8&}2lBWc#5bN^*|>e?3%EIuw;*a})30bwoHKHUXu_VNS%G|oWRD45dJguM!v-tY$DUh!@P+6=(yLU`z6LcLCBs@Y8vBJ&@uo z@Q5sCVBk9f!i-b3`J{n@dpunnLo)8Yy}rrEq)nG{Z{UlQ%!2$`J&LOY++}d=HltUc=O!r6qa+ZShZ@^ zE(LeN{59{wBm%bp{h?ao8c~vxSdwa$T$Bo=7>o>z40H{RfGEVk%*x2v%E(mPz`)AD zK<<^p0u&9o`6-!cmAEzJZ~q|!)F276Aviy+q&%@Gm7%=6TrV>(yEr+qAXP8FD1G)j R8!4b722WQ%mvv4FO#phcns@*J literal 0 HcmV?d00001 diff --git a/src/renderer/assets/skip-previous.png b/src/renderer/assets/skip-previous.png new file mode 100644 index 0000000000000000000000000000000000000000..1408850860dd8584c405a7d36ddc56a65b017f8e GIT binary patch literal 524 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmUKs7M+SzC{oH>NS%G|oWRD45dJguM!v-tY$DUh!@P+6=(yLU`z6LcLCBs@Y8vBJ&@uo z@Q5sCVBk9f!i-b3`J{n@FFjoxLo)8Yy}s9%*-@Y^vDw2zK}ogj5!0OpYlWq(+a0*K zG`KLXJHTt9q*nHV-E?o~mBTGt*N4tKxUL_h(r_4qK$5*P$C? zzjUQps{SINr&UW_BT7;dOH!?pi&B9UgOP!efv%wu5QP|+Ss58y85nCD7+4t?*vl6^ zN70a*pOTqYiCcr8)2V2n21$?&!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6cw Nc)I$ztaD0e0ssdcxC8(I literal 0 HcmV?d00001 diff --git a/src/renderer/components/accordion/index.tsx b/src/renderer/components/accordion/index.tsx index 63132d23..8a579c72 100644 --- a/src/renderer/components/accordion/index.tsx +++ b/src/renderer/components/accordion/index.tsx @@ -1,4 +1,5 @@ import type { AccordionProps as MantineAccordionProps } from '@mantine/core'; + import { Accordion as MantineAccordion } from '@mantine/core'; import styled from 'styled-components'; diff --git a/src/renderer/components/audio-player/index.tsx b/src/renderer/components/audio-player/index.tsx index 87e0e20e..fedb6c9a 100644 --- a/src/renderer/components/audio-player/index.tsx +++ b/src/renderer/components/audio-player/index.tsx @@ -1,27 +1,36 @@ +import type { Song } from '/@/renderer/api/types'; +import type { CrossfadeStyle } from '/@/renderer/types'; +import type { ReactPlayerProps } from 'react-player'; + +import isElectron from 'is-electron'; import { - useImperativeHandle, forwardRef, - useRef, - useState, useCallback, useEffect, + useImperativeHandle, useMemo, + useRef, + useState, } from 'react'; -import isElectron from 'is-electron'; -import type { ReactPlayerProps } from 'react-player'; import ReactPlayer from 'react-player/lazy'; -import type { Song } from '/@/renderer/api/types'; + +import { api } from '/@/renderer/api'; import { crossfadeHandler, gaplessHandler, } from '/@/renderer/components/audio-player/utils/list-handlers'; -import { useSettingsStore, useSettingsStoreActions } from '/@/renderer/store/settings.store'; -import type { CrossfadeStyle } from '/@/renderer/types'; -import { PlaybackStyle, PlayerStatus } from '/@/renderer/types'; +import { toast } from '/@/renderer/components/toast'; import { useWebAudio } from '/@/renderer/features/player/hooks/use-webaudio'; import { getServerById, TranscodingConfig, usePlaybackSettings, useSpeed } from '/@/renderer/store'; -import { toast } from '/@/renderer/components/toast'; -import { api } from '/@/renderer/api'; +import { useSettingsStore, useSettingsStoreActions } from '/@/renderer/store/settings.store'; +import { PlaybackStyle, PlayerStatus } from '/@/renderer/types'; + +export type AudioPlayerProgress = { + loaded: number; + loadedSeconds: number; + played: number; + playedSeconds: number; +}; interface AudioPlayerProps extends ReactPlayerProps { crossfadeDuration: number; @@ -34,13 +43,6 @@ interface AudioPlayerProps extends ReactPlayerProps { volume: number; } -export type AudioPlayerProgress = { - loaded: number; - loadedSeconds: number; - played: number; - playedSeconds: number; -}; - const getDuration = (ref: any) => { return ref.current?.player?.player?.player?.duration; }; @@ -53,7 +55,7 @@ const getDuration = (ref: any) => { const EMPTY_SOURCE = 'data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU2LjM2LjEwMAAAAAAAAAAAAAAA//OEAAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAEAAABIADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV6urq6urq6urq6urq6urq6urq6urq6urq6v////////////////////////////////8AAAAATGF2YzU2LjQxAAAAAAAAAAAAAAAAJAAAAAAAAAAAASDs90hvAAAAAAAAAAAAAAAAAAAA//MUZAAAAAGkAAAAAAAAA0gAAAAATEFN//MUZAMAAAGkAAAAAAAAA0gAAAAARTMu//MUZAYAAAGkAAAAAAAAA0gAAAAAOTku//MUZAkAAAGkAAAAAAAAA0gAAAAANVVV'; -const useSongUrl = (transcode: TranscodingConfig, current: boolean, song?: Song): string | null => { +const useSongUrl = (transcode: TranscodingConfig, current: boolean, song?: Song): null | string => { const prior = useRef(['', '']); return useMemo(() => { @@ -94,15 +96,15 @@ const useSongUrl = (transcode: TranscodingConfig, current: boolean, song?: Song) export const AudioPlayer = forwardRef( ( { - status, - playbackStyle, - crossfadeStyle, - crossfadeDuration, - currentPlayer, autoNext, + crossfadeDuration, + crossfadeStyle, + currentPlayer, + muted, + playbackStyle, player1, player2, - muted, + status, volume, }: AudioPlayerProps, ref: any, @@ -120,7 +122,7 @@ export const AudioPlayer = forwardRef( const stream1 = useSongUrl(transcode, currentPlayer === 1, player1); const stream2 = useSongUrl(transcode, currentPlayer === 2, player2); - const { webAudio, setWebAudio } = useWebAudio(); + const { setWebAudio, webAudio } = useWebAudio(); const [player1Source, setPlayer1Source] = useState( null, ); @@ -415,43 +417,43 @@ export const AudioPlayer = forwardRef( return ( <> ); diff --git a/src/renderer/components/audio-player/utils/list-handlers.ts b/src/renderer/components/audio-player/utils/list-handlers.ts index a22b0fa9..89c96bb6 100644 --- a/src/renderer/components/audio-player/utils/list-handlers.ts +++ b/src/renderer/components/audio-player/utils/list-handlers.ts @@ -1,5 +1,5 @@ -/* eslint-disable no-nested-ternary */ import type { Dispatch } from 'react'; + import { CrossfadeStyle } from '/@/renderer/types'; export const gaplessHandler = (args: { @@ -10,7 +10,7 @@ export const gaplessHandler = (args: { nextPlayerRef: any; setIsTransitioning: Dispatch; }) => { - const { nextPlayerRef, currentTime, duration, isTransitioning, setIsTransitioning, isFlac } = + const { currentTime, duration, isFlac, isTransitioning, nextPlayerRef, setIsTransitioning } = args; if (!isTransitioning) { @@ -46,17 +46,17 @@ export const crossfadeHandler = (args: { volume: number; }) => { const { - currentTime, - player, currentPlayer, currentPlayerRef, - nextPlayerRef, + currentTime, + duration, fadeDuration, fadeType, - duration, - volume, isTransitioning, + nextPlayerRef, + player, setIsTransitioning, + volume, } = args; if (!isTransitioning || currentPlayer !== player) { @@ -79,22 +79,18 @@ export const crossfadeHandler = (args: { let percentageOfFadeLeft; let n; switch (fadeType) { - case 'equalPower': - // https://dsp.stackexchange.com/a/14755 - percentageOfFadeLeft = (timeLeft / fadeDuration) * 2; - currentPlayerVolumeCalculation = Math.sqrt(0.5 * percentageOfFadeLeft) * volume; - nextPlayerVolumeCalculation = Math.sqrt(0.5 * (2 - percentageOfFadeLeft)) * volume; - break; - case 'linear': - currentPlayerVolumeCalculation = (timeLeft / fadeDuration) * volume; - nextPlayerVolumeCalculation = ((fadeDuration - timeLeft) / fadeDuration) * volume; - break; case 'dipped': // https://math.stackexchange.com/a/4622 percentageOfFadeLeft = timeLeft / fadeDuration; currentPlayerVolumeCalculation = percentageOfFadeLeft ** 2 * volume; nextPlayerVolumeCalculation = (percentageOfFadeLeft - 1) ** 2 * volume; break; + case 'equalPower': + // https://dsp.stackexchange.com/a/14755 + percentageOfFadeLeft = (timeLeft / fadeDuration) * 2; + currentPlayerVolumeCalculation = Math.sqrt(0.5 * percentageOfFadeLeft) * volume; + nextPlayerVolumeCalculation = Math.sqrt(0.5 * (2 - percentageOfFadeLeft)) * volume; + break; case fadeType.match(/constantPower.*/)?.input: // https://math.stackexchange.com/a/26159 n = @@ -114,6 +110,10 @@ export const crossfadeHandler = (args: { Math.cos((Math.PI / 4) * ((2 * percentageOfFadeLeft - 1) ** (2 * n + 1) + 1)) * volume; break; + case 'linear': + currentPlayerVolumeCalculation = (timeLeft / fadeDuration) * volume; + nextPlayerVolumeCalculation = ((fadeDuration - timeLeft) / fadeDuration) * volume; + break; default: currentPlayerVolumeCalculation = (timeLeft / fadeDuration) * volume; diff --git a/src/renderer/components/badge/index.tsx b/src/renderer/components/badge/index.tsx index 2343f744..309298db 100644 --- a/src/renderer/components/badge/index.tsx +++ b/src/renderer/components/badge/index.tsx @@ -1,4 +1,5 @@ import type { BadgeProps as MantineBadgeProps } from '@mantine/core'; + import { createPolymorphicComponent, Badge as MantineBadge } from '@mantine/core'; import styled from 'styled-components'; diff --git a/src/renderer/components/button/index.tsx b/src/renderer/components/button/index.tsx index 41bf1638..29d67b6d 100644 --- a/src/renderer/components/button/index.tsx +++ b/src/renderer/components/button/index.tsx @@ -1,9 +1,11 @@ -import type { Ref } from 'react'; -import React, { useRef, useCallback, useState, forwardRef } from 'react'; import type { ButtonProps as MantineButtonProps, TooltipProps } from '@mantine/core'; -import { Button as MantineButton, createPolymorphicComponent } from '@mantine/core'; +import type { Ref } from 'react'; + +import { createPolymorphicComponent, Button as MantineButton } from '@mantine/core'; import { useTimeout } from '@mantine/hooks'; +import React, { forwardRef, useCallback, useRef, useState } from 'react'; import styled from 'styled-components'; + import { Spinner } from '/@/renderer/components/spinner'; import { Tooltip } from '/@/renderer/components/tooltip'; @@ -94,8 +96,8 @@ export const _Button = forwardRef( {...tooltip} > {children} @@ -111,8 +113,8 @@ export const _Button = forwardRef( return ( {children} @@ -153,7 +155,7 @@ export const TimeoutButton = ({ timeoutProps, ...props }: HoldButtonProps) => { setIsRunning(false); }; - const { start, clear } = useTimeout(callback, timeoutProps.duration); + const { clear, start } = useTimeout(callback, timeoutProps.duration); const startTimeout = useCallback(() => { if (isRunning) { @@ -174,8 +176,8 @@ export const TimeoutButton = ({ timeoutProps, ...props }: HoldButtonProps) => { return ( diff --git a/src/renderer/components/grid-carousel/index.tsx b/src/renderer/components/grid-carousel/index.tsx index 78f5bd17..6bf6e94c 100644 --- a/src/renderer/components/grid-carousel/index.tsx +++ b/src/renderer/components/grid-carousel/index.tsx @@ -1,3 +1,5 @@ +import { Group, Stack } from '@mantine/core'; +import throttle from 'lodash/throttle'; import { isValidElement, memo, @@ -9,14 +11,13 @@ import { useRef, useState, } from 'react'; -import { Group, Stack } from '@mantine/core'; -import throttle from 'lodash/throttle'; import { RiArrowLeftSLine, RiArrowRightSLine } from 'react-icons/ri'; import styled from 'styled-components'; import { SwiperOptions, Virtual } from 'swiper'; import 'swiper/css'; import { Swiper, SwiperSlide } from 'swiper/react'; import { Swiper as SwiperCore } from 'swiper/types'; + import { Album, AlbumArtist, Artist, LibraryItem, RelatedArtist } from '/@/renderer/api/types'; import { Button } from '/@/renderer/components/button'; import { PosterCard } from '/@/renderer/components/card/poster-card'; @@ -44,14 +45,14 @@ const CarouselContainer = styled(Stack)` interface TitleProps { handleNext?: () => void; handlePrev?: () => void; - label?: string | ReactNode; + label?: ReactNode | string; pagination: { hasNextPage: boolean; hasPreviousPage: boolean; }; } -const Title = ({ label, handleNext, handlePrev, pagination }: TitleProps) => { +const Title = ({ handleNext, handlePrev, label, pagination }: TitleProps) => { return ( {isValidElement(label) ? ( @@ -69,18 +70,18 @@ const Title = ({ label, handleNext, handlePrev, pagination }: TitleProps) => { @@ -90,7 +91,7 @@ const Title = ({ label, handleNext, handlePrev, pagination }: TitleProps) => { }; export interface SwiperGridCarouselProps { - cardRows: CardRow[] | CardRow[] | CardRow[]; + cardRows: CardRow[] | CardRow[] | CardRow[]; data: Album[] | AlbumArtist[] | Artist[] | RelatedArtist[] | undefined; isLoading?: boolean; itemType: LibraryItem; @@ -100,7 +101,7 @@ export interface SwiperGridCarouselProps { children?: ReactNode; hasPagination?: boolean; icon?: ReactNode; - label: string | ReactNode; + label: ReactNode | string; }; uniqueId: string; } @@ -108,15 +109,15 @@ export interface SwiperGridCarouselProps { export const SwiperGridCarousel = ({ cardRows, data, + isLoading, itemType, route, swiperProps, title, - isLoading, uniqueId, }: SwiperGridCarouselProps) => { const containerRef = useRef(null); - const swiperRef = useRef(null); + const swiperRef = useRef(null); const playButtonBehavior = usePlayButtonBehavior(); const handlePlayQueueAdd = usePlayQueueAdd(); const [slideCount, setSlideCount] = useState(4); @@ -140,7 +141,7 @@ export const SwiperGridCarousel = ({ itemType: LibraryItem; serverId: string; }) => { - const { id, itemType, isFavorite, serverId } = options; + const { id, isFavorite, itemType, serverId } = options; if (isFavorite) { deleteFavoriteMutation.mutate({ query: { @@ -205,7 +206,7 @@ export const SwiperGridCarousel = ({ }, [slideCount, swiperProps?.slidesPerView]); const handleOnSlideChange = useCallback((e: SwiperCore) => { - const { slides, isEnd, isBeginning, params } = e; + const { isBeginning, isEnd, params, slides } = e; if (isEnd || isBeginning) return; const slideCount = (params.slidesPerView as number | undefined) || 4; @@ -216,7 +217,7 @@ export const SwiperGridCarousel = ({ }, []); const handleOnZoomChange = useCallback((e: SwiperCore) => { - const { slides, isEnd, isBeginning, params } = e; + const { isBeginning, isEnd, params, slides } = e; if (isEnd || isBeginning) return; const slideCount = (params.slidesPerView as number | undefined) || 4; @@ -227,7 +228,7 @@ export const SwiperGridCarousel = ({ }, []); const handleOnReachEnd = useCallback((e: SwiperCore) => { - const { slides, params } = e; + const { params, slides } = e; const slideCount = (params.slidesPerView as number | undefined) || 4; setPagination({ @@ -237,7 +238,7 @@ export const SwiperGridCarousel = ({ }, []); const handleOnReachBeginning = useCallback((e: SwiperCore) => { - const { slides, params } = e; + const { params, slides } = e; const slideCount = (params.slidesPerView as number | undefined) || 4; setPagination({ @@ -279,8 +280,8 @@ export const SwiperGridCarousel = ({ return ( {title ? ( @@ -292,12 +293,7 @@ export const SwiperGridCarousel = ({ /> ) : null} { swiperRef.current = swiper; }} @@ -305,6 +301,11 @@ export const SwiperGridCarousel = ({ onReachEnd={handleOnReachEnd} onSlideChange={handleOnSlideChange} onZoomChange={handleOnZoomChange} + ref={swiperRef} + resizeObserver + slidesPerView={slideCount} + spaceBetween={20} + style={{ height: '100%', width: '100%' }} {...swiperProps} > {slides.map((slideContent, index) => { diff --git a/src/renderer/components/hover-card/index.tsx b/src/renderer/components/hover-card/index.tsx index 7de932b7..713800b8 100644 --- a/src/renderer/components/hover-card/index.tsx +++ b/src/renderer/components/hover-card/index.tsx @@ -1,4 +1,4 @@ -import { HoverCard as MantineHoverCard, HoverCardProps } from '@mantine/core'; +import { HoverCardProps, HoverCard as MantineHoverCard } from '@mantine/core'; export const HoverCard = ({ children, ...props }: HoverCardProps) => { return ( diff --git a/src/renderer/components/input/index.tsx b/src/renderer/components/input/index.tsx index 94e1d1e1..9cd82ef4 100644 --- a/src/renderer/components/input/index.tsx +++ b/src/renderer/components/input/index.tsx @@ -1,23 +1,30 @@ -import React, { forwardRef } from 'react'; import type { - TextInputProps as MantineTextInputProps, - NumberInputProps as MantineNumberInputProps, - PasswordInputProps as MantinePasswordInputProps, FileInputProps as MantineFileInputProps, JsonInputProps as MantineJsonInputProps, + NumberInputProps as MantineNumberInputProps, + PasswordInputProps as MantinePasswordInputProps, TextareaProps as MantineTextareaProps, + TextInputProps as MantineTextInputProps, } from '@mantine/core'; + import { - TextInput as MantineTextInput, - NumberInput as MantineNumberInput, - PasswordInput as MantinePasswordInput, FileInput as MantineFileInput, JsonInput as MantineJsonInput, + NumberInput as MantineNumberInput, + PasswordInput as MantinePasswordInput, Textarea as MantineTextarea, + TextInput as MantineTextInput, } from '@mantine/core'; +import React, { forwardRef } from 'react'; import styled from 'styled-components'; -interface TextInputProps extends MantineTextInputProps { +interface FileInputProps extends MantineFileInputProps { + children?: React.ReactNode; + maxWidth?: number | string; + width?: number | string; +} + +interface JsonInputProps extends MantineJsonInputProps { children?: React.ReactNode; maxWidth?: number | string; width?: number | string; @@ -35,24 +42,18 @@ interface PasswordInputProps extends MantinePasswordInputProps { width?: number | string; } -interface FileInputProps extends MantineFileInputProps { - children?: React.ReactNode; - maxWidth?: number | string; - width?: number | string; -} - -interface JsonInputProps extends MantineJsonInputProps { - children?: React.ReactNode; - maxWidth?: number | string; - width?: number | string; -} - interface TextareaProps extends MantineTextareaProps { children?: React.ReactNode; maxWidth?: number | string; width?: number | string; } +interface TextInputProps extends MantineTextInputProps { + children?: React.ReactNode; + maxWidth?: number | string; + width?: number | string; +} + const StyledTextInput = styled(MantineTextInput)` & .mantine-TextInput-wrapper { border-color: var(--primary-color); @@ -276,7 +277,7 @@ const StyledTextarea = styled(MantineTextarea)` `; export const TextInput = forwardRef( - ({ children, width, maxWidth, ...props }: TextInputProps, ref) => { + ({ children, maxWidth, width, ...props }: TextInputProps, ref) => { return ( ( ); export const NumberInput = forwardRef( - ({ children, width, maxWidth, ...props }: NumberInputProps, ref) => { + ({ children, maxWidth, width, ...props }: NumberInputProps, ref) => { return ( ( ); export const PasswordInput = forwardRef( - ({ children, width, maxWidth, ...props }: PasswordInputProps, ref) => { + ({ children, maxWidth, width, ...props }: PasswordInputProps, ref) => { return ( ( ); export const FileInput = forwardRef( - ({ children, width, maxWidth, ...props }: FileInputProps, ref) => { + ({ children, maxWidth, width, ...props }: FileInputProps, ref) => { return ( ( ); export const JsonInput = forwardRef( - ({ children, width, maxWidth, ...props }: JsonInputProps, ref) => { + ({ children, maxWidth, width, ...props }: JsonInputProps, ref) => { return ( ( ); export const Textarea = forwardRef( - ({ children, width, maxWidth, ...props }: TextareaProps, ref) => { + ({ children, maxWidth, width, ...props }: TextareaProps, ref) => { return ( { @@ -59,12 +60,12 @@ interface ConfirmModalProps { } export const ConfirmModal = ({ - loading, + children, disabled, labels, + loading, onCancel, onConfirm, - children, }: ConfirmModalProps) => { const handleCancel = () => { if (onCancel) { @@ -80,16 +81,16 @@ export const ConfirmModal = ({ diff --git a/src/renderer/components/option/index.tsx b/src/renderer/components/option/index.tsx index cf814a90..5e7e141b 100644 --- a/src/renderer/components/option/index.tsx +++ b/src/renderer/components/option/index.tsx @@ -1,5 +1,5 @@ -import { ReactNode } from 'react'; import { Flex, Group } from '@mantine/core'; +import { ReactNode } from 'react'; export const Option = ({ children }: any) => { return ( diff --git a/src/renderer/components/page-header/index.tsx b/src/renderer/components/page-header/index.tsx index 3605075a..82fa0bac 100644 --- a/src/renderer/components/page-header/index.tsx +++ b/src/renderer/components/page-header/index.tsx @@ -2,6 +2,7 @@ import { Flex, FlexProps } from '@mantine/core'; import { AnimatePresence, motion, Variants } from 'framer-motion'; import { ReactNode, useRef } from 'react'; import styled from 'styled-components'; + import { useShouldPadTitlebar, useTheme } from '/@/renderer/hooks'; import { useWindowSettings } from '/@/renderer/store/settings.store'; import { Platform } from '/@/renderer/types'; @@ -49,7 +50,7 @@ const BackgroundImage = styled.div<{ $background: string }>` background: ${(props) => props.$background || 'var(--titlebar-bg)'}; `; -const BackgroundImageOverlay = styled.div<{ theme: 'light' | 'dark' }>` +const BackgroundImageOverlay = styled.div<{ theme: 'dark' | 'light' }>` position: absolute; top: 0; left: 0; @@ -63,7 +64,7 @@ const BackgroundImageOverlay = styled.div<{ theme: 'light' | 'dark' }>` `; export interface PageHeaderProps - extends Omit { + extends Omit { animated?: boolean; backgroundColor?: string; children?: ReactNode; @@ -93,11 +94,11 @@ const variants: Variants = { export const PageHeader = ({ animated, - position, - height, backgroundColor, - isHidden, children, + height, + isHidden, + position, ...props }: PageHeaderProps) => { const ref = useRef(null); @@ -108,9 +109,9 @@ export const PageHeader = ({ return ( <>