gitextract_z80t98b9/ ├── .env.example ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── config.yml │ │ └── feature_request.md │ └── workflows/ │ └── ci.yml ├── .gitignore ├── .prettierignore ├── .prettierrc ├── .vscode/ │ ├── extensions.json │ └── settings.json ├── AGENTS.md ├── LICENSE.txt ├── README.md ├── biome.jsonc ├── knip.json ├── lib/ │ ├── vite-image-metadata.ts │ └── vite-log-chunk-size.ts ├── messages/ │ ├── de.json │ ├── en.json │ ├── fr.json │ ├── lt.json │ ├── zh-CN.json │ └── zh-TW.json ├── netlify.toml ├── package.json ├── patches/ │ └── @material__material-color-utilities.patch ├── pnpm-workspace.yaml ├── project.inlang/ │ └── settings.json ├── scripts/ │ ├── check-translations.ts │ └── gen-color-theme.ts ├── src/ │ ├── ambient.d.ts │ ├── app.css │ ├── app.d.ts │ ├── app.html │ ├── hooks.server.ts │ ├── lib/ │ │ ├── app-metadata.ts │ │ ├── attachments/ │ │ │ ├── ripple.ts │ │ │ └── tooltip.ts │ │ ├── components/ │ │ │ ├── AlbumsListContainer.svelte │ │ │ ├── ArtistListContainer.svelte │ │ │ ├── Artwork.svelte │ │ │ ├── BackButton.svelte │ │ │ ├── Button.svelte │ │ │ ├── FavoriteButton.svelte │ │ │ ├── Header.svelte │ │ │ ├── IconButton.svelte │ │ │ ├── ListDetailsLayout.svelte │ │ │ ├── ListItem.svelte │ │ │ ├── MenuButton.svelte │ │ │ ├── PlayerOverlay.svelte │ │ │ ├── ScrollContainer.svelte │ │ │ ├── Select.svelte │ │ │ ├── Separator.svelte │ │ │ ├── Slider.svelte │ │ │ ├── Spinner.svelte │ │ │ ├── Switch.svelte │ │ │ ├── Tabs.svelte │ │ │ ├── TextField.svelte │ │ │ ├── VirtualContainer.svelte │ │ │ ├── WrapTranslation.svelte │ │ │ ├── animated-icons/ │ │ │ │ ├── PlayPauseIcon.svelte │ │ │ │ └── PlayPreviousNextIcon.svelte │ │ │ ├── dialog/ │ │ │ │ ├── CommonDialog.svelte │ │ │ │ ├── Dialog.svelte │ │ │ │ └── DialogFooter.svelte │ │ │ ├── global-dialogs/ │ │ │ │ ├── EqualizerDialog.svelte │ │ │ │ ├── RemoveFromLibraryDialog.svelte │ │ │ │ ├── dialogs.ts │ │ │ │ └── playlists/ │ │ │ │ ├── AddToPlaylistDialog.svelte │ │ │ │ ├── AddToPlaylistDialogContent.svelte │ │ │ │ ├── EditPlaylistDialog.svelte │ │ │ │ └── NewPlaylistDialog.svelte │ │ │ ├── icon/ │ │ │ │ ├── Icon.svelte │ │ │ │ └── icon-paths.server.ts │ │ │ ├── library-grid/ │ │ │ │ ├── LibraryGridItem.svelte │ │ │ │ └── LibraryGridListContainer.svelte │ │ │ ├── menu/ │ │ │ │ ├── Menu.svelte │ │ │ │ ├── MenuRenderer.svelte │ │ │ │ ├── positioning.ts │ │ │ │ └── types.ts │ │ │ ├── player/ │ │ │ │ ├── MainControls.svelte │ │ │ │ ├── PlayerArtwork.svelte │ │ │ │ ├── Timeline.svelte │ │ │ │ ├── VolumeSlider.svelte │ │ │ │ └── buttons/ │ │ │ │ ├── ActiveIndicator.svelte │ │ │ │ ├── PlayNextButton.svelte │ │ │ │ ├── PlayPrevButton.svelte │ │ │ │ ├── PlayToggleButton.svelte │ │ │ │ ├── PlayTogglePillButton.svelte │ │ │ │ ├── PlayerFavoriteButton.svelte │ │ │ │ ├── RepeatButton.svelte │ │ │ │ └── ShuffleButton.svelte │ │ │ ├── playlists/ │ │ │ │ ├── PlaylistListContainer.svelte │ │ │ │ └── PlaylistListItem.svelte │ │ │ ├── snackbar/ │ │ │ │ ├── Snackbar.svelte │ │ │ │ ├── SnackbarRenderer.svelte │ │ │ │ ├── snackbar.ts │ │ │ │ └── store.svelte.ts │ │ │ └── tracks/ │ │ │ ├── TrackListItem.svelte │ │ │ ├── TracksListContainer.svelte │ │ │ ├── selection.svelte.ts │ │ │ ├── use-track-drag-controller.svelte.ts │ │ │ ├── use-track-menu-items.ts │ │ │ └── use-track-selection-controller.svelte.ts │ │ ├── db/ │ │ │ ├── database.ts │ │ │ ├── events.ts │ │ │ ├── lock-database.ts │ │ │ └── query/ │ │ │ ├── base-query.svelte.ts │ │ │ ├── inline-query.svelte.ts │ │ │ ├── page-query.svelte.ts │ │ │ └── query.ts │ │ ├── helpers/ │ │ │ ├── __tests__/ │ │ │ │ └── serial-queue.test.ts │ │ │ ├── animations.ts │ │ │ ├── audio.ts │ │ │ ├── create-managed-artwork.svelte.ts │ │ │ ├── debounced.svelte.ts │ │ │ ├── file-system.ts │ │ │ ├── focus.ts │ │ │ ├── input.ts │ │ │ ├── persist.svelte.ts │ │ │ ├── register-sw.ts │ │ │ ├── serial-queue.ts │ │ │ ├── test-helpers.ts │ │ │ ├── ui-action.ts │ │ │ ├── utils/ │ │ │ │ ├── array.ts │ │ │ │ ├── assign.ts │ │ │ │ ├── clamp.ts │ │ │ │ ├── debounce.ts │ │ │ │ ├── format-duration.ts │ │ │ │ ├── integers.ts │ │ │ │ ├── navigate.ts │ │ │ │ ├── text.ts │ │ │ │ ├── throttle.ts │ │ │ │ ├── ua.ts │ │ │ │ └── wait.ts │ │ │ └── virtualizer.svelte.ts │ │ ├── layout-bottom-bar.svelte.ts │ │ ├── library/ │ │ │ ├── __tests__/ │ │ │ │ ├── play-history.test.ts │ │ │ │ ├── playlists.test.ts │ │ │ │ └── remove.test.ts │ │ │ ├── get/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── value.test.ts │ │ │ │ ├── ids-queries.ts │ │ │ │ ├── ids.ts │ │ │ │ ├── value-queries.ts │ │ │ │ └── value.ts │ │ │ ├── play-history-actions.ts │ │ │ ├── playlists-actions.ts │ │ │ ├── remove.ts │ │ │ ├── scan-actions/ │ │ │ │ ├── directories.ts │ │ │ │ ├── scan-tracks.ts │ │ │ │ └── scanner/ │ │ │ │ ├── actions.ts │ │ │ │ ├── import-track.ts │ │ │ │ ├── parse/ │ │ │ │ │ ├── format-artwork.ts │ │ │ │ │ ├── image-primary-color.ts │ │ │ │ │ └── parse-track.ts │ │ │ │ ├── start.ts │ │ │ │ ├── types.ts │ │ │ │ └── worker.ts │ │ │ ├── tracks-queries.ts │ │ │ └── types.ts │ │ ├── menu-actions/ │ │ │ └── playlists.ts │ │ ├── stores/ │ │ │ ├── dialogs/ │ │ │ │ ├── store.svelte.ts │ │ │ │ └── use-store.ts │ │ │ ├── main/ │ │ │ │ ├── store.svelte.ts │ │ │ │ └── use-store.ts │ │ │ └── player/ │ │ │ ├── __test__/ │ │ │ │ ├── audio-loader.test.ts │ │ │ │ ├── equalizer.test.ts │ │ │ │ ├── player.svelte.test.ts │ │ │ │ └── queue.test.ts │ │ │ ├── audio-loader.svelte.ts │ │ │ ├── equalizer.svelte.ts │ │ │ ├── player.svelte.ts │ │ │ ├── queue.svelte.ts │ │ │ └── use-store.ts │ │ ├── theme.ts │ │ └── view-transitions.svelte.ts │ ├── params/ │ │ └── libraryEntities.ts │ ├── routes/ │ │ ├── (app)/ │ │ │ ├── (plain)/ │ │ │ │ ├── +layout.svelte │ │ │ │ ├── about/ │ │ │ │ │ ├── +page.svelte │ │ │ │ │ └── +page.ts │ │ │ │ └── settings/ │ │ │ │ ├── +page.svelte │ │ │ │ ├── +page.ts │ │ │ │ └── components/ │ │ │ │ ├── DirectoriesList.svelte │ │ │ │ ├── InstallAppBanner.svelte │ │ │ │ └── MissingFsApiBanner.svelte │ │ │ ├── +layout.svelte │ │ │ ├── layout/ │ │ │ │ ├── app-install-prompt.ts │ │ │ │ ├── setup-directories-permission-prompt.svelte.ts │ │ │ │ └── setup-theme.svelte.ts │ │ │ ├── library/ │ │ │ │ └── [[slug=libraryEntities]]/ │ │ │ │ ├── +layout.svelte │ │ │ │ ├── +layout.ts │ │ │ │ ├── +page.svelte │ │ │ │ ├── Search.svelte │ │ │ │ ├── [uuid]/ │ │ │ │ │ ├── +page.svelte │ │ │ │ │ └── +page.ts │ │ │ │ ├── config.ts │ │ │ │ └── store.svelte.ts │ │ │ └── player/ │ │ │ ├── +layout.svelte │ │ │ ├── +layout.ts │ │ │ ├── +page.ts │ │ │ ├── history/ │ │ │ │ └── +page.ts │ │ │ ├── layout-props.ts │ │ │ └── queue/ │ │ │ └── +page.ts │ │ ├── (assets)/ │ │ │ ├── icons/ │ │ │ │ └── icon.server.ts │ │ │ └── manifest.webmanifest/ │ │ │ └── +server.ts │ │ ├── (marketing)/ │ │ │ ├── +page.svelte │ │ │ ├── +page.ts │ │ │ ├── AGENTS.md │ │ │ ├── TONE_OF_VOICE.md │ │ │ ├── assets/ │ │ │ │ ├── hero.avif │ │ │ │ └── marketing-equalizer-preview.avif │ │ │ └── components/ │ │ │ ├── FeaturesSection.svelte │ │ │ ├── GettingStartedSection.svelte │ │ │ ├── HeroSection.svelte │ │ │ ├── HowItWorksSection.svelte │ │ │ ├── Section.svelte │ │ │ └── SoundControlsSection.svelte │ │ ├── +error.svelte │ │ ├── +layout.svelte │ │ └── +layout.ts │ ├── server/ │ │ └── theme-colors.ts │ ├── service-worker.ts │ └── theme-colors.css ├── static/ │ └── supported-browser-check.js ├── svelte.config.js ├── tsconfig.base.json ├── tsconfig.json ├── tsconfig.node.json ├── vite.config.ts └── vitest.config.ts