gitextract_lgtxwvrj/ ├── .deepsource.toml ├── .dockerignore ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug.yml │ │ ├── feature-request.yml │ │ ├── idea.yml │ │ └── module.yml │ ├── pull_request_template.md │ ├── release-note.md │ ├── renovate.json │ └── workflows/ │ ├── docker.yml │ ├── docker_dev.yml │ ├── greetings.yml │ └── stale.yml ├── .gitignore ├── .vscode/ │ ├── launch.json │ └── settings.json ├── .yarn/ │ └── releases/ │ └── yarn-3.6.0.cjs ├── .yarnrc.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── README.md ├── SECURITY.md ├── cli/ │ ├── cli.js │ ├── commands/ │ │ ├── reset-owner-password.js │ │ └── reset-password.js │ └── package.json ├── crowdin.yml ├── data/ │ ├── constants.ts │ ├── crowdin-report.json │ └── default.json ├── database/ │ └── .gitkeep ├── docs/ │ ├── banner.xcf │ └── section-template.xcf ├── drizzle/ │ ├── 0000_supreme_the_captain.sql │ ├── 0001_brave_mimic.sql │ ├── meta/ │ │ ├── 0000_snapshot.json │ │ ├── 0001_snapshot.json │ │ └── _journal.json │ └── migrate/ │ ├── migrate.ts │ └── package.json ├── drizzle.config.ts ├── next-env.d.ts ├── next-i18next.config.js ├── next.config.js ├── package.json ├── public/ │ ├── locales/ │ │ └── en/ │ │ ├── authentication/ │ │ │ ├── invite.json │ │ │ └── login.json │ │ ├── boards/ │ │ │ ├── common.json │ │ │ └── customize.json │ │ ├── common.json │ │ ├── layout/ │ │ │ ├── common.json │ │ │ ├── element-selector/ │ │ │ │ └── selector.json │ │ │ ├── errors/ │ │ │ │ ├── access-denied.json │ │ │ │ └── not-found.json │ │ │ ├── header/ │ │ │ │ └── actions/ │ │ │ │ └── toggle-edit-mode.json │ │ │ ├── header.json │ │ │ ├── manage.json │ │ │ ├── mobile/ │ │ │ │ └── drawer.json │ │ │ └── modals/ │ │ │ ├── about.json │ │ │ ├── add-app.json │ │ │ └── change-position.json │ │ ├── manage/ │ │ │ ├── boards.json │ │ │ ├── index.json │ │ │ ├── migrate.json │ │ │ ├── users/ │ │ │ │ ├── create.json │ │ │ │ ├── edit.json │ │ │ │ └── invites.json │ │ │ └── users.json │ │ ├── modules/ │ │ │ ├── bookmark.json │ │ │ ├── calendar.json │ │ │ ├── common-media-cards.json │ │ │ ├── common.json │ │ │ ├── dashdot.json │ │ │ ├── date.json │ │ │ ├── dlspeed.json │ │ │ ├── dns-hole-controls.json │ │ │ ├── dns-hole-summary.json │ │ │ ├── docker.json │ │ │ ├── health-monitoring.json │ │ │ ├── iframe.json │ │ │ ├── indexer-manager.json │ │ │ ├── media-requests-list.json │ │ │ ├── media-requests-stats.json │ │ │ ├── media-server.json │ │ │ ├── media-transcoding.json │ │ │ ├── notebook.json │ │ │ ├── overseerr.json │ │ │ ├── ping.json │ │ │ ├── rss.json │ │ │ ├── search.json │ │ │ ├── smart-home/ │ │ │ │ ├── entity-state.json │ │ │ │ └── trigger-automation.json │ │ │ ├── torrents-status.json │ │ │ ├── usenet.json │ │ │ ├── video-stream.json │ │ │ └── weather.json │ │ ├── password-requirements.json │ │ ├── settings/ │ │ │ ├── common.json │ │ │ └── customization/ │ │ │ ├── access.json │ │ │ ├── general.json │ │ │ ├── gridstack.json │ │ │ ├── opacity-selector.json │ │ │ ├── page-appearance.json │ │ │ └── shade-selector.json │ │ ├── tools/ │ │ │ └── docker.json │ │ ├── user/ │ │ │ └── preferences.json │ │ ├── widgets/ │ │ │ ├── draggable-list.json │ │ │ ├── error-boundary.json │ │ │ └── location.json │ │ └── zod.json │ └── site.webmanifest ├── scripts/ │ └── run.sh ├── src/ │ ├── components/ │ │ ├── AppAvatar.test.tsx │ │ ├── AppAvatar.tsx │ │ ├── Board/ │ │ │ └── Customize/ │ │ │ ├── Access/ │ │ │ │ └── AccessCustomization.tsx │ │ │ ├── Appearance/ │ │ │ │ └── AppearanceCustomization.tsx │ │ │ ├── Gridstack/ │ │ │ │ └── GridstackCustomization.tsx │ │ │ ├── Layout/ │ │ │ │ ├── LayoutCustomization.tsx │ │ │ │ └── LayoutPreview.tsx │ │ │ ├── PageMetadata/ │ │ │ │ └── PageMetadataCustomization.tsx │ │ │ └── form.ts │ │ ├── Dashboard/ │ │ │ ├── Dashboard.tsx │ │ │ ├── Mobile/ │ │ │ │ └── Ribbon/ │ │ │ │ ├── MobileRibbon.tsx │ │ │ │ └── MobileRibbonSidebarDrawer.tsx │ │ │ ├── Modals/ │ │ │ │ ├── ChangePosition/ │ │ │ │ │ ├── ChangeAppPositionModal.tsx │ │ │ │ │ ├── ChangePositionModal.tsx │ │ │ │ │ └── ChangeWidgetPositionModal.tsx │ │ │ │ ├── EditAppModal/ │ │ │ │ │ ├── EditAppModal.tsx │ │ │ │ │ └── Tabs/ │ │ │ │ │ ├── AppereanceTab/ │ │ │ │ │ │ └── AppereanceTab.tsx │ │ │ │ │ ├── BehaviourTab/ │ │ │ │ │ │ └── BehaviourTab.tsx │ │ │ │ │ ├── GeneralTab/ │ │ │ │ │ │ └── GeneralTab.tsx │ │ │ │ │ ├── IntegrationTab/ │ │ │ │ │ │ ├── Components/ │ │ │ │ │ │ │ ├── InputElements/ │ │ │ │ │ │ │ │ ├── GenericSecretInput.tsx │ │ │ │ │ │ │ │ └── IntegrationSelector.tsx │ │ │ │ │ │ │ └── IntegrationOptionsRenderer/ │ │ │ │ │ │ │ └── IntegrationOptionsRenderer.tsx │ │ │ │ │ │ └── IntegrationTab.tsx │ │ │ │ │ ├── NetworkTab/ │ │ │ │ │ │ └── NetworkTab.tsx │ │ │ │ │ └── type.ts │ │ │ │ ├── RenameBoard/ │ │ │ │ │ └── RenameBoardModal.tsx │ │ │ │ └── SelectElement/ │ │ │ │ ├── Components/ │ │ │ │ │ ├── Overview/ │ │ │ │ │ │ └── AvailableElementsOverview.tsx │ │ │ │ │ ├── Shared/ │ │ │ │ │ │ ├── GenericElementType.tsx │ │ │ │ │ │ ├── SelectorBackArrow.tsx │ │ │ │ │ │ └── styles.tsx │ │ │ │ │ └── WidgetsTab/ │ │ │ │ │ ├── AvailableWidgetsTab.tsx │ │ │ │ │ └── WidgetElementType.tsx │ │ │ │ └── SelectElementModal.tsx │ │ │ ├── Tiles/ │ │ │ │ ├── Apps/ │ │ │ │ │ ├── AppIcon.tsx │ │ │ │ │ ├── AppMenu.tsx │ │ │ │ │ ├── AppPing.tsx │ │ │ │ │ └── AppTile.tsx │ │ │ │ ├── EmptyTile.tsx │ │ │ │ ├── GenericTileMenu.tsx │ │ │ │ ├── HomarrCardWrapper.tsx │ │ │ │ ├── TileWrapper.tsx │ │ │ │ ├── Widgets/ │ │ │ │ │ ├── Inputs/ │ │ │ │ │ │ ├── DraggableList.tsx │ │ │ │ │ │ ├── LocationSelection.tsx │ │ │ │ │ │ └── StaticDraggableList.tsx │ │ │ │ │ ├── WidgetsEditModal.tsx │ │ │ │ │ ├── WidgetsMenu.tsx │ │ │ │ │ └── WidgetsRemoveModal.tsx │ │ │ │ └── type.ts │ │ │ ├── Views/ │ │ │ │ ├── DashboardView.tsx │ │ │ │ ├── DetailView.tsx │ │ │ │ ├── EditView.tsx │ │ │ │ ├── ViewToggleButton.tsx │ │ │ │ └── useEditModeStore.ts │ │ │ └── Wrappers/ │ │ │ ├── Category/ │ │ │ │ ├── Category.tsx │ │ │ │ ├── CategoryEditMenu.tsx │ │ │ │ ├── CategoryEditModal.tsx │ │ │ │ └── useCategoryActions.tsx │ │ │ ├── Sidebar/ │ │ │ │ └── Sidebar.tsx │ │ │ ├── Wrapper/ │ │ │ │ └── Wrapper.tsx │ │ │ ├── WrapperContent.tsx │ │ │ └── gridstack/ │ │ │ ├── init-gridstack.ts │ │ │ ├── store.tsx │ │ │ └── use-gridstack.ts │ │ ├── IconSelector/ │ │ │ ├── DebouncedImage.tsx │ │ │ └── IconSelector.tsx │ │ ├── InfoCard/ │ │ │ └── InfoCard.tsx │ │ ├── Manage/ │ │ │ ├── Board/ │ │ │ │ ├── create-board.modal.tsx │ │ │ │ └── delete-board.modal.tsx │ │ │ ├── Tools/ │ │ │ │ └── Docker/ │ │ │ │ ├── ContainerActionBar.tsx │ │ │ │ ├── ContainerState.tsx │ │ │ │ ├── ContainerTable.tsx │ │ │ │ └── docker-select-board.modal.tsx │ │ │ └── User/ │ │ │ ├── Create/ │ │ │ │ ├── create-account-step.tsx │ │ │ │ ├── review-input-step.tsx │ │ │ │ └── security-step.tsx │ │ │ ├── Edit/ │ │ │ │ ├── GeneralForm.tsx │ │ │ │ ├── ManageUserDanger.tsx │ │ │ │ ├── ManageUserRoles.tsx │ │ │ │ └── ManageUserSecurityForm.tsx │ │ │ ├── Invite/ │ │ │ │ ├── copy-invite.modal.tsx │ │ │ │ ├── create-invite.modal.tsx │ │ │ │ └── delete-invite.modal.tsx │ │ │ ├── change-user-role.modal.tsx │ │ │ └── delete-user.modal.tsx │ │ ├── Onboarding/ │ │ │ ├── common-wrapper.tsx │ │ │ ├── database-not-writeable.tsx │ │ │ ├── onboarding-steps.tsx │ │ │ ├── step-create-account.tsx │ │ │ ├── step-onboarding-finished.tsx │ │ │ └── step-update-path-mappings.tsx │ │ ├── Password/ │ │ │ ├── password-requirement.tsx │ │ │ └── password-requirements.tsx │ │ ├── ThemeSchemeToggle/ │ │ │ └── ThemeSchemeToggle.tsx │ │ ├── UpgradeModal/ │ │ │ └── CheckUpgradeModal.tsx │ │ ├── User/ │ │ │ └── Preferences/ │ │ │ ├── AccessibilitySettings.tsx │ │ │ └── SearchEngineSelector.tsx │ │ └── layout/ │ │ ├── Background/ │ │ │ ├── FloatingBackground.tsx │ │ │ └── PolkaElement.tsx │ │ ├── Common/ │ │ │ ├── Logo.tsx │ │ │ ├── useCardStyles.ts │ │ │ └── useGradient.tsx │ │ ├── Meta/ │ │ │ ├── BoardHeadOverride.tsx │ │ │ └── CommonHead.tsx │ │ ├── Templates/ │ │ │ ├── BoardLayout.tsx │ │ │ ├── MainLayout.tsx │ │ │ └── ManageLayout.tsx │ │ └── header/ │ │ ├── About/ │ │ │ ├── Contributors.tsx │ │ │ ├── Credits.tsx │ │ │ ├── Tip.tsx │ │ │ └── Translators.tsx │ │ ├── ActionButton.tsx │ │ ├── AvatarMenu.tsx │ │ ├── Header.tsx │ │ ├── Search/ │ │ │ └── MovieModal.tsx │ │ └── Search.tsx │ ├── config/ │ │ ├── init.ts │ │ ├── provider.tsx │ │ └── store.ts │ ├── constants/ │ │ ├── constants.ts │ │ └── gridstack-breakpoints.ts │ ├── env.js │ ├── hooks/ │ │ ├── custom-session-provider.tsx │ │ ├── use-colorscheme.tsx │ │ ├── use-resize.ts │ │ ├── useExternalUrl.ts │ │ ├── useScreenLargerThan.ts │ │ ├── useScreenSmallerThan.ts │ │ └── useSetSafeInterval.tsx │ ├── middleware.ts │ ├── modals.ts │ ├── modules/ │ │ ├── common/ │ │ │ ├── MediaDisplay.tsx │ │ │ ├── examples/ │ │ │ │ ├── book.json │ │ │ │ ├── movie.json │ │ │ │ ├── multiplemovies.json │ │ │ │ ├── multipletvshows.json │ │ │ │ ├── music.json │ │ │ │ ├── request.json │ │ │ │ ├── search-response.json │ │ │ │ └── tvshow.json │ │ │ └── index.ts │ │ └── overseerr/ │ │ ├── Movie.d.ts │ │ ├── RequestModal.tsx │ │ ├── SearchResult.ts │ │ ├── TvShow.d.ts │ │ └── example.json │ ├── pages/ │ │ ├── 401.tsx │ │ ├── 404.tsx │ │ ├── _app.tsx │ │ ├── _document.tsx │ │ ├── _error.tsx │ │ ├── api/ │ │ │ ├── [...trpc].ts │ │ │ ├── auth/ │ │ │ │ └── [...nextauth].ts │ │ │ ├── download.ts │ │ │ ├── migrate.ts │ │ │ ├── openapi.json.ts │ │ │ └── trpc/ │ │ │ └── [trpc].ts │ │ ├── auth/ │ │ │ ├── invite/ │ │ │ │ └── [inviteId].tsx │ │ │ └── login.tsx │ │ ├── b/ │ │ │ ├── [slug]/ │ │ │ │ └── customize.tsx │ │ │ ├── [slug].tsx │ │ │ └── index.tsx │ │ ├── board/ │ │ │ ├── [slug]/ │ │ │ │ └── customize.tsx │ │ │ ├── [slug].tsx │ │ │ └── index.tsx │ │ ├── manage/ │ │ │ ├── about.tsx │ │ │ ├── boards/ │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── tools/ │ │ │ │ ├── docker.tsx │ │ │ │ ├── migrate.tsx │ │ │ │ └── swagger.tsx │ │ │ └── users/ │ │ │ ├── [userId]/ │ │ │ │ └── edit.tsx │ │ │ ├── create.tsx │ │ │ ├── index.tsx │ │ │ └── invites.tsx │ │ ├── onboard.tsx │ │ └── user/ │ │ └── preferences.tsx │ ├── server/ │ │ ├── api/ │ │ │ ├── helper.ts │ │ │ ├── root.ts │ │ │ ├── routers/ │ │ │ │ ├── app.ts │ │ │ │ ├── board.ts │ │ │ │ ├── calendar.ts │ │ │ │ ├── config.ts │ │ │ │ ├── dash-dot.ts │ │ │ │ ├── dns-hole/ │ │ │ │ │ └── router.ts │ │ │ │ ├── docker/ │ │ │ │ │ ├── DockerSingleton.ts │ │ │ │ │ └── router.ts │ │ │ │ ├── download.ts │ │ │ │ ├── health-monitoring/ │ │ │ │ │ ├── openmediavault.ts │ │ │ │ │ ├── proxmox.ts │ │ │ │ │ └── router.ts │ │ │ │ ├── icon.ts │ │ │ │ ├── indexer-manager.ts │ │ │ │ ├── invite/ │ │ │ │ │ ├── invite-router.spec.ts │ │ │ │ │ └── invite-router.ts │ │ │ │ ├── media-request.ts │ │ │ │ ├── media-server.ts │ │ │ │ ├── migrate.ts │ │ │ │ ├── notebook.ts │ │ │ │ ├── overseerr.ts │ │ │ │ ├── password.ts │ │ │ │ ├── rss.ts │ │ │ │ ├── smart-home/ │ │ │ │ │ └── entity-state.ts │ │ │ │ ├── tdarr.ts │ │ │ │ ├── usenet/ │ │ │ │ │ ├── nzbget/ │ │ │ │ │ │ ├── nzbget-api.d.ts │ │ │ │ │ │ ├── nzbget-client.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ └── router.ts │ │ │ │ ├── user.ts │ │ │ │ └── weather.ts │ │ │ └── trpc.ts │ │ ├── auth.ts │ │ ├── db/ │ │ │ ├── index.ts │ │ │ ├── queries/ │ │ │ │ ├── user.ts │ │ │ │ └── userSettings.ts │ │ │ └── schema.ts │ │ └── openai.ts │ ├── styles/ │ │ └── global.scss │ ├── tools/ │ │ ├── _tests/ │ │ │ ├── bytesHelper.spec.ts │ │ │ ├── humanFileSize.spec.ts │ │ │ └── language.spec.ts │ │ ├── acceptableStatusCodes.ts │ │ ├── bytesHelper.ts │ │ ├── client/ │ │ │ ├── app-properties.ts │ │ │ ├── arrays.ts │ │ │ ├── calculateEta.ts │ │ │ ├── math.ts │ │ │ ├── objects.ts │ │ │ ├── parseDuration.ts │ │ │ ├── time.ts │ │ │ └── zustands/ │ │ │ └── usePackageAttributesStore.ts │ │ ├── color.ts │ │ ├── config/ │ │ │ ├── configExists.ts │ │ │ ├── generateConfigPath.ts │ │ │ ├── getConfig.ts │ │ │ ├── getFallbackConfig.ts │ │ │ ├── getFrontendConfig.ts │ │ │ ├── readConfig.ts │ │ │ ├── wrapper-finder.ts │ │ │ └── writeConfig.ts │ │ ├── humanFileSize.ts │ │ ├── language.ts │ │ ├── mantineModalManagerExtensions.ts │ │ ├── server/ │ │ │ ├── configurations/ │ │ │ │ └── tanstack/ │ │ │ │ └── queryClient.tool.ts │ │ │ ├── getPackageVersion.ts │ │ │ ├── getServerSideTranslations.ts │ │ │ ├── images/ │ │ │ │ ├── abstract-icons-repository.ts │ │ │ │ ├── github-icons-repository.ts │ │ │ │ ├── jsdelivr-icons-repository.ts │ │ │ │ ├── local-icons-repository.ts │ │ │ │ └── unpkg-icons-repository.ts │ │ │ ├── loginBuilder.ts │ │ │ ├── sdk/ │ │ │ │ ├── adGuard/ │ │ │ │ │ ├── adGuard.schema.ts │ │ │ │ │ └── adGuard.ts │ │ │ │ ├── homeassistant/ │ │ │ │ │ ├── HomeAssistant.ts │ │ │ │ │ └── models/ │ │ │ │ │ └── EntityState.ts │ │ │ │ ├── pihole/ │ │ │ │ │ ├── piHole.spec.ts │ │ │ │ │ ├── piHole.ts │ │ │ │ │ └── piHole.type.ts │ │ │ │ └── plex/ │ │ │ │ ├── plexClient.test.ts │ │ │ │ └── plexClient.ts │ │ │ ├── theme/ │ │ │ │ └── theme.ts │ │ │ ├── translation-namespaces.ts │ │ │ └── url.ts │ │ ├── shared/ │ │ │ ├── app.ts │ │ │ ├── math/ │ │ │ │ ├── percentage.tool.test.ts │ │ │ │ └── percentage.tool.ts │ │ │ ├── strings.ts │ │ │ └── time/ │ │ │ ├── date.tool.test.ts │ │ │ ├── date.tool.ts │ │ │ ├── stopwatch.tool.test.ts │ │ │ └── stopwatch.tool.ts │ │ └── singleton/ │ │ └── HomeAssistantSingleton.ts │ ├── types/ │ │ ├── api/ │ │ │ ├── downloads/ │ │ │ │ └── queue/ │ │ │ │ └── NormalizedDownloadQueueResponse.ts │ │ │ ├── media-server/ │ │ │ │ ├── media-server.ts │ │ │ │ ├── response.ts │ │ │ │ └── session-info.ts │ │ │ └── tdarr.ts │ │ ├── app.ts │ │ ├── area.ts │ │ ├── category.ts │ │ ├── config.ts │ │ ├── dashboardPageType.ts │ │ ├── helpers.ts │ │ ├── settings.ts │ │ ├── shape.ts │ │ ├── tile.ts │ │ └── wrapper.ts │ ├── utils/ │ │ ├── api.ts │ │ ├── auth/ │ │ │ ├── adapter.ts │ │ │ ├── cookies.ts │ │ │ ├── credentials.ts │ │ │ ├── index.ts │ │ │ ├── ldap.ts │ │ │ ├── oidc-redirect.spec.ts │ │ │ └── oidc.ts │ │ ├── empty-provider.ts │ │ ├── i18n-zod-resolver.ts │ │ ├── security.ts │ │ └── session.ts │ ├── validations/ │ │ ├── boards.ts │ │ ├── invite.ts │ │ └── user.ts │ └── widgets/ │ ├── WidgetWrapper.tsx │ ├── bookmark/ │ │ └── BookmarkWidgetTile.tsx │ ├── boundary.tsx │ ├── calendar/ │ │ ├── CalendarDay.tsx │ │ ├── CalendarTile.tsx │ │ ├── MediaList.tsx │ │ ├── bg-calculator.ts │ │ └── type.ts │ ├── dashDot/ │ │ ├── DashDotCompactNetwork.tsx │ │ ├── DashDotCompactStorage.tsx │ │ ├── DashDotGraph.tsx │ │ ├── DashDotTile.tsx │ │ ├── api.ts │ │ └── types.ts │ ├── date/ │ │ └── DateTile.tsx │ ├── dnshole/ │ │ ├── DnsHoleControls.tsx │ │ ├── DnsHoleSummary.tsx │ │ ├── TimerModal.tsx │ │ └── type.ts │ ├── download-speed/ │ │ ├── Tile.tsx │ │ ├── TorrentNetworkTrafficTile.tsx │ │ └── useGetNetworkSpeed.tsx │ ├── health-monitoring/ │ │ ├── HealthMonitoringCpu.tsx │ │ ├── HealthMonitoringFileSystem.tsx │ │ ├── HealthMonitoringMemory.tsx │ │ ├── HealthMonitoringTile.tsx │ │ └── cluster/ │ │ ├── HealthMonitoringClusterDetailPopover.tsx │ │ ├── HealthMonitoringClusterResourceRow.tsx │ │ ├── HealthMonitoringClusterTile.tsx │ │ └── types.ts │ ├── helper.ts │ ├── iframe/ │ │ └── IFrameTile.tsx │ ├── index.ts │ ├── indexer-manager/ │ │ └── IndexerManagerTile.tsx │ ├── loading.tsx │ ├── media-requests/ │ │ ├── MediaRequestListTile.tsx │ │ ├── MediaRequestStatsTile.tsx │ │ ├── media-request-query.tsx │ │ └── media-request-types.tsx │ ├── media-server/ │ │ ├── DetailCollapseable.tsx │ │ ├── MediaServerTile.tsx │ │ ├── NowPlayingDisplay.tsx │ │ ├── TableRow.tsx │ │ └── useGetMediaServers.tsx │ ├── media-transcoding/ │ │ ├── HealthCheckStatus.tsx │ │ ├── MediaTranscodingTile.tsx │ │ ├── QueuePanel.tsx │ │ ├── StatisticsPanel.tsx │ │ └── WorkersPanel.tsx │ ├── notebook/ │ │ ├── NotebookEditor.tsx │ │ └── NotebookWidgetTile.tsx │ ├── rss/ │ │ └── RssWidgetTile.tsx │ ├── smart-home/ │ │ ├── entity-state/ │ │ │ └── entity-state.widget.tsx │ │ └── trigger-automation/ │ │ └── trigger-automation.widget.tsx │ ├── torrent/ │ │ ├── TorrentQueueItem.tsx │ │ ├── TorrentTile.spec.ts │ │ └── TorrentTile.tsx │ ├── useNet/ │ │ ├── UseNetTile.tsx │ │ ├── UsenetHistoryList.tsx │ │ ├── UsenetQueueList.tsx │ │ └── types.ts │ ├── video/ │ │ ├── VideoFeed.tsx │ │ └── VideoStreamTile.tsx │ ├── weather/ │ │ ├── WeatherIcon.tsx │ │ └── WeatherTile.tsx │ └── widgets.ts ├── tests/ │ ├── pages/ │ │ ├── auth/ │ │ │ └── login.spec.ts │ │ └── board/ │ │ └── [slug].spec.ts │ └── setupVitest.ts ├── tsconfig.json ├── turbo.json └── vitest.config.ts