From 03864b2a9a901cb9211c10396058c2132681f43a Mon Sep 17 00:00:00 2001 From: Gauvain Date: Sun, 14 Jun 2026 17:20:27 +0200 Subject: [PATCH 01/26] feat(home): refresh Continue Watching instantly via WebSocket (#1439) --- providers/WebSocketProvider.tsx | 230 +++++++++++++++++++++++++++----- 1 file changed, 194 insertions(+), 36 deletions(-) diff --git a/providers/WebSocketProvider.tsx b/providers/WebSocketProvider.tsx index ed9db754..c704d373 100644 --- a/providers/WebSocketProvider.tsx +++ b/providers/WebSocketProvider.tsx @@ -1,4 +1,5 @@ import { getSessionApi } from "@jellyfin/sdk/lib/utils/api"; +import { router } from "expo-router"; import { useAtomValue } from "jotai"; import { createContext, @@ -11,7 +12,6 @@ import { useState, } from "react"; import { AppState, type AppStateStatus } from "react-native"; -import useRouter from "@/hooks/useAppRouter"; import { useNetworkAwareQueryClient } from "@/hooks/useNetworkAwareQueryClient"; import { apiAtom, getOrSetDeviceId } from "@/providers/JellyfinProvider"; import { useNetworkStatus } from "@/providers/NetworkStatusProvider"; @@ -28,6 +28,20 @@ const LIBRARY_CHANGE_QUERY_KEYS = [ ["episodes"], ] as const; +// Query keys that depend on per-user playback state (resume position, played +// status, favorites) and should be refreshed when the server reports a +// `UserDataChanged`. Scoped to the progression-based sections so finishing an +// episode does not pointlessly refetch "recently added" or suggestions. +const USER_DATA_CHANGE_QUERY_KEYS = [ + ["home", "continueAndNextUp"], + ["home", "resumeItems"], + ["home", "nextUp-all"], + ["home", "heroItems"], + ["resumeItems"], + ["nextUp-all"], + ["nextUp"], +] as const; + interface WebSocketMessage { MessageType: string; Data: any; @@ -38,10 +52,30 @@ interface WebSocketProviderProps { children: ReactNode; } +/** + * Handler invoked for every message of a given `MessageType`. Receives the + * message `Data` payload and the full message. + */ +type WebSocketMessageHandler = (data: any, message: WebSocketMessage) => void; + interface WebSocketContextType { ws: WebSocket | null; isConnected: boolean; + /** + * @deprecated Prefer `subscribe`. `lastMessage` only keeps the most recent + * message, so bursts arriving in the same tick are coalesced and lost. Kept + * for `useWebsockets` (GeneralCommand handling) until it is migrated. + */ lastMessage: WebSocketMessage | null; + /** + * Subscribe to a given message type. The handler is called synchronously for + * every matching message (no coalescing, unlike `lastMessage`). Returns an + * unsubscribe function to call on cleanup. + */ + subscribe: ( + messageType: string, + handler: WebSocketMessageHandler, + ) => () => void; sendMessage: (message: any) => void; clearLastMessage: () => void; } @@ -54,7 +88,6 @@ export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { const [ws, setWs] = useState(null); const [isConnected, setIsConnected] = useState(false); const [lastMessage, setLastMessage] = useState(null); - const router = useRouter(); const queryClient = useNetworkAwareQueryClient(); const deviceId = useMemo(() => { return getOrSetDeviceId(); @@ -63,8 +96,76 @@ export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { const libraryChangeDebounceRef = useRef | null>( null, ); + const userDataChangeDebounceRef = useRef | null>(null); + // Handle for the onerror backoff timer. Tracked so a reconnect triggered by + // another path (foreground, network reconnect, effect re-run) can cancel a + // pending one โ€” an untracked timer would later open a second socket. + const reconnectTimeoutRef = useRef | null>( + null, + ); + + // Pub/sub registry: messageType -> set of handlers. Stored in a ref so + // subscribing/dispatching never triggers a re-render. + const listenersRef = useRef>>( + new Map(), + ); + + const subscribe = useCallback( + (messageType: string, handler: WebSocketMessageHandler) => { + const listeners = listenersRef.current; + let handlers = listeners.get(messageType); + if (!handlers) { + handlers = new Set(); + listeners.set(messageType, handlers); + } + handlers.add(handler); + return () => { + handlers?.delete(handler); + // Only drop the map entry if it still points at THIS set. After an + // unsubscribe + re-subscribe for the same type, a stale second call to + // this cleanup would otherwise delete the new subscribers' set and + // silently stop delivering their messages. + if ( + handlers && + handlers.size === 0 && + listeners.get(messageType) === handlers + ) { + listeners.delete(messageType); + } + }; + }, + [], + ); + + const dispatchMessage = useCallback((message: WebSocketMessage) => { + const handlers = listenersRef.current.get(message.MessageType); + if (!handlers || handlers.size === 0) return; + // Copy to tolerate handlers that unsubscribe during dispatch. + for (const handler of [...handlers]) { + // Isolate each handler so one throwing subscriber can't abort the rest + // (and isn't misreported as a parse failure by the outer onmessage catch). + try { + handler(message.Data, message); + } catch (error) { + console.error( + `Error handling WebSocket message type "${message.MessageType}":`, + error, + ); + } + } + }, []); const connectWebSocket = useCallback(() => { + // Cancel any reconnect queued by a previous onerror before opening a new + // socket, so we never end up with two live sockets โ€” each would double the + // message fan-out and double-invalidate queries. + if (reconnectTimeoutRef.current) { + clearTimeout(reconnectTimeoutRef.current); + reconnectTimeoutRef.current = null; + } + if (!deviceId || !api?.accessToken || !isNetworkConnected) { return; } @@ -85,6 +186,10 @@ export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { newWebSocket.onopen = () => { setIsConnected(true); reconnectAttemptsRef.current = 0; + if (reconnectTimeoutRef.current) { + clearTimeout(reconnectTimeoutRef.current); + reconnectTimeoutRef.current = null; + } keepAliveInterval = setInterval(() => { if (newWebSocket.readyState === WebSocket.OPEN) { newWebSocket.send(JSON.stringify({ MessageType: "KeepAlive" })); @@ -96,9 +201,15 @@ export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { // Don't log errors - this is expected when offline or server unreachable setIsConnected(false); + // Replace any still-pending reconnect so only one is ever queued; the + // previously untracked handle could leak and open a second socket. + if (reconnectTimeoutRef.current) { + clearTimeout(reconnectTimeoutRef.current); + } if (reconnectAttemptsRef.current < maxReconnectAttempts) { reconnectAttemptsRef.current++; - setTimeout(() => { + reconnectTimeoutRef.current = setTimeout(() => { + reconnectTimeoutRef.current = null; connectWebSocket(); }, reconnectDelay); } @@ -113,7 +224,10 @@ export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { newWebSocket.onmessage = (e) => { try { const message = JSON.parse(e.data); - setLastMessage(message); // Store the last message in context + // Legacy single-slot state, still consumed by useWebsockets. + setLastMessage(message); + // Pub/sub: deliver to every subscriber without coalescing. + dispatchMessage(message); } catch (error) { console.error("Error parsing WebSocket message:", error); } @@ -124,9 +238,13 @@ export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { if (keepAliveInterval) { clearInterval(keepAliveInterval); } + if (reconnectTimeoutRef.current) { + clearTimeout(reconnectTimeoutRef.current); + reconnectTimeoutRef.current = null; + } newWebSocket.close(); }; - }, [api, deviceId, isNetworkConnected]); + }, [api, deviceId, isNetworkConnected, dispatchMessage]); const handleLibraryChanged = useCallback( (data: any) => { @@ -157,47 +275,80 @@ export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { [queryClient], ); - useEffect(() => { - if (!lastMessage) { - return; - } - if (lastMessage.MessageType === "Play") { - handlePlayCommand(lastMessage.Data); - } else if (lastMessage.MessageType === "LibraryChanged") { - handleLibraryChanged(lastMessage.Data); - } - }, [lastMessage, router, handleLibraryChanged]); + const handleUserDataChanged = useCallback( + (data: any) => { + // Jellyfin sends UserDataChanged when playback position, played status + // or favorites change (e.g. finishing an episode). Only the + // progression-based home sections care about it. + if (!((data?.UserDataList?.length ?? 0) > 0)) { + return; + } + + // Finishing an item can emit several UserDataChanged messages, so + // debounce to invalidate the affected sections only once. + if (userDataChangeDebounceRef.current) { + clearTimeout(userDataChangeDebounceRef.current); + } + userDataChangeDebounceRef.current = setTimeout(() => { + for (const queryKey of USER_DATA_CHANGE_QUERY_KEYS) { + queryClient.invalidateQueries({ queryKey: [...queryKey] }); + } + }, 800); + }, + [queryClient], + ); + + // Refresh library-dependent queries when the server reports a change. + useEffect( + () => subscribe("LibraryChanged", handleLibraryChanged), + [subscribe, handleLibraryChanged], + ); + + // Refresh "Continue Watching" / "Next Up" when playback state changes. + useEffect( + () => subscribe("UserDataChanged", handleUserDataChanged), + [subscribe, handleUserDataChanged], + ); useEffect(() => { return () => { if (libraryChangeDebounceRef.current) { clearTimeout(libraryChangeDebounceRef.current); } + if (userDataChangeDebounceRef.current) { + clearTimeout(userDataChangeDebounceRef.current); + } + if (reconnectTimeoutRef.current) { + clearTimeout(reconnectTimeoutRef.current); + } }; }, []); - const handlePlayCommand = useCallback( - (data: any) => { - if (!data?.ItemIds?.length) { - return; - } + const handlePlayCommand = useCallback((data: any) => { + if (!data?.ItemIds?.length) { + return; + } - const itemId = data.ItemIds[0]; + const itemId = data.ItemIds[0]; - router.push({ - pathname: "/(auth)/player/direct-player", - params: { - itemId: itemId, - playCommand: data.PlayCommand || "PlayNow", - audioIndex: data.AudioStreamIndex?.toString(), - subtitleIndex: data.SubtitleStreamIndex?.toString(), - mediaSourceId: data.MediaSourceId || "", - bitrateValue: "", - offline: "false", - }, - }); - }, - [router], + router.push({ + pathname: "/(auth)/player/direct-player", + params: { + itemId: itemId, + playCommand: data.PlayCommand || "PlayNow", + audioIndex: data.AudioStreamIndex?.toString(), + subtitleIndex: data.SubtitleStreamIndex?.toString(), + mediaSourceId: data.MediaSourceId || "", + bitrateValue: "", + offline: "false", + }, + }); + }, []); + + // Server-initiated "Play me this item" remote command. + useEffect( + () => subscribe("Play", handlePlayCommand), + [subscribe, handlePlayCommand], ); useEffect(() => { @@ -267,7 +418,14 @@ export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { }, []); return ( {children} From b7ec841118b135400a948feaaa51b4971427f196 Mon Sep 17 00:00:00 2001 From: Gauvain Date: Sun, 14 Jun 2026 18:30:50 +0200 Subject: [PATCH 02/26] refactor: remove dead code (#1625) --- GLOBAL_MODAL_GUIDE.md | 8 - augmentations/index.ts | 1 - augmentations/number.ts | 5 - augmentations/string.ts | 14 -- components/ContextMenu.tv.ts | 0 components/ExampleGlobalModalUsage.tsx | 203 ------------------ components/common/LargePoster.tsx | 20 -- components/common/VerticalSkeleton.tsx | 28 --- components/navigation/TabBarIcon.tsx | 12 -- components/posters/EpisodePoster.tsx | 63 ------ components/posters/ParentPoster.tsx | 48 ----- components/settings/Dashboard.tsx | 29 --- components/settings/DownloadSettings.tsx | 3 - components/settings/DownloadSettings.tv.tsx | 3 - components/settings/Jellyseerr.tsx | 3 - constants/Languages.ts | 39 ---- hooks/useControlsVisibility.ts | 37 ---- hooks/useDownloadedFileOpener.ts | 35 --- hooks/useImageColors.ts | 120 ----------- hooks/useWifiSSID.ts | 1 - modules/wifi-ssid/index.ts | 1 - .../hooks/useDownloadEventHandlers.ts | 31 +-- translations/en.json | 7 +- utils/bToMb.ts | 18 -- utils/collectionTypeToItemType.ts | 47 ---- utils/hls/parseM3U8ForSubtitles.ts | 56 ----- utils/jellyfin/session/capabilities.ts | 56 ----- utils/jellyfin/tvshows/nextUp.ts | 44 ---- utils/jellyfin/user-library/getItemById.ts | 34 --- utils/log.tsx | 15 -- utils/secondsToTicks.ts | 5 - utils/secureCredentials.ts | 21 -- 32 files changed, 7 insertions(+), 1000 deletions(-) delete mode 100644 augmentations/string.ts delete mode 100644 components/ContextMenu.tv.ts delete mode 100644 components/ExampleGlobalModalUsage.tsx delete mode 100644 components/common/LargePoster.tsx delete mode 100644 components/common/VerticalSkeleton.tsx delete mode 100644 components/navigation/TabBarIcon.tsx delete mode 100644 components/posters/EpisodePoster.tsx delete mode 100644 components/posters/ParentPoster.tsx delete mode 100644 components/settings/Dashboard.tsx delete mode 100644 components/settings/DownloadSettings.tsx delete mode 100644 components/settings/DownloadSettings.tv.tsx delete mode 100644 constants/Languages.ts delete mode 100644 hooks/useControlsVisibility.ts delete mode 100644 hooks/useDownloadedFileOpener.ts delete mode 100644 hooks/useImageColors.ts delete mode 100644 utils/bToMb.ts delete mode 100644 utils/collectionTypeToItemType.ts delete mode 100644 utils/hls/parseM3U8ForSubtitles.ts delete mode 100644 utils/jellyfin/session/capabilities.ts delete mode 100644 utils/jellyfin/tvshows/nextUp.ts delete mode 100644 utils/jellyfin/user-library/getItemById.ts delete mode 100644 utils/secondsToTicks.ts diff --git a/GLOBAL_MODAL_GUIDE.md b/GLOBAL_MODAL_GUIDE.md index 5426ca72..11a05f10 100644 --- a/GLOBAL_MODAL_GUIDE.md +++ b/GLOBAL_MODAL_GUIDE.md @@ -143,14 +143,6 @@ interface ModalOptions { } ``` -## Examples - -See `components/ExampleGlobalModalUsage.tsx` for comprehensive examples including: -- Simple content modal -- Modal with custom snap points -- Complex component in modal -- Success/error modals triggered from functions - ## Default Styling The modal uses these default styles (can be overridden via options): diff --git a/augmentations/index.ts b/augmentations/index.ts index abec02c9..0c193e83 100644 --- a/augmentations/index.ts +++ b/augmentations/index.ts @@ -1,4 +1,3 @@ export * from "./api"; export * from "./mmkv"; export * from "./number"; -export * from "./string"; diff --git a/augmentations/number.ts b/augmentations/number.ts index bef44ac5..c8146d65 100644 --- a/augmentations/number.ts +++ b/augmentations/number.ts @@ -3,7 +3,6 @@ declare global { bytesToReadable(decimals?: number): string; secondsToMilliseconds(): number; minutesToMilliseconds(): number; - hoursToMilliseconds(): number; } } @@ -28,8 +27,4 @@ Number.prototype.minutesToMilliseconds = function () { return this.valueOf() * (60).secondsToMilliseconds(); }; -Number.prototype.hoursToMilliseconds = function () { - return this.valueOf() * (60).minutesToMilliseconds(); -}; - export {}; diff --git a/augmentations/string.ts b/augmentations/string.ts deleted file mode 100644 index f4a50b55..00000000 --- a/augmentations/string.ts +++ /dev/null @@ -1,14 +0,0 @@ -declare global { - interface String { - toTitle(): string; - } -} - -String.prototype.toTitle = function () { - return this.replaceAll("_", " ").replace( - /\w\S*/g, - (text) => text.charAt(0).toUpperCase() + text.substring(1).toLowerCase(), - ); -}; - -export {}; diff --git a/components/ContextMenu.tv.ts b/components/ContextMenu.tv.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/components/ExampleGlobalModalUsage.tsx b/components/ExampleGlobalModalUsage.tsx deleted file mode 100644 index ccebb823..00000000 --- a/components/ExampleGlobalModalUsage.tsx +++ /dev/null @@ -1,203 +0,0 @@ -/** - * Example Usage of Global Modal - * - * This file demonstrates how to use the global modal system from anywhere in your app. - * You can delete this file after understanding how it works. - */ - -import { Ionicons } from "@expo/vector-icons"; -import { TouchableOpacity, View } from "react-native"; -import { Text } from "@/components/common/Text"; -import { useGlobalModal } from "@/providers/GlobalModalProvider"; - -/** - * Example 1: Simple Content Modal - */ -export const SimpleModalExample = () => { - const { showModal } = useGlobalModal(); - - const handleOpenModal = () => { - showModal( - - Simple Modal - - This is a simple modal with just some text content. - - - Swipe down or tap outside to close. - - , - ); - }; - - return ( - - Open Simple Modal - - ); -}; - -/** - * Example 2: Modal with Custom Snap Points - */ -export const CustomSnapPointsExample = () => { - const { showModal } = useGlobalModal(); - - const handleOpenModal = () => { - showModal( - - - Custom Snap Points - - - This modal has custom snap points (25%, 50%, 90%). - - - - Try dragging the modal to different heights! - - - , - { - snapPoints: ["25%", "50%", "90%"], - enableDynamicSizing: false, - }, - ); - }; - - return ( - - Custom Snap Points - - ); -}; - -/** - * Example 3: Complex Component in Modal - */ -const SettingsModalContent = () => { - const { hideModal } = useGlobalModal(); - - const settings = [ - { - id: 1, - title: "Notifications", - icon: "notifications-outline" as const, - enabled: true, - }, - { id: 2, title: "Dark Mode", icon: "moon-outline" as const, enabled: true }, - { - id: 3, - title: "Auto-play", - icon: "play-outline" as const, - enabled: false, - }, - ]; - - return ( - - Settings - - {settings.map((setting, index) => ( - - - - {setting.title} - - - - - - ))} - - - Close - - - ); -}; - -export const ComplexModalExample = () => { - const { showModal } = useGlobalModal(); - - const handleOpenModal = () => { - showModal(); - }; - - return ( - - Complex Component - - ); -}; - -/** - * Example 4: Modal Triggered from Function (e.g., API response) - */ -export const useShowSuccessModal = () => { - const { showModal } = useGlobalModal(); - - return (message: string) => { - showModal( - - - - - Success! - {message} - , - ); - }; -}; - -/** - * Main Demo Component - */ -export const GlobalModalDemo = () => { - const showSuccess = useShowSuccessModal(); - - return ( - - - Global Modal Examples - - - - - - - showSuccess("Operation completed successfully!")} - className='bg-orange-600 px-4 py-2 rounded-lg' - > - Show Success Modal - - - ); -}; diff --git a/components/common/LargePoster.tsx b/components/common/LargePoster.tsx deleted file mode 100644 index ab3b16fb..00000000 --- a/components/common/LargePoster.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { Image } from "expo-image"; -import { View } from "react-native"; - -export const LargePoster: React.FC<{ url?: string | null }> = ({ url }) => { - if (!url) - return ( - - - - ); - - return ( - - - - ); -}; diff --git a/components/common/VerticalSkeleton.tsx b/components/common/VerticalSkeleton.tsx deleted file mode 100644 index 02a8a256..00000000 --- a/components/common/VerticalSkeleton.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { View, type ViewProps } from "react-native"; - -interface Props extends ViewProps { - index: number; -} - -export const VerticalSkeleton: React.FC = ({ index, ...props }) => { - return ( - - - - - - - ); -}; diff --git a/components/navigation/TabBarIcon.tsx b/components/navigation/TabBarIcon.tsx deleted file mode 100644 index a28bba84..00000000 --- a/components/navigation/TabBarIcon.tsx +++ /dev/null @@ -1,12 +0,0 @@ -// You can explore the built-in icon families and icons on the web at https://icons.expo.fyi/ - -import type { IconProps } from "@expo/vector-icons/build/createIconSet"; -import Ionicons from "@expo/vector-icons/Ionicons"; -import type { ComponentProps } from "react"; - -export function TabBarIcon({ - style, - ...rest -}: IconProps["name"]>) { - return ; -} diff --git a/components/posters/EpisodePoster.tsx b/components/posters/EpisodePoster.tsx deleted file mode 100644 index af42989b..00000000 --- a/components/posters/EpisodePoster.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import type { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; -import { Image } from "expo-image"; -import { useAtom } from "jotai"; -import { useMemo, useState } from "react"; -import { View } from "react-native"; -import { WatchedIndicator } from "@/components/WatchedIndicator"; -import { apiAtom } from "@/providers/JellyfinProvider"; - -type MoviePosterProps = { - item: BaseItemDto; - showProgress?: boolean; -}; - -export const EpisodePoster: React.FC = ({ - item, - showProgress = false, -}) => { - const [api] = useAtom(apiAtom); - - const url = useMemo(() => { - if (item.Type === "Episode") { - return `${api?.basePath}/Items/${item.ParentBackdropItemId}/Images/Thumb?fillHeight=389&quality=80&tag=${item.ParentThumbImageTag}`; - } - }, [item]); - - const [progress, _setProgress] = useState( - item.UserData?.PlayedPercentage || 0, - ); - - const blurhash = useMemo(() => { - const key = item.ImageTags?.Primary as string; - return item.ImageBlurHashes?.Primary?.[key]; - }, [item]); - - return ( - - - - {showProgress && progress > 0 && ( - - )} - - ); -}; diff --git a/components/posters/ParentPoster.tsx b/components/posters/ParentPoster.tsx deleted file mode 100644 index 47b62e4c..00000000 --- a/components/posters/ParentPoster.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { Image } from "expo-image"; -import { useAtom } from "jotai"; -import { useMemo } from "react"; -import { View } from "react-native"; -import { apiAtom } from "@/providers/JellyfinProvider"; - -type PosterProps = { - id?: string; - showProgress?: boolean; -}; - -const ParentPoster: React.FC = ({ id }) => { - const [api] = useAtom(apiAtom); - - const url = useMemo( - () => `${api?.basePath}/Items/${id}/Images/Primary`, - [id], - ); - - if (!url || !id) - return ( - - ); - - return ( - - - - ); -}; - -export default ParentPoster; diff --git a/components/settings/Dashboard.tsx b/components/settings/Dashboard.tsx deleted file mode 100644 index d41de008..00000000 --- a/components/settings/Dashboard.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { useTranslation } from "react-i18next"; -import { View } from "react-native"; -import useRouter from "@/hooks/useAppRouter"; -import { useSessions, type useSessionsProps } from "@/hooks/useSessions"; -import { useSettings } from "@/utils/atoms/settings"; -import { ListGroup } from "../list/ListGroup"; -import { ListItem } from "../list/ListItem"; - -export const Dashboard = () => { - const { settings } = useSettings(); - const { sessions = [] } = useSessions({} as useSessionsProps); - const router = useRouter(); - - const { t } = useTranslation(); - - if (!settings) return null; - return ( - - - router.push("/settings/dashboard/sessions")} - title={t("home.settings.dashboard.sessions_title")} - showArrow - /> - - - ); -}; diff --git a/components/settings/DownloadSettings.tsx b/components/settings/DownloadSettings.tsx deleted file mode 100644 index 3a0017ac..00000000 --- a/components/settings/DownloadSettings.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function DownloadSettings() { - return null; -} diff --git a/components/settings/DownloadSettings.tv.tsx b/components/settings/DownloadSettings.tv.tsx deleted file mode 100644 index 3a0017ac..00000000 --- a/components/settings/DownloadSettings.tv.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function DownloadSettings() { - return null; -} diff --git a/components/settings/Jellyseerr.tsx b/components/settings/Jellyseerr.tsx index 470d40a2..436b46c4 100644 --- a/components/settings/Jellyseerr.tsx +++ b/components/settings/Jellyseerr.tsx @@ -115,9 +115,6 @@ export const JellyseerrSettings = () => { ) : ( - - {t("home.settings.plugins.jellyseerr.jellyseerr_warning")} - {t("home.settings.plugins.jellyseerr.server_url")} diff --git a/constants/Languages.ts b/constants/Languages.ts deleted file mode 100644 index 8014e380..00000000 --- a/constants/Languages.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { DefaultLanguageOption } from "@/utils/atoms/settings"; - -export const LANGUAGES: DefaultLanguageOption[] = [ - { label: "English", value: "eng" }, - { label: "Spanish", value: "spa" }, - { label: "Chinese (Mandarin)", value: "cmn" }, - { label: "Hindi", value: "hin" }, - { label: "Arabic", value: "ara" }, - { label: "French", value: "fra" }, - { label: "Russian", value: "rus" }, - { label: "Portuguese", value: "por" }, - { label: "Japanese", value: "jpn" }, - { label: "German", value: "deu" }, - { label: "Italian", value: "ita" }, - { label: "Korean", value: "kor" }, - { label: "Turkish", value: "tur" }, - { label: "Dutch", value: "nld" }, - { label: "Polish", value: "pol" }, - { label: "Vietnamese", value: "vie" }, - { label: "Thai", value: "tha" }, - { label: "Indonesian", value: "ind" }, - { label: "Greek", value: "ell" }, - { label: "Swedish", value: "swe" }, - { label: "Danish", value: "dan" }, - { label: "Norwegian", value: "nor" }, - { label: "Finnish", value: "fin" }, - { label: "Czech", value: "ces" }, - { label: "Hungarian", value: "hun" }, - { label: "Romanian", value: "ron" }, - { label: "Ukrainian", value: "ukr" }, - { label: "Hebrew", value: "heb" }, - { label: "Bengali", value: "ben" }, - { label: "Punjabi", value: "pan" }, - { label: "Tagalog", value: "tgl" }, - { label: "Swahili", value: "swa" }, - { label: "Malay", value: "msa" }, - { label: "Persian", value: "fas" }, - { label: "Urdu", value: "urd" }, -]; diff --git a/hooks/useControlsVisibility.ts b/hooks/useControlsVisibility.ts deleted file mode 100644 index caca0d84..00000000 --- a/hooks/useControlsVisibility.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { useCallback, useEffect, useRef } from "react"; -import { useSharedValue } from "react-native-reanimated"; - -export const useControlsVisibility = (timeout = 3000) => { - const opacity = useSharedValue(1); - - const hideControlsTimerRef = useRef | null>( - null, - ); - - const showControls = useCallback(() => { - opacity.value = 1; - if (hideControlsTimerRef.current) { - clearTimeout(hideControlsTimerRef.current); - } - hideControlsTimerRef.current = setTimeout(() => { - opacity.value = 0; - }, timeout); - }, [timeout]); - - const hideControls = useCallback(() => { - opacity.value = 0; - if (hideControlsTimerRef.current) { - clearTimeout(hideControlsTimerRef.current); - } - }, []); - - useEffect(() => { - return () => { - if (hideControlsTimerRef.current) { - clearTimeout(hideControlsTimerRef.current); - } - }; - }, []); - - return { opacity, showControls, hideControls }; -}; diff --git a/hooks/useDownloadedFileOpener.ts b/hooks/useDownloadedFileOpener.ts deleted file mode 100644 index 845161a1..00000000 --- a/hooks/useDownloadedFileOpener.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { BaseItemDto } from "@jellyfin/sdk/lib/generated-client"; -import { useCallback } from "react"; -import useRouter from "@/hooks/useAppRouter"; -import { usePlaySettings } from "@/providers/PlaySettingsProvider"; -import { writeToLog } from "@/utils/log"; - -export const useDownloadedFileOpener = () => { - const router = useRouter(); - const { setPlayUrl, setOfflineSettings } = usePlaySettings(); - - const openFile = useCallback( - async (item: BaseItemDto) => { - if (!item.Id) { - writeToLog("ERROR", "Attempted to open a file without an ID."); - console.error("Attempted to open a file without an ID."); - return; - } - const queryParams = new URLSearchParams({ - itemId: item.Id, - offline: "true", - playbackPosition: - item.UserData?.PlaybackPositionTicks?.toString() ?? "0", - }); - try { - router.push(`/player/direct-player?${queryParams.toString()}`); - } catch (error) { - writeToLog("ERROR", "Error opening file", error); - console.error("Error opening file:", error); - } - }, - [setOfflineSettings, setPlayUrl, router], - ); - - return { openFile }; -}; diff --git a/hooks/useImageColors.ts b/hooks/useImageColors.ts deleted file mode 100644 index 4d8a0136..00000000 --- a/hooks/useImageColors.ts +++ /dev/null @@ -1,120 +0,0 @@ -import type { BaseItemDto } from "@jellyfin/sdk/lib/generated-client"; -import { useAtom, useAtomValue } from "jotai"; -import { useEffect, useMemo } from "react"; -import { Platform } from "react-native"; -import type * as ImageColorsType from "react-native-image-colors"; -import { apiAtom } from "@/providers/JellyfinProvider"; - -// Conditionally import react-native-image-colors only on non-TV platforms -const ImageColors = Platform.isTV - ? null - : (require("react-native-image-colors") as typeof ImageColorsType); - -import { - adjustToNearBlack, - calculateTextColor, - isCloseToBlack, - itemThemeColorAtom, -} from "@/utils/atoms/primaryColor"; -import { getItemImage } from "@/utils/getItemImage"; -import { storage } from "@/utils/mmkv"; - -/** - * Custom hook to extract and manage image colors for a given item. - * - * @param item - The BaseItemDto object representing the item. - * @param disabled - A boolean flag to disable color extraction. - * - */ -export const useImageColors = ({ - item, - url, - disabled, -}: { - item?: BaseItemDto | null; - url?: string | null; - disabled?: boolean; -}) => { - const api = useAtomValue(apiAtom); - const [, setPrimaryColor] = useAtom(itemThemeColorAtom); - - const isTv = Platform.isTV; - - const source = useMemo(() => { - if (!api) return; - if (url) return { uri: url }; - if (item) - return getItemImage({ - item, - api, - variant: "Primary", - quality: 80, - width: 300, - }); - return null; - }, [api, item, url]); - - useEffect(() => { - if (isTv) return; - if (disabled) return; - if (source?.uri) { - const _primary = storage.getString(`${source.uri}-primary`); - const _text = storage.getString(`${source.uri}-text`); - - if (_primary && _text) { - setPrimaryColor({ - primary: _primary, - text: _text, - }); - return; - } - - // Extract colors from the image - if (!ImageColors?.getColors) return; - - ImageColors.getColors(source.uri, { - fallback: "#fff", - cache: false, - }) - .then((colors: ImageColorsType.ImageColorsResult) => { - let primary = "#fff"; - let text = "#000"; - let backup = "#fff"; - - // Select the appropriate color based on the platform - if (colors.platform === "android") { - primary = colors.dominant; - backup = colors.vibrant; - } else if (colors.platform === "ios") { - primary = colors.detail; - backup = colors.primary; - } - - // Adjust the primary color if it's too close to black - if (primary && isCloseToBlack(primary)) { - if (backup && !isCloseToBlack(backup)) primary = backup; - primary = adjustToNearBlack(primary); - } - - // Calculate the text color based on the primary color - if (primary) text = calculateTextColor(primary); - - setPrimaryColor({ - primary, - text, - }); - - // Cache the colors in storage - if (source.uri && primary) { - storage.set(`${source.uri}-primary`, primary); - storage.set(`${source.uri}-text`, text); - } - }) - .catch((error: any) => { - console.error("Error getting colors", error); - }); - } - }, [isTv, source?.uri, setPrimaryColor, disabled]); - - if (isTv) return; -}; diff --git a/hooks/useWifiSSID.ts b/hooks/useWifiSSID.ts index 2b442a58..de0e2828 100644 --- a/hooks/useWifiSSID.ts +++ b/hooks/useWifiSSID.ts @@ -53,7 +53,6 @@ export function useWifiSSID(): UseWifiSSIDReturn { const fetchSSID = useCallback(async () => { if (Platform.isTV) return; const result = await getSSID(); - console.log("[WiFi Debug] Native module SSID:", result); setSSID(result); }, []); diff --git a/modules/wifi-ssid/index.ts b/modules/wifi-ssid/index.ts index 71bfbcfb..00d2bf83 100644 --- a/modules/wifi-ssid/index.ts +++ b/modules/wifi-ssid/index.ts @@ -15,7 +15,6 @@ const WifiSsidModule = */ export async function getSSID(): Promise { if (!WifiSsidModule) { - console.log("[WifiSsid] Module not available on this platform"); return null; } diff --git a/providers/Downloads/hooks/useDownloadEventHandlers.ts b/providers/Downloads/hooks/useDownloadEventHandlers.ts index ebf8b116..0bc8c352 100644 --- a/providers/Downloads/hooks/useDownloadEventHandlers.ts +++ b/providers/Downloads/hooks/useDownloadEventHandlers.ts @@ -142,31 +142,12 @@ export function useDownloadEventHandlers({ } else { // Transcoding - estimate from bitrate const process = processes.find((p) => p.id === processId); - console.log( - `[DPL] Transcoding detected, looking for process ${processId}, found:`, - process ? "yes" : "no", - ); - if (process) { - console.log(`[DPL] Process bitrate:`, { - key: process.maxBitrate.key, - value: process.maxBitrate.value, - runTimeTicks: process.item.RunTimeTicks, - }); - if (process.maxBitrate.value && process.item.RunTimeTicks) { - const { estimateDownloadSize } = require("@/utils/download"); - estimatedTotalBytes = estimateDownloadSize( - process.maxBitrate.value, - process.item.RunTimeTicks, - ); - console.log( - `[DPL] Calculated estimatedTotalBytes:`, - estimatedTotalBytes, - ); - } else { - console.log( - `[DPL] Cannot estimate size - bitrate.value or RunTimeTicks missing`, - ); - } + if (process?.maxBitrate.value && process.item.RunTimeTicks) { + const { estimateDownloadSize } = require("@/utils/download"); + estimatedTotalBytes = estimateDownloadSize( + process.maxBitrate.value, + process.item.RunTimeTicks, + ); } } diff --git a/translations/en.json b/translations/en.json index 25b97838..3c4271b1 100644 --- a/translations/en.json +++ b/translations/en.json @@ -108,7 +108,7 @@ "features_description": "Streamyfin has a bunch of features and integrates with a wide array of software, which you can find in the settings menu. These include:", "jellyseerr_feature_description": "Connect to your Seerr instance and request movies directly in the app.", "downloads_feature_title": "Downloads", - "downloads_feature_description": "Download movies and series to watch offline. Use either the default method or install the optimize server to download files in the background.", + "downloads_feature_description": "Download movies and series to watch offline.", "chromecast_feature_description": "Cast movies and series to your Chromecast devices.", "centralised_settings_plugin_title": "Centralised Settings plugin", "centralised_settings_plugin_description": "Configure settings from a centralised location on your Jellyfin server. All client settings for all users will be synced automatically.", @@ -320,7 +320,6 @@ "plugins": { "plugins_title": "Plugins", "jellyseerr": { - "jellyseerr_warning": "This integration is in its early stages. Expect things to change.", "server_url": "Server URL", "server_url_hint": "Example: http(s)://your-host.url\n(add port if required)", "server_url_placeholder": "Seerr URL", @@ -432,10 +431,6 @@ "4_hours": "4 hours", "24_hours": "24 hours" } - }, - "dashboard": { - "title": "Dashboard", - "sessions_title": "Sessions" } }, "sessions": { diff --git a/utils/bToMb.ts b/utils/bToMb.ts deleted file mode 100644 index 79b7caf4..00000000 --- a/utils/bToMb.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Convert bits to megabits or gigabits - * - * Return nice looking string - * If under 1000Mb, return XXXMB, else return X.XGB - */ - -export function convertBitsToMegabitsOrGigabits(bits?: number | null): string { - if (!bits) return "0MB"; - - const megabits = bits / 1000000; - - if (megabits < 1000) { - return `${Math.round(megabits)}MB`; - } - const gigabits = megabits / 1000; - return `${gigabits.toFixed(1)}GB`; -} diff --git a/utils/collectionTypeToItemType.ts b/utils/collectionTypeToItemType.ts deleted file mode 100644 index 0889b8d6..00000000 --- a/utils/collectionTypeToItemType.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { - BaseItemKind, - CollectionType, -} from "@jellyfin/sdk/lib/generated-client"; - -/** - * Converts a ColletionType to a BaseItemKind (also called ItemType) - * - * CollectionTypes - * readonly Unknown: "unknown"; - readonly Movies: "movies"; - readonly Tvshows: "tvshows"; - readonly Trailers: "trailers"; - readonly Homevideos: "homevideos"; - readonly Boxsets: "boxsets"; - readonly Books: "books"; - readonly Photos: "photos"; - readonly Livetv: "livetv"; - readonly Playlists: "playlists"; - readonly Folders: "folders"; - */ -export const colletionTypeToItemType = ( - collectionType?: CollectionType | null, -): BaseItemKind | undefined => { - if (!collectionType) return undefined; - - switch (collectionType) { - case CollectionType.Movies: - return BaseItemKind.Movie; - case CollectionType.Tvshows: - return BaseItemKind.Series; - case CollectionType.Homevideos: - return BaseItemKind.Video; - case CollectionType.Books: - return BaseItemKind.Book; - case CollectionType.Playlists: - return BaseItemKind.Playlist; - case CollectionType.Folders: - return BaseItemKind.Folder; - case CollectionType.Photos: - return BaseItemKind.Photo; - case CollectionType.Trailers: - return BaseItemKind.Trailer; - } - - return undefined; -}; diff --git a/utils/hls/parseM3U8ForSubtitles.ts b/utils/hls/parseM3U8ForSubtitles.ts deleted file mode 100644 index 5e0ad382..00000000 --- a/utils/hls/parseM3U8ForSubtitles.ts +++ /dev/null @@ -1,56 +0,0 @@ -import axios from "axios"; - -export interface SubtitleTrack { - index: number; - name: string; - uri: string; - language: string; - default: boolean; - forced: boolean; - autoSelect: boolean; -} - -export async function parseM3U8ForSubtitles( - url: string, -): Promise { - try { - const response = await axios.get(url, { responseType: "text" }); - const lines = response.data.split(/\r?\n/); - const subtitleTracks: SubtitleTrack[] = []; - let index = 0; - - lines.forEach((line: string) => { - if (line.startsWith("#EXT-X-MEDIA:TYPE=SUBTITLES")) { - const attributes = parseAttributes(line); - const track: SubtitleTrack = { - index: index++, - name: attributes.NAME || "", - uri: attributes.URI || "", - language: attributes.LANGUAGE || "", - default: attributes.DEFAULT === "YES", - forced: attributes.FORCED === "YES", - autoSelect: attributes.AUTOSELECT === "YES", - }; - subtitleTracks.push(track); - } - }); - - return subtitleTracks; - } catch (error) { - console.error("Failed to fetch or parse the M3U8 file:", error); - throw error; - } -} - -function parseAttributes(line: string): { [key: string]: string } { - const attributes: { [key: string]: string } = {}; - const regex = /([A-Z-]+)=(?:"([^"]*)"|([^,]*))/g; - - for (const match of line.matchAll(regex)) { - const key = match[1]; - const value = match[2] ?? match[3]; // quoted or unquoted - attributes[key] = value; - } - - return attributes; -} diff --git a/utils/jellyfin/session/capabilities.ts b/utils/jellyfin/session/capabilities.ts deleted file mode 100644 index 4e4f2074..00000000 --- a/utils/jellyfin/session/capabilities.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { Api } from "@jellyfin/sdk"; -import type { AxiosResponse } from "axios"; -import type { Settings } from "../../atoms/settings"; -import { generateDeviceProfile } from "../../profiles/native"; -import { getAuthHeaders } from "../jellyfin"; - -interface PostCapabilitiesParams { - api: Api | null | undefined; - itemId: string | null | undefined; - sessionId: string | null | undefined; - deviceProfile: Settings["deviceProfile"]; -} - -/** - * Marks a media item as not played for a specific user. - * - * @param params - The parameters for marking an item as not played - * @returns A promise that resolves to true if the operation was successful, false otherwise - */ -export const postCapabilities = async ({ - api, - itemId, - sessionId, -}: PostCapabilitiesParams): Promise => { - if (!api || !itemId || !sessionId) { - throw new Error("Missing parameters for marking item as not played"); - } - - try { - const d = api.axiosInstance.post( - `${api.basePath}/Sessions/Capabilities/Full`, - { - playableMediaTypes: ["Audio", "Video"], - supportedCommands: [ - "PlayState", - "Play", - "ToggleFullscreen", - "DisplayMessage", - "Mute", - "Unmute", - "SetVolume", - "ToggleMute", - ], - supportsMediaControl: true, - id: sessionId, - DeviceProfile: generateDeviceProfile(), - }, - { - headers: getAuthHeaders(api), - }, - ); - return d; - } catch (_error) { - throw new Error("Failed to mark as not played"); - } -}; diff --git a/utils/jellyfin/tvshows/nextUp.ts b/utils/jellyfin/tvshows/nextUp.ts deleted file mode 100644 index 414a47a7..00000000 --- a/utils/jellyfin/tvshows/nextUp.ts +++ /dev/null @@ -1,44 +0,0 @@ -import type { Api } from "@jellyfin/sdk"; -import type { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; -import { getAuthHeaders } from "../jellyfin"; - -interface NextUpParams { - itemId?: string | null; - userId?: string | null; - api?: Api | null; -} - -/** - * Fetches the next up episodes for a series or all series for a user. - * - * @param params - The parameters for fetching next up episodes - * @returns A promise that resolves to an array of BaseItemDto representing the next up episodes - */ -export const nextUp = async ({ - itemId, - userId, - api, -}: NextUpParams): Promise => { - if (!userId || !api) { - console.error("Invalid parameters for nextUp: missing userId or api"); - return []; - } - - try { - const response = await api.axiosInstance.get<{ Items: BaseItemDto[] }>( - `${api.basePath}/Shows/NextUp`, - { - params: { - SeriesId: itemId || undefined, - UserId: userId, - Fields: "MediaSourceCount", - }, - headers: getAuthHeaders(api), - }, - ); - - return response.data.Items; - } catch (_error) { - return []; - } -}; diff --git a/utils/jellyfin/user-library/getItemById.ts b/utils/jellyfin/user-library/getItemById.ts deleted file mode 100644 index 261733b6..00000000 --- a/utils/jellyfin/user-library/getItemById.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { Api } from "@jellyfin/sdk"; -import type { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; -import { getUserLibraryApi } from "@jellyfin/sdk/lib/utils/api"; - -/** - * Retrieves an item by its ID from the API. - * - * @param api - The Jellyfin API instance. - * @param itemId - The ID of the item to retrieve. - * @returns The item object or undefined if no item matches the ID. - */ -export const getItemById = async ( - api?: Api | null | undefined, - itemId?: string | null | undefined, -): Promise => { - if (!api || !itemId) { - return undefined; - } - - try { - const itemData = await getUserLibraryApi(api).getItem({ itemId }); - - const item = itemData.data; - if (!item) { - console.error("No items found with the specified ID:", itemId); - return undefined; - } - - return item; - } catch (error) { - console.error("Failed to retrieve the item:", error); - throw new Error(`Failed to retrieve the item due to an error: ${error}`); - } -}; diff --git a/utils/log.tsx b/utils/log.tsx index c633ec69..7dc1d53a 100644 --- a/utils/log.tsx +++ b/utils/log.tsx @@ -72,21 +72,6 @@ export const readFromLog = (): LogEntry[] => { return logs ? JSON.parse(logs) : []; }; -export const clearLogs = () => { - storage.remove("logs"); -}; - -export const dumpDownloadDiagnostics = (extra: any = {}) => { - const diagnostics = { - timestamp: new Date().toISOString(), - processes: extra?.processes || [], - nativeTasks: extra?.nativeTasks || [], - focusedProcess: extra?.focusedProcess || null, - }; - writeDebugLog("Download diagnostics", diagnostics); - return diagnostics; -}; - export function useLog() { const context = useContext(LogContext); if (context === null) { diff --git a/utils/secondsToTicks.ts b/utils/secondsToTicks.ts deleted file mode 100644 index df13813e..00000000 --- a/utils/secondsToTicks.ts +++ /dev/null @@ -1,5 +0,0 @@ -// seconds to ticks util - -export function secondsToTicks(seconds: number): number { - return seconds * 10000000; -} diff --git a/utils/secureCredentials.ts b/utils/secureCredentials.ts index bb5f7713..3aad1535 100644 --- a/utils/secureCredentials.ts +++ b/utils/secureCredentials.ts @@ -203,27 +203,6 @@ export async function hasAccountCredential( return stored !== null; } -/** - * Delete all credentials for all accounts on all servers. - */ -export async function clearAllCredentials(): Promise { - const previousServers = getPreviousServers(); - - for (const server of previousServers) { - for (const account of server.accounts) { - const key = credentialKey(server.address, account.userId); - await SecureStore.deleteItemAsync(key); - } - } - - // Clear all accounts from servers - const clearedServers = previousServers.map((server) => ({ - ...server, - accounts: [], - })); - storage.set("previousServers", JSON.stringify(clearedServers)); -} - /** * Add or update an account in a server's accounts list. */ From f00dad02babec59c93a24095751e4ca44ea83721 Mon Sep 17 00:00:00 2001 From: Gauvain Date: Mon, 15 Jun 2026 00:24:44 +0200 Subject: [PATCH 03/26] ci(issue-form): auto-populate version dropdown from GitHub releases (#1641) --- .github/ISSUE_TEMPLATE/issue_report.yml | 5 +- .github/workflows/update-issue-form.yml | 121 ++++++++++++++--------- scripts/update-issue-form.mjs | 122 ++++++++++++++++++++++++ 3 files changed, 204 insertions(+), 44 deletions(-) create mode 100644 scripts/update-issue-form.mjs diff --git a/.github/ISSUE_TEMPLATE/issue_report.yml b/.github/ISSUE_TEMPLATE/issue_report.yml index af86644d..365afca2 100644 --- a/.github/ISSUE_TEMPLATE/issue_report.yml +++ b/.github/ISSUE_TEMPLATE/issue_report.yml @@ -75,10 +75,13 @@ body: id: version attributes: label: Streamyfin Version - description: What version of Streamyfin are you using? + description: What version of Streamyfin are you running? On a TestFlight or development build, choose "TestFlight/Development build" and include the exact version string shown in the app's Settings. options: - 0.54.1 - 0.51.0 + - 0.47.1 + - 0.30.2 + - 0.28.0 - Older - TestFlight/Development build validations: diff --git a/.github/workflows/update-issue-form.yml b/.github/workflows/update-issue-form.yml index a23ecdf2..8b5af9c8 100644 --- a/.github/workflows/update-issue-form.yml +++ b/.github/workflows/update-issue-form.yml @@ -1,67 +1,102 @@ -name: ๐Ÿ› Update Bug Report Template +name: ๐Ÿ› Update Issue Form Versions on: release: - types: [published] # Run on every published release on any branch + # Only full releases populate the dropdown (no drafts/prereleases). + types: [released] + schedule: + - cron: "0 3 * * 1" # Weekly safety net (Mondays 03:00 UTC) in case a release event was missed + workflow_dispatch: +# Fixed group so a release event and the weekly cron can't race on the same +# ci/update-issue-form branch โ€” runs queue instead of force-pushing over each other. concurrency: - group: update-issue-form-${{ github.event.release.tag_name || github.run_id }} - cancel-in-progress: true + group: update-issue-form + cancel-in-progress: false + +permissions: + contents: read jobs: - update-bug-report: + update-issue-form: + name: ๐Ÿ”ข Populate version dropdown + runs-on: ubuntu-24.04 permissions: contents: write pull-requests: write - issues: write - runs-on: ubuntu-24.04 - steps: - name: ๐Ÿ“ฅ Checkout repository uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - - - name: "๐ŸŸข Setup Node.js" - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: '24.x' - cache: 'npm' + # On `release` events GITHUB_SHA is the tagged commit โ€” without this the + # script would regenerate the form from the tag's (stale) copy and the bot + # PR would revert any form edits made on develop since that release. + ref: develop - - name: ๐Ÿ” Extract minor version from app.json - id: minor - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # main + - name: ๐Ÿž Setup Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - result-encoding: string - script: | - const fs = require('fs-extra'); - const semver = require('semver'); - const content = fs.readJsonSync('./app.json'); - const version = content.expo.version; - const minorVersion = semver.minor(version); - return minorVersion.toString(); + bun-version: latest - - name: ๐Ÿ“ Update bug report version - uses: ShaMan123/gha-populate-form-version@be012141ca560dbb92156e3fe098c46035f6260d #v2.0.5 - with: - semver: '^0.${{ steps.minor.outputs.result }}.0' - dry_run: no-push + - name: ๐Ÿ”ข Populate version dropdown from GitHub releases + id: populate + run: bun scripts/update-issue-form.mjs + env: + GH_TOKEN: ${{ github.token }} + GITHUB_REPOSITORY: ${{ github.repository }} - - name: โš™๏ธ Update bug report node version dropdown - uses: ShaMan123/gha-populate-form-version@be012141ca560dbb92156e3fe098c46035f6260d #v2.0.5 - with: - dropdown: _node_version - package: node - semver: '>=24.0.0' - dry_run: no-push - - - name: ๐Ÿ“ฌ Commit and create pull request + - name: ๐Ÿ“ฌ Create pull request + id: cpr uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1 with: - add-paths: .github/ISSUE_TEMPLATE/bug_report.yml - branch: ci-update-bug-report + add-paths: .github/ISSUE_TEMPLATE/issue_report.yml + branch: ci/update-issue-form base: develop delete-branch: true labels: โš™๏ธ ci, ๐Ÿค– github-actions - title: 'chore(): Update bug report template to match release version' + commit-message: "chore: update issue form version dropdown" + title: "chore: update issue form version dropdown" + # Follows .github/pull_request_template.md so the bot PR isn't flagged by PR validation. body: | - Automated update to `.github/ISSUE_TEMPLATE/bug_report.yml` - Triggered by workflow run [${{ github.run_id }}](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) + # ๐Ÿ“ฆ Pull Request + + ## ๐Ÿ“ Description + + Automated update of the **Streamyfin Version** dropdown in `.github/ISSUE_TEMPLATE/issue_report.yml`, populated from the latest published GitHub releases by `scripts/update-issue-form.mjs`. + + **Version dropdown now lists:** ${{ steps.populate.outputs.versions }} + + Triggered by `${{ github.event_name }}`${{ github.event.release.tag_name && format(' โ€” release {0}', github.event.release.tag_name) || '' }} ยท [run ${{ github.run_id }}](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}). + + ## ๐Ÿท๏ธ Ticket / Issue + + N/A โ€” automated maintenance. + + ### ๐Ÿ–ผ๏ธ Screenshots / GIFs (if UI) + + N/A โ€” issue-template metadata only, no app UI. + + ## โœ… Checklist + + - [x] Iโ€™ve read the [contribution guidelines](CONTRIBUTING.md) + - [x] Verified that changes behave as expected for all platforms + - [x] Code passes lint/formatting and type checks (`tsc`/`biome`) + - [x] No secrets, hardcoded credentials, or private config files are included + - [x] I've declared if AI was used to assist with this PR (by uncommenting the line at the bottom, or not) + + ## ๐Ÿ” Testing Instructions + + N/A โ€” generated by CI from published releases; review the dropdown diff in `issue_report.yml`. + + - name: ๐Ÿ”€ Enable auto-merge + if: steps.cpr.outputs.pull-request-operation == 'created' + env: + GH_TOKEN: ${{ github.token }} + # Known limitation: PRs created with GITHUB_TOKEN don't trigger CI workflows + # (GitHub anti-recursion), so the required checks stay "Expected" until a + # maintainer kicks them (close/reopen the PR, or push an empty commit). + # Auto-merge is still worth enabling: once checks run and reviews land, + # the PR merges itself. + run: | + gh pr merge --squash --auto "${{ steps.cpr.outputs.pull-request-number }}" \ + || echo "::warning::Could not enable auto-merge โ€” enable 'Allow auto-merge' in repo settings (and branch protection); merge the PR manually for now." diff --git a/scripts/update-issue-form.mjs b/scripts/update-issue-form.mjs new file mode 100644 index 00000000..d7bc8192 --- /dev/null +++ b/scripts/update-issue-form.mjs @@ -0,0 +1,122 @@ +#!/usr/bin/env bun +/** + * Populates the "Streamyfin Version" dropdown in the issue report form with the + * latest GitHub releases. Run by the "Update Issue Form Versions" workflow on + * release events + a weekly cron (and manually via workflow_dispatch). + * + * Source: published, non-draft, non-prerelease GitHub releases, newest first. + * Non-version sentinels (e.g. "older", "TestFlight/Development build") are + * preserved at the end of the list. + * + * Usage: + * bun scripts/update-issue-form.mjs # rewrite the form in place + * ISSUE_FORM_LIMIT=8 bun scripts/update-issue-form.mjs + * bun scripts/update-issue-form.mjs --dry-run # print the new options, don't write + * + * Env: GITHUB_REPOSITORY (owner/repo), GH_TOKEN/GITHUB_TOKEN (for gh, provided in CI). + */ + +import { execFileSync } from "node:child_process"; +import { + appendFileSync, + readFileSync as read, + writeFileSync as write, +} from "node:fs"; + +const FORM = ".github/ISSUE_TEMPLATE/issue_report.yml"; +const DROPDOWN_ID = "version"; // the `id:` of the dropdown to populate +const parsedLimit = Number.parseInt(process.env.ISSUE_FORM_LIMIT ?? "", 10); +const LIMIT = + Number.isInteger(parsedLimit) && parsedLimit > 0 ? parsedLimit : 5; +const REPO = process.env.GITHUB_REPOSITORY || "streamyfin/streamyfin"; +const DRY = process.argv.includes("--dry-run"); + +// Matches "0.54.1" and prerelease/beta tags like "0.54.0-beta.1". +const isVersion = (s) => /^\d+\.\d+/.test(s.trim()); + +// 1. Fetch the latest published releases (newest first) โ€” drafts and prereleases +// aren't a full release users run, so they don't belong in the dropdown. +const raw = execFileSync( + "gh", + [ + "release", + "list", + "--repo", + REPO, + "--exclude-drafts", + "--exclude-pre-releases", + "--limit", + String(LIMIT), + "--json", + "tagName", + "--jq", + ".[].tagName", + ], + // Bounded timeout so a stuck gh process fails the job fast instead of + // holding the workflow open until the job-level timeout. + { encoding: "utf8", timeout: 30_000 }, +); +const seen = new Set(); +const versions = []; +for (const tag of raw.split("\n")) { + if (!tag) continue; + const ver = tag.trim().replace(/^v/, ""); + if (!isVersion(ver) || seen.has(ver)) continue; + seen.add(ver); + versions.push(ver); +} + +if (!versions.length) { + console.error("No release versions found โ€” leaving the form untouched."); + process.exit(1); +} + +// 2. rewrite the dropdown options, preserving non-version sentinels +// (e.g. "older", "TestFlight/Development build") at the end of the list. +const lines = read(FORM, "utf8").split("\n"); +const idIdx = lines.findIndex((l) => + l.match(new RegExp(`^\\s*id:\\s*${DROPDOWN_ID}\\s*$`)), +); +if (idIdx === -1) + throw new Error(`dropdown id: ${DROPDOWN_ID} not found in ${FORM}`); +const optIdx = lines.findIndex( + (l, i) => i > idIdx && /^\s*options:\s*$/.test(l), +); +if (optIdx === -1) + throw new Error(`options: not found after id: ${DROPDOWN_ID}`); + +const itemIndent = lines[optIdx].match(/^\s*/)[0] + " "; // options items are nested one level deeper +let end = optIdx + 1; +const sentinels = []; +while (end < lines.length && /^\s*-\s+/.test(lines[end])) { + const val = lines[end].replace(/^\s*-\s+/, ""); + if (!isVersion(val)) sentinels.push(val); + end++; +} + +const newOptions = [...versions, ...sentinels].map( + (v) => `${itemIndent}- ${v}`, +); +const updated = [ + ...lines.slice(0, optIdx + 1), + ...newOptions, + ...lines.slice(end), +].join("\n"); + +console.log( + `Versions: ${versions.join(", ")}${sentinels.length ? ` | kept: ${sentinels.join(", ")}` : ""}`, +); +if (DRY) { + console.log("--dry-run: not writing."); +} else { + write(FORM, updated); + console.log(`Updated ${FORM}.`); +} + +// Expose the resulting list for the workflow (PR description). +if (process.env.GITHUB_OUTPUT) { + appendFileSync( + process.env.GITHUB_OUTPUT, + `versions=${versions.join(", ")}\n`, + ); +} From 149e3b1b1789f8807b8ece2b986fd29ef0f174ed Mon Sep 17 00:00:00 2001 From: Gauvain Date: Mon, 15 Jun 2026 01:01:38 +0200 Subject: [PATCH 04/26] fix(hooks): correct useMemo dependency arrays (#1626) --- components/TrackSheet.tsx | 2 +- components/library/LibraryItemCard.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/TrackSheet.tsx b/components/TrackSheet.tsx index 57e4a029..52735f6f 100644 --- a/components/TrackSheet.tsx +++ b/components/TrackSheet.tsx @@ -26,7 +26,7 @@ export const TrackSheet: React.FC = ({ const streams = useMemo( () => source?.MediaStreams?.filter((x) => x.Type === streamType), - [source], + [source, streamType], ); const selectedSteam = useMemo( diff --git a/components/library/LibraryItemCard.tsx b/components/library/LibraryItemCard.tsx index 09de500d..c84364ce 100644 --- a/components/library/LibraryItemCard.tsx +++ b/components/library/LibraryItemCard.tsx @@ -51,7 +51,7 @@ export const LibraryItemCard: React.FC = ({ library, ...props }) => { api, item: library, }), - [library], + [api, library], ); const itemType = useMemo(() => { From 7a6daa011d33ca2919e1901032eb753175629725 Mon Sep 17 00:00:00 2001 From: Gauvain Date: Mon, 15 Jun 2026 20:32:53 +0200 Subject: [PATCH 05/26] ci(build): drop free-disk-space apt-get warning + surface unsigned tvOS in artifact comment (#1732) --- .github/workflows/artifact-comment.yml | 9 +++++---- .github/workflows/build-apps.yml | 10 ++++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/workflows/artifact-comment.yml b/.github/workflows/artifact-comment.yml index 8c7d5331..72c7ff77 100644 --- a/.github/workflows/artifact-comment.yml +++ b/.github/workflows/artifact-comment.yml @@ -387,11 +387,12 @@ jobs: let status = 'โณ Pending'; let downloadLink = '*Waiting for build...*'; - // tvOS builds are temporarily disabled until feat/tv-interface - // is merged - show them as disabled instead of stuck pending. - if (target.name === 'tvOS' || target.name === 'tvOS Unsigned') { + // Signed tvOS stays disabled until EAS has tvOS provisioning + // profiles (app + TopShelf targets); non-interactive builds can't + // create them. Unsigned tvOS builds, so it flows through normally. + if (target.name === 'tvOS') { status = '๐Ÿ’ค Disabled'; - downloadLink = '*Disabled until feat/tv-interface is merged*'; + downloadLink = '*Disabled โ€” signed tvOS needs EAS provisioning profiles*'; } else if (matchingStatus) { if (matchingStatus.conclusion === 'success' && matchingArtifact) { status = 'โœ… Complete'; diff --git a/.github/workflows/build-apps.yml b/.github/workflows/build-apps.yml index c3fee61b..0a27bac1 100644 --- a/.github/workflows/build-apps.yml +++ b/.github/workflows/build-apps.yml @@ -37,7 +37,7 @@ jobs: android: false dotnet: true haskell: true - large-packages: true + large-packages: false docker-images: true swap-storage: false @@ -120,7 +120,7 @@ jobs: android: false dotnet: true haskell: true - large-packages: true + large-packages: false docker-images: true swap-storage: false @@ -313,8 +313,10 @@ jobs: retention-days: 7 build-ios-tv: - # Temporarily disabled until feat/tv-interface is merged (TV UI not ready). - # Re-enable by removing the `false &&` prefix below. + # Disabled: EAS has no provisioning profiles / distribution cert for the tvOS + # targets (app + StreamyfinTopShelf extension), so non-interactive signed + # builds fail. Set up tvOS credentials in EAS (`eas credentials`), then remove + # the `false &&` prefix below. Unsigned tvOS builds run (see job below). if: false && (!contains(github.event.head_commit.message, '[skip ci]') && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == 'streamyfin/streamyfin')) runs-on: macos-26 name: ๐ŸŽ Build tvOS IPA From 434cb3bd39c910dc64614324175a0bc8bb665d59 Mon Sep 17 00:00:00 2001 From: Gauvain Date: Tue, 16 Jun 2026 17:12:32 +0200 Subject: [PATCH 06/26] ci: ARM Android runners, slimmer APK artifacts, Renovate-pinned tool versions (#1733) --- .github/renovate.json | 10 ++- .github/workflows/artifact-comment.yml | 16 ++++- .github/workflows/build-apps.yml | 93 ++++++++++++++++--------- .github/workflows/check-lockfile.yml | 9 ++- .github/workflows/ci-codeql.yml | 5 +- .github/workflows/conflict.yml | 2 +- .github/workflows/crowdin.yml | 2 +- .github/workflows/detect-duplicate.yml | 5 +- .github/workflows/linting.yml | 21 +++--- .github/workflows/notification.yml | 4 +- .github/workflows/release.yml | 14 ++-- .github/workflows/trivy-scan.yml | 18 ++--- .github/workflows/update-issue-form.yml | 5 +- eas.json | 8 +-- scripts/ios/build-ios.ts | 6 +- 15 files changed, 135 insertions(+), 83 deletions(-) diff --git a/.github/renovate.json b/.github/renovate.json index 45c62042..21c5b931 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -30,9 +30,17 @@ "customType": "regex", "managerFilePatterns": ["/\\.ya?ml$/"], "matchStrings": [ - "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: versioning=(?\\S+))?\\s+xcode-version:\\s*[\"']?(?[^\"'\\s]+)" + "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: versioning=(?\\S+))?\\s+[A-Za-z0-9._-]+:\\s*[\"']?(?[^\"'\\s]+)" ], "versioningTemplate": "{{#if versioning}}{{{versioning}}}{{else}}loose{{/if}}" + }, + { + "customType": "regex", + "description": "Track the Bun version pinned in eas.json build profiles (strict JSON can't hold inline annotations)", + "managerFilePatterns": ["/(^|/)eas\\.json$/"], + "matchStrings": ["\"bun\"\\s*:\\s*\"(?[^\"]+)\""], + "datasourceTemplate": "npm", + "depNameTemplate": "bun" } ], "customDatasources": { diff --git a/.github/workflows/artifact-comment.yml b/.github/workflows/artifact-comment.yml index 72c7ff77..b81eeeaf 100644 --- a/.github/workflows/artifact-comment.yml +++ b/.github/workflows/artifact-comment.yml @@ -18,7 +18,7 @@ jobs: comment-artifacts: if: github.event_name == 'workflow_dispatch' || github.event_name == 'pull_request' || (github.event_name == 'workflow_run' && github.event.workflow_run.event == 'pull_request') name: ๐Ÿ“ฆ Post Build Artifacts - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 permissions: contents: read pull-requests: write @@ -451,6 +451,20 @@ jobs: commentBody += `- **Android APK**: Download and install directly on your device (enable "Install from unknown sources")\n`; commentBody += `- **iOS IPA**: Install using [AltStore](https://altstore.io/), [Sideloadly](https://sideloadly.io/), or Xcode\n\n`; commentBody += `> โš ๏ธ **Note**: Artifacts expire in 7 days from build date\n\n`; + + // Collapsible rundown of the build optimisations + what each + // artifact actually installs on, so testers grab the right file. + commentBody += `
\n`; + commentBody += `๐Ÿ“ฆ Build details & device compatibility\n\n`; + commentBody += `These CI builds are trimmed for size and speed. What that means for installing them:\n\n`; + commentBody += `| Artifact | Architectures | Installs on |\n`; + commentBody += `|---|---|---|\n`; + commentBody += `| ๐Ÿค– Android Phone APK | \`arm64-v8a\` | Every 64-bit Android phone (all since ~2017). **Not** an x86_64 emulator or a 32-bit device. |\n`; + commentBody += `| ๐Ÿ“บ Android TV APK | \`arm64-v8a\` + \`armeabi-v7a\` | Modern boxes **and** older / cheap 32-bit Android TV sticks. No x86_64. |\n`; + commentBody += `| ๐ŸŽ iOS / tvOS IPA | \`arm64\` | iPhone / Apple TV (all current devices). |\n\n`; + commentBody += `**Why no x86_64?** That slice only runs on Android emulators / Chromebooks, never a real phone or TV box โ€” dropping it shrinks the APK and speeds up the build. Local \`bun run android\` is unaffected (it still builds x86_64 from \`app.json\`).\n\n`; + commentBody += `**Runners:** Android on \`ubuntu-26.04\`; iOS / tvOS on Apple Silicon (\`macos-26\`). The size/speed win comes from the ABI trim above, not the runner.\n`; + commentBody += `
\n\n`; } else { commentBody += `โณ **Builds are starting up...** This comment will update automatically as each build completes.\n\n`; } diff --git a/.github/workflows/build-apps.yml b/.github/workflows/build-apps.yml index 0a27bac1..38f1dd23 100644 --- a/.github/workflows/build-apps.yml +++ b/.github/workflows/build-apps.yml @@ -23,7 +23,7 @@ env: jobs: build-android-phone: if: (!contains(github.event.head_commit.message, '[skip ci]')) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 name: ๐Ÿค– Build Android APK (Phone) permissions: contents: read @@ -52,31 +52,40 @@ jobs: - name: ๐Ÿž Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: latest + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: ๐Ÿ’พ Cache Bun dependencies uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ~/.bun/install/cache - key: ${{ runner.os }}-${{ runner.arch }}-bun-develop-${{ hashFiles('bun.lock') }} + key: ${{ runner.os }}-${{ runner.arch }}-bun-${{ hashFiles('bun.lock') }} restore-keys: | - ${{ runner.os }}-${{ runner.arch }}-bun-develop - ${{ runner.os }}-bun-develop + ${{ runner.os }}-${{ runner.arch }}-bun- - name: ๐Ÿ“ฆ Install dependencies and reload submodules run: | bun install --frozen-lockfile bun run submodule-reload + - name: โ˜• Set up JDK 17 + # ubuntu-26.04 defaults to JDK 25, which breaks the RN/AGP native build + # (Kotlin falls back to JVM_23, the foojay toolchain + CMake configure + # fail). Pin Temurin 17 for a deterministic Android build. + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 + with: + distribution: temurin + java-version: "17" + - name: ๐Ÿ’พ Cache Gradle global uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: | - ~/.gradle/caches + ~/.gradle/caches/modules-2 ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + key: ${{ runner.os }}-${{ runner.arch }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | - ${{ runner.os }}-gradle- + ${{ runner.os }}-${{ runner.arch }}-gradle- - name: ๐Ÿ› ๏ธ Generate project files run: bun run prebuild @@ -85,12 +94,16 @@ jobs: uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: android/.gradle - key: ${{ runner.os }}-android-gradle-develop-${{ hashFiles('android/**/build.gradle', 'android/gradle/wrapper/gradle-wrapper.properties') }} - restore-keys: ${{ runner.os }}-android-gradle-develop + key: ${{ runner.os }}-${{ runner.arch }}-android-gradle-develop-${{ hashFiles('android/**/build.gradle', 'android/gradle/wrapper/gradle-wrapper.properties') }} + restore-keys: ${{ runner.os }}-${{ runner.arch }}-android-gradle-develop - name: ๐Ÿš€ Build APK env: EXPO_TV: 0 + # CI artifact ships arm64 only (phones; emulators/Chromebooks not a + # sideload target). Overrides app.json buildArchs for this build only, + # so local `bun run android` (x86_64 emulator) is unaffected. + ORG_GRADLE_PROJECT_reactNativeArchitectures: arm64-v8a run: bun run build:android:local - name: ๐Ÿ“… Set date tag @@ -106,7 +119,7 @@ jobs: build-android-tv: if: (!contains(github.event.head_commit.message, '[skip ci]')) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 name: ๐Ÿค– Build Android APK (TV) permissions: contents: read @@ -135,31 +148,40 @@ jobs: - name: ๐Ÿž Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: latest + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: ๐Ÿ’พ Cache Bun dependencies uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ~/.bun/install/cache - key: ${{ runner.os }}-${{ runner.arch }}-bun-develop-${{ hashFiles('bun.lock') }} + key: ${{ runner.os }}-${{ runner.arch }}-bun-${{ hashFiles('bun.lock') }} restore-keys: | - ${{ runner.os }}-${{ runner.arch }}-bun-develop - ${{ runner.os }}-bun-develop + ${{ runner.os }}-${{ runner.arch }}-bun- - name: ๐Ÿ“ฆ Install dependencies and reload submodules run: | bun install --frozen-lockfile bun run submodule-reload + - name: โ˜• Set up JDK 17 + # ubuntu-26.04 defaults to JDK 25, which breaks the RN/AGP native build + # (Kotlin falls back to JVM_23, the foojay toolchain + CMake configure + # fail). Pin Temurin 17 for a deterministic Android build. + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 + with: + distribution: temurin + java-version: "17" + - name: ๐Ÿ’พ Cache Gradle global uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: | - ~/.gradle/caches + ~/.gradle/caches/modules-2 ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + key: ${{ runner.os }}-${{ runner.arch }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | - ${{ runner.os }}-gradle- + ${{ runner.os }}-${{ runner.arch }}-gradle- - name: ๐Ÿ› ๏ธ Generate project files run: bun run prebuild:tv @@ -168,12 +190,15 @@ jobs: uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: android/.gradle - key: ${{ runner.os }}-android-gradle-develop-${{ hashFiles('android/**/build.gradle', 'android/gradle/wrapper/gradle-wrapper.properties') }} - restore-keys: ${{ runner.os }}-android-gradle-develop + key: ${{ runner.os }}-${{ runner.arch }}-android-gradle-develop-${{ hashFiles('android/**/build.gradle', 'android/gradle/wrapper/gradle-wrapper.properties') }} + restore-keys: ${{ runner.os }}-${{ runner.arch }}-android-gradle-develop - name: ๐Ÿš€ Build APK env: EXPO_TV: 1 + # TV artifact keeps armeabi-v7a too: many older/cheap Android TV boxes + # and sticks are still 32-bit ARM. Drops only x86_64. CI build only. + ORG_GRADLE_PROJECT_reactNativeArchitectures: arm64-v8a,armeabi-v7a run: bun run build:android:local - name: ๐Ÿ“… Set date tag @@ -206,15 +231,16 @@ jobs: - name: ๐Ÿž Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: latest + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: ๐Ÿ’พ Cache Bun dependencies uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ~/.bun/install/cache - key: ${{ runner.os }}-bun-cache-${{ hashFiles('bun.lock') }} + key: ${{ runner.os }}-${{ runner.arch }}-bun-${{ hashFiles('bun.lock') }} restore-keys: | - ${{ runner.os }}-bun-cache + ${{ runner.os }}-${{ runner.arch }}-bun- - name: ๐Ÿ“ฆ Install dependencies and reload submodules run: | @@ -273,15 +299,16 @@ jobs: - name: ๐Ÿž Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: latest + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: ๐Ÿ’พ Cache Bun dependencies uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ~/.bun/install/cache - key: ${{ runner.os }}-bun-cache-${{ hashFiles('bun.lock') }} + key: ${{ runner.os }}-${{ runner.arch }}-bun-${{ hashFiles('bun.lock') }} restore-keys: | - ${{ runner.os }}-bun-cache + ${{ runner.os }}-${{ runner.arch }}-bun- - name: ๐Ÿ“ฆ Install dependencies and reload submodules run: | @@ -335,15 +362,16 @@ jobs: - name: ๐Ÿž Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: latest + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: ๐Ÿ’พ Cache Bun dependencies uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ~/.bun/install/cache - key: ${{ runner.os }}-bun-cache-${{ hashFiles('bun.lock') }} + key: ${{ runner.os }}-${{ runner.arch }}-bun-${{ hashFiles('bun.lock') }} restore-keys: | - ${{ runner.os }}-bun-cache + ${{ runner.os }}-${{ runner.arch }}-bun- - name: ๐Ÿ“ฆ Install dependencies and reload submodules run: | @@ -403,15 +431,16 @@ jobs: - name: ๐Ÿž Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: latest + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: ๐Ÿ’พ Cache Bun dependencies uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ~/.bun/install/cache - key: ${{ runner.os }}-bun-cache-${{ hashFiles('bun.lock') }} + key: ${{ runner.os }}-${{ runner.arch }}-bun-${{ hashFiles('bun.lock') }} restore-keys: | - ${{ runner.os }}-bun-cache + ${{ runner.os }}-${{ runner.arch }}-bun- - name: ๐Ÿ“ฆ Install dependencies and reload submodules run: | diff --git a/.github/workflows/check-lockfile.yml b/.github/workflows/check-lockfile.yml index 0cb8afc3..efb5f221 100644 --- a/.github/workflows/check-lockfile.yml +++ b/.github/workflows/check-lockfile.yml @@ -13,7 +13,7 @@ concurrency: jobs: check-lockfile: name: ๐Ÿ” Check bun.lock and package.json consistency - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: contents: read @@ -29,14 +29,17 @@ jobs: - name: ๐Ÿž Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: latest + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: ๐Ÿ’พ Cache Bun dependencies uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: | ~/.bun/install/cache - key: ${{ runner.os }}-bun-${{ hashFiles('bun.lock') }} + key: ${{ runner.os }}-${{ runner.arch }}-bun-${{ hashFiles('bun.lock') }} + restore-keys: | + ${{ runner.os }}-${{ runner.arch }}-bun- - name: ๐Ÿ›ก๏ธ Verify lockfile consistency run: | diff --git a/.github/workflows/ci-codeql.yml b/.github/workflows/ci-codeql.yml index f79cf58a..b77665f5 100644 --- a/.github/workflows/ci-codeql.yml +++ b/.github/workflows/ci-codeql.yml @@ -8,11 +8,14 @@ on: schedule: - cron: '24 2 * * *' +concurrency: + group: codeql-${{ github.ref }} + cancel-in-progress: true jobs: analyze: name: ๐Ÿ”Ž Analyze with CodeQL - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: contents: read security-events: write diff --git a/.github/workflows/conflict.yml b/.github/workflows/conflict.yml index de854ab6..125ad771 100644 --- a/.github/workflows/conflict.yml +++ b/.github/workflows/conflict.yml @@ -10,7 +10,7 @@ on: jobs: label: name: ๐Ÿท๏ธ Labeling Merge Conflicts - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 if: ${{ github.repository == 'streamyfin/streamyfin' }} permissions: contents: read diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index b0ea48a2..d3792502 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -19,7 +19,7 @@ permissions: jobs: sync-translations: - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 steps: - name: ๐Ÿ“ฅ Checkout Repository diff --git a/.github/workflows/detect-duplicate.yml b/.github/workflows/detect-duplicate.yml index 265f9efe..26da4f57 100644 --- a/.github/workflows/detect-duplicate.yml +++ b/.github/workflows/detect-duplicate.yml @@ -15,7 +15,7 @@ jobs: detect: name: ๐Ÿ” Find similar issues if: github.actor != 'github-actions[bot]' - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: issues: write contents: read @@ -26,7 +26,8 @@ jobs: - name: ๐Ÿž Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: latest + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: ๐Ÿ” Detect duplicate issues run: bun scripts/detect-duplicate-issue.mjs diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 8edb8916..d36da31f 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -15,7 +15,7 @@ jobs: validate_pr_title: name: "๐Ÿ“ Validate PR Title" if: github.event_name == 'pull_request' - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: pull-requests: write contents: read @@ -46,7 +46,7 @@ jobs: dependency-review: name: ๐Ÿ” Vulnerable Dependencies - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: contents: read steps: @@ -65,8 +65,7 @@ jobs: expo-doctor: name: ๐Ÿš‘ Expo Doctor Check - if: false - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - name: ๐Ÿ›’ Checkout repository uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 @@ -78,17 +77,21 @@ jobs: - name: ๐Ÿž Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: latest + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: ๐Ÿ“ฆ Install dependencies (bun) run: bun install --frozen-lockfile - name: ๐Ÿš‘ Run Expo Doctor + # Re-enabled but non-blocking: surfaces doctor warnings in the logs + # without failing the gate (some checks are known-noisy for this setup). + continue-on-error: true run: bun expo-doctor code_quality: name: "๐Ÿ” Lint & Test (${{ matrix.command }})" - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 strategy: fail-fast: false matrix: @@ -110,12 +113,14 @@ jobs: - name: "๐ŸŸข Setup Node.js" uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: '24.x' + # renovate: datasource=node-version depName=node versioning=node + node-version: "24.16.0" - name: "๐Ÿž Setup Bun" uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: latest + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: "๐Ÿ“ฆ Install dependencies" run: bun install --frozen-lockfile diff --git a/.github/workflows/notification.yml b/.github/workflows/notification.yml index cf0e4624..df9e4fa5 100644 --- a/.github/workflows/notification.yml +++ b/.github/workflows/notification.yml @@ -12,7 +12,7 @@ on: jobs: notify: - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 if: github.event_name == 'pull_request' steps: - name: ๐Ÿ›Ž๏ธ Notify Discord @@ -29,7 +29,7 @@ jobs: ๐Ÿ”— ${{ github.event.pull_request.html_url }} notify-on-failure: - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 if: github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'failure' steps: - name: ๐Ÿšจ Notify Discord on Failure diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c06e8b34..454f8645 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,8 +22,9 @@ on: jobs: approve: name: ๐Ÿ” Approve release - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 environment: production + permissions: {} steps: - name: โœ… Release approved run: echo "Release approved for ${{ github.sha }}" @@ -31,7 +32,7 @@ jobs: build: name: ๐Ÿš€ ${{ matrix.name }} needs: approve - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: contents: read strategy: @@ -72,15 +73,16 @@ jobs: - name: ๐Ÿž Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: latest + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: ๐Ÿ’พ Cache Bun dependencies uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ~/.bun/install/cache - key: ${{ runner.os }}-bun-cache-${{ hashFiles('bun.lock') }} + key: ${{ runner.os }}-${{ runner.arch }}-bun-${{ hashFiles('bun.lock') }} restore-keys: | - ${{ runner.os }}-bun-cache + ${{ runner.os }}-${{ runner.arch }}-bun- - name: ๐Ÿ“ฆ Install dependencies and reload submodules run: | @@ -176,7 +178,7 @@ jobs: name: ๐Ÿ“ฆ Draft GitHub Release needs: build if: ${{ !cancelled() }} - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: contents: write actions: read # required for `gh run download` to list/fetch this run's artifacts diff --git a/.github/workflows/trivy-scan.yml b/.github/workflows/trivy-scan.yml index 4972e14f..2f02dcfc 100644 --- a/.github/workflows/trivy-scan.yml +++ b/.github/workflows/trivy-scan.yml @@ -21,7 +21,7 @@ concurrency: jobs: trivy: name: ๐Ÿ”Ž Filesystem scan - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: contents: read security-events: write # upload SARIF to code scanning @@ -29,19 +29,9 @@ jobs: - name: ๐Ÿ“ฅ Checkout repository uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - # Rotate the DB cache weekly (matches the scheduled scan): cache hits within the week - # instead of a fresh immutable entry per run, still refreshing the DB every week. - - name: ๐Ÿ—“๏ธ Compute weekly Trivy cache key - id: trivy-cache-key - run: echo "value=trivy-db-${{ runner.os }}-$(date -u +%G-%V)" >> "$GITHUB_OUTPUT" - - - name: ๐Ÿ’พ Cache Trivy vulnerability DB - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 - with: - path: ~/.cache/trivy - key: ${{ steps.trivy-cache-key.outputs.value }} - restore-keys: trivy-db-${{ runner.os }}- - + # Trivy's own action caches the vulnerability DB + binary internally + # (cache-trivy-* / trivy-binary-* entries), so no manual ~/.cache/trivy + # step is needed โ€” it only duplicated the cache. - name: ๐Ÿ”Ž Run Trivy filesystem scan uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0 with: diff --git a/.github/workflows/update-issue-form.yml b/.github/workflows/update-issue-form.yml index 8b5af9c8..0754735e 100644 --- a/.github/workflows/update-issue-form.yml +++ b/.github/workflows/update-issue-form.yml @@ -20,7 +20,7 @@ permissions: jobs: update-issue-form: name: ๐Ÿ”ข Populate version dropdown - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: contents: write pull-requests: write @@ -36,7 +36,8 @@ jobs: - name: ๐Ÿž Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: latest + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: ๐Ÿ”ข Populate version dropdown from GitHub releases id: populate diff --git a/eas.json b/eas.json index f4099eda..23e28e82 100644 --- a/eas.json +++ b/eas.json @@ -52,7 +52,7 @@ } }, "production": { - "bun": "1.3.5", + "bun": "1.3.14", "environment": "production", "autoIncrement": true, "android": { @@ -64,7 +64,7 @@ } }, "production-apk": { - "bun": "1.3.5", + "bun": "1.3.14", "environment": "production", "autoIncrement": true, "android": { @@ -74,7 +74,7 @@ } }, "production-apk-tv": { - "bun": "1.3.5", + "bun": "1.3.14", "environment": "production", "autoIncrement": true, "android": { @@ -87,7 +87,7 @@ } }, "production_tv": { - "bun": "1.3.5", + "bun": "1.3.14", "environment": "production", "autoIncrement": true, "env": { diff --git a/scripts/ios/build-ios.ts b/scripts/ios/build-ios.ts index 33110507..f5592ae3 100644 --- a/scripts/ios/build-ios.ts +++ b/scripts/ios/build-ios.ts @@ -302,7 +302,7 @@ function parseArgs(argv: string[]): BuildOptions { if (!configArg) { throw new Error("--configuration requires an argument"); } - options.configuration = (configArg as "Debug" | "Release") || "Debug"; + options.configuration = configArg as "Debug" | "Release"; break; } case "--device": @@ -997,10 +997,6 @@ async function waitForSimulatorBoot( } } catch { // Simulator not found or not booted yet, continue polling - if (pollIntervalMs > 1000) { - // Only log if we've been waiting a while to avoid spam - // console.warn("Simulator polling failed, retrying..."); - } } // Wait before next poll From 335f1efb2cf48ca51db619a1676af8378f012ce5 Mon Sep 17 00:00:00 2001 From: Gauvain Date: Tue, 16 Jun 2026 20:28:02 +0200 Subject: [PATCH 07/26] chore(deps): upgrade TypeScript to 6.0.3 and align Expo SDK 56 packages (#1719) --- app.json | 3 + bun.lock | 139 +++++++++++++++++++------------------------ package.json | 40 +++++++------ scripts/typecheck.js | 11 +++- tsconfig.json | 2 + 5 files changed, 98 insertions(+), 97 deletions(-) diff --git a/app.json b/app.json index 296d674d..e7095490 100644 --- a/app.json +++ b/app.json @@ -107,6 +107,9 @@ ], "expo-localization", "expo-asset", + "expo-audio", + "expo-image", + "expo-sharing", [ "react-native-edge-to-edge", { diff --git a/bun.lock b/bun.lock index 97ba4fa2..e9482718 100644 --- a/bun.lock +++ b/bun.lock @@ -7,9 +7,9 @@ "dependencies": { "@bottom-tabs/react-navigation": "1.2.0", "@douglowder/expo-av-route-picker-view": "^0.0.5", - "@expo/metro-runtime": "~56.0.13", + "@expo/metro-runtime": "~56.0.15", "@expo/react-native-action-sheet": "^4.1.1", - "@expo/ui": "~56.0.14", + "@expo/ui": "~56.0.17", "@expo/vector-icons": "^15.0.3", "@gorhom/bottom-sheet": "5.2.14", "@jellyfin/sdk": "^0.13.0", @@ -22,35 +22,35 @@ "@tanstack/react-query": "5.100.14", "@tanstack/react-query-persist-client": "^5.100.14", "axios": "^1.7.9", - "expo": "~56.0.6", + "expo": "~56.0.11", "expo-application": "~56.0.3", - "expo-asset": "~56.0.15", - "expo-audio": "~56.0.11", - "expo-background-task": "~56.0.15", + "expo-asset": "~56.0.17", + "expo-audio": "~56.0.12", + "expo-background-task": "~56.0.18", "expo-blur": "~56.0.3", "expo-brightness": "~56.0.5", - "expo-build-properties": "~56.0.15", - "expo-camera": "~56.0.7", - "expo-constants": "~56.0.16", + "expo-build-properties": "~56.0.18", + "expo-camera": "~56.0.8", + "expo-constants": "~56.0.18", "expo-crypto": "~56.0.4", - "expo-dev-client": "~56.0.16", + "expo-dev-client": "~56.0.20", "expo-device": "~56.0.4", - "expo-font": "~56.0.5", + "expo-font": "~56.0.6", "expo-haptics": "~56.0.3", - "expo-image": "~56.0.9", + "expo-image": "~56.0.11", "expo-linear-gradient": "~56.0.4", - "expo-linking": "~56.0.12", + "expo-linking": "~56.0.14", "expo-localization": "~56.0.6", - "expo-location": "~56.0.14", - "expo-notifications": "~56.0.14", - "expo-router": "~56.2.7", + "expo-location": "~56.0.17", + "expo-notifications": "~56.0.17", + "expo-router": "~56.2.10", "expo-screen-orientation": "~56.0.5", "expo-secure-store": "~56.0.4", - "expo-sharing": "~56.0.14", + "expo-sharing": "~56.0.17", "expo-splash-screen": "~56.0.10", "expo-status-bar": "~56.0.4", "expo-system-ui": "~56.0.5", - "expo-task-manager": "~56.0.15", + "expo-task-manager": "~56.0.18", "expo-web-browser": "~56.0.5", "i18next": "^26.3.0", "jotai": "2.20.0", @@ -105,6 +105,7 @@ "@react-native-tvos/config-tv": "0.1.6", "@types/jest": "29.5.14", "@types/lodash": "4.17.24", + "@types/node": "^18.19.130", "@types/react": "~19.2.10", "@types/react-test-renderer": "19.1.0", "cross-env": "10.1.0", @@ -112,7 +113,7 @@ "husky": "9.1.7", "lint-staged": "17.0.5", "react-test-renderer": "19.2.3", - "typescript": "5.9.3", + "typescript": "6.0.3", }, }, }, @@ -295,7 +296,7 @@ "@expo-google-fonts/material-symbols": ["@expo-google-fonts/material-symbols@0.4.38", "", {}, "sha512-IJkBtN1o8u9BW5fvSii1MyHPQ7Q0HxbWcVBvOrOzgMLpVtZw7R2w94wBTVR7kZwv3w1JNTESMmLA5Sqn1+Z36A=="], - "@expo/cli": ["@expo/cli@56.1.12", "", { "dependencies": { "@expo/code-signing-certificates": "^0.0.6", "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.8", "@expo/devcert": "^1.2.1", "@expo/env": "~2.3.0", "@expo/image-utils": "^0.10.1", "@expo/inline-modules": "^0.0.10", "@expo/json-file": "^10.2.0", "@expo/log-box": "^56.0.12", "@expo/metro": "~56.0.0", "@expo/metro-config": "~56.0.13", "@expo/metro-file-map": "^56.0.3", "@expo/osascript": "^2.6.0", "@expo/package-manager": "^1.12.0", "@expo/plist": "^0.7.0", "@expo/prebuild-config": "^56.0.13", "@expo/require-utils": "^56.1.3", "@expo/router-server": "^56.0.12", "@expo/schema-utils": "^56.0.0", "@expo/spawn-async": "^1.8.0", "@expo/ws-tunnel": "^1.0.1", "@expo/xcpretty": "^4.4.4", "@react-native/dev-middleware": "0.85.3", "accepts": "^1.3.8", "arg": "^5.0.2", "bplist-creator": "0.1.0", "bplist-parser": "^0.3.1", "chalk": "^4.0.0", "ci-info": "^3.3.0", "compression": "^1.7.4", "connect": "^3.7.0", "debug": "^4.3.4", "dnssd-advertise": "^1.1.4", "expo-server": "^56.0.4", "fetch-nodeshim": "^0.4.10", "getenv": "^2.0.0", "glob": "^13.0.0", "lan-network": "^0.2.1", "multitars": "^1.0.0", "node-forge": "^1.3.3", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "picomatch": "^4.0.4", "pretty-format": "^29.7.0", "progress": "^2.0.3", "prompts": "^2.3.2", "resolve-from": "^5.0.0", "semver": "^7.6.0", "send": "^0.19.0", "slugify": "^1.3.4", "stacktrace-parser": "^0.1.10", "structured-headers": "^0.4.1", "terminal-link": "^2.1.1", "toqr": "^0.1.1", "wrap-ansi": "^7.0.0", "ws": "^8.12.1", "zod": "^3.25.76" }, "peerDependencies": { "expo": "*", "expo-router": "*", "react-native": "*" }, "optionalPeers": ["expo-router", "react-native"], "bin": { "expo-internal": "main.js" } }, "sha512-Ya/13E1yDx1oAuPw5MDmqzIGyzwSs7KSr1EjgSObOF0VO0GD9jqJjvjOiwurjScLUfxcGZQgq23UzMlBVHwdvA=="], + "@expo/cli": ["@expo/cli@56.1.15", "", { "dependencies": { "@expo/code-signing-certificates": "^0.0.6", "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.8", "@expo/devcert": "^1.2.1", "@expo/env": "~2.3.0", "@expo/image-utils": "^0.10.1", "@expo/inline-modules": "^0.0.11", "@expo/json-file": "^10.2.0", "@expo/log-box": "^56.0.13", "@expo/metro": "~56.0.0", "@expo/metro-config": "~56.0.14", "@expo/metro-file-map": "^56.0.3", "@expo/osascript": "^2.6.0", "@expo/package-manager": "^1.12.1", "@expo/plist": "^0.7.0", "@expo/prebuild-config": "^56.0.15", "@expo/require-utils": "^56.1.3", "@expo/router-server": "^56.0.13", "@expo/schema-utils": "^56.0.0", "@expo/spawn-async": "^1.8.0", "@expo/ws-tunnel": "^2.0.0", "@expo/xcpretty": "^4.4.4", "@react-native/dev-middleware": "0.85.3", "accepts": "^1.3.8", "arg": "^5.0.2", "bplist-creator": "0.1.0", "bplist-parser": "^0.3.1", "chalk": "^4.0.0", "ci-info": "^3.3.0", "compression": "^1.7.4", "connect": "^3.7.0", "debug": "^4.3.4", "dnssd-advertise": "^1.1.4", "expo-server": "^56.0.5", "fetch-nodeshim": "^0.4.10", "getenv": "^2.0.0", "glob": "^13.0.0", "lan-network": "^0.2.1", "multitars": "^1.0.0", "node-forge": "^1.3.3", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "picomatch": "^4.0.4", "pretty-format": "^29.7.0", "progress": "^2.0.3", "prompts": "^2.3.2", "resolve-from": "^5.0.0", "semver": "^7.6.0", "send": "^0.19.0", "slugify": "^1.3.4", "stacktrace-parser": "^0.1.10", "structured-headers": "^0.4.1", "terminal-link": "^2.1.1", "toqr": "^0.1.1", "wrap-ansi": "^7.0.0", "ws": "^8.12.1", "zod": "^3.25.76" }, "peerDependencies": { "expo": "*", "expo-router": "*", "react-native": "*" }, "optionalPeers": ["expo-router", "react-native"], "bin": { "expo-internal": "main.js" } }, "sha512-ik6++YzURB2d/mSEfYwbuNa19uOWZwVHy9THCQ/pPr6mzplKl4w9I4nlYF9lx7oluNC3NvxsSZ8/rgpVKEOJTA=="], "@expo/code-signing-certificates": ["@expo/code-signing-certificates@0.0.6", "", { "dependencies": { "node-forge": "^1.3.3" } }, "sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w=="], @@ -313,41 +314,41 @@ "@expo/env": ["@expo/env@2.3.0", "", { "dependencies": { "chalk": "^4.0.0", "debug": "^4.3.4", "getenv": "^2.0.0" } }, "sha512-9HnnIbzwTTdbwSjNLXTk0fPm9ZwMJ7c1/31tsni8HZ8Q62KzYCyspahH+V365vg5J6lr001DzNwBxVWSaYCQLg=="], - "@expo/expo-modules-macros-plugin": ["@expo/expo-modules-macros-plugin@0.0.9", "", {}, "sha512-odai6D7ng/gA7At8ukFcWcauNEeDdyVqzVPbQxDkyU2NTJ4kgphA4I5iigS5C4LXFicSIzEt2nzdlLM8sjsTdA=="], + "@expo/expo-modules-macros-plugin": ["@expo/expo-modules-macros-plugin@0.2.2", "", {}, "sha512-4IMzPDIo/VOXREQjsJtliSfqYVZvfzU2SLFS/9sKMWF848S8CHx+e/E+Vf0TcMvpWCCKX5umyqxb13KJJ+YUzg=="], - "@expo/fingerprint": ["@expo/fingerprint@0.19.3", "", { "dependencies": { "@expo/env": "^2.3.0", "@expo/spawn-async": "^1.8.0", "arg": "^5.0.2", "chalk": "^4.1.2", "debug": "^4.3.4", "getenv": "^2.0.0", "glob": "^13.0.0", "ignore": "^5.3.1", "minimatch": "^10.2.2", "resolve-from": "^5.0.0", "semver": "^7.6.0" }, "bin": { "fingerprint": "bin/cli.js" } }, "sha512-w9Au2IVrtc0Ct+WRa05DVHGNHXYq6VyPZWuFP+5x055OeZ5q6k5Yg+aJ1gfShmjdOhDftRcsvmWmTdTZlWaTZw=="], + "@expo/fingerprint": ["@expo/fingerprint@0.19.4", "", { "dependencies": { "@expo/env": "^2.3.0", "@expo/spawn-async": "^1.8.0", "arg": "^5.0.2", "chalk": "^4.1.2", "debug": "^4.3.4", "getenv": "^2.0.0", "glob": "^13.0.0", "ignore": "^5.3.1", "minimatch": "^10.2.2", "resolve-from": "^5.0.0", "semver": "^7.6.0" }, "bin": { "fingerprint": "bin/cli.js" } }, "sha512-PsowRlO8+S7JlO8go7yhNEXp7sqlsWDE2AlCwoss7zH0dcajXFo74Fy0KdXEc4UXK7kKoHD37oDgsZ8aHSLr7A=="], "@expo/image-utils": ["@expo/image-utils@0.10.1", "", { "dependencies": { "@expo/require-utils": "^56.1.3", "@expo/spawn-async": "^1.8.0", "chalk": "^4.0.0", "getenv": "^2.0.0", "jimp-compact": "0.16.1", "parse-png": "^2.1.0", "semver": "^7.6.0" } }, "sha512-YDeefvmYdihS7Wp3ESDUVnOgOSWmj2Cczm9lVNDdm4MqQLdAKm/LPYg83HtFQPfefRlAxyHrQR/O9kIXN9C1Wg=="], - "@expo/inline-modules": ["@expo/inline-modules@0.0.10", "", { "dependencies": { "@expo/config-plugins": "~56.0.8" } }, "sha512-DKEfq877UTAmL/gOT5aFhlLNDg/EVmTSca7JQMKDGR6mjFSAcrmQf4GJNsi6ztiaqj6cTnIfoSz0hAYdnr6RJQ=="], + "@expo/inline-modules": ["@expo/inline-modules@0.0.11", "", { "dependencies": { "@expo/config-plugins": "~56.0.8" } }, "sha512-ZlIfKL61DPnW8YUTdMEjMA31xrDDV6p7Xi8rWYyhd5qXBV8MwGwjuJ7vKeaVaMjRqxJk1N9lv7zlfyvQpRCNNw=="], "@expo/json-file": ["@expo/json-file@10.2.0", "", { "dependencies": { "@babel/code-frame": "^7.20.0", "json5": "^2.2.3" } }, "sha512-S6XzKe3R9GQeHiUPXc3xJjOv2VJhOEwFYf7xdC2z2cUqt3kZJ9mSO877sNQloVdnW/SUCtPY3bexlM7nwq+CAQ=="], "@expo/local-build-cache-provider": ["@expo/local-build-cache-provider@56.0.8", "", { "dependencies": { "@expo/config": "~56.0.9", "chalk": "^4.1.2" } }, "sha512-UsuXwpNi57MNhzZ3be4XThc8xW6nzk3Wu37s1+2qcfZGeJcMLKDFfwO6n8YXeIiGlCsOi0Ee1rsTdgjrKt/YJQ=="], - "@expo/log-box": ["@expo/log-box@56.0.12", "", { "dependencies": { "@expo/dom-webview": "^56.0.5", "anser": "^1.4.9", "stacktrace-parser": "^0.1.10" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-budE6AGmJbpOJfGSOz+JVP3+FevElT82IEIg+ukQ4gZpW/dGO7QX1unFjanKdSaYgudBwJ4FCFGMwWhW/1tXVQ=="], + "@expo/log-box": ["@expo/log-box@56.0.13", "", { "dependencies": { "@expo/dom-webview": "^56.0.5", "anser": "^1.4.9", "stacktrace-parser": "^0.1.10" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-QWRZSpWPyjkDLVQio4R7oAzg/Av2MOt/DciFkfjr8qQ3qxGVn1Rt1oHP/80hvcWDcHFV7N6PqpyxRXw6nbxzKQ=="], "@expo/metro": ["@expo/metro@56.0.0", "", { "dependencies": { "metro": "0.84.4", "metro-babel-transformer": "0.84.4", "metro-cache": "0.84.4", "metro-cache-key": "0.84.4", "metro-config": "0.84.4", "metro-core": "0.84.4", "metro-file-map": "0.84.4", "metro-minify-terser": "0.84.4", "metro-resolver": "0.84.4", "metro-runtime": "0.84.4", "metro-source-map": "0.84.4", "metro-symbolicate": "0.84.4", "metro-transform-plugins": "0.84.4", "metro-transform-worker": "0.84.4" } }, "sha512-5gIgQHtEpjjvsjKfVtIv23a98LLRV0/y07PDShEwYSytAMlE3FSF8RHXqtHc1sUJL6dn7hnuIBpIbrLXXuVi0A=="], - "@expo/metro-config": ["@expo/metro-config@56.0.13", "", { "dependencies": { "@babel/code-frame": "^7.20.0", "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", "@expo/config": "~56.0.9", "@expo/env": "~2.3.0", "@expo/json-file": "~10.2.0", "@expo/metro": "~56.0.0", "@expo/require-utils": "^56.1.3", "@expo/spawn-async": "^1.8.0", "@jridgewell/gen-mapping": "^0.3.13", "@jridgewell/remapping": "^2.3.5", "@jridgewell/sourcemap-codec": "^1.5.5", "browserslist": "^4.25.0", "chalk": "^4.1.0", "debug": "^4.3.2", "getenv": "^2.0.0", "glob": "^13.0.0", "hermes-parser": "^0.33.3", "jsc-safe-url": "^0.2.4", "lightningcss": "^1.30.1", "msgpackr": "^2.0.1", "picomatch": "^4.0.4", "postcss": "^8.5.14", "resolve-from": "^5.0.0" }, "peerDependencies": { "expo": "*" }, "optionalPeers": ["expo"] }, "sha512-OPyNYiex/6Ms8zT2POdIZsLhcAZYk7O+yJvpz5uG/4QRA7aiESfCy1I+0YHewMlR4P1YQeyxIrfTurs6m9xfZA=="], + "@expo/metro-config": ["@expo/metro-config@56.0.14", "", { "dependencies": { "@babel/code-frame": "^7.20.0", "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", "@expo/config": "~56.0.9", "@expo/env": "~2.3.0", "@expo/json-file": "~10.2.0", "@expo/metro": "~56.0.0", "@expo/require-utils": "^56.1.3", "@expo/spawn-async": "^1.8.0", "@jridgewell/gen-mapping": "^0.3.13", "@jridgewell/remapping": "^2.3.5", "@jridgewell/sourcemap-codec": "^1.5.5", "browserslist": "^4.25.0", "chalk": "^4.1.0", "debug": "^4.3.2", "getenv": "^2.0.0", "glob": "^13.0.0", "hermes-parser": "^0.33.3", "jsc-safe-url": "^0.2.4", "lightningcss": "^1.30.1", "picomatch": "^4.0.4", "postcss": "^8.5.14", "resolve-from": "^5.0.0" }, "peerDependencies": { "expo": "*" }, "optionalPeers": ["expo"] }, "sha512-O3CIHruaTJhswPAf/nf3i8QQ3f2jl+mEwSea1eb3khuplabdy/wTQz+JvHN8VGUFyg7JKwUGU1QfO6T3JiSQqA=="], "@expo/metro-file-map": ["@expo/metro-file-map@56.0.3", "", { "dependencies": { "debug": "^4.3.4", "fb-watchman": "^2.0.2", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" } }, "sha512-5OGW3z8LgEYgMJOR7F3pC8llFLkb1fVqwAewbCl6S4Vkha8AFQMwOjT+9Wbka+V4rmpljpGqOnMhF4xZbD961w=="], - "@expo/metro-runtime": ["@expo/metro-runtime@56.0.13", "", { "dependencies": { "@expo/log-box": "^56.0.12", "anser": "^1.4.9", "pretty-format": "^29.7.0", "stacktrace-parser": "^0.1.10", "whatwg-fetch": "^3.0.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-dom": "*", "react-native": "*" }, "optionalPeers": ["react-dom"] }, "sha512-aMaFa/RPYm2iQoyYOB5q8AxDmWvf4E2yFbZ6rmBIQWaIPDdixGVUlLQeV8DlDAfZ/j+pNYO7l5M+774WbgkTgg=="], + "@expo/metro-runtime": ["@expo/metro-runtime@56.0.15", "", { "dependencies": { "@expo/log-box": "^56.0.13", "anser": "^1.4.9", "pretty-format": "^29.7.0", "stacktrace-parser": "^0.1.10", "whatwg-fetch": "^3.0.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-dom": "*", "react-native": "*" }, "optionalPeers": ["react-dom"] }, "sha512-WIWeVsL6kCSB57oYZdUA4MTkH7c67UFMIjdNoQzKXwxZYwBFE/xL2cGPDC3z8RWt0femzJTVxAVZUOW/hiqRzA=="], "@expo/osascript": ["@expo/osascript@2.6.0", "", { "dependencies": { "@expo/spawn-async": "^1.8.0" } }, "sha512-QvqDBlJXa8CS2vRORJ4wEflY1m0vVI07uSJdIRgBrLxRPBcsrXxrtU7+wXRXMqfq9zLwNP9XbvRsXF2omoDylg=="], - "@expo/package-manager": ["@expo/package-manager@1.12.0", "", { "dependencies": { "@expo/json-file": "^10.2.0", "@expo/spawn-async": "^1.8.0", "chalk": "^4.0.0", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "resolve-workspace-root": "^2.0.0" } }, "sha512-SWr6093nwBjn94cvElsYZNUnhvs+XtUatUz3h0vAn0IbaWG0B6l/V5ZfOBptX/xq6rMpFG5ibIf/eckLSXw8Gg=="], + "@expo/package-manager": ["@expo/package-manager@1.12.1", "", { "dependencies": { "@expo/json-file": "^10.2.0", "@expo/spawn-async": "^1.8.0", "chalk": "^4.0.0", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "resolve-workspace-root": "^2.0.0" } }, "sha512-fQLiFAcFRWF53mtuLK32SUJQ1ahhrTcBZPZPedYTiUT5ha5FF+UO6bPtCc0Y/hgj0/m3HCGBAuSHjbg2kI9oPQ=="], "@expo/plist": ["@expo/plist@0.7.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-vrpryU1GoqSIRNqRB2D3IjXDmzNYfiQpEF6AH/xknlD7eiYmEDt3mb26V7cLcedcPG8PY/1xWHdBXVQJfEAh6Q=="], - "@expo/prebuild-config": ["@expo/prebuild-config@56.0.13", "", { "dependencies": { "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.8", "@expo/config-types": "^56.0.5", "@expo/image-utils": "^0.10.1", "@expo/json-file": "^10.2.0", "@react-native/normalize-colors": "0.85.3", "debug": "^4.3.1", "expo-modules-autolinking": "~56.0.13", "resolve-from": "^5.0.0", "semver": "^7.6.0" } }, "sha512-caR1karpDasbNmM+LrcHKZrSnyEYdmxm7kedq+WjiuZg+9XAW5sbEjojo2i9Dq6cfbDJPyr7I0yEprLabnvmpA=="], + "@expo/prebuild-config": ["@expo/prebuild-config@56.0.15", "", { "dependencies": { "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.8", "@expo/config-types": "^56.0.5", "@expo/image-utils": "^0.10.1", "@expo/json-file": "^10.2.0", "@react-native/normalize-colors": "0.85.3", "debug": "^4.3.1", "expo-modules-autolinking": "~56.0.15", "resolve-from": "^5.0.0", "semver": "^7.6.0" } }, "sha512-6GC+QjdCkzp/5wjsqgfu/B2+2yf5MyZMtzf9szIPrLt9uKhzV2PdyM0vU0kvbj1YT8weHCtO7bsrzimman0sjA=="], "@expo/react-native-action-sheet": ["@expo/react-native-action-sheet@4.1.1", "", { "dependencies": { "@types/hoist-non-react-statics": "^3.3.1", "hoist-non-react-statics": "^3.3.0" }, "peerDependencies": { "react": ">=18.0.0" } }, "sha512-4KRaba2vhqDRR7ObBj6nrD5uJw8ePoNHdIOMETTpgGTX7StUbrF4j/sfrP1YUyaPEa1P8FXdwG6pB+2WtrJd1A=="], "@expo/require-utils": ["@expo/require-utils@56.1.3", "", { "dependencies": { "@babel/code-frame": "^7.20.0", "@babel/core": "^7.25.2", "@babel/plugin-transform-modules-commonjs": "^7.24.8" }, "peerDependencies": { "typescript": "^5.0.0 || ^5.0.0-0 || ^6.0.0" }, "optionalPeers": ["typescript"] }, "sha512-KyLeOn/zzQSvuPpV5YhB/FPKnpQytno4luN918bGdPDssLBoS3N/0UbC3W0rJAn9kSFu+XpfR81eABRVsSdfgQ=="], - "@expo/router-server": ["@expo/router-server@56.0.12", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "@expo/metro-runtime": "^56.0.13", "expo": "*", "expo-constants": "^56.0.16", "expo-font": "^56.0.5", "expo-router": "*", "expo-server": "^56.0.4", "react": "*", "react-dom": "*", "react-server-dom-webpack": "~19.0.1 || ~19.1.2 || ~19.2.1" }, "optionalPeers": ["@expo/metro-runtime", "expo-router", "react-dom", "react-server-dom-webpack"] }, "sha512-RqKV2/Z8BH/z8l0ngSpG6//5xxJPaF5dTQvSfPQ0nrvCjikGMeIvyj3B9BeLnmZZhxb3gBtXqrj3irAoiIp2aQ=="], + "@expo/router-server": ["@expo/router-server@56.0.14", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "@expo/metro-runtime": "^56.0.15", "expo": "*", "expo-constants": "^56.0.18", "expo-font": "^56.0.6", "expo-router": "*", "expo-server": "^56.0.5", "react": "*", "react-dom": "*", "react-server-dom-webpack": "~19.0.1 || ~19.1.2 || ~19.2.1" }, "optionalPeers": ["@expo/metro-runtime", "expo-router", "react-dom", "react-server-dom-webpack"] }, "sha512-2UCTtZfcq1ZPgp3wk8/+sq9DvFI9UxrPr1jcEKMAF2DGAJLosnpc8GWNNg2hkjt6SHUOdFHIPxujWPYyho2y3A=="], "@expo/schema-utils": ["@expo/schema-utils@56.0.1", "", {}, "sha512-CZ/+mYbQmWeOnkCGlWy9K+lFxbJSMFY7+TqBZcKzBSTU5Q7IGRvn/sOG3TdNjIdLPmbA8xe7R/c3UUQ28R9i9w=="], @@ -357,11 +358,11 @@ "@expo/sudo-prompt": ["@expo/sudo-prompt@9.3.2", "", {}, "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw=="], - "@expo/ui": ["@expo/ui@56.0.14", "", { "dependencies": { "sf-symbols-typescript": "^2.1.0", "vaul": "^1.1.2" }, "peerDependencies": { "@babel/core": "*", "expo": "*", "react": "*", "react-dom": "*", "react-native": "*", "react-native-reanimated": "*", "react-native-worklets": "*" }, "optionalPeers": ["@babel/core", "react-dom", "react-native-reanimated", "react-native-worklets"] }, "sha512-0Wr8nsvk2C+BmhmZDQzYr/hxxddHK+ajuJ7ahacUvxt+gQnEXwbueTm0S/hk/54YGASEgplrPGDuR5zzcY+IZg=="], + "@expo/ui": ["@expo/ui@56.0.17", "", { "dependencies": { "sf-symbols-typescript": "^2.1.0", "vaul": "^1.1.2" }, "peerDependencies": { "@babel/core": "*", "expo": "*", "react": "*", "react-dom": "*", "react-native": "*", "react-native-reanimated": "*", "react-native-worklets": "*" }, "optionalPeers": ["@babel/core", "react-dom", "react-native-reanimated", "react-native-worklets"] }, "sha512-Jos9oGzurMDngrSWJesX3LSykPRvkUdANxtq2sPKBc6bAjadtZJCkthAYMaE3P9L5xrzbNRFo+2O76cRP0iYPw=="], "@expo/vector-icons": ["@expo/vector-icons@15.1.1", "", { "peerDependencies": { "expo-font": ">=14.0.4", "react": "*", "react-native": "*" } }, "sha512-Iu2VkcoI5vygbtYngm7jb4ifxElNVXQYdDrYkT7UCEIiKLeWnQY0wf2ZhHZ+Wro6Sc5TaumpKUOqDRpLi5rkvw=="], - "@expo/ws-tunnel": ["@expo/ws-tunnel@1.0.6", "", {}, "sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q=="], + "@expo/ws-tunnel": ["@expo/ws-tunnel@2.0.0", "", { "peerDependencies": { "ws": "^8.0.0" } }, "sha512-j+JfTRdCk820J9dU0sA2SqshQIKFOMo7ED84w9MJFcebfbNQgsLztEY/SABDkGnjatrW4xGqnUhVRxSBVyCkXw=="], "@expo/xcpretty": ["@expo/xcpretty@4.4.4", "", { "dependencies": { "@babel/code-frame": "^7.20.0", "chalk": "^4.1.0", "js-yaml": "^4.1.0" }, "bin": { "excpretty": "build/cli.js" } }, "sha512-4aQzz9vgxcNXFfo/iyNgDDYfsU5XGKKxWxZopw0cVotHiW+U8IJbIxMaxsINs6bHhtkG3StKNPcOrn3eBuxKPw=="], @@ -417,18 +418,6 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@msgpackr-extract/msgpackr-extract-darwin-arm64": ["@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ=="], - - "@msgpackr-extract/msgpackr-extract-darwin-x64": ["@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w=="], - - "@msgpackr-extract/msgpackr-extract-linux-arm": ["@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4", "", { "os": "linux", "cpu": "arm" }, "sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw=="], - - "@msgpackr-extract/msgpackr-extract-linux-arm64": ["@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw=="], - - "@msgpackr-extract/msgpackr-extract-linux-x64": ["@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4", "", { "os": "linux", "cpu": "x64" }, "sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ=="], - - "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4", "", { "os": "win32", "cpu": "x64" }, "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ=="], - "@nodable/entities": ["@nodable/entities@2.1.0", "", {}, "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA=="], "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], @@ -703,7 +692,7 @@ "babel-plugin-transform-flow-enums": ["babel-plugin-transform-flow-enums@0.0.2", "", { "dependencies": { "@babel/plugin-syntax-flow": "^7.12.1" } }, "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ=="], - "babel-preset-expo": ["babel-preset-expo@56.0.13", "", { "dependencies": { "@babel/generator": "^7.20.5", "@babel/helper-module-imports": "^7.25.9", "@babel/plugin-proposal-decorators": "^7.12.9", "@babel/plugin-proposal-export-default-from": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-class-static-block": "^7.27.1", "@babel/plugin-transform-classes": "^7.25.4", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-for-of": "^7.24.7", "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-react-display-name": "^7.24.7", "@babel/plugin-transform-react-jsx": "^7.28.6", "@babel/plugin-transform-react-jsx-development": "^7.27.1", "@babel/plugin-transform-react-pure-annotations": "^7.27.1", "@babel/plugin-transform-runtime": "^7.24.7", "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/preset-typescript": "^7.23.0", "@react-native/babel-plugin-codegen": "0.85.3", "babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-native-web": "~0.21.0", "babel-plugin-syntax-hermes-parser": "^0.33.3", "babel-plugin-transform-flow-enums": "^0.0.2", "debug": "^4.3.4" }, "peerDependencies": { "@babel/runtime": "^7.20.0", "expo": "*", "expo-widgets": "^56.0.15", "react-refresh": ">=0.14.0 <1.0.0" }, "optionalPeers": ["@babel/runtime", "expo", "expo-widgets"] }, "sha512-+CxxAQrN95N+/dF4AUJXNxEh5cEv4yhxb4CM5ijdc2OeIIw+hxzYh2OM1X7QHIm6hkT66H4vJCTT636yjJ8MnQ=="], + "babel-preset-expo": ["babel-preset-expo@56.0.15", "", { "dependencies": { "@babel/generator": "^7.20.5", "@babel/helper-module-imports": "^7.25.9", "@babel/plugin-proposal-decorators": "^7.12.9", "@babel/plugin-proposal-export-default-from": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-class-static-block": "^7.27.1", "@babel/plugin-transform-classes": "^7.25.4", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-for-of": "^7.24.7", "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-react-display-name": "^7.24.7", "@babel/plugin-transform-react-jsx": "^7.28.6", "@babel/plugin-transform-react-jsx-development": "^7.27.1", "@babel/plugin-transform-react-pure-annotations": "^7.27.1", "@babel/plugin-transform-runtime": "^7.24.7", "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/preset-typescript": "^7.23.0", "@react-native/babel-plugin-codegen": "0.85.3", "babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-native-web": "~0.21.0", "babel-plugin-syntax-hermes-parser": "^0.33.3", "babel-plugin-transform-flow-enums": "^0.0.2", "debug": "^4.3.4" }, "peerDependencies": { "@babel/runtime": "^7.20.0", "expo": "*", "expo-widgets": "^56.0.18", "react-refresh": ">=0.14.0 <1.0.0" }, "optionalPeers": ["@babel/runtime", "expo", "expo-widgets"] }, "sha512-0MqbQoM6nBUbKvgu2xJ4VixZnUTGTq3HB2WwvOikdO4CiPxbQ+wGA25fOoHHSni5iEFW39wy6y1ookTWlq3wVw=="], "badgin": ["badgin@1.2.3", "", {}, "sha512-NQGA7LcfCpSzIbGRbkgjgdWkjy7HI+Th5VLxTJfW5EeaAf3fnS+xWQaQOCYiny+q6QSvxqoSO04vCx+4u++EJw=="], @@ -937,33 +926,33 @@ "expect": ["expect@29.7.0", "", { "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", "jest-matcher-utils": "^29.7.0", "jest-message-util": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw=="], - "expo": ["expo@56.0.6", "", { "dependencies": { "@babel/runtime": "^7.20.0", "@expo/cli": "^56.1.12", "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.8", "@expo/devtools": "~56.0.2", "@expo/dom-webview": "~56.0.5", "@expo/fingerprint": "^0.19.3", "@expo/local-build-cache-provider": "^56.0.8", "@expo/log-box": "^56.0.12", "@expo/metro": "~56.0.0", "@expo/metro-config": "~56.0.13", "@ungap/structured-clone": "^1.3.0", "babel-preset-expo": "~56.0.13", "expo-asset": "~56.0.15", "expo-constants": "~56.0.16", "expo-file-system": "~56.0.7", "expo-font": "~56.0.5", "expo-keep-awake": "~56.0.3", "expo-modules-autolinking": "~56.0.14", "expo-modules-core": "~56.0.13", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", "whatwg-url-minimum": "^0.1.2" }, "peerDependencies": { "@expo/metro-runtime": "*", "react": "*", "react-dom": "*", "react-native": "*", "react-native-web": "*", "react-native-webview": "*" }, "optionalPeers": ["@expo/metro-runtime", "react-dom", "react-native-web", "react-native-webview"], "bin": { "expo": "bin/cli", "fingerprint": "bin/fingerprint", "expo-modules-autolinking": "bin/autolinking" } }, "sha512-zcFa/+6hGtzCUlcrGiusvzr/PIoNBAnjj4PlAFrvbAOZcVOj6c9Mp7lRSn9XYJk8Ok6pssQWt6dP4llJlKmYRQ=="], + "expo": ["expo@56.0.11", "", { "dependencies": { "@babel/runtime": "^7.20.0", "@expo/cli": "^56.1.15", "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.8", "@expo/devtools": "~56.0.2", "@expo/dom-webview": "~56.0.5", "@expo/fingerprint": "^0.19.4", "@expo/local-build-cache-provider": "^56.0.8", "@expo/log-box": "^56.0.13", "@expo/metro": "~56.0.0", "@expo/metro-config": "~56.0.14", "@ungap/structured-clone": "^1.3.0", "babel-preset-expo": "~56.0.15", "expo-asset": "~56.0.17", "expo-constants": "~56.0.18", "expo-file-system": "~56.0.8", "expo-font": "~56.0.6", "expo-keep-awake": "~56.0.3", "expo-modules-autolinking": "~56.0.15", "expo-modules-core": "~56.0.16", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", "whatwg-url-minimum": "^0.1.2" }, "peerDependencies": { "@expo/metro-runtime": "*", "react": "*", "react-dom": "*", "react-native": "*", "react-native-web": "*", "react-native-webview": "*" }, "optionalPeers": ["@expo/metro-runtime", "react-dom", "react-native-web", "react-native-webview"], "bin": { "expo": "bin/cli", "fingerprint": "bin/fingerprint", "expo-modules-autolinking": "bin/autolinking" } }, "sha512-YqF+q+JqfobDU5yFym3h1vQqzbl7rFiDB4wAJEyK6NK+KLeyf4pfzydQcNTyqLXQKcQBG1reBJExfDShoAYTzw=="], "expo-application": ["expo-application@56.0.3", "", { "peerDependencies": { "expo": "*" } }, "sha512-DdGGPlMuM6cSTeKhbvh6OeLr2O/+EI5BHKYrD+Do8sJPYgLwzGrgESELfyjJCpEhFzT+TgKIdmLmWXhNUQnHiw=="], - "expo-asset": ["expo-asset@56.0.15", "", { "dependencies": { "@expo/image-utils": "^0.10.1", "expo-constants": "~56.0.16" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-BHGi2IAOPQTcOelkUdcz1WIknfCTRjkcpYHX1azjMwgYenrVC+J5qcqJGaC8eUOWLCRtkRJWGnmFQRYtLU1nUQ=="], + "expo-asset": ["expo-asset@56.0.17", "", { "dependencies": { "@expo/image-utils": "^0.10.1", "expo-constants": "~56.0.18" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-GFN5j+8SPkyv0nfsiFHewmdB/D0tL237TsBE/gSfFOFy/J3a52py7IulcSqkA3sQE/u/UlD5BmvP5ssS4//nUg=="], - "expo-audio": ["expo-audio@56.0.11", "", { "peerDependencies": { "expo": "*", "expo-asset": "*", "react": "*", "react-native": "*" } }, "sha512-naionxilr49IpEjmMqCj5gXHCSfOsgu3nZ/KXndexR05Tv6dET7dmespyZkcMrADJN07gA5hyqPUC5WqWuaFLw=="], + "expo-audio": ["expo-audio@56.0.12", "", { "peerDependencies": { "expo": "*", "expo-asset": "*", "react": "*", "react-native": "*" } }, "sha512-ne2UIO/HsQoBL9e+tGs5N9Sf3NyW5sJMm4sDkexbSJRc2IchLDG+9Msu/+l5N4RlZ8SiF42wRyWsh/Usg+SwOw=="], - "expo-background-task": ["expo-background-task@56.0.15", "", { "dependencies": { "expo-task-manager": "~56.0.15" }, "peerDependencies": { "expo": "*" } }, "sha512-ZBzLkKFmM5ZpJYl1D1kpmk6MomLbVx6LQbMX4GGLg8TSidvvtden0haIw4R5Rpkgzj3LOjvFMFli5a4kQA7VCA=="], + "expo-background-task": ["expo-background-task@56.0.18", "", { "dependencies": { "expo-task-manager": "~56.0.18" }, "peerDependencies": { "expo": "*" } }, "sha512-jfEvLq/hZUWkef+lOt0sbe/Jd8wnK0fMgqsZhD1ulWk1IKB0AWsjmJ0iCTDMD9L9MDztpvKf2g/ygzljmo2eGA=="], "expo-blur": ["expo-blur@56.0.3", "", { "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-KDDtrpWc2tYlm1WCPaOgBtv+YEGqe5ELheFPIgSNgHt28NQUDcfBcFsA9Us2StDh6osmSD6NbKxOt5bU6PcDbQ=="], "expo-brightness": ["expo-brightness@56.0.5", "", { "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-AkCGW+Lj8I4o2+Yjs1bzjIJz44cgNXfAN+pf01uDwmA1/1JTIy8x1eISvmz6d2r/1OhdyBZxeDkACNLVMDx5zA=="], - "expo-build-properties": ["expo-build-properties@56.0.15", "", { "dependencies": { "@expo/schema-utils": "^56.0.0", "resolve-from": "^5.0.0", "semver": "^7.6.0" }, "peerDependencies": { "expo": "*" } }, "sha512-3OlfTnBE6BIFxchjXzb0OlgDcWw19fxhIzpIZqgcgzZUVjyn4gCrQuNcsfazVVddBypwkEzOVfwArPROIk4J7g=="], + "expo-build-properties": ["expo-build-properties@56.0.18", "", { "dependencies": { "@expo/schema-utils": "^56.0.0", "resolve-from": "^5.0.0", "semver": "^7.6.0" }, "peerDependencies": { "expo": "*" } }, "sha512-at03ytur1Vfyl9ddtRMqIdSyR/oV57GM04+NZ5rhFTF0mC7dmKzxS9RBb34KHDPdT8UwUt7KsKbzYD1lnxLAKg=="], - "expo-camera": ["expo-camera@56.0.7", "", { "dependencies": { "barcode-detector": "^3.0.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*", "react-native-web": "*" }, "optionalPeers": ["react-native-web"] }, "sha512-c8z+UheidFintQyP9XLEDP43aK4PS/o9+TFLW0zEOjdqkYCBgoWq6Mw/Ps62kjBeftFY7xrp5ZLITbenNvbTaw=="], + "expo-camera": ["expo-camera@56.0.8", "", { "dependencies": { "barcode-detector": "^3.0.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*", "react-native-web": "*" }, "optionalPeers": ["react-native-web"] }, "sha512-UDOpUUMisFRmCv1XQV1MJCKGAH2CsIC1Rs6P9Bbc6JLVmbxEKAd5dK68y6cScOdWURxVfJ0PRcjYnSuc8ayyIQ=="], - "expo-constants": ["expo-constants@56.0.16", "", { "dependencies": { "@expo/env": "~2.3.0" }, "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-6tsiN+gmTUPp/atyA+uY9Tg8VOdXdmb4s/3TVGolfn6A/oCAraw1pcPZX5XllyD+xUguxB6eBSFAT8494hZVMA=="], + "expo-constants": ["expo-constants@56.0.18", "", { "dependencies": { "@expo/env": "~2.3.0" }, "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-8AMtbDGl/WVPnWlmbpGmvcdnNCy9E4PFnwdVwj600vljkMDPSxcAcjw8GVXEPk3PpZ+ngTqsrkltWyj0UKYAxw=="], "expo-crypto": ["expo-crypto@56.0.4", "", { "peerDependencies": { "expo": "*" } }, "sha512-fRNEhoXRXgAWBpe3/hq5X+KXTit3OZqdiAGts1YvNEUHQb+H5591mpPac0Yw+sZg9pXcrjRnzo5AxvZaENpc7g=="], - "expo-dev-client": ["expo-dev-client@56.0.16", "", { "dependencies": { "expo-dev-launcher": "~56.0.16", "expo-dev-menu": "~56.0.15", "expo-dev-menu-interface": "~56.0.0", "expo-manifests": "~56.0.4", "expo-updates-interface": "~56.0.1" }, "peerDependencies": { "expo": "*" } }, "sha512-mxmGA6YSP4KiMB4bREpriQ4K6EaS4tcm0eh1+LtAzgFCytq+Y4WxMfIvFe3B5kXlSpA0ohMLdAN0AUzU0xHGQg=="], + "expo-dev-client": ["expo-dev-client@56.0.20", "", { "dependencies": { "expo-dev-launcher": "~56.0.20", "expo-dev-menu": "~56.0.17", "expo-dev-menu-interface": "~56.0.0", "expo-manifests": "~56.0.4", "expo-updates-interface": "~56.0.1" }, "peerDependencies": { "expo": "*" } }, "sha512-KebW4r8HhIiRrPzs6ZqVhp/so8buyglAO1h4No0Ibr5C2XRnlIoGWCN4zC6rW7IsI3iKUXcofLAQV9OjoxjiwQ=="], - "expo-dev-launcher": ["expo-dev-launcher@56.0.16", "", { "dependencies": { "@expo/schema-utils": "^56.0.0", "expo-dev-menu": "~56.0.15", "expo-manifests": "~56.0.4" }, "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-3t2PCX2lCKetKL8EgRRo2tzSlGh1zcuaWuwp3V0k4/3nuM7pztyImaR6Sm3HUyarDOofAIPX1hIIxnuAfk5cnw=="], + "expo-dev-launcher": ["expo-dev-launcher@56.0.20", "", { "dependencies": { "@expo/schema-utils": "^56.0.0", "expo-dev-menu": "~56.0.17", "expo-manifests": "~56.0.4" }, "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-cTuC3GkPl9CTwO3CKnVmEm9qoQ0WairhwvTh6qMlg+zr/QU/tdiU++uDBX67hf9+FuxQOkWGp5khFNosT+0cIg=="], - "expo-dev-menu": ["expo-dev-menu@56.0.15", "", { "dependencies": { "expo-dev-menu-interface": "~56.0.0" }, "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-FY6Y5sZkNXxPBGDgC51ZArOi8N7Y8wpXwanTClFO36IVMoVf7BBqhjW13KpDecvJONtEtaUeNIAt9C25PO8MOQ=="], + "expo-dev-menu": ["expo-dev-menu@56.0.17", "", { "dependencies": { "expo-dev-menu-interface": "~56.0.0" }, "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-OofRkOOZnaDriSav3JDN4NP2lsLt2eOa/Ryptr5nMD62SwnFyK4R6n6PkPVaDU3LSsZqndAJHmN6inS+oziayQ=="], "expo-dev-menu-interface": ["expo-dev-menu-interface@56.0.1", "", { "peerDependencies": { "expo": "*" } }, "sha512-odATx0ZL/Kis10sKSBiKiGQxAB6coSi/KQtKcMhnQVNno6FkRh5/4e5BqcEvpq2rNMTiQp4ytNAQHtdwbPXvGA=="], @@ -971,15 +960,15 @@ "expo-doctor": ["expo-doctor@1.19.9", "", { "bin": { "expo-doctor": "bin/expo-doctor.js" } }, "sha512-SJW5HxEDQ9f5QdFvrUwfbdJZ4HI0EAAxsrJqrHBFjKBum+uSOcEIZPLRibwNQLTHOwTO1TWNLiMlF9sDUBWeYw=="], - "expo-file-system": ["expo-file-system@56.0.7", "", { "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-dcKzo8ShPloM7jgfnMcJStgQebhP8owVjCkNI/aX6NMFV1CYB8bxKGMdnzJ3mXk5nfaiW+F/lSKr2UIJ02WAUA=="], + "expo-file-system": ["expo-file-system@56.0.8", "", { "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-NrH41/8snGIBSbYicwVLB4txPdgCATd7ZYhMAGS3YJZ9GbnduhlAoV4/YCbGayjrbpE9bJb/6wegPL/zmvRMnQ=="], - "expo-font": ["expo-font@56.0.5", "", { "dependencies": { "fontfaceobserver": "^2.1.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-WLoDu9hlEgPRKXJRR01HFLJ6Z2tFcORX/WFPRYBndmYc5kjQrFGH/j4BRaF3aBRPyYEAUXiUJybNLXkKCwEXQw=="], + "expo-font": ["expo-font@56.0.6", "", { "dependencies": { "fontfaceobserver": "^2.1.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-D4s72Aei844C2s8Vy61qMr6wLEjv6BMrXA1oyRQ0x8LJBbpm5gyogUohc0lABUURVLCqsnBIDdztegl3hktmmg=="], "expo-glass-effect": ["expo-glass-effect@56.0.4", "", { "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-xI9rXtDwi7RW82uAlfyaXO6+k21ApWJ2tHAWYqPr/FjfmZbKsgNJ4Q0iZzGPCwboqjTGxaRZ61SZxBl8hDt5iA=="], "expo-haptics": ["expo-haptics@56.0.3", "", { "peerDependencies": { "expo": "*" } }, "sha512-ycoahZJnR9tWAVh/0mJYxbETtHRYaWjiWS8cHlP6aDGU6Q6Y8rZ5NKsuBwWw6HR2Pe30mfVFgbF2HrBR6gtYmw=="], - "expo-image": ["expo-image@56.0.9", "", { "dependencies": { "sf-symbols-typescript": "^2.2.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*", "react-native-web": "*" }, "optionalPeers": ["react-native-web"] }, "sha512-FifiRehXnMul5XeUVHWv+COHFUeCAdsYf5MiCPUBlhr4pRb0sxjA4/floi/TEDpATOIw6GqxbrC4FdZBoyrJmw=="], + "expo-image": ["expo-image@56.0.11", "", { "dependencies": { "sf-symbols-typescript": "^2.2.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*", "react-native-web": "*" }, "optionalPeers": ["react-native-web"] }, "sha512-k2xwxGk14xi6zxmEGAU4rUTb1lK5qf0y0Qb8+Jaggnul0KaJJxcq9qvyDp9iyJBW35cp9isONAUnNtIiooZ/Pw=="], "expo-json-utils": ["expo-json-utils@56.0.0", "", {}, "sha512-lUqyv9aIGDbYTQ5Nux2FnH2/Dz0w5uJ8Pr080eS0StXi2jr5OmuMNErpzUnpfnYOU55xKotd4AHv68PfV/ludg=="], @@ -987,41 +976,41 @@ "expo-linear-gradient": ["expo-linear-gradient@56.0.4", "", { "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-KUp1dNSRtuMyiExhf6FJf5YUtmw2cRaPytl10HQi7isj5Yac38udmD55T2tglNYTZlvgT5+oflpyFoH15hmOcw=="], - "expo-linking": ["expo-linking@56.0.12", "", { "dependencies": { "expo-constants": "~56.0.16", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-EJ+YoazVqlrUXMAARo1iTExpqEGjuKJDGiE/P1K+A3m5hs+2Uf8F9ucqpq9k5dizeiaV2D8B9+uLvqMHFzGGsQ=="], + "expo-linking": ["expo-linking@56.0.14", "", { "dependencies": { "expo-constants": "~56.0.18", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-IvVQHWC+Cj4fK5qD3iEVYqpU2a4rLW0IpAAlGJ4MH+H1fyZiHh3eN6qg2WmoclOEPfYATSuEa+dQT6wfgVpXlQ=="], "expo-localization": ["expo-localization@56.0.6", "", { "dependencies": { "rtl-detect": "^1.0.2" }, "peerDependencies": { "expo": "*", "react": "*" } }, "sha512-zzBVoUFHCVNBywcxGsspoZeIXebihOo/AnmQYE4jMv8gHCSKlLNFT+ft+0+mWcZCMs9necvUs8S8TDonAu/xBA=="], - "expo-location": ["expo-location@56.0.14", "", { "dependencies": { "@expo/image-utils": "^0.10.1" }, "peerDependencies": { "expo": "*" } }, "sha512-k9p6mR11o5S0R4yUs3uWLJfnSk6XIB9UIgSYiNu2goGLWb2f0sazuZ0iYhuc2p2wIsdidhpL/51ZXjtZl5JCOg=="], + "expo-location": ["expo-location@56.0.17", "", { "dependencies": { "@expo/image-utils": "^0.10.1" }, "peerDependencies": { "expo": "*" } }, "sha512-3kEONgFApqGzuRhgWyYGb/nXK+rYaeuHtcCYkuVNbrDSlHYYe+mgQPeM4Iuqv43Fihmp0mKsNtq7zX030nE+VA=="], "expo-manifests": ["expo-manifests@56.0.4", "", { "dependencies": { "expo-json-utils": "~56.0.0" }, "peerDependencies": { "expo": "*" } }, "sha512-Fokawl2UkiExIF0bqGoblRFA8lYpROVD+EpvDwSW4LgqQyPwNua1gLSgHZjdl5GsVugfRMMWE3LHaibDyX93hw=="], - "expo-modules-autolinking": ["expo-modules-autolinking@56.0.14", "", { "dependencies": { "@expo/require-utils": "^56.1.3", "@expo/spawn-async": "^1.8.0", "chalk": "^4.1.0", "commander": "^7.2.0" }, "bin": { "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, "sha512-9ugtZkheNPYDkW4DZopY1rH2BCbUICaafUEPxRgbLDR5UNRF5K3cdHMIMEt8pxZPq2+eX4wCm+6pbSvdY/DPHg=="], + "expo-modules-autolinking": ["expo-modules-autolinking@56.0.15", "", { "dependencies": { "@expo/require-utils": "^56.1.3", "@expo/spawn-async": "^1.8.0", "chalk": "^4.1.0", "commander": "^7.2.0" }, "bin": { "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, "sha512-WqpBFwLzn7DsrUkWltIjVmAjwuI1VdQ2jRMlvk1nh2kVadwdJBkSjUBQWRifsEePNhiMT/rFOovBolUU/ARt5w=="], - "expo-modules-core": ["expo-modules-core@56.0.13", "", { "dependencies": { "@expo/expo-modules-macros-plugin": "~0.0.9", "expo-modules-jsi": "~56.0.7", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*", "react-native-worklets": "^0.7.4 || ^0.8.0" }, "optionalPeers": ["react-native-worklets"] }, "sha512-3Hgpi9Q1O0XqoesQtgFY7qhfDsNA3bJtdCJotEqdE42+N8Zv/LJACbNgIyFN/XrnMDzfF5rozh0vNWaRT0/eXQ=="], + "expo-modules-core": ["expo-modules-core@56.0.16", "", { "dependencies": { "@expo/expo-modules-macros-plugin": "0.2.2", "expo-modules-jsi": "~56.0.9", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*", "react-native-worklets": "^0.7.4 || ^0.8.0" }, "optionalPeers": ["react-native-worklets"] }, "sha512-IVdT0CnqOpQCPdemA5rb50CPbbhWeJePnvuH0yUmOmyMkNky8WVOdRQtVicoIv4CCG5hDrzPIxULD4YOHZ5CHg=="], - "expo-modules-jsi": ["expo-modules-jsi@56.0.7", "", { "peerDependencies": { "react-native": "*" } }, "sha512-iBAj4Xeh/8HT201VVxFlmf+VBfmtQV1ZUoJdLQQENm0+j9gnD2QswZLJyNo3CmNNXl46esJeLR5lpGpYZts/zA=="], + "expo-modules-jsi": ["expo-modules-jsi@56.0.9", "", { "peerDependencies": { "react-native": "*" } }, "sha512-2lfDkRcsP/Qh2upS+nu0MS0tfGsghc6ehTivzbgM5nJz0MGYhAJxCJSeendWM+aOQutQAwzsoxrNT0nW8lRAwA=="], - "expo-notifications": ["expo-notifications@56.0.14", "", { "dependencies": { "@expo/image-utils": "^0.10.1", "abort-controller": "^3.0.0", "badgin": "^1.1.5", "expo-application": "~56.0.3", "expo-constants": "~56.0.16" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-A+BDJYyBIkC17Bfqlrbf9A80npjOyoTbaSCydP2agfhVv+Ld7DuOYOJSApBmtzBZM0LvdUVX/pdrwjEp1ixmaw=="], + "expo-notifications": ["expo-notifications@56.0.17", "", { "dependencies": { "@expo/image-utils": "^0.10.1", "abort-controller": "^3.0.0", "badgin": "^1.1.5", "expo-application": "~56.0.3", "expo-constants": "~56.0.18" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-Yn6JUKmoBDkQeznbuUn4cHF2u44r1ErJTneW65MBFt7NLG8U8/VGQ4bBVwswm5nPH1/V92UoXPgvCssScPFRDg=="], - "expo-router": ["expo-router@56.2.7", "", { "dependencies": { "@expo/log-box": "^56.0.12", "@expo/metro-runtime": "^56.0.13", "@expo/schema-utils": "^56.0.0", "@expo/ui": "^56.0.14", "@radix-ui/react-slot": "^1.2.0", "@radix-ui/react-tabs": "^1.1.12", "@react-native-masked-view/masked-view": "^0.3.2", "@testing-library/jest-dom": "^6.9.1", "@testing-library/user-event": "^14.6.1", "client-only": "^0.0.1", "color": "^4.2.3", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "expo-glass-effect": "^56.0.4", "expo-server": "^56.0.4", "expo-symbols": "^56.0.5", "fast-deep-equal": "^3.1.3", "invariant": "^2.2.4", "nanoid": "^3.3.8", "query-string": "^7.1.3", "react-fast-compare": "^3.2.2", "react-is": "^19.1.0", "react-native-drawer-layout": "^4.2.2", "react-native-screens": "^4.25.2", "server-only": "^0.0.1", "sf-symbols-typescript": "^2.1.0", "shallowequal": "^1.1.0", "vaul": "^1.1.2" }, "peerDependencies": { "@testing-library/react-native": ">= 13.2.0", "expo": "*", "expo-constants": "^56.0.16", "expo-linking": "^56.0.12", "react": "*", "react-dom": "*", "react-native": "*", "react-native-gesture-handler": "*", "react-native-reanimated": "*", "react-native-safe-area-context": ">= 5.4.0", "react-native-web": "*", "react-server-dom-webpack": "~19.0.4 || ~19.1.5 || ~19.2.4" }, "optionalPeers": ["@testing-library/react-native", "react-dom", "react-native-gesture-handler", "react-native-reanimated", "react-native-web", "react-server-dom-webpack"] }, "sha512-T7MSugHfj6XDrVJG8dCkP5EEAWeCkPrkkxqKCqCRokXmBKTAiRGXsmPsgHzOXhr/5MxGDJXhj5ON19uWoCevDA=="], + "expo-router": ["expo-router@56.2.10", "", { "dependencies": { "@expo/log-box": "^56.0.13", "@expo/metro-runtime": "^56.0.15", "@expo/schema-utils": "^56.0.0", "@expo/ui": "^56.0.17", "@radix-ui/react-slot": "^1.2.0", "@radix-ui/react-tabs": "^1.1.12", "@react-native-masked-view/masked-view": "^0.3.2", "@testing-library/jest-dom": "^6.9.1", "@testing-library/user-event": "^14.6.1", "client-only": "^0.0.1", "color": "^4.2.3", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "expo-glass-effect": "^56.0.4", "expo-server": "^56.0.5", "expo-symbols": "^56.0.6", "fast-deep-equal": "^3.1.3", "invariant": "^2.2.4", "nanoid": "^3.3.8", "query-string": "^7.1.3", "react-fast-compare": "^3.2.2", "react-is": "^19.1.0", "react-native-drawer-layout": "^4.2.2", "react-native-screens": "^4.25.2", "server-only": "^0.0.1", "sf-symbols-typescript": "^2.1.0", "shallowequal": "^1.1.0", "standard-navigation": "^0.0.5", "vaul": "^1.1.2" }, "peerDependencies": { "@testing-library/react-native": ">= 13.2.0", "expo": "*", "expo-constants": "^56.0.18", "expo-linking": "^56.0.14", "react": "*", "react-dom": "*", "react-native": "*", "react-native-gesture-handler": "*", "react-native-reanimated": "*", "react-native-safe-area-context": ">= 5.4.0", "react-native-web": "*", "react-server-dom-webpack": "~19.0.4 || ~19.1.5 || ~19.2.4" }, "optionalPeers": ["@testing-library/react-native", "react-dom", "react-native-gesture-handler", "react-native-reanimated", "react-native-web", "react-server-dom-webpack"] }, "sha512-u7WcdsFAjSrQS7Bdb1VbNPE3xNcd/BZ6qXSS31UAJKhaYIb+ik3jJSy/W5kY3qKipwbwlo3CSb1WnZ2XYs7F+Q=="], "expo-screen-orientation": ["expo-screen-orientation@56.0.5", "", { "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-Puf4L/cgM8z45Z2fwZzJtlVGSk0ZM/l3gBqXm50bKTACmUk8P8fr7HVbDfs8reyoZuEKKFZJ0VlnKo5i6cSotQ=="], "expo-secure-store": ["expo-secure-store@56.0.4", "", { "peerDependencies": { "expo": "*" } }, "sha512-hjEi/gmpdFFJ9lYbdp3k3p/WchV7Gi0Qt8jt/m/0WJadqQrskafHAlDxbZkII1cN3Yd7zp9Lvkeq3UfGhSwirQ=="], - "expo-server": ["expo-server@56.0.4", "", {}, "sha512-4dJ57KuAwDl7eQGD6aG9kTzBIftWAfHH1+6Zxy7NcPCBrKYis3/H5enGUz1asH8HHhONXfJ5BdJqfEWAEAgWxA=="], + "expo-server": ["expo-server@56.0.5", "", {}, "sha512-SmM2p2g3Jrktpiazcst+OxhjSzOHXKAY4BPURHYHXvApzzoybMmrNF4IEZ8DKZ145BhSe4ydAmlEFCRTsdtgUQ=="], - "expo-sharing": ["expo-sharing@56.0.14", "", { "dependencies": { "@expo/config-plugins": "^56.0.8", "@expo/config-types": "^56.0.5", "@expo/plist": "^0.7.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-Hu7pm3U9vn9NFGBe5EUM6ct6wBhAc7Zgl5koOYpJnMvL6n85bkIA8sLvvxB6V+p4JRoh3TD6xXpOIr23qwsV2w=="], + "expo-sharing": ["expo-sharing@56.0.17", "", { "dependencies": { "@expo/config-plugins": "^56.0.8", "@expo/config-types": "^56.0.5", "@expo/plist": "^0.7.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-FqN7/UBau0PJ2O8OeMYS/fwE+6UMtdoDeGxsRoaileK0w30bXC92MuT7z4ujnk4mF9ZZBjS8axbGOgrZ6JWBEA=="], "expo-splash-screen": ["expo-splash-screen@56.0.10", "", { "dependencies": { "@expo/config-plugins": "~56.0.8", "@expo/image-utils": "^0.10.1", "xml2js": "0.6.0" }, "peerDependencies": { "expo": "*" } }, "sha512-vDIlo8hzt9HlCZQ0kSY66v83D1WEXOJbVMeyPDfXDu9tbDdPMNUyDpi4WGJXikAjxnAKfbt5Mv5NnEbxINy+VA=="], "expo-status-bar": ["expo-status-bar@56.0.4", "", { "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-IGs/fDfkHXofy2ZQrGiXayhFK04HB85FZXorhcEhDZEcqASKgSqpak+HwUtAaR0MeTJwWyHNF7I6VmVbbp8EcA=="], - "expo-symbols": ["expo-symbols@56.0.5", "", { "dependencies": { "@expo-google-fonts/material-symbols": "^0.4.1", "sf-symbols-typescript": "^2.0.0" }, "peerDependencies": { "expo": "*", "expo-font": "*", "react": "*", "react-native": "*" } }, "sha512-RIukH0Xo80C7RU8qreipL2SPy2Py+Km8JFPbCmbPQpHkM3DW9Znlmg6VfhzbtUOlO5EuNSF0lAJ3l2VJi6qYrw=="], + "expo-symbols": ["expo-symbols@56.0.6", "", { "dependencies": { "@expo-google-fonts/material-symbols": "^0.4.1", "sf-symbols-typescript": "^2.0.0" }, "peerDependencies": { "expo": "*", "expo-font": "*", "react": "*", "react-native": "*" } }, "sha512-BrA81DjcNafdj7gXVhdrExb9LtUiSVyOf/NavyMmDAHgHMY1GqeR5cnn1PSAZeYKnSgQhee/H89XUpAxtog5hg=="], "expo-system-ui": ["expo-system-ui@56.0.5", "", { "dependencies": { "@react-native/normalize-colors": "0.85.3", "debug": "^4.3.2" }, "peerDependencies": { "expo": "*", "react-native": "*", "react-native-web": "*" }, "optionalPeers": ["react-native-web"] }, "sha512-n1MmnUArV4cc3gVed9fGtluPme00PE9axKVx+NHbKxHFMam5l4GcOI7PxbYKFNx8o7WA1LRD7eLW33agmZrxGg=="], - "expo-task-manager": ["expo-task-manager@56.0.15", "", { "dependencies": { "unimodules-app-loader": "~56.0.0" }, "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-8vbKYocXJHv27++9AubVaEvVujTdt5Z10XddaxHAhWO60uw1Zom6yRjSAayRbZ5hNFA1c72KfA2vOETXZR9IGg=="], + "expo-task-manager": ["expo-task-manager@56.0.18", "", { "dependencies": { "unimodules-app-loader": "~56.0.0" }, "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-abTKDhlZ572wSwNuZ9HkDw6rl+kKLq0TkqheIEbGoRkMQVEGV3D5GYYY0gg84TO/HvAqiipdcBFQH8+9uHj70Q=="], "expo-updates-interface": ["expo-updates-interface@56.0.2", "", { "peerDependencies": { "expo": "*" } }, "sha512-eWTwSZ9y8vrULG2oBn2TQSSIwBGSq/TxGJ3jY6tuVS2FWH/ASRIiKs3zkUZTRoC3ZuV2alz0mUClYV7nNrFx8g=="], @@ -1369,10 +1358,6 @@ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "msgpackr": ["msgpackr@2.0.2", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.4" } }, "sha512-c5hYOXFbP79Slh6Dzd2wzk+jnV7mX1UxfMYtilnY1NmalXPqG8DGb5cYCMBrW4AsH3zekBBZd4QrKz9NhtvYLQ=="], - - "msgpackr-extract": ["msgpackr-extract@3.0.4", "", { "dependencies": { "node-gyp-build-optional-packages": "5.2.2" }, "optionalDependencies": { "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.4", "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.4", "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.4", "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.4", "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.4", "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.4" }, "bin": { "download-msgpackr-prebuilds": "bin/download-prebuilds.js" } }, "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw=="], - "multitars": ["multitars@1.0.0", "", {}, "sha512-H/J4fMLedtudftaYMOg7ajzLYgT3/rwbWVJbqr/iUgB8DQztn38ys5HOqI1CzSxx8QhXXwOOnnBvd4v3jG5+Mg=="], "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], @@ -1389,8 +1374,6 @@ "node-forge": ["node-forge@1.4.0", "", {}, "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ=="], - "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], - "node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="], "node-releases": ["node-releases@2.0.46", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="], @@ -1739,6 +1722,8 @@ "stacktrace-parser": ["stacktrace-parser@0.1.11", "", { "dependencies": { "type-fest": "^0.7.1" } }, "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg=="], + "standard-navigation": ["standard-navigation@0.0.5", "", {}, "sha512-YAmzwAiiQVocZxO/VGPFiQHcu5pKiz09QIGC0MK6aRMoa3E0QkoTQgcqJr7ZZ3OMiNhu4DkaGElFI5htjOIDbw=="], + "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], "stream-buffers": ["stream-buffers@2.2.0", "", {}, "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg=="], @@ -1823,7 +1808,7 @@ "type-is": ["type-is@2.1.0", "", { "dependencies": { "content-type": "^2.0.0", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA=="], - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], "ua-parser-js": ["ua-parser-js@0.7.41", "", { "bin": { "ua-parser-js": "script/cli.js" } }, "sha512-O3oYyCMPYgNNHuO7Jjk3uacJWZF8loBgwrfd/5LE/HyZ3lUIOdniQ7DNXJcIgZbwioZxk0fLfI4EVnetdiX5jg=="], @@ -1969,8 +1954,6 @@ "@expo/image-utils/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], - "@expo/metro-config/@babel/core": ["@babel/core@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw=="], - "@expo/metro-config/getenv": ["getenv@2.0.0", "", {}, "sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ=="], "@expo/metro-config/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], @@ -1981,6 +1964,8 @@ "@expo/require-utils/@babel/core": ["@babel/core@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw=="], + "@expo/ws-tunnel/ws": ["ws@8.21.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g=="], + "@jest/types/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], "@jimp/png/pngjs": ["pngjs@6.0.0", "", {}, "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg=="], diff --git a/package.json b/package.json index 588ada9a..0c4715d3 100644 --- a/package.json +++ b/package.json @@ -30,9 +30,9 @@ "dependencies": { "@bottom-tabs/react-navigation": "1.2.0", "@douglowder/expo-av-route-picker-view": "^0.0.5", - "@expo/metro-runtime": "~56.0.13", + "@expo/metro-runtime": "~56.0.15", "@expo/react-native-action-sheet": "^4.1.1", - "@expo/ui": "~56.0.14", + "@expo/ui": "~56.0.17", "@expo/vector-icons": "^15.0.3", "@gorhom/bottom-sheet": "5.2.14", "@jellyfin/sdk": "^0.13.0", @@ -45,35 +45,35 @@ "@tanstack/react-query": "5.100.14", "@tanstack/react-query-persist-client": "^5.100.14", "axios": "^1.7.9", - "expo": "~56.0.6", + "expo": "~56.0.11", "expo-application": "~56.0.3", - "expo-asset": "~56.0.15", - "expo-audio": "~56.0.11", - "expo-background-task": "~56.0.15", + "expo-asset": "~56.0.17", + "expo-audio": "~56.0.12", + "expo-background-task": "~56.0.18", "expo-blur": "~56.0.3", "expo-brightness": "~56.0.5", - "expo-build-properties": "~56.0.15", - "expo-camera": "~56.0.7", - "expo-constants": "~56.0.16", + "expo-build-properties": "~56.0.18", + "expo-camera": "~56.0.8", + "expo-constants": "~56.0.18", "expo-crypto": "~56.0.4", - "expo-dev-client": "~56.0.16", + "expo-dev-client": "~56.0.20", "expo-device": "~56.0.4", - "expo-font": "~56.0.5", + "expo-font": "~56.0.6", "expo-haptics": "~56.0.3", - "expo-image": "~56.0.9", + "expo-image": "~56.0.11", "expo-linear-gradient": "~56.0.4", - "expo-linking": "~56.0.12", + "expo-linking": "~56.0.14", "expo-localization": "~56.0.6", - "expo-location": "~56.0.14", - "expo-notifications": "~56.0.14", - "expo-router": "~56.2.7", + "expo-location": "~56.0.17", + "expo-notifications": "~56.0.17", + "expo-router": "~56.2.10", "expo-screen-orientation": "~56.0.5", "expo-secure-store": "~56.0.4", - "expo-sharing": "~56.0.14", + "expo-sharing": "~56.0.17", "expo-splash-screen": "~56.0.10", "expo-status-bar": "~56.0.4", "expo-system-ui": "~56.0.5", - "expo-task-manager": "~56.0.15", + "expo-task-manager": "~56.0.18", "expo-web-browser": "~56.0.5", "i18next": "^26.3.0", "jotai": "2.20.0", @@ -128,6 +128,7 @@ "@react-native-tvos/config-tv": "0.1.6", "@types/jest": "29.5.14", "@types/lodash": "4.17.24", + "@types/node": "^18.19.130", "@types/react": "~19.2.10", "@types/react-test-renderer": "19.1.0", "cross-env": "10.1.0", @@ -135,7 +136,7 @@ "husky": "9.1.7", "lint-staged": "17.0.5", "react-test-renderer": "19.2.3", - "typescript": "5.9.3" + "typescript": "6.0.3" }, "expo": { "doctor": { @@ -143,6 +144,7 @@ "exclude": [ "react-native-google-cast", "react-native-udp", + "react-native-track-player", "@jellyfin/sdk" ], "listUnknownPackages": false diff --git a/scripts/typecheck.js b/scripts/typecheck.js index ea1f4bea..81a2c9bc 100644 --- a/scripts/typecheck.js +++ b/scripts/typecheck.js @@ -140,7 +140,16 @@ function runTypeCheck() { const extraArgs = process.argv.slice(2); // Prefer local TypeScript binary when available - const runnerArgs = ["-p", "tsconfig.json", "--noEmit", ...extraArgs]; + // --pretty false: TS 6 enables pretty output even when piped, which breaks + // the line-based error parser below + const runnerArgs = [ + "-p", + "tsconfig.json", + "--noEmit", + "--pretty", + "false", + ...extraArgs, + ]; let execArgs = null; try { const tscBin = require.resolve("typescript/bin/tsc"); diff --git a/tsconfig.json b/tsconfig.json index 69354e8d..ecd844cd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,6 +7,8 @@ "paths": { "@/*": ["./*"] }, + // TS 6.0: "types" now defaults to [] (no auto-inclusion of node_modules/@types) + "types": ["node", "jest"], "incremental": true, "tsBuildInfoFile": ".tsbuildinfo", "skipLibCheck": true, From 7983c68b9f70df2ee74898359f43942ede54c15f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 21:00:59 +0200 Subject: [PATCH 08/26] chore(deps): Lock file maintenance (#1706) --- bun.lock | 284 ++++++++++++++++++++++++++----------------------------- 1 file changed, 135 insertions(+), 149 deletions(-) diff --git a/bun.lock b/bun.lock index e9482718..7f6baa66 100644 --- a/bun.lock +++ b/bun.lock @@ -190,7 +190,7 @@ "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA=="], - "@babel/plugin-transform-arrow-functions": ["@babel/plugin-transform-arrow-functions@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA=="], + "@babel/plugin-transform-arrow-functions": ["@babel/plugin-transform-arrow-functions@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ=="], "@babel/plugin-transform-async-generator-functions": ["@babel/plugin-transform-async-generator-functions@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-remap-async-to-generator": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA=="], @@ -198,11 +198,11 @@ "@babel/plugin-transform-block-scoping": ["@babel/plugin-transform-block-scoping@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ=="], - "@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.27.1", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA=="], + "@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.29.7", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA=="], "@babel/plugin-transform-class-static-block": ["@babel/plugin-transform-class-static-block@7.29.7", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A=="], - "@babel/plugin-transform-classes": ["@babel/plugin-transform-classes@7.28.4", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/traverse": "^7.28.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA=="], + "@babel/plugin-transform-classes": ["@babel/plugin-transform-classes@7.29.7", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-globals": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-replace-supers": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g=="], "@babel/plugin-transform-destructuring": ["@babel/plugin-transform-destructuring@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg=="], @@ -218,13 +218,13 @@ "@babel/plugin-transform-named-capturing-groups-regex": ["@babel/plugin-transform-named-capturing-groups-regex@7.29.7", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ=="], - "@babel/plugin-transform-nullish-coalescing-operator": ["@babel/plugin-transform-nullish-coalescing-operator@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA=="], + "@babel/plugin-transform-nullish-coalescing-operator": ["@babel/plugin-transform-nullish-coalescing-operator@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg=="], "@babel/plugin-transform-object-rest-spread": ["@babel/plugin-transform-object-rest-spread@7.29.7", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/plugin-transform-destructuring": "^7.29.7", "@babel/plugin-transform-parameters": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A=="], "@babel/plugin-transform-optional-catch-binding": ["@babel/plugin-transform-optional-catch-binding@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng=="], - "@babel/plugin-transform-optional-chaining": ["@babel/plugin-transform-optional-chaining@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg=="], + "@babel/plugin-transform-optional-chaining": ["@babel/plugin-transform-optional-chaining@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ=="], "@babel/plugin-transform-parameters": ["@babel/plugin-transform-parameters@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g=="], @@ -248,13 +248,13 @@ "@babel/plugin-transform-runtime": ["@babel/plugin-transform-runtime@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xmAscdE/AsqRW7vutbPNoUmu/nF5SrLKPs7aoJgEjo35lLKA/Bc0i2rMv/hr1+Y0o1bQCiVtith3u2vdgRL39Q=="], - "@babel/plugin-transform-shorthand-properties": ["@babel/plugin-transform-shorthand-properties@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ=="], + "@babel/plugin-transform-shorthand-properties": ["@babel/plugin-transform-shorthand-properties@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg=="], - "@babel/plugin-transform-template-literals": ["@babel/plugin-transform-template-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg=="], + "@babel/plugin-transform-template-literals": ["@babel/plugin-transform-template-literals@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA=="], "@babel/plugin-transform-typescript": ["@babel/plugin-transform-typescript@7.29.7", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-create-class-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", "@babel/plugin-syntax-typescript": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw=="], - "@babel/plugin-transform-unicode-regex": ["@babel/plugin-transform-unicode-regex@7.27.1", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw=="], + "@babel/plugin-transform-unicode-regex": ["@babel/plugin-transform-unicode-regex@7.29.7", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA=="], "@babel/preset-typescript": ["@babel/preset-typescript@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "@babel/plugin-syntax-jsx": "^7.29.7", "@babel/plugin-transform-modules-commonjs": "^7.29.7", "@babel/plugin-transform-typescript": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ=="], @@ -296,15 +296,15 @@ "@expo-google-fonts/material-symbols": ["@expo-google-fonts/material-symbols@0.4.38", "", {}, "sha512-IJkBtN1o8u9BW5fvSii1MyHPQ7Q0HxbWcVBvOrOzgMLpVtZw7R2w94wBTVR7kZwv3w1JNTESMmLA5Sqn1+Z36A=="], - "@expo/cli": ["@expo/cli@56.1.15", "", { "dependencies": { "@expo/code-signing-certificates": "^0.0.6", "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.8", "@expo/devcert": "^1.2.1", "@expo/env": "~2.3.0", "@expo/image-utils": "^0.10.1", "@expo/inline-modules": "^0.0.11", "@expo/json-file": "^10.2.0", "@expo/log-box": "^56.0.13", "@expo/metro": "~56.0.0", "@expo/metro-config": "~56.0.14", "@expo/metro-file-map": "^56.0.3", "@expo/osascript": "^2.6.0", "@expo/package-manager": "^1.12.1", "@expo/plist": "^0.7.0", "@expo/prebuild-config": "^56.0.15", "@expo/require-utils": "^56.1.3", "@expo/router-server": "^56.0.13", "@expo/schema-utils": "^56.0.0", "@expo/spawn-async": "^1.8.0", "@expo/ws-tunnel": "^2.0.0", "@expo/xcpretty": "^4.4.4", "@react-native/dev-middleware": "0.85.3", "accepts": "^1.3.8", "arg": "^5.0.2", "bplist-creator": "0.1.0", "bplist-parser": "^0.3.1", "chalk": "^4.0.0", "ci-info": "^3.3.0", "compression": "^1.7.4", "connect": "^3.7.0", "debug": "^4.3.4", "dnssd-advertise": "^1.1.4", "expo-server": "^56.0.5", "fetch-nodeshim": "^0.4.10", "getenv": "^2.0.0", "glob": "^13.0.0", "lan-network": "^0.2.1", "multitars": "^1.0.0", "node-forge": "^1.3.3", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "picomatch": "^4.0.4", "pretty-format": "^29.7.0", "progress": "^2.0.3", "prompts": "^2.3.2", "resolve-from": "^5.0.0", "semver": "^7.6.0", "send": "^0.19.0", "slugify": "^1.3.4", "stacktrace-parser": "^0.1.10", "structured-headers": "^0.4.1", "terminal-link": "^2.1.1", "toqr": "^0.1.1", "wrap-ansi": "^7.0.0", "ws": "^8.12.1", "zod": "^3.25.76" }, "peerDependencies": { "expo": "*", "expo-router": "*", "react-native": "*" }, "optionalPeers": ["expo-router", "react-native"], "bin": { "expo-internal": "main.js" } }, "sha512-ik6++YzURB2d/mSEfYwbuNa19uOWZwVHy9THCQ/pPr6mzplKl4w9I4nlYF9lx7oluNC3NvxsSZ8/rgpVKEOJTA=="], + "@expo/cli": ["@expo/cli@56.1.16", "", { "dependencies": { "@expo/code-signing-certificates": "^0.0.6", "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.9", "@expo/devcert": "^1.2.1", "@expo/env": "~2.3.0", "@expo/image-utils": "^0.10.1", "@expo/inline-modules": "^0.0.12", "@expo/json-file": "^10.2.0", "@expo/log-box": "^56.0.13", "@expo/metro": "~56.0.0", "@expo/metro-config": "~56.0.14", "@expo/metro-file-map": "^56.0.3", "@expo/osascript": "^2.6.0", "@expo/package-manager": "^1.12.1", "@expo/plist": "^0.7.0", "@expo/prebuild-config": "^56.0.16", "@expo/require-utils": "^56.1.3", "@expo/router-server": "^56.0.14", "@expo/schema-utils": "^56.0.0", "@expo/spawn-async": "^1.8.0", "@expo/ws-tunnel": "^2.0.0", "@expo/xcpretty": "^4.4.4", "@react-native/dev-middleware": "0.85.3", "accepts": "^1.3.8", "arg": "^5.0.2", "bplist-creator": "0.1.0", "bplist-parser": "^0.3.1", "chalk": "^4.0.0", "ci-info": "^3.3.0", "compression": "^1.7.4", "connect": "^3.7.0", "debug": "^4.3.4", "dnssd-advertise": "^1.1.4", "expo-server": "^56.0.5", "fetch-nodeshim": "^0.4.10", "getenv": "^2.0.0", "glob": "^13.0.0", "lan-network": "^0.2.1", "multitars": "^1.0.0", "node-forge": "^1.3.3", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "picomatch": "^4.0.4", "pretty-format": "^29.7.0", "progress": "^2.0.3", "prompts": "^2.3.2", "resolve-from": "^5.0.0", "semver": "^7.6.0", "send": "^0.19.0", "slugify": "^1.3.4", "stacktrace-parser": "^0.1.10", "structured-headers": "^0.4.1", "terminal-link": "^2.1.1", "toqr": "^0.1.1", "wrap-ansi": "^7.0.0", "ws": "^8.12.1", "zod": "^3.25.76" }, "peerDependencies": { "expo": "*", "expo-router": "*", "react-native": "*" }, "optionalPeers": ["expo-router", "react-native"], "bin": { "expo-internal": "main.js" } }, "sha512-VBQn0mqAwc67b9Cn0RVXyeodghomAx5xGRhA/bXaQzuxDjMQk0zIOb6pXMZX7yiIwJW66UZt/zQiJNSv6aWJYw=="], "@expo/code-signing-certificates": ["@expo/code-signing-certificates@0.0.6", "", { "dependencies": { "node-forge": "^1.3.3" } }, "sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w=="], "@expo/config": ["@expo/config@56.0.9", "", { "dependencies": { "@expo/config-plugins": "~56.0.8", "@expo/config-types": "^56.0.5", "@expo/json-file": "^10.2.0", "@expo/require-utils": "^56.1.3", "deepmerge": "^4.3.1", "getenv": "^2.0.0", "glob": "^13.0.0", "resolve-workspace-root": "^2.0.0", "semver": "^7.6.0", "slugify": "^1.3.4" } }, "sha512-/lqFeWGSrhpKJVP8tTN8LjuoIe8u8q2w7FzBL0C+wHgl+WM8l1qUIEYWy/sMvsG/NbpUIUsDHJRhQvOkU58eIw=="], - "@expo/config-plugins": ["@expo/config-plugins@56.0.8", "", { "dependencies": { "@expo/config-types": "^56.0.5", "@expo/json-file": "~10.2.0", "@expo/plist": "^0.7.0", "@expo/require-utils": "^56.1.3", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", "glob": "^13.0.0", "semver": "^7.5.4", "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } }, "sha512-phTuyBhgVLfqUHMjQkAfRtbyoY6yTxoKja1awtpVnEkoJDxPJuXx1KX5uvq1eZtt4bJQ08OBJ6P95INqRSHpRg=="], + "@expo/config-plugins": ["@expo/config-plugins@56.0.9", "", { "dependencies": { "@expo/config-types": "^56.0.6", "@expo/json-file": "~10.2.0", "@expo/plist": "^0.7.0", "@expo/require-utils": "^56.1.3", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", "glob": "^13.0.0", "semver": "^7.5.4", "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } }, "sha512-/6a/S9USwx8OC9tGjHxbviLFiBHyueN3aoNWMLvWDEJoZ1CIVW800ZBzwXq/FYNK2qzcN1LxFmQtzD1zeFQKNA=="], - "@expo/config-types": ["@expo/config-types@56.0.5", "", {}, "sha512-GsAHO/MwW9ZRdgnmyfRXqVGLCP/zejD6rWnp5OROp8mBGRObKm4HfrjlUyT1skjMwCj1OrURx9ZfIc6yeBAkIA=="], + "@expo/config-types": ["@expo/config-types@56.0.6", "", {}, "sha512-4Y6Aum5J4Re5NnxGVofRNe1aDwUBOmWhQYkynZsqzRtX/zEA1ADUeyHXuEckv9YD9djiyT7bKtLt5gKL3mA6VQ=="], "@expo/devcert": ["@expo/devcert@1.2.1", "", { "dependencies": { "@expo/sudo-prompt": "^9.3.1", "debug": "^3.1.0" } }, "sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA=="], @@ -320,7 +320,7 @@ "@expo/image-utils": ["@expo/image-utils@0.10.1", "", { "dependencies": { "@expo/require-utils": "^56.1.3", "@expo/spawn-async": "^1.8.0", "chalk": "^4.0.0", "getenv": "^2.0.0", "jimp-compact": "0.16.1", "parse-png": "^2.1.0", "semver": "^7.6.0" } }, "sha512-YDeefvmYdihS7Wp3ESDUVnOgOSWmj2Cczm9lVNDdm4MqQLdAKm/LPYg83HtFQPfefRlAxyHrQR/O9kIXN9C1Wg=="], - "@expo/inline-modules": ["@expo/inline-modules@0.0.11", "", { "dependencies": { "@expo/config-plugins": "~56.0.8" } }, "sha512-ZlIfKL61DPnW8YUTdMEjMA31xrDDV6p7Xi8rWYyhd5qXBV8MwGwjuJ7vKeaVaMjRqxJk1N9lv7zlfyvQpRCNNw=="], + "@expo/inline-modules": ["@expo/inline-modules@0.0.12", "", { "dependencies": { "@expo/config-plugins": "~56.0.9" } }, "sha512-SNIZr/HWfIQPTZBwmukItxpc7ws1SgMUywYq1dnQvDknQDjJcuWAasIRFUjsK15yQ1xb4G5CP7VHtbN3V4lENg=="], "@expo/json-file": ["@expo/json-file@10.2.0", "", { "dependencies": { "@babel/code-frame": "^7.20.0", "json5": "^2.2.3" } }, "sha512-S6XzKe3R9GQeHiUPXc3xJjOv2VJhOEwFYf7xdC2z2cUqt3kZJ9mSO877sNQloVdnW/SUCtPY3bexlM7nwq+CAQ=="], @@ -342,7 +342,7 @@ "@expo/plist": ["@expo/plist@0.7.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-vrpryU1GoqSIRNqRB2D3IjXDmzNYfiQpEF6AH/xknlD7eiYmEDt3mb26V7cLcedcPG8PY/1xWHdBXVQJfEAh6Q=="], - "@expo/prebuild-config": ["@expo/prebuild-config@56.0.15", "", { "dependencies": { "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.8", "@expo/config-types": "^56.0.5", "@expo/image-utils": "^0.10.1", "@expo/json-file": "^10.2.0", "@react-native/normalize-colors": "0.85.3", "debug": "^4.3.1", "expo-modules-autolinking": "~56.0.15", "resolve-from": "^5.0.0", "semver": "^7.6.0" } }, "sha512-6GC+QjdCkzp/5wjsqgfu/B2+2yf5MyZMtzf9szIPrLt9uKhzV2PdyM0vU0kvbj1YT8weHCtO7bsrzimman0sjA=="], + "@expo/prebuild-config": ["@expo/prebuild-config@56.0.16", "", { "dependencies": { "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.9", "@expo/config-types": "^56.0.6", "@expo/image-utils": "^0.10.1", "@expo/json-file": "^10.2.0", "@react-native/normalize-colors": "0.85.3", "debug": "^4.3.1", "expo-modules-autolinking": "~56.0.16", "resolve-from": "^5.0.0", "semver": "^7.6.0" } }, "sha512-ce9ENfPWO4WUWUVQz0OaqL3KYZ7YofP8O35ncnn7CHCaKwQ7BqxcCGJbh+qvP1UjlWeNB3CjHPrXXJ3bnZwlJw=="], "@expo/react-native-action-sheet": ["@expo/react-native-action-sheet@4.1.1", "", { "dependencies": { "@types/hoist-non-react-statics": "^3.3.1", "hoist-non-react-statics": "^3.3.0" }, "peerDependencies": { "react": ">=18.0.0" } }, "sha512-4KRaba2vhqDRR7ObBj6nrD5uJw8ePoNHdIOMETTpgGTX7StUbrF4j/sfrP1YUyaPEa1P8FXdwG6pB+2WtrJd1A=="], @@ -358,7 +358,7 @@ "@expo/sudo-prompt": ["@expo/sudo-prompt@9.3.2", "", {}, "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw=="], - "@expo/ui": ["@expo/ui@56.0.17", "", { "dependencies": { "sf-symbols-typescript": "^2.1.0", "vaul": "^1.1.2" }, "peerDependencies": { "@babel/core": "*", "expo": "*", "react": "*", "react-dom": "*", "react-native": "*", "react-native-reanimated": "*", "react-native-worklets": "*" }, "optionalPeers": ["@babel/core", "react-dom", "react-native-reanimated", "react-native-worklets"] }, "sha512-Jos9oGzurMDngrSWJesX3LSykPRvkUdANxtq2sPKBc6bAjadtZJCkthAYMaE3P9L5xrzbNRFo+2O76cRP0iYPw=="], + "@expo/ui": ["@expo/ui@56.0.18", "", { "dependencies": { "sf-symbols-typescript": "^2.1.0", "vaul": "^1.1.2" }, "peerDependencies": { "@babel/core": "*", "expo": "*", "react": "*", "react-dom": "*", "react-native": "*", "react-native-reanimated": "*", "react-native-worklets": "*" }, "optionalPeers": ["@babel/core", "react-dom", "react-native-reanimated", "react-native-worklets"] }, "sha512-2XgH5obigGtXm8zlb/V3g87NSiIcBcJ1xoQOEQYPoExL1DCNsHzaIecTh1XG/f/45ardo4OZNJwpbfYJ9X3qrQ=="], "@expo/vector-icons": ["@expo/vector-icons@15.1.1", "", { "peerDependencies": { "expo-font": ">=14.0.4", "react": "*", "react-native": "*" } }, "sha512-Iu2VkcoI5vygbtYngm7jb4ifxElNVXQYdDrYkT7UCEIiKLeWnQY0wf2ZhHZ+Wro6Sc5TaumpKUOqDRpLi5rkvw=="], @@ -418,7 +418,7 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@nodable/entities": ["@nodable/entities@2.1.0", "", {}, "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA=="], + "@nodable/entities": ["@nodable/entities@2.2.0", "", {}, "sha512-9uGyhaQavEUMC8AIddIjau4NsnsXhou+j5sBAGojCM1oxmQpVKTWR/9JxABD6UAv12vpIms55fPZKFQEhG6uBg=="], "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], @@ -426,47 +426,47 @@ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.4", "", {}, "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ=="], - "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="], + "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.10", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-IVVz4EvBcKjrzKgof714qDnz/SzQAkLA2Emh5edlHbgcE6fNd3Un6CJLlaYcnm8N4JmAtzQgse4dOKxcD2yc9g=="], - "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], + "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], - "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], + "@radix-ui/react-context": ["@radix-ui/react-context@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg=="], - "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw=="], + "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.17", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-dismissable-layer": "1.1.13", "@radix-ui/react-focus-guards": "1.1.4", "@radix-ui/react-focus-scope": "1.1.10", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-portal": "1.1.12", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-slot": "1.3.0", "@radix-ui/react-use-controllable-state": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TDTYmpdq8dI2+Xgvgj9AJ8Ghqq+Eph/TRVEdaFQPDItIY+6QSkU7MJMeevw1568Yw/2Ijz8BTphPSP2XejKphw=="], - "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="], + "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA=="], - "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], + "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.13", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-escape-keydown": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-2v+zNAWWe0ySxgC0D0yeXMPQ23xZVgXZTerTz+JKlmdRj6gfTqmCcR29jb6d290DezXPGgruHWDX/vYUebtErg=="], - "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], + "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-cot/aB/mOm0IYVYTTmQcEEK1M48lZWi8FlYe5nDPQQ8NYZUlXEFgncJ9p2Kzer3RKSrY7cTTpEMLZKNo9QoP5Q=="], - "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw=="], + "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.10", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fas/lXQqhVvqwAb64s5RFeHiHYElZ6SUQbZaNd6EkfhP/Al7wTIQ9WIR4QVX475tlu5yFCEdDcJH6/UwsZjMWw=="], - "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], + "@radix-ui/react-id": ["@radix-ui/react-id@1.1.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA=="], - "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], + "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.12", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m309havGzsjLHHaIX50G5PlvRs3xkgPCsGk/5PTvYm8D5q33yG0J7w/712PTOhid7NTaFETtnSXjngHQavvhVw=="], - "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], + "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.6", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-zdTk4PlUO0E18HnZ3wYbW0KkJJxWCdiNYp6g6X1PtONFhxVkg01vliTJAmwIszU6mHiyBOoW9P0rAugl5/hULQ=="], - "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], - "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA=="], + "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.13", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9gkwneI0guf8JDmrFxPjJF6Ozzgioyw+/lonYNCwefS9ZHA05er0BVHiXr+LbWGHxUfczvMY6G1oiZZi1VzjRw=="], - "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.3.0", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA=="], - "@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.13", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A=="], + "@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-roving-focus": "1.1.13", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-kxc9gI6/HfcU4nfMMVS3AmQK414kbU1IE6UCJmMmxjhO3cRPXOyYnmvyKD+ODt7q56nRq9l7Wovi6uaGwKgMlg=="], - "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], + "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw=="], - "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], + "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.3", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA=="], - "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], + "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.3", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA=="], - "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="], + "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.2", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-2uVLvLjgO7NZCWw01/FdqRwmA42J0BcjPMUCA+koFEOAb+zjqIP7SiFz/7zWPrKnVmSqr76Omq2ALyCuX4dhLw=="], - "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA=="], "@react-native-community/cli": ["@react-native-community/cli@20.1.3", "", { "dependencies": { "@react-native-community/cli-clean": "20.1.3", "@react-native-community/cli-config": "20.1.3", "@react-native-community/cli-doctor": "20.1.3", "@react-native-community/cli-server-api": "20.1.3", "@react-native-community/cli-tools": "20.1.3", "@react-native-community/cli-types": "20.1.3", "commander": "^9.4.1", "deepmerge": "^4.3.0", "execa": "^5.0.0", "find-up": "^5.0.0", "fs-extra": "^8.1.0", "graceful-fs": "^4.1.3", "picocolors": "^1.1.1", "prompts": "^2.4.2", "semver": "^7.5.2" }, "bin": { "rnc-cli": "build/bin.js" } }, "sha512-sLo8cu9JyFNfuuF1C+8NJ4DHE/PEFaXGd4enkcxi/OJjGG8+sOQrdjNQ4i+cVh/2c+ah1mEMwsYjc3z0+/MqSg=="], @@ -504,7 +504,7 @@ "@react-native/babel-plugin-codegen": ["@react-native/babel-plugin-codegen@0.85.3", "", { "dependencies": { "@babel/traverse": "^7.29.0", "@react-native/codegen": "0.85.3" } }, "sha512-Wc94zGfeFG8Njf9SHMPfYZP04kjigkOps6F1TYTvd7ZVXuGxqseCDgxc50LWcOhOCLypI9n3oVVqz81C3p44ZA=="], - "@react-native/babel-preset": ["@react-native/babel-preset@0.85.3", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-proposal-export-default-from": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-classes": "^7.25.4", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-for-of": "^7.24.7", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-react-display-name": "^7.24.7", "@babel/plugin-transform-react-jsx": "^7.25.2", "@babel/plugin-transform-react-jsx-self": "^7.24.7", "@babel/plugin-transform-react-jsx-source": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@react-native/babel-plugin-codegen": "0.85.3", "babel-plugin-syntax-hermes-parser": "0.33.3", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" } }, "sha512-fD7fxEhkJB/aF57tWoXjaAWpklfrExYZS3k6aXPP3BQ77DZY7gvf/b7dbirwjID6NVnP1JDRJyTuPBGr0K/vlw=="], + "@react-native/babel-preset": ["@react-native/babel-preset@0.86.0", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-proposal-export-default-from": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-classes": "^7.25.4", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-for-of": "^7.24.7", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-react-display-name": "^7.24.7", "@babel/plugin-transform-react-jsx": "^7.25.2", "@babel/plugin-transform-react-jsx-self": "^7.24.7", "@babel/plugin-transform-react-jsx-source": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@react-native/babel-plugin-codegen": "0.86.0", "babel-plugin-syntax-hermes-parser": "0.36.0", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" } }, "sha512-bYQcWiPySNvF4dns9Ls9gMmwgq66ohvM9Fwc/Kn8r85t66UNHxch3p1QwPiSorDelFauZwJbgo9+ReibTgvpbA=="], "@react-native/codegen": ["@react-native/codegen@0.85.3", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/parser": "^7.29.0", "hermes-parser": "0.33.3", "invariant": "^2.2.4", "nullthrows": "^1.1.1", "tinyglobby": "^0.2.15", "yargs": "^17.6.2" } }, "sha512-/JkS1lGLyzBWP1FbgDwaqEf7qShIC6pUC1M0a/YMAd/v4iqR24MRkQWe7jkYvcBQ2LpEhs5NGE9InhxSv21zCA=="], @@ -520,21 +520,21 @@ "@react-native/js-polyfills": ["@react-native/js-polyfills@0.85.3", "", {}, "sha512-U2+aMshIXf1uFn77tpBb/xhHWB9vkVrMpt7kkucAugF8hJKYTDGB587X7WwelHduK2KBfhl4giSv0rzZGoef9A=="], - "@react-native/metro-babel-transformer": ["@react-native/metro-babel-transformer@0.85.3", "", { "dependencies": { "@babel/core": "^7.25.2", "@react-native/babel-preset": "0.85.3", "hermes-parser": "0.33.3", "nullthrows": "^1.1.1" } }, "sha512-omuKq+r7jM4XvCMIlNMPP7Up3SyB8o5EAdZtF7YXniKyq7UOMBqhYHFqgsdOXr0lT+3ADf7VCJG3sb82jlBrrQ=="], + "@react-native/metro-babel-transformer": ["@react-native/metro-babel-transformer@0.86.0", "", { "dependencies": { "@babel/core": "^7.25.2", "@react-native/babel-preset": "0.86.0", "hermes-parser": "0.36.0", "nullthrows": "^1.1.1" } }, "sha512-SjKej3E5qIahqo/G+rSOrmJUQM44RyKtWtO+VfmKAAMoJWkBFomM22hTLKCIS5cdbIAJ9COAmU+KAi2wVSO0wQ=="], - "@react-native/metro-config": ["@react-native/metro-config@0.85.3", "", { "dependencies": { "@react-native/js-polyfills": "0.85.3", "@react-native/metro-babel-transformer": "0.85.3", "metro-config": "^0.84.3", "metro-runtime": "^0.84.3" } }, "sha512-sVo6HepUmCcpdfozEf91lA0FjpLNNZYu/Zi9FiYiAQTK8pzATXDVTqhvdxpFrQn435p5eUTSbllvbH/KN+bnyA=="], + "@react-native/metro-config": ["@react-native/metro-config@0.86.0", "", { "dependencies": { "@react-native/js-polyfills": "0.86.0", "@react-native/metro-babel-transformer": "0.86.0", "metro-config": "^0.84.3", "metro-runtime": "^0.84.3" } }, "sha512-7v+xbTeEci9ZcQ/Z1OqI4RXcqN69wSMDYL5BAMvOReZ7U04+aDQ0/SQhClYPn6x2/RxM4WzMKSAuNyLKqvYVtw=="], "@react-native/normalize-colors": ["@react-native/normalize-colors@0.85.3", "", {}, "sha512-hj0PScZEhIbcOvQV5yMKX3ha4XEIOy/SVE1Rrpp0beW0dpNLOgSC7KDxGewmDnIHK9YdQUXGY9eMEfShUMIaZw=="], - "@react-navigation/core": ["@react-navigation/core@7.17.5", "", { "dependencies": { "@react-navigation/routers": "^7.5.5", "escape-string-regexp": "^4.0.0", "fast-deep-equal": "^3.1.3", "nanoid": "^3.3.11", "query-string": "^7.1.3", "react-is": "^19.1.0", "use-latest-callback": "^0.2.4", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "react": ">= 18.2.0" } }, "sha512-6fDCwDTWC7DJn0SDb9DJGRlipaygHIc+2elpZBJI6Crl/2Pu+Z1d6W4jMJ2gZO6iHKf+Pe5sUiQ/uwepGprZtg=="], + "@react-navigation/core": ["@react-navigation/core@7.21.1", "", { "dependencies": { "@react-navigation/routers": "^7.6.0", "escape-string-regexp": "^4.0.0", "fast-deep-equal": "^3.1.3", "nanoid": "^3.3.11", "query-string": "^7.1.3", "react-is": "^19.1.0", "use-latest-callback": "^0.2.4", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "react": ">= 18.2.0" } }, "sha512-9eOK71VFEyJjm1bP8o4Gf7YYppWPZ+RdNIjTc+WbSM7AFEH0XXEIHkkhpIBuB416sDlRZ1CRxHk2frh1HPBZqw=="], - "@react-navigation/elements": ["@react-navigation/elements@2.9.19", "", { "dependencies": { "color": "^4.2.3", "use-latest-callback": "^0.2.4", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "@react-native-masked-view/masked-view": ">= 0.2.0", "@react-navigation/native": "^7.2.5", "react": ">= 18.2.0", "react-native": "*", "react-native-safe-area-context": ">= 4.0.0" }, "optionalPeers": ["@react-native-masked-view/masked-view"] }, "sha512-gBUvCZuUkOGw1KpLQEZIkByUz8RYPwXeoA6mZFJy9K1mxd8GdqHDMFCIoB0lfPz9rgrHj99RvtdlGZ/ZzkZv2A=="], + "@react-navigation/elements": ["@react-navigation/elements@2.9.25", "", { "dependencies": { "color": "^4.2.3", "use-latest-callback": "^0.2.4", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "@react-native-masked-view/masked-view": ">= 0.2.0", "@react-navigation/native": "^7.3.3", "react": ">= 18.2.0", "react-native": "*", "react-native-safe-area-context": ">= 4.0.0" }, "optionalPeers": ["@react-native-masked-view/masked-view"] }, "sha512-cV7Hny55aE/uge6f4UB0pbGQbFl3XjXLMW+lTBNuJs8P7a9tuf7dkkPHxxgnLIvxE+KJVI2K8CGabfDk4Ht0Sg=="], "@react-navigation/material-top-tabs": ["@react-navigation/material-top-tabs@7.4.28", "", { "dependencies": { "@react-navigation/elements": "^2.9.19", "color": "^4.2.3", "react-native-tab-view": "^4.3.0" }, "peerDependencies": { "@react-navigation/native": "^7.2.5", "react": ">= 18.2.0", "react-native": "*", "react-native-pager-view": ">= 6.0.0", "react-native-safe-area-context": ">= 4.0.0" } }, "sha512-WZHJSGV2PQOD2Vr9LF8apGvcsbDKukzF3Fhh8xVNIesqaSi9TPProv4dRw6YkenUkjvFVZYkOjvwAJOToePVpA=="], - "@react-navigation/native": ["@react-navigation/native@7.2.5", "", { "dependencies": { "@react-navigation/core": "^7.17.5", "escape-string-regexp": "^4.0.0", "fast-deep-equal": "^3.1.3", "nanoid": "^3.3.11", "use-latest-callback": "^0.2.4" }, "peerDependencies": { "react": ">= 18.2.0", "react-native": "*" } }, "sha512-01AAUQiiHQAfTabq+ZyU1/ZWq+AbB/J3v0CB0UTJSON6M6cuadWNsbChzrZUdqQvHrXvg96U5i2PQLJzK3+zpg=="], + "@react-navigation/native": ["@react-navigation/native@7.3.3", "", { "dependencies": { "@react-navigation/core": "^7.21.1", "escape-string-regexp": "^4.0.0", "fast-deep-equal": "^3.1.3", "nanoid": "^3.3.11", "standard-navigation": "^0.0.7", "use-latest-callback": "^0.2.4" }, "peerDependencies": { "react": ">= 18.2.0", "react-native": "*" } }, "sha512-VjZngfeiyJestZPT99CKHRi3qOR6XwnEEPWb6uHF/L7fBI6RBVP842iJf61MUHRTzsWPUT+epJqdf1wm8N5YkQ=="], - "@react-navigation/routers": ["@react-navigation/routers@7.5.5", "", { "dependencies": { "nanoid": "^3.3.11" } }, "sha512-9/hhMte12Kgu+pMnLfA4EWJ0OQmIEAMVMX06FPH2yGkEQSQ3JhhCN/GkcRikzQhtEi97VYYQA15umptBUShcOQ=="], + "@react-navigation/routers": ["@react-navigation/routers@7.6.0", "", { "dependencies": { "nanoid": "^3.3.11" } }, "sha512-lblhDXfS75jLc7G2K7BZGM+7cjqQXk13X/MA4fq/12r62zM+fBhhreLzYflSitrDDXFRJpSvJXy0ziiGU04Xow=="], "@shopify/flash-list": ["@shopify/flash-list@2.0.2", "", { "dependencies": { "tslib": "2.8.1" }, "peerDependencies": { "@babel/runtime": "*", "react": "*", "react-native": "*" } }, "sha512-zhlrhA9eiuEzja4wxVvotgXHtqd3qsYbXkQ3rsBfOgbFA9BVeErpDE/yEwtlIviRGEqpuFj/oU5owD6ByaNX+w=="], @@ -550,17 +550,17 @@ "@tanstack/pacer": ["@tanstack/pacer@0.18.0", "", { "dependencies": { "@tanstack/devtools-event-client": "^0.4.0", "@tanstack/store": "^0.8.0" } }, "sha512-qhCRSFei0hokQr3xYcQXqxsRD/LKlgHCxHXtKHrQoImp4x2Zu6tUOpUGVH4y2qexIrzSu3aibQBNNfC3Eay6Mg=="], - "@tanstack/query-core": ["@tanstack/query-core@5.100.14", "", {}, "sha512-5X41dGpxgeaHISCRW2oYwcSycZeULZzAunaudXT9ov1KOTj9xwt0CH6hbwqP1/z74ZWF7rYFnDpyYH07XFcZew=="], + "@tanstack/query-core": ["@tanstack/query-core@5.101.0", "", {}, "sha512-cQetA74EB+seWySv1TTKr828TnP0u39m6LykwDXIo84SNortpDkp30TMEjkqtYCNP9c40uT/iwl6MLiufEt0Ow=="], - "@tanstack/query-persist-client-core": ["@tanstack/query-persist-client-core@5.100.14", "", { "dependencies": { "@tanstack/query-core": "5.100.14" } }, "sha512-mn60cqoQO/xB6aHxp/hxlSj5mcdcTO4tjj4SXSz5MKzkaMZnvcEGySz3+cGQOT8McREN56fL41L0eR//v5RwNw=="], + "@tanstack/query-persist-client-core": ["@tanstack/query-persist-client-core@5.101.0", "", { "dependencies": { "@tanstack/query-core": "5.101.0" } }, "sha512-LH99WepGVLwlLfuOcQcPK7f3Xg/Gf+xlMMIj9xWu/8oQ3egnDzjr+a4HvEmi6PGob5SmGXvmDKZaH5+In9dzjw=="], - "@tanstack/query-sync-storage-persister": ["@tanstack/query-sync-storage-persister@5.100.14", "", { "dependencies": { "@tanstack/query-core": "5.100.14", "@tanstack/query-persist-client-core": "5.100.14" } }, "sha512-sDsiVjLJqslUdqIANGvRyB4hYpAooYj5R1fe2EzKfrSY7XufSe+AFBvirLgX/nL2uS1JeP4XeyUuG3TM0bAN9w=="], + "@tanstack/query-sync-storage-persister": ["@tanstack/query-sync-storage-persister@5.101.0", "", { "dependencies": { "@tanstack/query-core": "5.101.0", "@tanstack/query-persist-client-core": "5.101.0" } }, "sha512-UAGbsIJe9vkV/rbFxUBOPH27Eu6K17KuVLfK1mSy8qoSUJ4qt6JKGMxA8NMUoowbPG0ZnTfRt1Y5SFsqfqlfcA=="], "@tanstack/react-pacer": ["@tanstack/react-pacer@0.19.4", "", { "dependencies": { "@tanstack/pacer": "0.18.0", "@tanstack/react-store": "^0.8.0" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-coj8ULAuR0qFpjAKD44gTgRuZyjxU6Xu+IX5MwwYvr4e61OtZcJshaExoOBKpCGde0Edb12jDnzzj2Im13Qm9Q=="], "@tanstack/react-query": ["@tanstack/react-query@5.100.14", "", { "dependencies": { "@tanstack/query-core": "5.100.14" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-oOr6aRdSFEwWhzxEkD/9ZcItM3+LjBSkeVmadWKwUssAHTsqd/7bOjWrX4AbvEkoEhgAxzN0Xk6H/aYzXiYBAw=="], - "@tanstack/react-query-persist-client": ["@tanstack/react-query-persist-client@5.100.14", "", { "dependencies": { "@tanstack/query-persist-client-core": "5.100.14" }, "peerDependencies": { "@tanstack/react-query": "^5.100.14", "react": "^18 || ^19" } }, "sha512-lQSnbJva85o7jGcJiIDrA8s3VGGx9zaBCgAljm0H1QcScU2iaDYnPuRLg/xI0k0dC45pgg9RTvpgJx5iVHRsjA=="], + "@tanstack/react-query-persist-client": ["@tanstack/react-query-persist-client@5.101.0", "", { "dependencies": { "@tanstack/query-persist-client-core": "5.101.0" }, "peerDependencies": { "@tanstack/react-query": "^5.101.0", "react": "^18 || ^19" } }, "sha512-AUcdBgz8V6sM9axzdqkVmWjYSOETkhr6yAZSBnEFyZT2jo6vkFq3UrpRuxGs6fmhKMWv8FA+ZJGcbaKPaoAElQ=="], "@tanstack/react-store": ["@tanstack/react-store@0.8.1", "", { "dependencies": { "@tanstack/store": "0.8.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-XItJt+rG8c5Wn/2L/bnxys85rBpm0BfMbhb4zmPVLXAKY9POrp1xd6IbU4PKoOI+jSEGc3vntPRfLGSgXfE2Ig=="], @@ -594,7 +594,7 @@ "@types/node": ["@types/node@18.19.130", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="], - "@types/react": ["@types/react@19.2.15", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q=="], + "@types/react": ["@types/react@19.2.17", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw=="], "@types/react-test-renderer": ["@types/react-test-renderer@19.1.0", "", { "dependencies": { "@types/react": "*" } }, "sha512-XD0WZrHqjNrxA/MaR9O22w/RNidWR9YZmBdRGI7wcnWGrv/3dA8wKCJ8m63Sn+tLJhcjmuhOi629N66W6kgWzQ=="], @@ -638,7 +638,7 @@ "accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], - "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], + "acorn": ["acorn@8.17.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg=="], "agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], @@ -658,6 +658,8 @@ "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + "anynum": ["anynum@1.0.0", "", {}, "sha512-xjR9/zBVnUOP6ztMIIgShjsxui80nQUQH+5xJnvrYLs+90bF25/KJqaAi8mk+B4RDtX1Nspi6fmp4YTEts8SfA=="], + "appdirsjs": ["appdirsjs@1.2.7", "", {}, "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw=="], "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], @@ -676,7 +678,7 @@ "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - "axios": ["axios@1.16.1", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A=="], + "axios": ["axios@1.18.0", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, "sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw=="], "babel-plugin-polyfill-corejs2": ["babel-plugin-polyfill-corejs2@0.4.17", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-define-polyfill-provider": "^0.6.8", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w=="], @@ -698,11 +700,11 @@ "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "barcode-detector": ["barcode-detector@3.1.3", "", { "dependencies": { "zxing-wasm": "3.0.3" } }, "sha512-omL3/x26oU9jlR0gUQcGdXIjQtMlrUGKF7xRFO1RwrQkRkRU7WLz0mgQEsdUtYBm2uX3JH+HQLrKlyTS/BxZRw=="], + "barcode-detector": ["barcode-detector@3.2.0", "", { "dependencies": { "zxing-wasm": "3.1.0" } }, "sha512-MrT5TT058ptG5YB157pHLfXKVpp0BKEfQBOb8QvzTbatzmLDu85JJ0Gd/sCYwbwdwStJvxsYflrSN6D6E4Ndyw=="], "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.10.32", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.37", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig=="], "big-integer": ["big-integer@1.6.52", "", {}, "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg=="], @@ -712,7 +714,7 @@ "bmp-js": ["bmp-js@0.1.0", "", {}, "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw=="], - "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], + "body-parser": ["body-parser@2.3.0", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^2.0.0", "debug": "^4.4.3", "http-errors": "^2.0.1", "iconv-lite": "^0.7.2", "on-finished": "^2.4.1", "qs": "^6.15.2", "raw-body": "^3.0.2", "type-is": "^2.1.0" } }, "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw=="], "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], @@ -748,7 +750,7 @@ "camelize": ["camelize@1.0.1", "", {}, "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ=="], - "caniuse-lite": ["caniuse-lite@1.0.30001793", "", {}, "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA=="], + "caniuse-lite": ["caniuse-lite@1.0.30001799", "", {}, "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw=="], "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], @@ -794,13 +796,13 @@ "connect": ["connect@3.7.0", "", { "dependencies": { "debug": "2.6.9", "finalhandler": "1.1.2", "parseurl": "~1.3.3", "utils-merge": "1.0.1" } }, "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ=="], - "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], + "content-type": ["content-type@2.0.0", "", {}, "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ=="], "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], "core-js-compat": ["core-js-compat@3.49.0", "", { "dependencies": { "browserslist": "^4.28.1" } }, "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA=="], - "cosmiconfig": ["cosmiconfig@9.0.1", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ=="], + "cosmiconfig": ["cosmiconfig@9.0.2", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg=="], "cross-env": ["cross-env@10.1.0", "", { "dependencies": { "@epic-web/invariant": "^1.0.0", "cross-spawn": "^7.0.6" }, "bin": { "cross-env": "dist/bin/cross-env.js", "cross-env-shell": "dist/bin/cross-env-shell.js" } }, "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw=="], @@ -830,7 +832,7 @@ "dayjs": ["dayjs@1.11.21", "", {}, "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA=="], - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="], @@ -862,7 +864,7 @@ "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], - "dnssd-advertise": ["dnssd-advertise@1.1.4", "", {}, "sha512-AmGyK9WpNf06WeP5TjHZq/wNzP76OuEeaiTlKr9E/EEelYLczywUKoqRz+DPRq/ErssjT4lU+/W7wzJW+7K/ZA=="], + "dnssd-advertise": ["dnssd-advertise@1.1.6", "", {}, "sha512-Ndrrf6BMPalkQPd/zubL+4YghH2J9NspapQ09uDXwYbvOPkP0oaqf5CkcwJ0b50kS2O3ul6yVu+jz+RY62Cejg=="], "dom-accessibility-api": ["dom-accessibility-api@0.6.3", "", {}, "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w=="], @@ -878,7 +880,7 @@ "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - "electron-to-chromium": ["electron-to-chromium@1.5.363", "", {}, "sha512-VjUKPyWzGnT1fujlkEGC/BvN70Hh70KXtAqcmniXviYlJC/ivcT+BWGPyxWVbJZLfvtKR6dqg1L7T7pgAMBtWA=="], + "electron-to-chromium": ["electron-to-chromium@1.5.374", "", {}, "sha512-HCF5i7izveksHSGqa7mhDh6tr3Uz9Dar2RAjwuh69bw3QGPVObjQIgLwQWeO/Rxp9/r0KdboKy9RbpQDl97fjg=="], "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -926,7 +928,7 @@ "expect": ["expect@29.7.0", "", { "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", "jest-matcher-utils": "^29.7.0", "jest-message-util": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw=="], - "expo": ["expo@56.0.11", "", { "dependencies": { "@babel/runtime": "^7.20.0", "@expo/cli": "^56.1.15", "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.8", "@expo/devtools": "~56.0.2", "@expo/dom-webview": "~56.0.5", "@expo/fingerprint": "^0.19.4", "@expo/local-build-cache-provider": "^56.0.8", "@expo/log-box": "^56.0.13", "@expo/metro": "~56.0.0", "@expo/metro-config": "~56.0.14", "@ungap/structured-clone": "^1.3.0", "babel-preset-expo": "~56.0.15", "expo-asset": "~56.0.17", "expo-constants": "~56.0.18", "expo-file-system": "~56.0.8", "expo-font": "~56.0.6", "expo-keep-awake": "~56.0.3", "expo-modules-autolinking": "~56.0.15", "expo-modules-core": "~56.0.16", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", "whatwg-url-minimum": "^0.1.2" }, "peerDependencies": { "@expo/metro-runtime": "*", "react": "*", "react-dom": "*", "react-native": "*", "react-native-web": "*", "react-native-webview": "*" }, "optionalPeers": ["@expo/metro-runtime", "react-dom", "react-native-web", "react-native-webview"], "bin": { "expo": "bin/cli", "fingerprint": "bin/fingerprint", "expo-modules-autolinking": "bin/autolinking" } }, "sha512-YqF+q+JqfobDU5yFym3h1vQqzbl7rFiDB4wAJEyK6NK+KLeyf4pfzydQcNTyqLXQKcQBG1reBJExfDShoAYTzw=="], + "expo": ["expo@56.0.12", "", { "dependencies": { "@babel/runtime": "^7.20.0", "@expo/cli": "^56.1.16", "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.9", "@expo/devtools": "~56.0.2", "@expo/dom-webview": "~56.0.5", "@expo/fingerprint": "^0.19.4", "@expo/local-build-cache-provider": "^56.0.8", "@expo/log-box": "^56.0.13", "@expo/metro": "~56.0.0", "@expo/metro-config": "~56.0.14", "@ungap/structured-clone": "^1.3.0", "babel-preset-expo": "~56.0.15", "expo-asset": "~56.0.17", "expo-constants": "~56.0.18", "expo-file-system": "~56.0.8", "expo-font": "~56.0.7", "expo-keep-awake": "~56.0.3", "expo-modules-autolinking": "~56.0.16", "expo-modules-core": "~56.0.17", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", "whatwg-url-minimum": "^0.1.2" }, "peerDependencies": { "@expo/metro-runtime": "*", "react": "*", "react-dom": "*", "react-native": "*", "react-native-web": "*", "react-native-webview": "*" }, "optionalPeers": ["@expo/metro-runtime", "react-dom", "react-native-web", "react-native-webview"], "bin": { "expo": "bin/cli", "fingerprint": "bin/fingerprint", "expo-modules-autolinking": "bin/autolinking" } }, "sha512-FxgdI/Yqva6iJOThZIHfvxlKPxs4EC4uScUnEswwSArR/Fj9k430O13R590LcOQTsdNsjIs+GBHwjfoAY6vmAQ=="], "expo-application": ["expo-application@56.0.3", "", { "peerDependencies": { "expo": "*" } }, "sha512-DdGGPlMuM6cSTeKhbvh6OeLr2O/+EI5BHKYrD+Do8sJPYgLwzGrgESELfyjJCpEhFzT+TgKIdmLmWXhNUQnHiw=="], @@ -934,13 +936,13 @@ "expo-audio": ["expo-audio@56.0.12", "", { "peerDependencies": { "expo": "*", "expo-asset": "*", "react": "*", "react-native": "*" } }, "sha512-ne2UIO/HsQoBL9e+tGs5N9Sf3NyW5sJMm4sDkexbSJRc2IchLDG+9Msu/+l5N4RlZ8SiF42wRyWsh/Usg+SwOw=="], - "expo-background-task": ["expo-background-task@56.0.18", "", { "dependencies": { "expo-task-manager": "~56.0.18" }, "peerDependencies": { "expo": "*" } }, "sha512-jfEvLq/hZUWkef+lOt0sbe/Jd8wnK0fMgqsZhD1ulWk1IKB0AWsjmJ0iCTDMD9L9MDztpvKf2g/ygzljmo2eGA=="], + "expo-background-task": ["expo-background-task@56.0.19", "", { "dependencies": { "expo-task-manager": "~56.0.19" }, "peerDependencies": { "expo": "*" } }, "sha512-TuFqorlz4HXtWAwQGcg+/URXpBwjwNsAxdis/6m5mhtgBIVbX2gYYv/s6eIf8lh2cAI1zFkb+/bHHuC2aOAGGA=="], "expo-blur": ["expo-blur@56.0.3", "", { "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-KDDtrpWc2tYlm1WCPaOgBtv+YEGqe5ELheFPIgSNgHt28NQUDcfBcFsA9Us2StDh6osmSD6NbKxOt5bU6PcDbQ=="], "expo-brightness": ["expo-brightness@56.0.5", "", { "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-AkCGW+Lj8I4o2+Yjs1bzjIJz44cgNXfAN+pf01uDwmA1/1JTIy8x1eISvmz6d2r/1OhdyBZxeDkACNLVMDx5zA=="], - "expo-build-properties": ["expo-build-properties@56.0.18", "", { "dependencies": { "@expo/schema-utils": "^56.0.0", "resolve-from": "^5.0.0", "semver": "^7.6.0" }, "peerDependencies": { "expo": "*" } }, "sha512-at03ytur1Vfyl9ddtRMqIdSyR/oV57GM04+NZ5rhFTF0mC7dmKzxS9RBb34KHDPdT8UwUt7KsKbzYD1lnxLAKg=="], + "expo-build-properties": ["expo-build-properties@56.0.19", "", { "dependencies": { "@expo/schema-utils": "^56.0.0", "resolve-from": "^5.0.0", "semver": "^7.6.0" }, "peerDependencies": { "expo": "*" } }, "sha512-InoviXcxWosNp4cC7L3SWoiY99Xr2HdgN+LYHb6mUm/BBVxy1mIMrZR+3PJ2gwDZzW6EJNDz8ioASWGHBTmzpA=="], "expo-camera": ["expo-camera@56.0.8", "", { "dependencies": { "barcode-detector": "^3.0.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*", "react-native-web": "*" }, "optionalPeers": ["react-native-web"] }, "sha512-UDOpUUMisFRmCv1XQV1MJCKGAH2CsIC1Rs6P9Bbc6JLVmbxEKAd5dK68y6cScOdWURxVfJ0PRcjYnSuc8ayyIQ=="], @@ -962,7 +964,7 @@ "expo-file-system": ["expo-file-system@56.0.8", "", { "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-NrH41/8snGIBSbYicwVLB4txPdgCATd7ZYhMAGS3YJZ9GbnduhlAoV4/YCbGayjrbpE9bJb/6wegPL/zmvRMnQ=="], - "expo-font": ["expo-font@56.0.6", "", { "dependencies": { "fontfaceobserver": "^2.1.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-D4s72Aei844C2s8Vy61qMr6wLEjv6BMrXA1oyRQ0x8LJBbpm5gyogUohc0lABUURVLCqsnBIDdztegl3hktmmg=="], + "expo-font": ["expo-font@56.0.7", "", { "dependencies": { "fontfaceobserver": "^2.1.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-hpU/vRwPzsby9lPGkA4blDqLIIXYzoWnCZHr6PxvcWbY/uPObAiyhh6q+e0WYsB65SthK+PLH95jEnVag7fwEg=="], "expo-glass-effect": ["expo-glass-effect@56.0.4", "", { "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-xI9rXtDwi7RW82uAlfyaXO6+k21ApWJ2tHAWYqPr/FjfmZbKsgNJ4Q0iZzGPCwboqjTGxaRZ61SZxBl8hDt5iA=="], @@ -980,19 +982,19 @@ "expo-localization": ["expo-localization@56.0.6", "", { "dependencies": { "rtl-detect": "^1.0.2" }, "peerDependencies": { "expo": "*", "react": "*" } }, "sha512-zzBVoUFHCVNBywcxGsspoZeIXebihOo/AnmQYE4jMv8gHCSKlLNFT+ft+0+mWcZCMs9necvUs8S8TDonAu/xBA=="], - "expo-location": ["expo-location@56.0.17", "", { "dependencies": { "@expo/image-utils": "^0.10.1" }, "peerDependencies": { "expo": "*" } }, "sha512-3kEONgFApqGzuRhgWyYGb/nXK+rYaeuHtcCYkuVNbrDSlHYYe+mgQPeM4Iuqv43Fihmp0mKsNtq7zX030nE+VA=="], + "expo-location": ["expo-location@56.0.18", "", { "dependencies": { "@expo/image-utils": "^0.10.1" }, "peerDependencies": { "expo": "*" } }, "sha512-6xP0UwGy8a7EEHAMeigYAp3HNo3yWHAg05tVPUfwrOWepWPpFXmjsfUBUxQdkpfpjddJ9r+f4PplxZqKI0LtjA=="], "expo-manifests": ["expo-manifests@56.0.4", "", { "dependencies": { "expo-json-utils": "~56.0.0" }, "peerDependencies": { "expo": "*" } }, "sha512-Fokawl2UkiExIF0bqGoblRFA8lYpROVD+EpvDwSW4LgqQyPwNua1gLSgHZjdl5GsVugfRMMWE3LHaibDyX93hw=="], - "expo-modules-autolinking": ["expo-modules-autolinking@56.0.15", "", { "dependencies": { "@expo/require-utils": "^56.1.3", "@expo/spawn-async": "^1.8.0", "chalk": "^4.1.0", "commander": "^7.2.0" }, "bin": { "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, "sha512-WqpBFwLzn7DsrUkWltIjVmAjwuI1VdQ2jRMlvk1nh2kVadwdJBkSjUBQWRifsEePNhiMT/rFOovBolUU/ARt5w=="], + "expo-modules-autolinking": ["expo-modules-autolinking@56.0.16", "", { "dependencies": { "@expo/require-utils": "^56.1.3", "@expo/spawn-async": "^1.8.0", "chalk": "^4.1.0", "commander": "^7.2.0" }, "bin": { "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, "sha512-9JnL4N46P8ubDpDIfWolDn7nxU2j1rY67xY/dNVuyH0m+HG+r/JI16VYtjIf4COpZtEuFo4D3h3MBeFzGucMnw=="], - "expo-modules-core": ["expo-modules-core@56.0.16", "", { "dependencies": { "@expo/expo-modules-macros-plugin": "0.2.2", "expo-modules-jsi": "~56.0.9", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*", "react-native-worklets": "^0.7.4 || ^0.8.0" }, "optionalPeers": ["react-native-worklets"] }, "sha512-IVdT0CnqOpQCPdemA5rb50CPbbhWeJePnvuH0yUmOmyMkNky8WVOdRQtVicoIv4CCG5hDrzPIxULD4YOHZ5CHg=="], + "expo-modules-core": ["expo-modules-core@56.0.17", "", { "dependencies": { "@expo/expo-modules-macros-plugin": "0.2.2", "expo-modules-jsi": "~56.0.10", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*", "react-native-worklets": "^0.7.4 || ^0.8.0" }, "optionalPeers": ["react-native-worklets"] }, "sha512-5J8whnT7Ccp+BrFClLmpF76omBqn95VZExroTm01Dgjm4vpty1Rb7U3we+ZUceNHtRd07Lw30u7FNfDgIhEbRQ=="], - "expo-modules-jsi": ["expo-modules-jsi@56.0.9", "", { "peerDependencies": { "react-native": "*" } }, "sha512-2lfDkRcsP/Qh2upS+nu0MS0tfGsghc6ehTivzbgM5nJz0MGYhAJxCJSeendWM+aOQutQAwzsoxrNT0nW8lRAwA=="], + "expo-modules-jsi": ["expo-modules-jsi@56.0.10", "", { "peerDependencies": { "react-native": "*" } }, "sha512-fHZcFpYO/o62GYa6fJyAQJZcAShzhoN0iMMDzbr7vD3ewET6e1vAlTonbEakN9F0VHEgBFJ4NREy87uwVcpCuA=="], - "expo-notifications": ["expo-notifications@56.0.17", "", { "dependencies": { "@expo/image-utils": "^0.10.1", "abort-controller": "^3.0.0", "badgin": "^1.1.5", "expo-application": "~56.0.3", "expo-constants": "~56.0.18" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-Yn6JUKmoBDkQeznbuUn4cHF2u44r1ErJTneW65MBFt7NLG8U8/VGQ4bBVwswm5nPH1/V92UoXPgvCssScPFRDg=="], + "expo-notifications": ["expo-notifications@56.0.18", "", { "dependencies": { "@expo/image-utils": "^0.10.1", "abort-controller": "^3.0.0", "badgin": "^1.1.5", "expo-application": "~56.0.3", "expo-constants": "~56.0.18" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-HHnrwyCLC5srFojcHYS2KskbNroy9o2fwPKdyhjrdjjrBu4sNRKm4LepcuZjDy98cZKEm89WIPW8O45vut8Rgw=="], - "expo-router": ["expo-router@56.2.10", "", { "dependencies": { "@expo/log-box": "^56.0.13", "@expo/metro-runtime": "^56.0.15", "@expo/schema-utils": "^56.0.0", "@expo/ui": "^56.0.17", "@radix-ui/react-slot": "^1.2.0", "@radix-ui/react-tabs": "^1.1.12", "@react-native-masked-view/masked-view": "^0.3.2", "@testing-library/jest-dom": "^6.9.1", "@testing-library/user-event": "^14.6.1", "client-only": "^0.0.1", "color": "^4.2.3", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "expo-glass-effect": "^56.0.4", "expo-server": "^56.0.5", "expo-symbols": "^56.0.6", "fast-deep-equal": "^3.1.3", "invariant": "^2.2.4", "nanoid": "^3.3.8", "query-string": "^7.1.3", "react-fast-compare": "^3.2.2", "react-is": "^19.1.0", "react-native-drawer-layout": "^4.2.2", "react-native-screens": "^4.25.2", "server-only": "^0.0.1", "sf-symbols-typescript": "^2.1.0", "shallowequal": "^1.1.0", "standard-navigation": "^0.0.5", "vaul": "^1.1.2" }, "peerDependencies": { "@testing-library/react-native": ">= 13.2.0", "expo": "*", "expo-constants": "^56.0.18", "expo-linking": "^56.0.14", "react": "*", "react-dom": "*", "react-native": "*", "react-native-gesture-handler": "*", "react-native-reanimated": "*", "react-native-safe-area-context": ">= 5.4.0", "react-native-web": "*", "react-server-dom-webpack": "~19.0.4 || ~19.1.5 || ~19.2.4" }, "optionalPeers": ["@testing-library/react-native", "react-dom", "react-native-gesture-handler", "react-native-reanimated", "react-native-web", "react-server-dom-webpack"] }, "sha512-u7WcdsFAjSrQS7Bdb1VbNPE3xNcd/BZ6qXSS31UAJKhaYIb+ik3jJSy/W5kY3qKipwbwlo3CSb1WnZ2XYs7F+Q=="], + "expo-router": ["expo-router@56.2.11", "", { "dependencies": { "@expo/log-box": "^56.0.13", "@expo/metro-runtime": "^56.0.15", "@expo/schema-utils": "^56.0.0", "@expo/ui": "^56.0.18", "@radix-ui/react-slot": "^1.2.0", "@radix-ui/react-tabs": "^1.1.12", "@react-native-masked-view/masked-view": "^0.3.2", "@testing-library/jest-dom": "^6.9.1", "@testing-library/user-event": "^14.6.1", "client-only": "^0.0.1", "color": "^4.2.3", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "expo-glass-effect": "^56.0.4", "expo-server": "^56.0.5", "expo-symbols": "^56.0.6", "fast-deep-equal": "^3.1.3", "invariant": "^2.2.4", "nanoid": "^3.3.8", "query-string": "^7.1.3", "react-fast-compare": "^3.2.2", "react-is": "^19.1.0", "react-native-drawer-layout": "^4.2.2", "react-native-screens": "^4.25.2", "server-only": "^0.0.1", "sf-symbols-typescript": "^2.1.0", "shallowequal": "^1.1.0", "standard-navigation": "^0.0.5", "vaul": "^1.1.2" }, "peerDependencies": { "@testing-library/react-native": ">= 13.2.0", "expo": "*", "expo-constants": "^56.0.18", "expo-linking": "^56.0.14", "react": "*", "react-dom": "*", "react-native": "*", "react-native-gesture-handler": "*", "react-native-reanimated": "*", "react-native-safe-area-context": ">= 5.4.0", "react-native-web": "*", "react-server-dom-webpack": "~19.0.4 || ~19.1.5 || ~19.2.4" }, "optionalPeers": ["@testing-library/react-native", "react-dom", "react-native-gesture-handler", "react-native-reanimated", "react-native-web", "react-server-dom-webpack"] }, "sha512-08DBTrKv3QanOc9u1JNxSEChW9c/qNFbQ0dO28OLvufWWfdSRkSdHmh365D2FgoZg1qaOzZPCDuL3tM6nGSfkQ=="], "expo-screen-orientation": ["expo-screen-orientation@56.0.5", "", { "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-Puf4L/cgM8z45Z2fwZzJtlVGSk0ZM/l3gBqXm50bKTACmUk8P8fr7HVbDfs8reyoZuEKKFZJ0VlnKo5i6cSotQ=="], @@ -1000,7 +1002,7 @@ "expo-server": ["expo-server@56.0.5", "", {}, "sha512-SmM2p2g3Jrktpiazcst+OxhjSzOHXKAY4BPURHYHXvApzzoybMmrNF4IEZ8DKZ145BhSe4ydAmlEFCRTsdtgUQ=="], - "expo-sharing": ["expo-sharing@56.0.17", "", { "dependencies": { "@expo/config-plugins": "^56.0.8", "@expo/config-types": "^56.0.5", "@expo/plist": "^0.7.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-FqN7/UBau0PJ2O8OeMYS/fwE+6UMtdoDeGxsRoaileK0w30bXC92MuT7z4ujnk4mF9ZZBjS8axbGOgrZ6JWBEA=="], + "expo-sharing": ["expo-sharing@56.0.18", "", { "dependencies": { "@expo/config-plugins": "^56.0.9", "@expo/config-types": "^56.0.6", "@expo/plist": "^0.7.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-45w4BWNFmdTczp+fJX6YfwJrn9sX+VeRWz2VWLhauygcCrym44HtVDXX5yVYPB9TW9ZesLcEI+CCrCBNWL7smQ=="], "expo-splash-screen": ["expo-splash-screen@56.0.10", "", { "dependencies": { "@expo/config-plugins": "~56.0.8", "@expo/image-utils": "^0.10.1", "xml2js": "0.6.0" }, "peerDependencies": { "expo": "*" } }, "sha512-vDIlo8hzt9HlCZQ0kSY66v83D1WEXOJbVMeyPDfXDu9tbDdPMNUyDpi4WGJXikAjxnAKfbt5Mv5NnEbxINy+VA=="], @@ -1010,7 +1012,7 @@ "expo-system-ui": ["expo-system-ui@56.0.5", "", { "dependencies": { "@react-native/normalize-colors": "0.85.3", "debug": "^4.3.2" }, "peerDependencies": { "expo": "*", "react-native": "*", "react-native-web": "*" }, "optionalPeers": ["react-native-web"] }, "sha512-n1MmnUArV4cc3gVed9fGtluPme00PE9axKVx+NHbKxHFMam5l4GcOI7PxbYKFNx8o7WA1LRD7eLW33agmZrxGg=="], - "expo-task-manager": ["expo-task-manager@56.0.18", "", { "dependencies": { "unimodules-app-loader": "~56.0.0" }, "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-abTKDhlZ572wSwNuZ9HkDw6rl+kKLq0TkqheIEbGoRkMQVEGV3D5GYYY0gg84TO/HvAqiipdcBFQH8+9uHj70Q=="], + "expo-task-manager": ["expo-task-manager@56.0.19", "", { "dependencies": { "unimodules-app-loader": "~56.0.0" }, "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-eDeBR8vXlOAXBck29AzPl+tv4QlJus+cgkQ0TGOBqAlgRPWPWd7ebhqrhb0KRieUZIvzlycfcxjHR/+AiEiMHA=="], "expo-updates-interface": ["expo-updates-interface@56.0.2", "", { "peerDependencies": { "expo": "*" } }, "sha512-eWTwSZ9y8vrULG2oBn2TQSSIwBGSq/TxGJ3jY6tuVS2FWH/ASRIiKs3zkUZTRoC3ZuV2alz0mUClYV7nNrFx8g=="], @@ -1026,7 +1028,7 @@ "fast-xml-builder": ["fast-xml-builder@1.2.0", "", { "dependencies": { "path-expression-matcher": "^1.5.0", "xml-naming": "^0.1.0" } }, "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q=="], - "fast-xml-parser": ["fast-xml-parser@5.8.0", "", { "dependencies": { "@nodable/entities": "^2.1.0", "fast-xml-builder": "^1.2.0", "path-expression-matcher": "^1.5.0", "strnum": "^2.3.0", "xml-naming": "^0.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg=="], + "fast-xml-parser": ["fast-xml-parser@5.9.0", "", { "dependencies": { "@nodable/entities": "^2.2.0", "fast-xml-builder": "^1.2.0", "is-unsafe": "^1.0.1", "path-expression-matcher": "^1.5.0", "strnum": "^2.4.0", "xml-naming": "^0.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-duBuXbyIhEeNO4GjFuVqr0nF047oNwr18aum+zJyqo0MUG/n7Afgs3Qv3D6VN3ONedUKxiuFlPiMGIa0Z11chA=="], "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], @@ -1056,13 +1058,13 @@ "flow-enums-runtime": ["flow-enums-runtime@0.0.6", "", {}, "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw=="], - "follow-redirects": ["follow-redirects@1.16.0", "", {}, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="], + "follow-redirects": ["follow-redirects@1.16.0", "", { "peerDependencies": { "debug": "*" }, "optionalPeers": ["debug"] }, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="], "fontfaceobserver": ["fontfaceobserver@2.3.0", "", {}, "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg=="], "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], - "form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], + "form-data": ["form-data@4.0.6", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.4", "mime-types": "^2.1.35" } }, "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ=="], "fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], @@ -1106,7 +1108,7 @@ "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - "hasown": ["hasown@2.0.3", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg=="], + "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], "hermes-compiler": ["hermes-compiler@250829098.0.10", "", {}, "sha512-TcRlZ0/TlyfJqquRFAWoyElVNnkdYRi/sEp4/Qy8/GYxjg8j2cS9D4MjuaQ+qimkmLN7AmO+44IznRf06mAr0w=="], @@ -1130,7 +1132,7 @@ "hyphenate-style-name": ["hyphenate-style-name@1.1.0", "", {}, "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw=="], - "i18next": ["i18next@26.3.0", "", { "peerDependencies": { "typescript": "^5 || ^6" }, "optionalPeers": ["typescript"] }, "sha512-gHSgGpUXVmuqE2El1W61DmxeyeTlFfZgdJRWMo9jScAn5pu7TuTuiccb1zh3E2J9hEBVGJ23+96x0ieBhfuIHA=="], + "i18next": ["i18next@26.3.1", "", { "peerDependencies": { "typescript": "^5 || ^6" }, "optionalPeers": ["typescript"] }, "sha512-txQqd5EULsqEh9OJqRH15aCaOuy/nLJyhw5EHCSKLKJE1aBbb3Zve2+uQIxgWhPm1QqUQoWyQBm2kfmmIrzkcQ=="], "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], @@ -1174,6 +1176,8 @@ "is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], + "is-unsafe": ["is-unsafe@1.0.1", "", {}, "sha512-CLK2+VdgERgD96EYm5lUQssZYlRg2tkZnbsxZoacmSiRxiFJ4Nk4SzjCl+Ur+v3kXIY9dTIdb3IH22y1mZ56LA=="], + "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], @@ -1202,7 +1206,7 @@ "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], - "joi": ["joi@17.13.3", "", { "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA=="], + "joi": ["joi@17.13.4", "", { "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, "sha512-1RuuER6kmt8K8I3nIWvPZKi5RQCb568ZPyY4Pwjlua+yo+63ZTmIwxLZH0heBmiKN4uxjvCiarDrjaeH84xicQ=="], "jotai": ["jotai@2.20.0", "", { "peerDependencies": { "@babel/core": ">=7.0.0", "@babel/template": ">=7.0.0", "@types/react": ">=17.0.0", "react": ">=17.0.0" }, "optionalPeers": ["@babel/core", "@babel/template", "@types/react", "react"] }, "sha512-b5GAqgmXmXzB4WPaTH26ppk9Sl7AA9WSQX7yfdM+gJ1rFROiWcVbi97gFuN/yVCojOcbcvop2sfLL+fjxW0JVg=="], @@ -1210,7 +1214,7 @@ "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], + "js-yaml": ["js-yaml@4.2.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw=="], "jsc-safe-url": ["jsc-safe-url@0.2.4", "", {}, "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q=="], @@ -1232,7 +1236,7 @@ "lan-network": ["lan-network@0.2.1", "", { "bin": { "lan-network": "dist/lan-network-cli.js" } }, "sha512-ONPnazC96VKDntab9j9JKwIWhZ4ZUceB4A9Epu4Ssg0hYFmtHZSeQ+n15nIwTFmcBUKtExOer8WTJ4GF9MO64A=="], - "launch-editor": ["launch-editor@2.13.2", "", { "dependencies": { "picocolors": "^1.1.1", "shell-quote": "^1.8.3" } }, "sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg=="], + "launch-editor": ["launch-editor@2.14.1", "", { "dependencies": { "picocolors": "^1.1.1", "shell-quote": "^1.8.4" } }, "sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA=="], "leven": ["leven@3.1.0", "", {}, "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="], @@ -1376,7 +1380,7 @@ "node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="], - "node-releases": ["node-releases@2.0.46", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="], + "node-releases": ["node-releases@2.0.47", "", {}, "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og=="], "node-stream-zip": ["node-stream-zip@1.15.0", "", {}, "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw=="], @@ -1476,7 +1480,7 @@ "postcss-nested": ["postcss-nested@5.0.6", "", { "dependencies": { "postcss-selector-parser": "^6.0.6" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA=="], - "postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + "postcss-selector-parser": ["postcss-selector-parser@6.1.4", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ=="], "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], @@ -1524,7 +1528,7 @@ "react-i18next": ["react-i18next@17.0.8", "", { "dependencies": { "@babel/runtime": "^7.29.2", "html-parse-stringify": "^3.0.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "i18next": ">= 26.2.0", "react": ">= 16.8.0", "react-dom": "*", "react-native": "*", "typescript": "^5 || ^6" }, "optionalPeers": ["react-dom", "react-native", "typescript"] }, "sha512-0ooKbGLU8JXhe1zwpQUWIeXSgLPOfwJmgheWRIUpcoA0CpyabpGhayjdG+/eA5esC1AQ8h2jWpXjJfzQzeDOCw=="], - "react-is": ["react-is@19.2.6", "", {}, "sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw=="], + "react-is": ["react-is@19.2.7", "", {}, "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A=="], "react-native": ["react-native-tvos@0.85.3-0", "", { "dependencies": { "@react-native-tvos/virtualized-lists": "0.85.3-0", "@react-native/assets-registry": "0.85.3", "@react-native/codegen": "0.85.3", "@react-native/community-cli-plugin": "0.85.3", "@react-native/gradle-plugin": "0.85.3", "@react-native/js-polyfills": "0.85.3", "@react-native/normalize-colors": "0.85.3", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", "babel-plugin-syntax-hermes-parser": "0.33.3", "base64-js": "^1.5.1", "commander": "^12.0.0", "flow-enums-runtime": "^0.0.6", "hermes-compiler": "250829098.0.10", "invariant": "^2.2.4", "memoize-one": "^5.0.0", "metro-runtime": "^0.84.3", "metro-source-map": "^0.84.3", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", "react-devtools-core": "^6.1.5", "react-refresh": "^0.14.0", "regenerator-runtime": "^0.13.2", "scheduler": "0.27.0", "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", "tinyglobby": "^0.2.15", "whatwg-fetch": "^3.0.0", "ws": "^7.5.10", "yargs": "^17.6.2" }, "peerDependencies": { "@react-native/jest-preset": "0.85.3", "@types/react": "^19.1.1", "react": "^19.2.3" }, "optionalPeers": ["@react-native/jest-preset", "@types/react"], "bin": { "react-native": "cli.js" } }, "sha512-Q9gUndppXbGEiYlQ8eudkdH7rDXdY+KM74Btd5xqMvXHgo7ZXdwI1hKvStmI47KmTaDn0NOmcRl2yBwHfc5+5A=="], @@ -1542,7 +1546,7 @@ "react-native-draggable-flatlist": ["react-native-draggable-flatlist@4.0.3", "", { "dependencies": { "@babel/preset-typescript": "^7.17.12" }, "peerDependencies": { "react-native": ">=0.64.0", "react-native-gesture-handler": ">=2.0.0", "react-native-reanimated": ">=2.8.0" } }, "sha512-2F4x5BFieWdGq9SetD2nSAR7s7oQCSgNllYgERRXXtNfSOuAGAVbDb/3H3lP0y5f7rEyNwabKorZAD/SyyNbDw=="], - "react-native-drawer-layout": ["react-native-drawer-layout@4.2.4", "", { "dependencies": { "color": "^4.2.3", "use-latest-callback": "^0.2.4" }, "peerDependencies": { "react": ">= 18.2.0", "react-native": "*", "react-native-gesture-handler": ">= 2.0.0", "react-native-reanimated": ">= 2.0.0" } }, "sha512-l1Le5HcVidobnJm8xqFZo46Rs8FDHdxbTZhkjxpNSRgU+QMoQXilOfzTHAeNjEGiKVGgIs9cW3ctXeHqgp5jJg=="], + "react-native-drawer-layout": ["react-native-drawer-layout@4.2.5", "", { "dependencies": { "color": "^4.2.3", "use-latest-callback": "^0.2.4" }, "peerDependencies": { "react": ">= 18.2.0", "react-native": "*", "react-native-gesture-handler": ">= 2.0.0", "react-native-reanimated": ">= 2.0.0" } }, "sha512-Yl82uLkXjXuq7222hWGIDsq5A6R/bsCeCEgdIxQUxAEHf00oRdDnRByLx3Fsij3qwtmYNPGrHV1NH8G8hbCbLQ=="], "react-native-edge-to-edge": ["react-native-edge-to-edge@1.8.1", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-bhvsKqeX9PGkY9wBUk9vni/tJNJdKtLPbs/j3e/3CdV4JmUWfTXYYoL+4Hc8Wmej+5eJxkc8KOFa454ruFWBCA=="], @@ -1580,7 +1584,7 @@ "react-native-tab-view": ["react-native-tab-view@4.3.0", "", { "dependencies": { "use-latest-callback": "^0.2.4" }, "peerDependencies": { "react": ">= 18.2.0", "react-native": "*", "react-native-pager-view": ">= 6.0.0" } }, "sha512-qPMF75uz/7+MuVG2g+YETdGMzlWZnhC6iI4h/7EBbwIBwNBIBi2z4OA6KhY3IOOBwGHXEIz5IyA6doDqifYBHg=="], - "react-native-text-ticker": ["react-native-text-ticker@1.15.0", "", {}, "sha512-d/uK+PIOhsYMy1r8h825iq/nADiHsabz3WMbRJSnkpQYn+K9aykUAXRRhu8ZbTAzk4CgnUWajJEFxS5ZDygsdg=="], + "react-native-text-ticker": ["react-native-text-ticker@1.16.0", "", {}, "sha512-UHZcIrXzNQ3CnGSA6d5foR9weqSCEk5w+eJGnUf5OQkKbuq/xtt1ZaNVnsgcG5+3f9EnRrNCt52/a46LXVKGGw=="], "react-native-track-player": ["react-native-track-player@github:lovegaoshi/react-native-track-player#33a3ecd", { "peerDependencies": { "react": "*", "react-native": "*", "react-native-windows": "*", "shaka-player": "^4.7.9" }, "optionalPeers": ["react-native-windows", "shaka-player"] }, "lovegaoshi-react-native-track-player-33a3ecd", "sha512-vfkld2jUj7EPkAjIc/Vbx4Q4MtOOLmYtCYCE2dWJsyLnPqgj1f0xVzBxbeVP7dfT+eSh4KIXfdxESXaHgrXIlw=="], @@ -1626,7 +1630,7 @@ "regjsgen": ["regjsgen@0.8.0", "", {}, "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q=="], - "regjsparser": ["regjsparser@0.13.1", "", { "dependencies": { "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw=="], + "regjsparser": ["regjsparser@0.13.2", "", { "dependencies": { "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ=="], "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], @@ -1684,7 +1688,7 @@ "shell-quote": ["shell-quote@1.8.4", "", {}, "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ=="], - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + "side-channel": ["side-channel@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4", "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ=="], "side-channel-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="], @@ -1722,7 +1726,7 @@ "stacktrace-parser": ["stacktrace-parser@0.1.11", "", { "dependencies": { "type-fest": "^0.7.1" } }, "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg=="], - "standard-navigation": ["standard-navigation@0.0.5", "", {}, "sha512-YAmzwAiiQVocZxO/VGPFiQHcu5pKiz09QIGC0MK6aRMoa3E0QkoTQgcqJr7ZZ3OMiNhu4DkaGElFI5htjOIDbw=="], + "standard-navigation": ["standard-navigation@0.0.7", "", {}, "sha512-NCGLCNyuXrFOkGHxdNZFnpsehGtiq1oXbPhKl7ZuxFO5J//H2evqqOchmD4YwEUJnkjO4kH9Xp4hQX6hdAYCKQ=="], "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], @@ -1744,7 +1748,7 @@ "strip-indent": ["strip-indent@3.0.0", "", { "dependencies": { "min-indent": "^1.0.0" } }, "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ=="], - "strnum": ["strnum@2.3.0", "", {}, "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q=="], + "strnum": ["strnum@2.4.0", "", { "dependencies": { "anynum": "^1.0.0" } }, "sha512-sHrVyWWdq28RbhjuJdZsA1SnGRJV6NiXbk6AXBxDOsgAcA+lmpUZCYjOdLBxkXMwis6RRe7dlZt4VlIWFVzkmg=="], "strtok3": ["strtok3@6.3.0", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^4.1.0" } }, "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw=="], @@ -1780,9 +1784,9 @@ "tinycolor2": ["tinycolor2@1.6.0", "", {}, "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="], - "tinyexec": ["tinyexec@1.2.2", "", {}, "sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g=="], + "tinyexec": ["tinyexec@1.2.4", "", {}, "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg=="], - "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], + "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], "tmp": ["tmp@0.2.7", "", {}, "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw=="], @@ -1904,7 +1908,7 @@ "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], - "zxing-wasm": ["zxing-wasm@3.0.3", "", { "dependencies": { "@types/emscripten": "^1.41.5", "type-fest": "^5.6.0" } }, "sha512-DdOn/G5F+qvZELWeO5ZFFwcN611TfMybxPV0LUUoutUmiH2t47MZSB7gLV9O9YLhvudBdnzQNAoFOu4Xz8eOrQ=="], + "zxing-wasm": ["zxing-wasm@3.1.0", "", { "dependencies": { "@types/emscripten": "^1.41.5", "type-fest": "^5.7.0" } }, "sha512-5+3V1wPRx4gvbeLH2jB7n2cKrYJ1q4i3QgjnBUtrDPeqxJSi6BdzKJg4y6aF6bgW8zfntnYJyrkqFMevDhL2NA=="], "@babel/helper-module-transforms/@babel/helper-module-imports": ["@babel/helper-module-imports@7.29.7", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g=="], @@ -1920,7 +1924,7 @@ "@expo/cli/ora": ["ora@3.4.0", "", { "dependencies": { "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-spinners": "^2.0.0", "log-symbols": "^2.2.0", "strip-ansi": "^5.2.0", "wcwidth": "^1.0.1" } }, "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg=="], - "@expo/cli/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@expo/cli/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "@expo/cli/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -1932,13 +1936,13 @@ "@expo/config/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], - "@expo/config/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@expo/config/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "@expo/config-plugins/getenv": ["getenv@2.0.0", "", {}, "sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ=="], "@expo/config-plugins/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], - "@expo/config-plugins/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@expo/config-plugins/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "@expo/devcert/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], @@ -1948,11 +1952,11 @@ "@expo/fingerprint/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], - "@expo/fingerprint/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@expo/fingerprint/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "@expo/image-utils/getenv": ["getenv@2.0.0", "", {}, "sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ=="], - "@expo/image-utils/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@expo/image-utils/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "@expo/metro-config/getenv": ["getenv@2.0.0", "", {}, "sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ=="], @@ -1960,44 +1964,38 @@ "@expo/package-manager/ora": ["ora@3.4.0", "", { "dependencies": { "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-spinners": "^2.0.0", "log-symbols": "^2.2.0", "strip-ansi": "^5.2.0", "wcwidth": "^1.0.1" } }, "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg=="], - "@expo/prebuild-config/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], - - "@expo/require-utils/@babel/core": ["@babel/core@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw=="], + "@expo/prebuild-config/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "@expo/ws-tunnel/ws": ["ws@8.21.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g=="], - "@jest/types/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "@jimp/png/pngjs": ["pngjs@6.0.0", "", {}, "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg=="], - "@radix-ui/react-collection/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + "@react-native-community/cli/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], - "@radix-ui/react-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - - "@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - - "@react-native-community/cli/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], - - "@react-native-community/cli-doctor/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@react-native-community/cli-doctor/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "@react-native-community/cli-server-api/open": ["open@6.4.0", "", { "dependencies": { "is-wsl": "^1.1.0" } }, "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg=="], "@react-native-community/cli-server-api/ws": ["ws@6.2.4", "", { "dependencies": { "async-limiter": "~1.0.0" } }, "sha512-PNIUUyLI5YpkJZj60YBzX1o0ByQ4ovvfmq9N/Kig/PAYbVlGyz4R6G0SEWrD0O9acc0sT2+IdMBVLFv8FSi0Nw=="], - "@react-native-community/cli-tools/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@react-native-community/cli-tools/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], - "@react-native/babel-preset/@babel/core": ["@babel/core@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw=="], + "@react-native/babel-preset/@react-native/babel-plugin-codegen": ["@react-native/babel-plugin-codegen@0.86.0", "", { "dependencies": { "@babel/traverse": "^7.29.0", "@react-native/codegen": "0.86.0" } }, "sha512-qdsABWNW7uTll90l4Vh03gjeyu3WVDi2CyiiyvYGMRDcoYbjbQi6df3BMAm9lQI2yslZ1T14LlDDAsgTwNxplA=="], - "@react-native/codegen/@babel/core": ["@babel/core@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw=="], + "@react-native/babel-preset/babel-plugin-syntax-hermes-parser": ["babel-plugin-syntax-hermes-parser@0.36.0", "", { "dependencies": { "hermes-parser": "0.36.0" } }, "sha512-LhD0xdoedDw7ansQgXbB2DADLZIK/LRXuWNBPuVzMc5S2WK5GyT89tCM+cQzxFGO0mGyLK6D5TrVOJJzAoDy8Q=="], - "@react-native/community-cli-plugin/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@react-native/community-cli-plugin/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], - "@react-native/metro-babel-transformer/@babel/core": ["@babel/core@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw=="], + "@react-native/metro-babel-transformer/hermes-parser": ["hermes-parser@0.36.0", "", { "dependencies": { "hermes-estree": "0.36.0" } }, "sha512-GdpwMmH5x6IpC1cijvcvYnlPB60Mh6kTSF/NFdYV/j56gYdi+0RIakYs+eqOV+bbO0SW7mgVVGSsTJxyPQfo3w=="], + + "@react-native/metro-config/@react-native/js-polyfills": ["@react-native/js-polyfills@0.86.0", "", {}, "sha512-zYy/Cjd1VTnZ2iCNaG9bDF9C3l2ntESiPRscjIlI5FKugu6aeTwsDSv1aI8Bc4Kp3vEdoVg+UQhLAhE4svREaQ=="], "@react-navigation/elements/color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], "@react-navigation/material-top-tabs/color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], + "@tanstack/react-query/@tanstack/query-core": ["@tanstack/query-core@5.100.14", "", {}, "sha512-5X41dGpxgeaHISCRW2oYwcSycZeULZzAunaudXT9ov1KOTj9xwt0CH6hbwqP1/z74ZWF7rYFnDpyYH07XFcZew=="], + "@testing-library/dom/aria-query": ["aria-query@5.3.0", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A=="], "@testing-library/dom/dom-accessibility-api": ["dom-accessibility-api@0.5.16", "", {}, "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg=="], @@ -2020,14 +2018,12 @@ "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "chrome-launcher/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - - "chromium-edge-launcher/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "cli-truncate/string-width": ["string-width@8.2.1", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA=="], "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "compressible/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + "compression/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "connect/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], @@ -2036,12 +2032,14 @@ "error-ex/is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], - "expo-build-properties/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "expo-build-properties/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "expo-modules-autolinking/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], "expo-router/color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], + "expo-router/standard-navigation": ["standard-navigation@0.0.5", "", {}, "sha512-YAmzwAiiQVocZxO/VGPFiQHcu5pKiz09QIGC0MK6aRMoa3E0QkoTQgcqJr7ZZ3OMiNhu4DkaGElFI5htjOIDbw=="], + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "fbjs/promise": ["promise@7.3.1", "", { "dependencies": { "asap": "~2.0.3" } }, "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg=="], @@ -2068,12 +2066,8 @@ "jest-message-util/slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], - "jest-util/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "jest-util/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], - "jest-worker/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], "lighthouse-logger/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], @@ -2088,8 +2082,6 @@ "logkitty/yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], - "metro/@babel/core": ["@babel/core@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw=="], - "metro/accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], "metro/ci-info": ["ci-info@2.0.0", "", {}, "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="], @@ -2098,29 +2090,23 @@ "metro/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], - "metro-babel-transformer/@babel/core": ["@babel/core@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw=="], - "metro-babel-transformer/hermes-parser": ["hermes-parser@0.35.0", "", { "dependencies": { "hermes-estree": "0.35.0" } }, "sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA=="], "metro-cache/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - "metro-transform-plugins/@babel/core": ["@babel/core@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw=="], - - "metro-transform-worker/@babel/core": ["@babel/core@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw=="], - "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], "nativewind/@babel/types": ["@babel/types@7.19.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.18.10", "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" } }, "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA=="], "nativewind/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], - "npm-package-arg/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "npm-package-arg/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "parse-png/pngjs": ["pngjs@3.4.0", "", {}, "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="], "patch-package/fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], - "patch-package/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "patch-package/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "path-scurry/lru-cache": ["lru-cache@11.5.1", "", {}, "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A=="], @@ -2140,17 +2126,17 @@ "react-native/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], - "react-native/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "react-native/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "react-native-drawer-layout/color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], - "react-native-reanimated/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "react-native-reanimated/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "react-native-web/@react-native/normalize-colors": ["@react-native/normalize-colors@0.74.89", "", {}, "sha512-qoMMXddVKVhZ8PA1AbUCk83trpd6N+1nF2A6k1i6LsQObyS92fELuk8kU/lQs6M7BsMHwqyLCpQJ1uFgNvIQXg=="], "react-native-web/memoize-one": ["memoize-one@6.0.0", "", {}, "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="], - "react-native-worklets/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "react-native-worklets/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "readable-web-to-node-stream/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], @@ -2178,8 +2164,6 @@ "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], - "type-is/content-type": ["content-type@2.0.0", "", {}, "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ=="], - "type-is/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], "whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], @@ -2192,7 +2176,7 @@ "xml2js/xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], - "zxing-wasm/type-fest": ["type-fest@5.6.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA=="], + "zxing-wasm/type-fest": ["type-fest@5.7.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg=="], "@expo/cli/ora/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], @@ -2212,10 +2196,14 @@ "@expo/package-manager/ora/strip-ansi": ["strip-ansi@5.2.0", "", { "dependencies": { "ansi-regex": "^4.1.0" } }, "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA=="], - "@jest/types/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], - "@react-native-community/cli-server-api/open/is-wsl": ["is-wsl@1.1.0", "", {}, "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw=="], + "@react-native/babel-preset/@react-native/babel-plugin-codegen/@react-native/codegen": ["@react-native/codegen@0.86.0", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/parser": "^7.29.0", "hermes-parser": "0.36.0", "invariant": "^2.2.4", "nullthrows": "^1.1.1", "tinyglobby": "^0.2.15", "yargs": "^17.6.2" } }, "sha512-uTs9DBo3+/lUqinsGZK0FKJRBVClrwMXoZToaDxE1Q2SL2e55vs2GwyZfIKzPl5uJnbu4PfFMIp0/mLXLWUMuA=="], + + "@react-native/babel-preset/babel-plugin-syntax-hermes-parser/hermes-parser": ["hermes-parser@0.36.0", "", { "dependencies": { "hermes-estree": "0.36.0" } }, "sha512-GdpwMmH5x6IpC1cijvcvYnlPB60Mh6kTSF/NFdYV/j56gYdi+0RIakYs+eqOV+bbO0SW7mgVVGSsTJxyPQfo3w=="], + + "@react-native/metro-babel-transformer/hermes-parser/hermes-estree": ["hermes-estree@0.36.0", "", {}, "sha512-A1+8zn5oss2CFP7pKsOaxorQG6FNIz1WU1VDqruLPPZl3LVgeE2C5xfFg8Ow6/Ow4mSslLLtYP1J3n38eKyW9w=="], + "@react-navigation/elements/color/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], "@react-navigation/elements/color/color-string": ["color-string@1.9.1", "", { "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg=="], @@ -2234,10 +2222,6 @@ "chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - "chrome-launcher/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], - - "chromium-edge-launcher/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], - "cli-truncate/string-width/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], "cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -2252,10 +2236,6 @@ "finalhandler/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "jest-util/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], - - "jest-worker/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], - "lighthouse-logger/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "log-update/cli-cursor/restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], @@ -2336,6 +2316,10 @@ "@expo/package-manager/ora/strip-ansi/ansi-regex": ["ansi-regex@4.1.1", "", {}, "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g=="], + "@react-native/babel-preset/@react-native/babel-plugin-codegen/@react-native/codegen/hermes-parser": ["hermes-parser@0.36.0", "", { "dependencies": { "hermes-estree": "0.36.0" } }, "sha512-GdpwMmH5x6IpC1cijvcvYnlPB60Mh6kTSF/NFdYV/j56gYdi+0RIakYs+eqOV+bbO0SW7mgVVGSsTJxyPQfo3w=="], + + "@react-native/babel-preset/babel-plugin-syntax-hermes-parser/hermes-parser/hermes-estree": ["hermes-estree@0.36.0", "", {}, "sha512-A1+8zn5oss2CFP7pKsOaxorQG6FNIz1WU1VDqruLPPZl3LVgeE2C5xfFg8Ow6/Ow4mSslLLtYP1J3n38eKyW9w=="], + "@react-navigation/elements/color/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], "@react-navigation/elements/color/color-string/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], @@ -2392,6 +2376,8 @@ "@expo/package-manager/ora/cli-cursor/restore-cursor/onetime": ["onetime@2.0.1", "", { "dependencies": { "mimic-fn": "^1.0.0" } }, "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ=="], + "@react-native/babel-preset/@react-native/babel-plugin-codegen/@react-native/codegen/hermes-parser/hermes-estree": ["hermes-estree@0.36.0", "", {}, "sha512-A1+8zn5oss2CFP7pKsOaxorQG6FNIz1WU1VDqruLPPZl3LVgeE2C5xfFg8Ow6/Ow4mSslLLtYP1J3n38eKyW9w=="], + "ansi-fragments/slice-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], "cliui/wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], From 7703a1c76f3e2e2fc657d6ce5476a3032f7aa6f2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 21:51:59 +0200 Subject: [PATCH 09/26] chore(deps): Update CI dependencies to v2.16.3 (#1735) --- .github/workflows/crowdin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index d3792502..39883d8c 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -28,7 +28,7 @@ jobs: fetch-depth: 0 - name: ๐ŸŒ Sync Translations with Crowdin - uses: crowdin/github-action@8868a33591d21088edfc398968173a3b98d51706 # v2.16.2 + uses: crowdin/github-action@52aa776766211d83d975df51f3b9c53c2f8ba35f # v2.16.3 with: upload_sources: true upload_translations: true From 3e81291843a864154ce7979eb2903c99b748e70b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 23:28:08 +0200 Subject: [PATCH 10/26] chore(deps): Update CI dependencies to v5.3.0 (#1737) --- .github/workflows/build-apps.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-apps.yml b/.github/workflows/build-apps.yml index 38f1dd23..f305fbfc 100644 --- a/.github/workflows/build-apps.yml +++ b/.github/workflows/build-apps.yml @@ -72,7 +72,7 @@ jobs: # ubuntu-26.04 defaults to JDK 25, which breaks the RN/AGP native build # (Kotlin falls back to JVM_23, the foojay toolchain + CMake configure # fail). Pin Temurin 17 for a deterministic Android build. - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 + uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0 with: distribution: temurin java-version: "17" @@ -168,7 +168,7 @@ jobs: # ubuntu-26.04 defaults to JDK 25, which breaks the RN/AGP native build # (Kotlin falls back to JVM_23, the foojay toolchain + CMake configure # fail). Pin Temurin 17 for a deterministic Android build. - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 + uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0 with: distribution: temurin java-version: "17" From bf3dc4a366e26ffd176b67d77a149c0b3b116e19 Mon Sep 17 00:00:00 2001 From: Gauvain Date: Wed, 17 Jun 2026 09:39:43 +0200 Subject: [PATCH 11/26] ci(artifact-comment): always-on dropdown, build ETA, signed/unsigned fix (#1734) --- .github/actions/refresh-pr-comment/action.yml | 21 +++ .github/workflows/artifact-comment.yml | 132 ++++++++++++------ .github/workflows/build-apps.yml | 21 +++ 3 files changed, 135 insertions(+), 39 deletions(-) create mode 100644 .github/actions/refresh-pr-comment/action.yml diff --git a/.github/actions/refresh-pr-comment/action.yml b/.github/actions/refresh-pr-comment/action.yml new file mode 100644 index 00000000..3149ea42 --- /dev/null +++ b/.github/actions/refresh-pr-comment/action.yml @@ -0,0 +1,21 @@ +name: Refresh PR build comment +description: >- + Nudge artifact-comment.yml (via workflow_dispatch) so the PR build-status + comment reflects live per-platform progress as each build job finishes. + +runs: + using: composite + steps: + # workflow_dispatch fires even when triggered by the GITHUB_TOKEN, and + # artifact-comment's concurrency group collapses simultaneous nudges, so + # this can't spam the comment. Skipped on forks (their read-only token + # cannot dispatch). github.token is used because composite actions cannot + # read the secrets context. + - if: always() && github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository + continue-on-error: true + shell: bash + env: + GH_TOKEN: ${{ github.token }} + HEAD_REF: ${{ github.head_ref }} + REPO: ${{ github.repository }} + run: gh workflow run artifact-comment.yml --ref "$HEAD_REF" -R "$REPO" diff --git a/.github/workflows/artifact-comment.yml b/.github/workflows/artifact-comment.yml index b81eeeaf..80c7119e 100644 --- a/.github/workflows/artifact-comment.yml +++ b/.github/workflows/artifact-comment.yml @@ -144,7 +144,7 @@ jobs: ) .sort((a, b) => new Date(b.created_at) - new Date(a.created_at)); - console.log(`Found ${buildRuns.length} non-cancelled build workflow runs for this commit`); + console.log(`Found ${buildRuns.length} build workflow runs for this commit`); // Log current status of each build for debugging buildRuns.forEach(run => { @@ -184,21 +184,35 @@ jobs: const latestAndroidRun = findBestRun('Android APK Build'); const latestIOSRun = findBestRun('iOS IPA Build'); + // Map our build targets to their job display names. Exact name is + // tried first so a signed target never collides with its + // "(Unsigned)" sibling (whose name contains the signed name). + const jobMappings = { + 'Android Phone': ['๐Ÿค– Build Android APK (Phone)'], + 'Android TV': ['๐Ÿค– Build Android APK (TV)'], + 'iOS': ['๐ŸŽ Build iOS IPA (Phone)'], + 'iOS Unsigned': ['๐ŸŽ Build iOS IPA (Phone - Unsigned)'], + 'tvOS': ['๐ŸŽ Build tvOS IPA'], + 'tvOS Unsigned': ['๐ŸŽ Build tvOS IPA (Unsigned)'] + }; + + // Prefer an exact name match over a substring match so + // '...(Phone)' doesn't swallow '...(Phone - Unsigned)'. + const findJobForTarget = (jobs, jobNames) => + jobs.find(j => jobNames.some(name => j.name === name)) || + jobs.find(j => jobNames.some(name => j.name.includes(name))); + + // Format a millisecond duration as "Xm Ys". + const fmtDuration = (ms) => { + const min = Math.floor(ms / 60000); + const sec = Math.floor((ms % 60000) / 1000); + return `${min}m ${sec}s`; + }; + // For the consolidated workflow, get individual job statuses if (latestAppsRun) { console.log(`Getting individual job statuses for run ${latestAppsRun.id} (status: ${latestAppsRun.status}, conclusion: ${latestAppsRun.conclusion || 'none'})`); - // Map job names to our build targets. Declared outside the try so - // the catch fallback can reuse the same keys. - const jobMappings = { - 'Android Phone': ['๐Ÿค– Build Android APK (Phone)', 'build-android-phone'], - 'Android TV': ['๐Ÿค– Build Android APK (TV)', 'build-android-tv'], - 'iOS': ['๐ŸŽ Build iOS IPA (Phone)', 'build-ios-phone'], - 'iOS Unsigned': ['๐ŸŽ Build iOS IPA (Phone - Unsigned)', 'build-ios-phone-unsigned'], - 'tvOS': ['๐ŸŽ Build tvOS IPA', 'build-ios-tv'], - 'tvOS Unsigned': ['๐ŸŽ Build tvOS IPA (Unsigned)', 'build-ios-tv-unsigned'] - }; - try { // Get all jobs for this workflow run const { data: jobs } = await github.rest.actions.listJobsForWorkflowRun({ @@ -229,10 +243,8 @@ jobs: // Create individual status for each job for (const [platform, jobNames] of Object.entries(jobMappings)) { - const job = jobs.jobs.find(j => - jobNames.some(name => j.name.includes(name) || j.name === name) - ); - + const job = findJobForTarget(jobs.jobs, jobNames); + if (job) { buildStatuses[platform] = { name: job.name, @@ -358,6 +370,43 @@ jobs: console.log(`- Artifact: ${artifact.name} (from run ${artifact.workflow_run.id})`); }); + // Pull per-job durations from the latest successful develop build so + // in-progress / queued targets can show a realistic ETA instead of + // an open-ended spinner. Best-effort: any failure just drops the ETA. + let referenceDurations = {}; + try { + const { data: devRuns } = await github.rest.actions.listWorkflowRuns({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'build-apps.yml', + branch: 'develop', + status: 'success', + per_page: 1 + }); + + if (devRuns.workflow_runs.length > 0) { + const refRun = devRuns.workflow_runs[0]; + const { data: refJobs } = await github.rest.actions.listJobsForWorkflowRun({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: refRun.id + }); + + for (const [platform, jobNames] of Object.entries(jobMappings)) { + const job = findJobForTarget(refJobs.jobs, jobNames); + if (job && job.conclusion === 'success' && job.started_at && job.completed_at) { + referenceDurations[platform] = new Date(job.completed_at) - new Date(job.started_at); + } + } + console.log(`Reference durations from develop run ${refRun.id}:`, + Object.fromEntries(Object.entries(referenceDurations).map(([k, v]) => [k, fmtDuration(v)]))); + } else { + console.log('No successful develop build found for ETA reference'); + } + } catch (error) { + console.log('Failed to fetch develop reference durations:', error.message); + } + // Build comment body with progressive status for individual builds let commentBody = `## ๐Ÿ”ง Build Status for PR #${pr.number}\n\n`; commentBody += `๐Ÿ”— **Commit**: [\`${targetCommitSha.substring(0, 7)}\`](https://github.com/${context.repo.owner}/${context.repo.repo}/commit/${targetCommitSha})\n\n`; // Progressive build status and downloads table @@ -369,9 +418,9 @@ jobs: const buildTargets = [ { name: 'Android Phone', platform: '๐Ÿค–', device: '๐Ÿ“ฑ Phone', statusKey: 'Android Phone', artifactPattern: /android.*phone/i }, { name: 'Android TV', platform: '๐Ÿค–', device: '๐Ÿ“บ TV', statusKey: 'Android TV', artifactPattern: /android.*tv/i }, - { name: 'iOS', platform: '๐ŸŽ', device: '๐Ÿ“ฑ Phone', statusKey: 'iOS', artifactPattern: /ios.*phone.*ipa(?!.*unsigned)/i }, + { name: 'iOS', platform: '๐ŸŽ', device: '๐Ÿ“ฑ Phone', statusKey: 'iOS', artifactPattern: /^(?!.*unsigned).*ios.*phone.*ipa/i }, { name: 'iOS Unsigned', platform: '๐ŸŽ', device: '๐Ÿ“ฑ Phone Unsigned', statusKey: 'iOS Unsigned', artifactPattern: /ios.*phone.*unsigned/i }, - { name: 'tvOS', platform: '๐ŸŽ', device: '๐Ÿ“บ TV', statusKey: 'tvOS', artifactPattern: /ios.*tv.*ipa(?!.*unsigned)/i }, + { name: 'tvOS', platform: '๐ŸŽ', device: '๐Ÿ“บ TV', statusKey: 'tvOS', artifactPattern: /^(?!.*unsigned).*ios.*tv.*ipa/i }, { name: 'tvOS Unsigned', platform: '๐ŸŽ', device: '๐Ÿ“บ TV Unsigned', statusKey: 'tvOS Unsigned', artifactPattern: /ios.*tv.*unsigned/i } ]; @@ -407,11 +456,9 @@ jobs: let durationInfo = ''; if (matchingStatus.started_at && matchingStatus.completed_at) { const durationMs = new Date(matchingStatus.completed_at) - new Date(matchingStatus.started_at); - const durationMin = Math.floor(durationMs / 60000); - const durationSec = Math.floor((durationMs % 60000) / 1000); - durationInfo = ` - ${durationMin}m ${durationSec}s`; + durationInfo = ` - ${fmtDuration(durationMs)}`; } - + downloadLink = `[๐Ÿ“ฅ Download ${fileType}](${directLink}) ${sizeInfo}${durationInfo}`; } else if (matchingStatus.conclusion === 'failure') { status = `โŒ [Failed](${matchingStatus.url})`; @@ -421,10 +468,16 @@ jobs: downloadLink = '*Build cancelled*'; } else if (matchingStatus.status === 'in_progress') { status = `๐Ÿ”„ [Building...](${matchingStatus.url})`; - downloadLink = '*Build in progress...*'; + const ref = referenceDurations[target.statusKey]; + downloadLink = ref + ? `*Buildingโ€ฆ ~${fmtDuration(ref)} (avg on develop)*` + : '*Build in progress...*'; } else if (matchingStatus.status === 'queued') { status = `โณ [Queued](${matchingStatus.url})`; - downloadLink = '*Waiting to start...*'; + const ref = referenceDurations[target.statusKey]; + downloadLink = ref + ? `*Waiting to startโ€ฆ ~${fmtDuration(ref)} once running (avg on develop)*` + : '*Waiting to start...*'; } else if (matchingStatus.status === 'completed' && !matchingStatus.conclusion) { // Workflow completed but conclusion not yet available (rare edge case) status = `๐Ÿ”„ [Finishing...](${matchingStatus.url})`; @@ -445,26 +498,27 @@ jobs: commentBody += `\n`; - // Show installation instructions if we have any artifacts + // Static rundown of the build optimisations + what each artifact + // installs on. Always shown (even mid-build) so testers know what + // to expect before downloads are ready. + commentBody += `
\n`; + commentBody += `๐Ÿ“ฆ Build details & device compatibility\n\n`; + commentBody += `These CI builds are trimmed for size and speed. What that means for installing them:\n\n`; + commentBody += `| Artifact | Architectures | Installs on |\n`; + commentBody += `|---|---|---|\n`; + commentBody += `| ๐Ÿค– Android Phone APK | \`arm64-v8a\` | Every 64-bit Android phone (all since ~2017). **Not** an x86_64 emulator or a 32-bit device. |\n`; + commentBody += `| ๐Ÿ“บ Android TV APK | \`arm64-v8a\` + \`armeabi-v7a\` | Modern boxes **and** older / cheap 32-bit Android TV sticks. No x86_64. |\n`; + commentBody += `| ๐ŸŽ iOS / tvOS IPA | \`arm64\` | iPhone / Apple TV (all current devices). |\n\n`; + commentBody += `**Why no x86_64?** That slice only runs on Android emulators / Chromebooks, never a real phone or TV box โ€” dropping it shrinks the APK and speeds up the build. Local \`bun run android\` is unaffected (it still builds x86_64 from \`app.json\`).\n\n`; + commentBody += `**Runners:** Android on \`ubuntu-26.04\`; iOS / tvOS on Apple Silicon (\`macos-26\`). The size/speed win comes from the ABI trim above, not the runner.\n`; + commentBody += `
\n\n`; + + // Installation instructions only matter once something is downloadable. if (allArtifacts.length > 0) { commentBody += `### ๐Ÿ”ง Installation Instructions\n\n`; commentBody += `- **Android APK**: Download and install directly on your device (enable "Install from unknown sources")\n`; commentBody += `- **iOS IPA**: Install using [AltStore](https://altstore.io/), [Sideloadly](https://sideloadly.io/), or Xcode\n\n`; commentBody += `> โš ๏ธ **Note**: Artifacts expire in 7 days from build date\n\n`; - - // Collapsible rundown of the build optimisations + what each - // artifact actually installs on, so testers grab the right file. - commentBody += `
\n`; - commentBody += `๐Ÿ“ฆ Build details & device compatibility\n\n`; - commentBody += `These CI builds are trimmed for size and speed. What that means for installing them:\n\n`; - commentBody += `| Artifact | Architectures | Installs on |\n`; - commentBody += `|---|---|---|\n`; - commentBody += `| ๐Ÿค– Android Phone APK | \`arm64-v8a\` | Every 64-bit Android phone (all since ~2017). **Not** an x86_64 emulator or a 32-bit device. |\n`; - commentBody += `| ๐Ÿ“บ Android TV APK | \`arm64-v8a\` + \`armeabi-v7a\` | Modern boxes **and** older / cheap 32-bit Android TV sticks. No x86_64. |\n`; - commentBody += `| ๐ŸŽ iOS / tvOS IPA | \`arm64\` | iPhone / Apple TV (all current devices). |\n\n`; - commentBody += `**Why no x86_64?** That slice only runs on Android emulators / Chromebooks, never a real phone or TV box โ€” dropping it shrinks the APK and speeds up the build. Local \`bun run android\` is unaffected (it still builds x86_64 from \`app.json\`).\n\n`; - commentBody += `**Runners:** Android on \`ubuntu-26.04\`; iOS / tvOS on Apple Silicon (\`macos-26\`). The size/speed win comes from the ABI trim above, not the runner.\n`; - commentBody += `
\n\n`; } else { commentBody += `โณ **Builds are starting up...** This comment will update automatically as each build completes.\n\n`; } diff --git a/.github/workflows/build-apps.yml b/.github/workflows/build-apps.yml index f305fbfc..3a50064c 100644 --- a/.github/workflows/build-apps.yml +++ b/.github/workflows/build-apps.yml @@ -27,6 +27,7 @@ jobs: name: ๐Ÿค– Build Android APK (Phone) permissions: contents: read + actions: write # dispatch artifact-comment.yml to refresh the PR comment steps: - name: ๐Ÿ—‘๏ธ Free Disk Space @@ -117,12 +118,16 @@ jobs: android/app/build/outputs/apk/release/*.apk retention-days: 7 + - name: ๐Ÿ”„ Refresh PR build comment + uses: ./.github/actions/refresh-pr-comment + build-android-tv: if: (!contains(github.event.head_commit.message, '[skip ci]')) runs-on: ubuntu-26.04 name: ๐Ÿค– Build Android APK (TV) permissions: contents: read + actions: write # dispatch artifact-comment.yml to refresh the PR comment steps: - name: ๐Ÿ—‘๏ธ Free Disk Space @@ -212,12 +217,16 @@ jobs: android/app/build/outputs/apk/release/*.apk retention-days: 7 + - name: ๐Ÿ”„ Refresh PR build comment + uses: ./.github/actions/refresh-pr-comment + build-ios-phone: if: (!contains(github.event.head_commit.message, '[skip ci]') && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == 'streamyfin/streamyfin')) runs-on: macos-26 name: ๐ŸŽ Build iOS IPA (Phone) permissions: contents: read + actions: write # dispatch artifact-comment.yml to refresh the PR comment steps: - name: ๐Ÿ“ฅ Checkout code @@ -280,12 +289,16 @@ jobs: path: build-*.ipa retention-days: 7 + - name: ๐Ÿ”„ Refresh PR build comment + uses: ./.github/actions/refresh-pr-comment + build-ios-phone-unsigned: if: (!contains(github.event.head_commit.message, '[skip ci]')) runs-on: macos-26 name: ๐ŸŽ Build iOS IPA (Phone - Unsigned) permissions: contents: read + actions: write # dispatch artifact-comment.yml to refresh the PR comment steps: - name: ๐Ÿ“ฅ Checkout code @@ -339,6 +352,9 @@ jobs: path: build/*.ipa retention-days: 7 + - name: ๐Ÿ”„ Refresh PR build comment + uses: ./.github/actions/refresh-pr-comment + build-ios-tv: # Disabled: EAS has no provisioning profiles / distribution cert for the tvOS # targets (app + StreamyfinTopShelf extension), so non-interactive signed @@ -349,6 +365,7 @@ jobs: name: ๐ŸŽ Build tvOS IPA permissions: contents: read + actions: write # dispatch artifact-comment.yml to refresh the PR comment steps: - name: ๐Ÿ“ฅ Checkout code @@ -418,6 +435,7 @@ jobs: name: ๐ŸŽ Build tvOS IPA (Unsigned) permissions: contents: read + actions: write # dispatch artifact-comment.yml to refresh the PR comment steps: - name: ๐Ÿ“ฅ Checkout code @@ -470,3 +488,6 @@ jobs: name: streamyfin-ios-tv-unsigned-ipa-${{ env.DATE_TAG }} path: build/*.ipa retention-days: 7 + + - name: ๐Ÿ”„ Refresh PR build comment + uses: ./.github/actions/refresh-pr-comment From c3dceedad0c90ee5ec3bd881218587b149cf11c3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Jun 2026 10:56:35 +0200 Subject: [PATCH 12/26] chore(deps): Update dependency lint-staged to v17.0.7 (#1607) Co-authored-by: Gauvain --- bun.lock | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bun.lock b/bun.lock index 7f6baa66..8ca83cb3 100644 --- a/bun.lock +++ b/bun.lock @@ -111,7 +111,7 @@ "cross-env": "10.1.0", "expo-doctor": "1.19.9", "husky": "9.1.7", - "lint-staged": "17.0.5", + "lint-staged": "17.0.7", "react-test-renderer": "19.2.3", "typescript": "6.0.3", }, @@ -1270,7 +1270,7 @@ "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "lint-staged": ["lint-staged@17.0.5", "", { "dependencies": { "listr2": "^10.2.1", "picomatch": "^4.0.4", "string-argv": "^0.3.2", "tinyexec": "^1.1.2" }, "optionalDependencies": { "yaml": "^2.8.4" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-d12yC+/e8RhBjZtaxZn71FyrgU/P5e+uAPifhCLwdosQZP/zamSdKRWDC30ocVIbzDKiFG1McHc/LUgB92GIPw=="], + "lint-staged": ["lint-staged@17.0.7", "", { "dependencies": { "listr2": "^10.2.1", "picomatch": "^4.0.4", "string-argv": "^0.3.2", "tinyexec": "^1.2.4" }, "optionalDependencies": { "yaml": "^2.9.0" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-JrSobt+tW3rH8IOMi8tDZd3foorM5yPEkLD/V2NxobgHrFfHWGee4MOLVuZeScgxftEwbHrPHIFA/ZL+nUJeuA=="], "listr2": ["listr2@10.2.1", "", { "dependencies": { "cli-truncate": "^5.2.0", "eventemitter3": "^5.0.4", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^10.0.0" } }, "sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q=="], diff --git a/package.json b/package.json index 0c4715d3..fbf33a84 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "cross-env": "10.1.0", "expo-doctor": "1.19.9", "husky": "9.1.7", - "lint-staged": "17.0.5", + "lint-staged": "17.0.7", "react-test-renderer": "19.2.3", "typescript": "6.0.3" }, From 5bf07b47987c1e373385d7808268a73405d0439b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 17 Jun 2026 11:32:38 +0200 Subject: [PATCH 13/26] feat: New Crowdin Translations (#1699) Co-authored-by: Crowdin Bot --- translations/ar.json | 119 ++-------------- translations/ca.json | 119 ++-------------- translations/cs.json | 119 ++-------------- translations/da.json | 119 ++-------------- translations/de.json | 315 +++++++++++++++--------------------------- translations/el.json | 119 ++-------------- translations/es.json | 121 ++-------------- translations/fi.json | 119 ++-------------- translations/fr.json | 119 ++-------------- translations/he.json | 119 ++-------------- translations/hu.json | 119 ++-------------- translations/it.json | 223 +++++++++--------------------- translations/ja.json | 119 ++-------------- translations/ko.json | 119 ++-------------- translations/nl.json | 119 ++-------------- translations/no.json | 121 ++-------------- translations/pl.json | 119 ++-------------- translations/pt.json | 119 ++-------------- translations/ro.json | 119 ++-------------- translations/ru.json | 119 ++-------------- translations/sv.json | 119 ++-------------- translations/th.json | 121 ++-------------- translations/tlh.json | 119 ++-------------- translations/tr.json | 119 ++-------------- translations/uk.json | 119 ++-------------- translations/vi.json | 119 ++-------------- translations/zh.json | 119 ++-------------- 27 files changed, 477 insertions(+), 3042 deletions(-) diff --git a/translations/ar.json b/translations/ar.json index 8fbd5ddb..ce1e00cd 100644 --- a/translations/ar.json +++ b/translations/ar.json @@ -261,43 +261,6 @@ "None": "ู„ุง ุดูŠุก", "OnlyForced": "ูู‚ุท ุงู„ุฅุฌุจุงุฑูŠุฉ" }, - "text_color": "ู„ูˆู† ุงู„ู†ุต", - "background_color": "ู„ูˆู† ุงู„ุฎู„ููŠุฉ", - "outline_color": "ู„ูˆู† ุฅุทุงุฑ ุงู„ุฎุท", - "outline_thickness": "ุณู…ูƒ ุฅุทุงุฑ ุงู„ุฎุท", - "background_opacity": "ุดูุงููŠุฉ ุงู„ุฎู„ููŠุฉ", - "outline_opacity": "ุดูุงููŠุฉ ุฅุทุงุฑ ุงู„ุฎุท", - "bold_text": "ุฎุท ุนุฑูŠุถ", - "colors": { - "Black": "ุฃุณูˆุฏ", - "Gray": "ุฑู…ุงุฏูŠ", - "Silver": "ูุถูŠ", - "White": "ุฃุจูŠุถ", - "Maroon": "ุฃุญู…ุฑ ุฏุงูƒู†", - "Red": "ุฃุญู…ุฑ", - "Fuchsia": "ูˆุฑุฏูŠ", - "Yellow": "ุฃุตูุฑ", - "Olive": "โ€ซุฃุฎุถุฑ ุฒูŠุชูˆู†ูŠโ€ฌโ€Ž", - "Green": "ุฃุฎุถุฑ", - "Teal": "ุฃุฒุฑู‚ ู…ุฎุถุฑ", - "Lime": "ู„ูŠู…ูˆู†ูŠ", - "Purple": "ุจู†ูุณุฌูŠ", - "Navy": "ูƒุญู„ูŠ", - "Blue": "ุฃุฒุฑู‚", - "Aqua": "ุฃุฒุฑู‚ ุจุญุฑูŠ" - }, - "thickness": { - "None": "ู„ุง ุดูŠุก", - "Thin": "ู†ุญูŠู", - "Normal": "ุนุงุฏูŠ", - "Thick": "ุณู…ูŠูƒ" - }, - "subtitle_color": "ู„ูˆู† ุงู„ุชุฑุฌู…ุฉ", - "subtitle_background_color": "ู„ูˆู† ุงู„ุฎู„ููŠุฉ", - "subtitle_font": "ุฎุท ุงู„ุชุฑุฌู…ุฉ", - "ksplayer_title": "ุฅุนุฏุงุฏุงุช KSPlayer", - "hardware_decode": "ููƒ ุงู„ุชุฑู…ูŠุฒ ุจูˆุงุณุทุฉ ุงู„ุฌู‡ุงุฒ", - "hardware_decode_description": "ุงุณุชุฎุฏู… ุชุณุฑูŠุน ุงู„ุนุชุงุฏ ู„ููƒ ุชุฑู…ูŠุฒ ุงู„ููŠุฏูŠูˆ. ู‚ู… ุจุชุนุทูŠู„ู‡ ุฅุฐุง ูˆุงุฌู‡ุช ู…ุดูƒู„ุงุช ููŠ ุงู„ุชุดุบูŠู„.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "ุฅุนุฏุงุฏุงุช ุชุฑุฌู…ุฉ VLC", - "hint": "ุชุฎุตูŠุต ู…ุธู‡ุฑ ุงู„ุชุฑุฌู…ุฉ ู„ู…ุดุบู„ VLC. ุชุตุจุญ ุงู„ุชุบูŠูŠุฑุงุช ุณุงุฑูŠุฉ ุงู„ู…ูุนูˆู„ ุนู†ุฏ ุงู„ุชุดุบูŠู„ ุงู„ุชุงู„ูŠ.", - "text_color": "ู„ูˆู† ุงู„ู†ุต", - "background_color": "ู„ูˆู† ุงู„ุฎู„ููŠุฉ", - "background_opacity": "ุดูุงููŠุฉ ุงู„ุฎู„ููŠุฉ", - "outline_color": "ู„ูˆู† ุฅุทุงุฑ ุงู„ุฎุท", - "outline_opacity": "ุดูุงููŠุฉ ุฅุทุงุฑ ุงู„ุฎุท", - "outline_thickness": "ุณู…ูƒ ุฅุทุงุฑ ุงู„ุฎุท", - "bold": "ุฎุท ุนุฑูŠุถ", - "margin": "ุงู„ู‡ุงู…ุด ุงู„ุณูู„ูŠ" - }, - "video_player": { - "title": "ู…ุดุบู„ ุงู„ููŠุฏูŠูˆ", - "video_player": "ู…ุดุบู„ ุงู„ููŠุฏูŠูˆ", - "video_player_description": "ุงุฎุชุฑ ู…ุดุบู„ ุงู„ููŠุฏูŠูˆ ุงู„ุฐูŠ ุณูŠุชู… ุงุณุชุฎุฏุงู…ู‡ ุนู„ู‰ ู†ุธุงู… iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "ุฃุฎุฑู‰", "video_orientation": "ุงุชุฌุงู‡ ุงู„ููŠุฏูŠูˆ", @@ -351,11 +295,6 @@ "UNKNOWN": "ุบูŠุฑ ู…ุนุฑูˆู" }, "safe_area_in_controls": "ุงู„ู…ู†ุทู‚ุฉ ุงู„ุขู…ู†ุฉ ู„ุนู†ุงุตุฑ ุงู„ุชุญูƒู…", - "video_player": "ู…ุดุบู„ ุงู„ููŠุฏูŠูˆ", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (ุชุฌุฑูŠุจูŠ + ุตูˆุฑุฉ ุฏุงุฎู„ ุตูˆุฑุฉ)" - }, "show_custom_menu_links": "ุฅุธู‡ุงุฑ ุฑูˆุงุจุท ุงู„ู‚ุงุฆู…ุฉ ุงู„ู…ุฎุตุตุฉ", "show_large_home_carousel": "ุฅุธู‡ุงุฑ ุดุฑูŠุท ุงู„ุนุฑุถ ุงู„ูƒุจูŠุฑ (ุชุฌุฑูŠุจูŠ)", "hide_libraries": "ุฅุฎูุงุก ุงู„ู…ูƒุชุจุงุช", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "ุงู„ุญุฏ ุงู„ุฃู‚ุตู‰ ู„ุนุฏุฏ ุงู„ุญู„ู‚ุงุช ุงู„ุชูŠ ูŠุชู… ุชุดุบูŠู„ู‡ุง ุชู„ู‚ุงุฆูŠู‹ุง", "disabled": "ู…ุนุทู„" }, - "downloads": { - "downloads_title": "ุงู„ุชู†ุฒูŠู„ุงุช" - }, "music": { "title": "ุงู„ู…ูˆุณูŠู‚ู‰", "playback_title": "ุงู„ุชุดุบูŠู„", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "ุงู„ุฅุถุงูุงุช", "jellyseerr": { - "jellyseerr_warning": "ู‡ุฐุง ุงู„ุฑุจุท ููŠ ู…ุฑุงุญู„ู‡ ุงู„ุฃูˆู„ู‰. ุชูˆู‚ุน ุญุฏูˆุซ ุชุบูŠูŠุฑุงุช.", "server_url": "ุฑุงุจุท ุงู„ุฎุงุฏู…", "server_url_hint": "ู…ุซุงู„: http(s)://your-host.url\n(ุฃุถู ุงู„ู…ู†ูุฐ ุฅุฐุง ู„ุฒู… ุงู„ุฃู…ุฑ)", "server_url_placeholder": "ุฑุงุจุท Seerr...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "ุงู‚ุฑุฃ ุงู„ู…ุฒูŠุฏ ุนู† ู…ุงุฑู„ู†.", "save_button": "ุญูุธ", "toasts": { - "saved": "ุชู… ุงู„ุญูุธ", - "refreshed": "ุชู… ุชุญุฏูŠุซ ุงู„ุฅุนุฏุงุฏุงุช ู…ู† ุงู„ุฎุงุฏู…" - }, - "refresh_from_server": "ุชุญุฏูŠุซ ุงู„ุฅุนุฏุงุฏุงุช ู…ู† ุงู„ุฎุงุฏู…" + "saved": "ุชู… ุงู„ุญูุธ" + } }, "streamystats": { - "enable_streamystats": "ุชูุนูŠู„ Streamystats", "disable_streamystats": "ุชุนุทูŠู„ Streamystats", "enable_search": "ุงุณุชุฎุฏู… ู„ู„ุจุญุซ", "url": "ุงู„ุฑุงุจุท", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "ุฃุฏุฎู„ ุฑุงุจุท ุฎุงุฏู… Streamystats ุงู„ุฎุงุต ุจูƒ. ูŠุฌุจ ุฃู† ูŠุชุถู…ู† ุงู„ุฑุงุจุท ุงู„ุจุฑูˆุชูˆูƒูˆู„ http ุฃูˆ https ู…ุน ุฑู‚ู… ุงู„ู…ู†ูุฐ ุงุฎุชูŠุงุฑูŠุงู‹.", "read_more_about_streamystats": "ุงู‚ุฑุฃ ุงู„ู…ุฒูŠุฏ ุนู† Streamystats.", - "save_button": "ุญูุธ", "save": "ุญูุธ", "features_title": "ุงู„ู…ู…ูŠุฒุงุช", - "home_sections_title": "ุฃู‚ุณุงู… ุงู„ุฑุฆูŠุณูŠุฉ", "enable_movie_recommendations": "ุชูˆุตูŠุงุช ุงู„ุฃูู„ุงู…", "enable_series_recommendations": "ุชูˆุตูŠุงุช ุงู„ู…ุณู„ุณู„ุงุช", "enable_promoted_watchlists": "ู‚ูˆุงุฆู… ู…ุดุงู‡ุฏุฉ ู…ุฎุชุงุฑุฉ", @@ -445,8 +375,7 @@ "refresh_from_server": "ุชุญุฏูŠุซ ุงู„ุฅุนุฏุงุฏุงุช ู…ู† ุงู„ุฎุงุฏู…" }, "kefinTweaks": { - "watchlist_enabler": "ุชูุนูŠู„ ุงู„ุฑุจุท ู…ุน ู‚ุงุฆู…ุฉ ุงู„ู…ุดุงู‡ุฏุฉ ุงู„ุฎุงุตุฉ ุจู†ุง", - "watchlist_button": "ุชุจุฏูŠู„ ุญุงู„ุฉ ุฑุจุท ู‚ุงุฆู…ุฉ ุงู„ู…ุดุงู‡ุฏุฉ" + "watchlist_enabler": "ุชูุนูŠู„ ุงู„ุฑุจุท ู…ุน ู‚ุงุฆู…ุฉ ุงู„ู…ุดุงู‡ุฏุฉ ุงู„ุฎุงุตุฉ ุจู†ุง" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "ุญุฐู ุฌู…ูŠุน ุงู„ู…ู„ูุงุช ุงู„ุชูŠ ุชู… ุชู†ุฒูŠู„ู‡ุง", "music_cache_title": "ุงู„ุชุฎุฒูŠู† ุงู„ู…ุคู‚ุช ู„ู„ู…ูˆุณูŠู‚ู‰", "music_cache_description": "ุชุฎุฒูŠู† ุงู„ุฃุบุงู†ูŠ ุชู„ู‚ุงุฆูŠุงู‹ ุฃุซู†ุงุก ุงู„ุงุณุชู…ุงุน ู„ุถู…ุงู† ุชุดุบูŠู„ ุฃูƒุซุฑ ุณู„ุงุณุฉ ูˆุฏุนู… ุงู„ุงุณุชู…ุงุน ุจุฏูˆู† ุงุชุตุงู„", - "enable_music_cache": "ุชู…ูƒูŠู† ุงู„ุชุฎุฒูŠู† ุงู„ู…ุคู‚ุช ู„ู„ู…ูˆุณูŠู‚ู‰", "clear_music_cache": "ู…ุณุญ ุงู„ุชุฎุฒูŠู† ุงู„ู…ุคู‚ุช ู„ู„ู…ูˆุณูŠู‚ู‰", "music_cache_size": "ุชู… ุชุฎุฒูŠู† {{size}} ู…ุคู‚ุชุงู‹", "music_cache_cleared": "ุชู… ู…ุณุญ ุงู„ุชุฎุฒูŠู† ุงู„ู…ุคู‚ุช ู„ู„ู…ูˆุณูŠู‚ู‰", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "ุงู„ู†ุธุงู…" }, "toasts": { - "error_deleting_files": "ุฎุทุฃ ููŠ ุญุฐู ุงู„ู…ู„ูุงุช", - "background_downloads_enabled": "ุชู… ุชูุนูŠู„ ุงู„ุชู†ุฒูŠู„ุงุช ููŠ ุงู„ุฎู„ููŠุฉ", - "background_downloads_disabled": "ุชู… ุชุนุทูŠู„ ุงู„ุชู†ุฒูŠู„ุงุช ููŠ ุงู„ุฎู„ููŠุฉ" + "error_deleting_files": "ุฎุทุฃ ููŠ ุญุฐู ุงู„ู…ู„ูุงุช" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "ุงู„ุชู†ุฒูŠู„ุงุช", "series": "ู…ุณู„ุณู„ุงุช", "movies": "ุฃูู„ุงู…", - "queue": "ู‚ุงุฆู…ุฉ ุงู„ุงู†ุชุธุงุฑ", "other_media": "ูˆุณุงุฆุท ุฃุฎุฑู‰", - "queue_hint": "ุณุชูู‚ุฏ ู‚ุงุฆู…ุฉ ุงู„ุงู†ุชุธุงุฑ ูˆุงู„ุชู†ุฒูŠู„ุงุช ุนู†ุฏ ุฅุนุงุฏุฉ ุชุดุบูŠู„ ุงู„ุชุทุจูŠู‚", - "no_items_in_queue": "ู„ุง ุชูˆุฌุฏ ุนู†ุงุตุฑ ููŠ ู‚ุงุฆู…ุฉ ุงู„ุงู†ุชุธุงุฑ", "no_downloaded_items": "ู„ุง ุชูˆุฌุฏ ุนู†ุงุตุฑ ุชู… ุชู†ุฒูŠู„ู‡ุง", "delete_all_movies_button": "ุญุฐู ุฌู…ูŠุน ุงู„ุฃูู„ุงู…", "delete_all_series_button": "ุญุฐู ุฌู…ูŠุน ุงู„ู…ุณู„ุณู„ุงุช", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "ูุดู„ ุญุฐู ุฌู…ูŠุน ุงู„ู…ุณู„ุณู„ุงุช", "deleted_media_successfully": "ุชู… ุญุฐู ุงู„ูˆุณุงุฆุท ุงู„ุฃุฎุฑู‰ ุจู†ุฌุงุญ!", "failed_to_delete_media": "ูุดู„ ุญุฐู ุงู„ูˆุณุงุฆุท ุงู„ุฃุฎุฑู‰", - "download_deleted": "ุชู… ุญุฐู ุงู„ุชู†ุฒูŠู„", "download_cancelled": "ุชู… ุฅู„ุบุงุก ุงู„ุชู†ุฒูŠู„", "could_not_delete_download": "ุชุนุฐุฑ ุญุฐู ุงู„ุชู†ุฒูŠู„", - "download_paused": "ุชู… ุฅูŠู‚ุงู ุงู„ุชู†ุฒูŠู„ ู…ุคู‚ุชู‹ุง", - "could_not_pause_download": "ุชุนุฐุฑ ุฅูŠู‚ุงู ุงู„ุชู†ุฒูŠู„ ู…ุคู‚ุชู‹ุง", - "download_resumed": "ุชู… ุงุณุชุฆู†ุงู ุงู„ุชู†ุฒูŠู„", - "could_not_resume_download": "ุชุนุฐุฑ ุงุณุชุฆู†ุงู ุงู„ุชู†ุฒูŠู„", "download_completed": "ุงูƒุชู…ู„ ุงู„ุชู†ุฒูŠู„", "download_failed": "ูุดู„ ุงู„ุชู†ุฒูŠู„", "download_failed_for_item": "ูุดู„ ุชู†ุฒูŠู„ {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} ู‚ูŠุฏ ุงู„ุชู†ุฒูŠู„ ุจุงู„ูุนู„", "all_files_deleted": "ุชู… ุญุฐู ุฌู…ูŠุน ุงู„ุชู†ุฒูŠู„ุงุช ุจู†ุฌุงุญ", "files_deleted_by_type": "ุชู… ุญุฐู {{count}} {{type}}", - "all_files_folders_and_jobs_deleted_successfully": "ุชู… ุญุฐู ุฌู…ูŠุน ุงู„ู…ู„ูุงุช ูˆุงู„ู…ุฌู„ุฏุงุช ูˆุงู„ู…ู‡ุงู… ุจู†ุฌุงุญ", - "failed_to_clean_cache_directory": "ูุดู„ ุชู†ุธูŠู ู…ุฌู„ุฏ ุฐุงูƒุฑุฉ ุงู„ุชุฎุฒูŠู† ุงู„ู…ุคู‚ุช", "could_not_get_download_url_for_item": "ุชุนุฐุฑ ุงู„ุญุตูˆู„ ุนู„ู‰ ุนู†ูˆุงู† URL ู„ู„ุชู†ุฒูŠู„ ู„ู€{{itemName}}", - "go_to_downloads": "ุงู„ุฐู‡ุงุจ ุฅู„ู‰ ุงู„ุชู†ุฒูŠู„ุงุช", "file_deleted": "ุชู… ุญุฐู {{item}}" } } @@ -583,16 +495,17 @@ "none": "ู„ุง ุดูŠุก", "track": "ุฃุบู†ูŠุฉ", "cancel": "ุฅู„ุบุงุก", - "stop": "Stop", "delete": "ุญุฐู", "ok": "ุญุณู†ุงู‹", "remove": "ุฅุฒุงู„ุฉ", - "next": "ุงู„ุชุงู„ูŠ", "back": "ุฑุฌูˆุน", "continue": "ู…ุชุงุจุนุฉ", "verifying": "ุฌุงุฑู ุงู„ุชุญู‚ู‚...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "ุจุญุซ...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "ุชุนุฐุฑ ุฅู†ุดุงุก ุจุซ ู„ู€Chromecast", "message_from_server": "ุฑุณุงู„ุฉ ู…ู† ุงู„ุฎุงุฏู…: {{message}}", "next_episode": "ุงู„ุญู„ู‚ุฉ ุงู„ุชุงู„ูŠุฉ", - "refresh_tracks": "ุชุญุฏูŠุซ ุงู„ู…ุณุงุฑุงุช", - "audio_tracks": "ู…ุณุงุฑุงุช ุงู„ุตูˆุช:", - "playback_state": "ุญุงู„ุฉ ุงู„ุชุดุบูŠู„:", - "index": "ุงู„ููู‡ู’ุฑูุณ:", "continue_watching": "ู…ุชุงุจุนุฉ ุงู„ู…ุดุงู‡ุฏุฉ", "go_back": "ุฑุฌูˆุน", "downloaded_file_title": "ุชู… ุชู†ุฒูŠู„ ู‡ุฐุง ุงู„ู…ู„ู", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "ุนุฑุถ ุงู„ู…ุฒูŠุฏ", "show_less": "ุนุฑุถ ุฃู‚ู„", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "ุงู„ุชุงู„ูŠ", @@ -888,13 +798,9 @@ "playlists": "ู‚ูˆุงุฆู… ุงู„ุชุดุบูŠู„", "tracks": "ุงู„ุฃุบุงู†ูŠ" }, - "filters": { - "all": "ุงู„ูƒู„" - }, "recently_added": "ุฃุถูŠู ู…ุคุฎุฑู‹ุง", "recently_played": "ุชู… ุชุดุบูŠู„ู‡ ู…ุคุฎุฑู‹ุง", "frequently_played": "ุงู„ุฃูƒุซุฑ ุชุดุบูŠู„ุงู‹", - "explore": "ุงูƒุชุดู", "top_tracks": "ุฃูุถู„ ุงู„ุฃุบุงู†ูŠ", "play": "ุชุดุบูŠู„", "shuffle": "ุชุฑุชูŠุจ ุนุดูˆุงุฆูŠ", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/ca.json b/translations/ca.json index 1e51e347..fb9ea6ba 100644 --- a/translations/ca.json +++ b/translations/ca.json @@ -261,43 +261,6 @@ "None": "Cap", "OnlyForced": "Nomรฉs els forรงats" }, - "text_color": "Text Color", - "background_color": "Background Color", - "outline_color": "Outline Color", - "outline_thickness": "Outline Thickness", - "background_opacity": "Background Opacity", - "outline_opacity": "Outline Opacity", - "bold_text": "Bold Text", - "colors": { - "Black": "Black", - "Gray": "Gray", - "Silver": "Silver", - "White": "White", - "Maroon": "Maroon", - "Red": "Red", - "Fuchsia": "Fuchsia", - "Yellow": "Yellow", - "Olive": "Olive", - "Green": "Green", - "Teal": "Teal", - "Lime": "Lime", - "Purple": "Purple", - "Navy": "Navy", - "Blue": "Blue", - "Aqua": "Aqua" - }, - "thickness": { - "None": "Cap", - "Thin": "Thin", - "Normal": "Normal", - "Thick": "Thick" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Altres", "video_orientation": "Orientaciรณ del vรญdeo", @@ -351,11 +295,6 @@ "UNKNOWN": "Desconeguda" }, "safe_area_in_controls": "ร€rea segura als controls", - "video_player": "Reproductor de vรญdeo", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Experimental + PiP)" - }, "show_custom_menu_links": "Mostrar enllaรงos del menรบ personalitzats", "show_large_home_carousel": "Show Large Home Carousel (beta)", "hide_libraries": "Oculta biblioteques", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Nombre mร xim d'episodis de reproducciรณ automร tica", "disabled": "Desactivat" }, - "downloads": { - "downloads_title": "Descร rregues" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Connectors", "jellyseerr": { - "jellyseerr_warning": "Aquesta integraciรณ es troba en una versiรณ primerenca. Espereu que les coses canviรฏn.", "server_url": "URL del servidor", "server_url_hint": "Exemple: http(s)://el-vostre-domini.url\n(afegiu el port si รฉs necessari)", "server_url_placeholder": "URL de Jellyseerr...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Mostra mรฉs sobre Marlin.", "save_button": "Desa", "toasts": { - "saved": "Desat", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "Desat" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Suprimeix tots els fitxers descarregats", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "Sistema" }, "toasts": { - "error_deleting_files": "Error en suprimir fitxers", - "background_downloads_enabled": "Descร rregues en segon pla activades", - "background_downloads_disabled": "Descร rregues en segon pla desactivades" + "error_deleting_files": "Error en suprimir fitxers" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Descร rregues", "series": "Sรจries", "movies": "Pelยทlรญcules", - "queue": "Cua", "other_media": "Other media", - "queue_hint": "La cua i les descร rregues es perdran en reiniciar l'aplicaciรณ", - "no_items_in_queue": "No hi ha elements a la cua", "no_downloaded_items": "No hi ha elements descarregats", "delete_all_movies_button": "Suprimeix totes les pelยทlรญcules", "delete_all_series_button": "Suprimeix totes les sรจries", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "No s'han pogut suprimir totes les sรจries", "deleted_media_successfully": "Deleted other media Successfully!", "failed_to_delete_media": "Failed to Delete other media", - "download_deleted": "Download Deleted", "download_cancelled": "Descร rrega cancelยทlada", "could_not_delete_download": "Could Not Delete Download", - "download_paused": "Download Paused", - "could_not_pause_download": "Could Not Pause Download", - "download_resumed": "Download Resumed", - "could_not_resume_download": "Could Not Resume Download", "download_completed": "Descร rrega completada", "download_failed": "Download Failed", "download_failed_for_item": "Ha fallat la descร rrega per a {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "All Downloads Deleted Successfully", "files_deleted_by_type": "{{count}} {{type}} deleted", - "all_files_folders_and_jobs_deleted_successfully": "Tots els fitxers, carpetes i treballs s'han suprimit correctament", - "failed_to_clean_cache_directory": "Failed to clean cache directory", "could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}", - "go_to_downloads": "Ves a les descร rregues", "file_deleted": "{{item}} deleted" } } @@ -583,16 +495,17 @@ "none": "None", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Cerca...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "No s'ha pogut crear un flux per a Chromecast", "message_from_server": "Missatge del servidor: {{message}}", "next_episode": "Episodi segรผent", - "refresh_tracks": "Actualitzar pistes", - "audio_tracks": "Pistes d'ร udio:", - "playback_state": "Estat de reproducciรณ:", - "index": "รndex:", "continue_watching": "Continuar veient", "go_back": "Enrere", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Mostra mรฉs", "show_less": "Mostra menys", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Segรผent", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/cs.json b/translations/cs.json index d5e6419e..da81ce08 100644 --- a/translations/cs.json +++ b/translations/cs.json @@ -261,43 +261,6 @@ "None": "Nic", "OnlyForced": "Pouze vynucenรฉ" }, - "text_color": "Barva textu", - "background_color": "Barva pozadรญ", - "outline_color": "Barva obrysu", - "outline_thickness": "Obrys tlouลกลฅky", - "background_opacity": "Prลฏhlednost pozadรญ", - "outline_opacity": "Prลฏhlednost obrysu", - "bold_text": "Bold Text", - "colors": { - "Black": "ฤŒernรฝ", - "Gray": "ล edรก", - "Silver": "Stล™รญbro", - "White": "Bรญlรฝ", - "Maroon": "Maroon", - "Red": "ฤŒervenรก", - "Fuchsia": "Fuchsia", - "Yellow": "ลฝlutรก", - "Olive": "Olivy", - "Green": "Zelenรก", - "Teal": "Modrozelenรฝ", - "Lime": "Svฤ›tle zelenรก", - "Purple": "Fialovรก", - "Navy": "Nรกmoล™nรญ loฤ", - "Blue": "Modrรก", - "Aqua": "Aqua" - }, - "thickness": { - "None": "Nic", - "Thin": "Tenkรฉ", - "Normal": "Normรกlnรญ", - "Thick": "Tlustรก" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Ostatnรญ", "video_orientation": "Orientace videa", @@ -351,11 +295,6 @@ "UNKNOWN": "Neznรกmรฝ" }, "safe_area_in_controls": "Bezpeฤnรก oblast v ovlรกdรกnรญ", - "video_player": "Video pล™ehrรกvaฤ", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (experimentรกlnรญ + PiP)" - }, "show_custom_menu_links": "Zobrazit vlastnรญ Menu odkazy", "show_large_home_carousel": "Zobrazit velkรฝ pล™ehled (beta)", "hide_libraries": "Skrรฝt knihovny", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Maximรกlnรญ poฤet automatickรฝch pล™ehrรกvรกnรญ epizod", "disabled": "Zakรกzรกno" }, - "downloads": { - "downloads_title": "Stahovรกnรญ" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Pluginy", "jellyseerr": { - "jellyseerr_warning": "Tato integrace je v ranรฝch fรกzรญch. Oฤekรกvejte zmฤ›nu situace.", "server_url": "URL serveru", "server_url_hint": "Pล™รญklad: http(s)://your-host.url\n(pล™idat port, pokud je vyลพadovรกno)", "server_url_placeholder": "Seerr URL", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Pล™eฤtฤ›te si vรญce o Marlinu.", "save_button": "Uloลพit", "toasts": { - "saved": "Uloลพeno", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "Uloลพeno" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Odstranit vลกechny staลพenรฉ soubory", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "Systรฉm" }, "toasts": { - "error_deleting_files": "Chyba pล™i mazรกnรญ souborลฏ", - "background_downloads_enabled": "Stahovรกnรญ na pozadรญ povoleno", - "background_downloads_disabled": "Stahovรกnรญ na pozadรญ zakรกzรกno" + "error_deleting_files": "Chyba pล™i mazรกnรญ souborลฏ" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Stahovรกnรญ", "series": "Televiznรญ sรฉrie", "movies": "Filmy", - "queue": "Fronta", "other_media": "Ostatnรญ mรฉdia", - "queue_hint": "Fronta a stahovรกnรญ budou ztraceny pล™i restartu aplikace", - "no_items_in_queue": "ลฝรกdnรฉ poloลพky ve frontฤ›", "no_downloaded_items": "ลฝรกdnรฉ staลพenรฉ poloลพky", "delete_all_movies_button": "Odstranit vลกechny filmy", "delete_all_series_button": "Odstranit vลกechny TV-sรฉrie", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Nepodaล™ilo se odstranit vลกechny TV-sรฉrie", "deleted_media_successfully": "Ostatnรญ mรฉdia รบspฤ›ลกnฤ› smazรกna!", "failed_to_delete_media": "Nepodaล™ilo se odstranit ostatnรญ mรฉdia", - "download_deleted": "Stahovรกnรญ smazรกno", "download_cancelled": "Download Cancelled", "could_not_delete_download": "Stahovรกnรญ nelze odstranit", - "download_paused": "Stahovรกnรญ pozastaveno", - "could_not_pause_download": "Nelze pozastavit stahovรกnรญ", - "download_resumed": "Stahovรกnรญ obnoveno", - "could_not_resume_download": "Nelze pokraฤovat v stahovรกnรญ", "download_completed": "Stahovรกnรญ dokonฤeno", "download_failed": "Download Failed", "download_failed_for_item": "Stahovรกnรญ se nezdaล™ilo pro {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "All Downloads Deleted Successfully", "files_deleted_by_type": "{{count}} {{type}} deleted", - "all_files_folders_and_jobs_deleted_successfully": "Vลกechny soubory, sloลพky a รบlohy byly รบspฤ›ลกnฤ› odstranฤ›ny", - "failed_to_clean_cache_directory": "Nepodaล™ilo se vyฤistit adresรกล™ mezipamฤ›ti", "could_not_get_download_url_for_item": "Nelze zรญskat URL pro staลพenรญ {{itemName}}", - "go_to_downloads": "Pล™ejรญt na stahovรกnรญ", "file_deleted": "{{item}} deleted" } } @@ -583,16 +495,17 @@ "none": "None", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Hledat...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Nelze vytvoล™it stream pro Chromecast", "message_from_server": "Zprรกva od serveru: {{message}}", "next_episode": "Dalลกรญ epizoda", - "refresh_tracks": "Obnovit skladby", - "audio_tracks": "Zvukovรฉ stopy:", - "playback_state": "Stav pล™ehrรกvรกnรญ:", - "index": "Index:", "continue_watching": "Pokraฤovat ve sledovรกnรญ", "go_back": "Zpฤ›t", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Zobrazit vรญce", "show_less": "Zobrazit mรฉnฤ›", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Dalลกรญ", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/da.json b/translations/da.json index 14172136..95e2f6d6 100644 --- a/translations/da.json +++ b/translations/da.json @@ -261,43 +261,6 @@ "None": "Ingen", "OnlyForced": "Kun tvungne undertekster" }, - "text_color": "Tekst Farve", - "background_color": "Baggrunds Farve", - "outline_color": "Omrids Farve", - "outline_thickness": "Omrids Tykkelse", - "background_opacity": "Baggrunds Gennemsigtighed", - "outline_opacity": "Omrids Gennemsigtighed", - "bold_text": "Bold Text", - "colors": { - "Black": "Sort", - "Gray": "Grรฅ", - "Silver": "Sรธlv", - "White": "Hvid", - "Maroon": "Maroon", - "Red": "Rรธd", - "Fuchsia": "Fuchsia", - "Yellow": "Gul", - "Olive": "Oliven", - "Green": "Grรธn", - "Teal": "Grรธnblรฅt", - "Lime": "Limegrรธn", - "Purple": "Lilla", - "Navy": "Flรฅden", - "Blue": "Blรฅ", - "Aqua": "Aqua" - }, - "thickness": { - "None": "Ingen", - "Thin": "Tynd", - "Normal": "Normal", - "Thick": "Tyk" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Andet", "video_orientation": "Videoorientering", @@ -351,11 +295,6 @@ "UNKNOWN": "Ukendt" }, "safe_area_in_controls": "Sikkert omrรฅde i kontroller", - "video_player": "Videospiller", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Eksperimentel + PiP)" - }, "show_custom_menu_links": "Vis tilpassede menulinks", "show_large_home_carousel": "Show Large Home Carousel (beta)", "hide_libraries": "Skjul biblioteker", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Maks. Auto Afspil Episode Antal", "disabled": "Deaktiveret" }, - "downloads": { - "downloads_title": "Downloads" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Plugins", "jellyseerr": { - "jellyseerr_warning": "Denne integration er i en tidlig fase. Forvent, at tingene รฆndres.", "server_url": "Server URL", "server_url_hint": "Eksempel: http(s)://din-host.url\n(tilfรธj port hvis nรธdvendigt)", "server_url_placeholder": "Jellyseerr URL...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Lรฆs mere om Marlin.", "save_button": "Gem", "toasts": { - "saved": "Gemt", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "Gemt" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Slet alle downloadede filer", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "System" }, "toasts": { - "error_deleting_files": "Fejl ved sletning af filer", - "background_downloads_enabled": "Baggrundsdownloads aktiveret", - "background_downloads_disabled": "Baggrundsdownloads deaktiveret" + "error_deleting_files": "Fejl ved sletning af filer" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Downloads", "series": "TV-serier", "movies": "Film", - "queue": "Kรธ", "other_media": "Andre medier", - "queue_hint": "Kรธ og downloads vil gรฅ tabt ved genstart af appen", - "no_items_in_queue": "Ingen elementer i kรธen", "no_downloaded_items": "Ingen downloadede elementer", "delete_all_movies_button": "Slet alle film", "delete_all_series_button": "Slet alle TV-serier", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Kunne ikke slette alle TV-serier", "deleted_media_successfully": "Slettede andre medier med succes!", "failed_to_delete_media": "Kunne ikke slette andre medier", - "download_deleted": "Download Slettet", "download_cancelled": "Download afbrudt", "could_not_delete_download": "Kunne Ikke Slette Download", - "download_paused": "Download Pauset", - "could_not_pause_download": "Kunne Ikke Pause Download", - "download_resumed": "Download Genoprettet", - "could_not_resume_download": "Kunne Ikke Genoptage Download", "download_completed": "Download fuldfรธrt", "download_failed": "Download Failed", "download_failed_for_item": "Download mislykkedes for {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "All Downloads Deleted Successfully", "files_deleted_by_type": "{{count}} {{type}} deleted", - "all_files_folders_and_jobs_deleted_successfully": "Alle filer, mapper og jobs blev slettet med succes", - "failed_to_clean_cache_directory": "Kunne ikke rense cache-mappe", "could_not_get_download_url_for_item": "Kunne ikke hente download URL til {{itemName}}", - "go_to_downloads": "Gรฅ til downloads", "file_deleted": "{{item}} deleted" } } @@ -583,16 +495,17 @@ "none": "None", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Sรธg...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Kunne ikke oprette en stream til Chromecast", "message_from_server": "Besked fra server: {{message}}", "next_episode": "Nรฆste episode", - "refresh_tracks": "Opdater spor", - "audio_tracks": "Lydspor:", - "playback_state": "Afspilningstilstand:", - "index": "Indeks:", "continue_watching": "Fortsรฆt med at se", "go_back": "Gรฅ Tilbage", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Vis mere", "show_less": "Vis mindre", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Nรฆste", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/de.json b/translations/de.json index 2582fb78..6363bb03 100644 --- a/translations/de.json +++ b/translations/de.json @@ -4,8 +4,8 @@ "error_title": "Fehler", "login_title": "Anmelden", "login_to_title": "Anmelden bei", - "select_user": "Select a user to log in", - "add_user_to_login": "Add a user to log in", + "select_user": "Benutzer zum Anmelden auswรคhlen", + "add_user_to_login": "Zum Anmelden einen Benutzer hinzufรผgen", "add_user": "Add User", "username_placeholder": "Benutzername", "password_placeholder": "Passwort", @@ -47,9 +47,9 @@ "add_account": "Konto hinzufรผgen", "remove_account_description": "Hiermit werden die gespeicherten Zugangsdaten fรผr {{username}} entfernt.", "remove_server": "Remove Server", - "remove_server_description": "This will remove {{server}} and all saved accounts from your list.", + "remove_server_description": "Dies wird {{server}} und alle gespeicherten Konten aus Ihrer Liste entfernen.", "select_your_server": "Select Your Server", - "add_server_to_get_started": "Add a server to get started", + "add_server_to_get_started": "Fรผge einen Server hinzu, um loszulegen", "add_server": "Add Server", "change_server": "Change Server" }, @@ -95,7 +95,7 @@ "oops": "Ups!", "error_message": "Etwas ist schiefgelaufen.\nBitte melde dich ab und wieder an.", "continue_watching": "Weiterschauen", - "continue": "Continue", + "continue": "Weiter", "next_up": "Als nรคchstes", "continue_and_next_up": "\"Weiterschauen\" und \"Als Nรคchstes\"", "recently_added_in": "Kรผrzlich hinzugefรผgt in {{libraryName}}", @@ -121,9 +121,9 @@ "log_out_button": "Abmelden", "switch_user": { "title": "Switch User", - "account": "Account", + "account": "Benutzerkonto", "switch_user": "Switch User on This Server", - "current": "current" + "current": "aktuell" }, "categories": { "title": "Kategorien" @@ -143,9 +143,9 @@ "show_series_poster_on_episode": "Show Series Poster on Episodes", "theme_music": "Theme Music", "display_size": "Display Size", - "display_size_small": "Small", - "display_size_default": "Default", - "display_size_large": "Large", + "display_size_small": "Klein", + "display_size_default": "Standard", + "display_size_large": "GroรŸ", "display_size_extra_large": "Extra Large" }, "network": { @@ -203,8 +203,8 @@ "title": "Buffer Settings", "cache_mode": "Cache Mode", "cache_auto": "Auto", - "cache_yes": "Enabled", - "cache_no": "Disabled", + "cache_yes": "Aktiviert", + "cache_no": "Deaktiviert", "buffer_duration": "Buffer Duration", "max_cache_size": "Max Cache Size", "max_backward_cache": "Max Backward Cache" @@ -212,7 +212,7 @@ "vo_driver": { "title": "Video Output", "vo_mode": "VO Driver", - "gpu_next": "gpu-next (Recommended)", + "gpu_next": "gpu-next (empfohlen)", "gpu": "gpu" }, "gesture_controls": { @@ -261,79 +261,23 @@ "None": "Keine", "OnlyForced": "Nur erzwungene" }, - "text_color": "Textfarbe", - "background_color": "Hintergrundfarbe", - "outline_color": "Konturfarbe", - "outline_thickness": "Konturdicke", - "background_opacity": "Hintergrundtransparenz", - "outline_opacity": "Konturtransparenz", - "bold_text": "Fettgedruckter Text", - "colors": { - "Black": "Schwarz", - "Gray": "Grau", - "Silver": "Silber", - "White": "WeiรŸ", - "Maroon": "Rotbraun", - "Red": "Rot", - "Fuchsia": "Magenta", - "Yellow": "Gelb", - "Olive": "Olivgrรผn", - "Green": "Grรผn", - "Teal": "Tรผrkis", - "Lime": "Hellgrรผn", - "Purple": "Lila", - "Navy": "Marineblau", - "Blue": "Blau", - "Aqua": "Himmelblau" - }, - "thickness": { - "None": "Keine", - "Thin": "Dรผnn", - "Normal": "Normal", - "Thick": "Dick" - }, - "subtitle_color": "Untertitelfarbe", - "subtitle_background_color": "Hintergrundfarbe", - "subtitle_font": "Untertitel-Schriftart", - "ksplayer_title": "KSPlayer Einstellungen", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Hardwarebeschleunigung fรผr Video Decoding verwenden. Deaktivieren wenn Wiedergabeprobleme auftreten.", "opensubtitles_title": "OpenSubtitles", - "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", + "opensubtitles_hint": "Geben Sie Ihren OpenSubtitles API-Schlรผssel ein, um die Client-seitige Untertitelsuche als Fallback zu aktivieren, wenn Ihr Jellyfin-Server keinen Untertitelanbieter konfiguriert hat.", "opensubtitles_api_key": "API Key", - "opensubtitles_api_key_placeholder": "Enter API key...", - "opensubtitles_get_key": "Get your free API key at opensubtitles.com/en/consumers", + "opensubtitles_api_key_placeholder": "API-Schรผssel eingeben ...", + "opensubtitles_get_key": "Holen Sie sich Ihren kostenlosen API-Schlรผssel unter opensubtitles.com/de/consumers", "mpv_subtitle_scale": "Subtitle Scale", "mpv_subtitle_margin_y": "Vertical Margin", "mpv_subtitle_align_x": "Horizontal Align", "mpv_subtitle_align_y": "Vertical Align", "align": { - "left": "Left", - "center": "Center", - "right": "Right", - "top": "Top", - "bottom": "Bottom" + "left": "Links", + "center": "Mittig", + "right": "Rechts", + "top": "Oben", + "bottom": "Unten" } }, - "vlc_subtitles": { - "title": "VLC Untertitel-Einstellungen", - "hint": "Anpassen des Untertitel-Erscheinungsbildes fรผr VLC. ร„nderungen werden bei der nรคchsten Wiedergabe รผbernommen.", - "text_color": "Schriftfarbe", - "background_color": "Hintergrundfarbe", - "background_opacity": "Hintergrundtransparenz", - "outline_color": "Konturfarbe", - "outline_opacity": "Konturtransparenz", - "outline_thickness": "Konturdicke", - "bold": "Fettgedruckter Text", - "margin": "Unterer Abstand" - }, - "video_player": { - "title": "Videoplayer", - "video_player": "Videoplayer", - "video_player_description": "Videoplayer auf iOS auswรคhlen.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Sonstiges", "video_orientation": "Videoausrichtung", @@ -351,11 +295,6 @@ "UNKNOWN": "Unbekannt" }, "safe_area_in_controls": "Sicherer Bereich in den Steuerungen", - "video_player": "Videoplayer", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Experimentell + PiP)" - }, "show_custom_menu_links": "Benutzerdefinierte Menรผlinks anzeigen", "show_large_home_carousel": "Zeige groรŸe Startseiten-รœbersicht (Beta)", "hide_libraries": "Bibliotheken ausblenden", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Maximale automatisch abzuspielende Episodenanzahl", "disabled": "Deaktiviert" }, - "downloads": { - "downloads_title": "Downloads" - }, "music": { "title": "Musik", "playback_title": "Wiedergabe", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Plugins", "jellyseerr": { - "jellyseerr_warning": "Diese Integration ist in einer frรผhen Entwicklungsphase und kann jederzeit geรคndert werden.", "server_url": "Server URL", "server_url_hint": "Beispiel: http(s)://your-host.url\n(Port hinzufรผgen, falls erforderlich)", "server_url_placeholder": "Seerr URL", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Erfahre mehr รผber Marlin.", "save_button": "Speichern", "toasts": { - "saved": "Gespeichert", - "refreshed": "Einstellungen vom Server aktualisiert" - }, - "refresh_from_server": "Einstellungen vom Server aktualisieren" + "saved": "Gespeichert" + } }, "streamystats": { - "enable_streamystats": "Streamystats aktivieren", "disable_streamystats": "Streamystats deaktivieren", "enable_search": "Zum Suchen verwenden", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "URL fรผr den Streamystats-Server eingeben.", "read_more_about_streamystats": "Mehr รผber Streamystats erfahren.", - "save_button": "Speichern", "save": "Gespeichert", "features_title": "Features", - "home_sections_title": "Startseitenbereiche", "enable_movie_recommendations": "Filmempfehlungen", "enable_series_recommendations": "Serienempfehlungen", "enable_promoted_watchlists": "Empfohlene Merklisten", @@ -445,8 +375,7 @@ "refresh_from_server": "Einstellungen vom Server aktualisieren" }, "kefinTweaks": { - "watchlist_enabler": "Merklisten-Integration aktivieren", - "watchlist_button": "Merklisten-Integration umschalten" + "watchlist_enabler": "Merklisten-Integration aktivieren" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Alle heruntergeladenen Dateien lรถschen", "music_cache_title": "Musik-Cache", "music_cache_description": "Beim Anhรถren Titel automatisch in den Cache laden um bessere Wiedergabe und Offline-Wiedergabe zu ermรถglichen", - "enable_music_cache": "Musik-Cache aktivieren", "clear_music_cache": "Musik-Cache leeren", "music_cache_size": "{{size}} gechached", "music_cache_cleared": "Musik-Cache geleert", @@ -466,10 +394,8 @@ "downloaded_songs_deleted": "Heruntergeladene Titel gelรถscht", "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", - "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", - "clear_all_cache_error_desc": "An error occurred while clearing the cache." + "clear_all_cache_confirm_desc": "Sind Sie sicher, dass Sie alle zwischengespeicherten Daten lรถschen mรถchten? Dadurch werden alle zwischengespeicherten Bilder, Musikdateien, Untertitel und Abfrage-Caches gelรถscht. Ihre Einstellungen und Login-Sitzung werden beibehalten.", + "clear_all_cache_error_desc": "Beim Lรถschen des Caches ist ein Fehler aufgetreten." }, "intro": { "title": "Einfรผhrung", @@ -490,23 +416,20 @@ "system": "System" }, "toasts": { - "error_deleting_files": "Fehler beim Lรถschen von Dateien", - "background_downloads_enabled": "Hintergrunddownloads aktiviert", - "background_downloads_disabled": "Hintergrunddownloads deaktiviert" + "error_deleting_files": "Fehler beim Lรถschen von Dateien" }, "security": { - "title": "Security", + "title": "Sicherheit", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", - "disabled": "Disabled", - "1_minute": "1 minute", - "5_minutes": "5 minutes", - "15_minutes": "15 minutes", - "30_minutes": "30 minutes", - "1_hour": "1 hour", - "4_hours": "4 hours", - "24_hours": "24 hours" + "disabled": "Deaktiviert", + "1_minute": "1ย Minute", + "5_minutes": "5 Minuten", + "15_minutes": "15 Minuten", + "30_minutes": "30 Minuten", + "1_hour": "1 Stunde", + "4_hours": "4 Stunden", + "24_hours": "24 Stunden" } } }, @@ -518,10 +441,7 @@ "downloads_title": "Downloads", "series": "Serien", "movies": "Filme", - "queue": "Warteschlange", "other_media": "Andere Medien", - "queue_hint": "Warteschlange und aktive Downloads gehen verloren wenn die App neu gestartet wird", - "no_items_in_queue": "Keine Elemente in der Warteschlange", "no_downloaded_items": "Keine heruntergeladenen Elemente", "delete_all_movies_button": "Alle Filme lรถschen", "delete_all_series_button": "Alle Serien lรถschen", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Fehler beim Lรถschen aller Serien", "deleted_media_successfully": "Andere Medien erfolgreich gelรถscht!", "failed_to_delete_media": "Fehler beim Lรถschen anderer Medien", - "download_deleted": "Download gelรถscht", "download_cancelled": "Download abgebrochen", "could_not_delete_download": "Download konnte nicht gelรถscht werden", - "download_paused": "Download pausiert", - "could_not_pause_download": "Download konnte nicht angehalten werden", - "download_resumed": "Download fortgesetzt", - "could_not_resume_download": "Download konnte nicht fortgesetzt werden", "download_completed": "Download abgeschlossen", "download_failed": "Download fehlgeschlagen", "download_failed_for_item": "Download fรผr {{item}} fehlgeschlagen - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} Lรคdt", "all_files_deleted": "Alle Downloads gelรถscht", "files_deleted_by_type": "{{count}} {{type}} gelรถscht", - "all_files_folders_and_jobs_deleted_successfully": "Alle Dateien, Ordner und Jobs erfolgreich gelรถscht", - "failed_to_clean_cache_directory": "Fehler beim Bereinigen des Cache-Verzeichnisses", "could_not_get_download_url_for_item": "Download-URL fรผr {{itemName}} konnte nicht geladen werden", - "go_to_downloads": "Zu Downloads gehen", "file_deleted": "{{item}} gelรถscht" } } @@ -583,16 +495,17 @@ "none": "Keine", "track": "Spur", "cancel": "Abbrechen", - "stop": "Stop", "delete": "Lรถschen", "ok": "OK", "remove": "Entfernen", - "next": "Weiter", "back": "Zurรผck", "continue": "Fortsetzen", "verifying": "Verifiziere...", - "login": "Login", - "refresh": "Refresh" + "login": "Anmelden", + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Suchen...", @@ -641,7 +554,7 @@ "movies": "Filme", "series": "Serien", "boxsets": "Boxsets", - "playlists": "Playlists", + "playlists": "Wiedergabelisten", "items": "Elemente" }, "options": { @@ -653,7 +566,7 @@ "cover": "Cover", "show_titles": "Titel anzeigen", "show_stats": "Statistiken anzeigen", - "options_title": "Options" + "options_title": "Optionen" }, "filters": { "genres": "Genres", @@ -662,10 +575,10 @@ "filter_by": "Filtern nach", "sort_order": "Sortierreihenfolge", "tags": "Tags", - "all": "All", - "reset": "Reset", - "asc": "Ascending", - "desc": "Descending" + "all": "Alle", + "reset": "Zurรผcksetzen", + "asc": "Aufsteigend", + "desc": "Absteigend" } }, "favorites": { @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Konnte keinen Stream fรผr Chromecast erstellen", "message_from_server": "Nachricht vom Server: {{message}}", "next_episode": "Nรคchste Episode", - "refresh_tracks": "Spuren aktualisieren", - "audio_tracks": "Audiospuren:", - "playback_state": "Wiedergabestatus:", - "index": "Index:", "continue_watching": "Fortsetzen", "go_back": "Zurรผck", "downloaded_file_title": "Diese Datei wurde bereits heruntergeladen", @@ -702,34 +611,35 @@ "downloaded_file_yes": "Ja", "downloaded_file_no": "Nein", "downloaded_file_cancel": "Abbrechen", - "swipe_down_settings": "Swipe down for settings", + "swipe_down_settings": "Fรผr Einstellungen nach unten wischen", "ends_at": "Endet um {{time}}", "search_subtitles": "Search Subtitles", - "subtitle_tracks": "Tracks", + "subtitle_tracks": "Titel", "subtitle_search": "Search & Download", - "download": "Download", - "subtitle_download_hint": "Downloaded subtitles will be saved to your library", + "download": "Herunterladen", + "subtitle_download_hint": "Heruntergeladene Untertitel werden in Ihrer Bibliothek gespeichert", "using_jellyfin_server": "Using Jellyfin Server", - "language": "Language", - "results": "Results", - "searching": "Searching...", - "search_failed": "Search failed", - "no_subtitle_provider": "No subtitle provider configured on server", - "no_subtitles_found": "No subtitles found", - "add_opensubtitles_key_hint": "Add OpenSubtitles API key in settings for client-side fallback", - "settings": "Settings", + "language": "Sprache", + "results": "Ergebnisse", + "searching": "Suche ...", + "search_failed": "Suche fehlgeschlagen", + "no_subtitle_provider": "Kein Untertitelanbieter auf dem Server konfiguriert", + "no_subtitles_found": "Keine Untertitel gefunden", + "add_opensubtitles_key_hint": "OpenSubtitles API-Schlรผssel in den Einstellungen fรผr Client-seitigen Fallback hinzufรผgen", + "settings": "Einstellungen", "skip_intro": "Skip Intro", "skip_credits": "Skip Credits", "stopPlayback": "Stop Playback", - "stopPlayingTitle": "Stop playing \"{{title}}\"?", - "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "stopPlayingTitle": "Wiedergabe von \"{{title}}\" beenden?", + "stopPlayingConfirm": "Bist du sicher, dass du die Wiedergabe beenden mรถchtest?", + "downloaded": "Heruntergeladen", + "missing_parameters": "Missing playback parameters" }, "chapters": { - "title": "Chapters", - "chapter_number": "Chapter {{number}}", - "open": "Open chapters", - "close": "Close chapters" + "title": "Kapitel", + "chapter_number": "Kapitel {{number}}", + "open": "Kapitel รถffnen", + "close": "Kapitel schlieรŸen" }, "item_card": { "next_up": "Als Nรคchstes", @@ -754,20 +664,19 @@ "quality": "Qualitรคt", "audio": "Audio", "subtitles": { - "label": "Subtitle", - "none": "None", - "tracks": "Tracks" + "label": "Untertitel", + "none": "Keine", + "tracks": "Titel" }, "show_more": "Mehr anzeigen", "show_less": "Weniger anzeigen", - "left": "left", - "more_info": "More Info", - "director": "Director", - "cast": "Cast", + "left": "รผbrig", + "director": "Regisseur*in", + "cast": "Besetzung", "technical_details": "Technical Details", "appeared_in": "Erschien in", - "movies": "Movies", - "shows": "Shows", + "movies": "Filme", + "shows": "Serien", "could_not_load_item": "Konnte Element nicht laden", "none": "Keine", "download": { @@ -782,9 +691,10 @@ "mark_played": "Mark as Watched", "mark_unplayed": "Mark as Unwatched", "resume_playback": "Resume Playback", - "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", + "resume_playback_description": "Mรถchtest du dort fortfahren, wo du aufgehรถrt hast oder von Anfang anfangen?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Weiter ab {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Nรคchste", @@ -796,16 +706,16 @@ "sports": "Sport", "for_kids": "Fรผr Kinder", "news": "Nachrichten", - "page_of": "Page {{current}} of {{total}}", - "no_programs": "No programs available", - "no_channels": "No channels available", + "page_of": "Seite {{current}} von {{total}}", + "no_programs": "Keine Programme verfรผgbar", + "no_channels": "Keine Kanรคle verfรผgbar", "tabs": { - "programs": "Programs", - "guide": "Guide", - "channels": "Channels", - "recordings": "Recordings", - "schedule": "Schedule", - "series": "Series" + "programs": "Programme", + "guide": "Fรผhrer", + "channels": "Kanรคle", + "recordings": "Aufzeichnungen", + "schedule": "Planung", + "series": "Serien" } }, "jellyseerr": { @@ -851,12 +761,12 @@ "decline": "Ablehnen", "requested_by": "Angefragt von {{user}}", "unknown_user": "Unbekannter Nutzer", - "select": "Select", + "select": "Auswรคhlen", "request_all": "Request All", "request_seasons": "Request Seasons", "select_seasons": "Select Seasons", "request_selected": "Request Selected", - "n_selected": "{{count}} selected", + "n_selected": "{{count}} ausgewรคhlt", "toasts": { "jellyseer_does_not_meet_requirements": "Seerr-Server erfรผllt nicht die minimalen Versionsanforderungen. Bitte den Seerr-Server auf mindestens 2.0.0 aktualisieren.", "jellyseerr_test_failed": "Seerr-Test fehlgeschlagen. Bitte erneut versuchen.", @@ -877,7 +787,7 @@ "library": "Bibliothek", "custom_links": "Links", "favorites": "Favoriten", - "settings": "Settings" + "settings": "Einstellungen" }, "music": { "title": "Musik", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "Titel" }, - "filters": { - "all": "Alle" - }, "recently_added": "Kรผrzlich hinzugefรผgt", "recently_played": "Vor kurzem gehรถrt", "frequently_played": "Oft gehรถrt", - "explore": "Entdecken", "top_tracks": "Top-Titel", "play": "Abspielen", "shuffle": "Shuffle", @@ -1004,34 +910,33 @@ } }, "companion_login": { - "title": "Pair with TV", - "align_qr": "Align the QR code within the frame", - "enter_code_manually": "Enter code manually", - "pairing_enter_credentials": "Enter credentials for TV", - "pairing_code_label": "Pairing code", + "title": "Mit TV koppeln", + "align_qr": "Den QR-Code innerhalb des Rahmens ausrichten", + "enter_code_manually": "Code manuell eingeben", + "pairing_enter_credentials": "Anmeldedaten fรผr TV eingeben", + "pairing_code_label": "Kopplungscode", "server": "Server", - "authorize_button": "Authorize", - "authorizing": "Authorizing...", + "authorize_button": "Autorisieren", + "authorizing": "Autorisieren...", "scan_again": "Scan Again", - "done": "Done", + "done": "Fertig", "success_title": "Authorization Sent", - "pairing_tv_connecting": "The TV is connecting to your account", + "pairing_tv_connecting": "Der Fernseher verbindet sich mit Ihrem Konto", "error_title": "Authorization Failed", - "error_invalid_qr": "Invalid QR code. Please scan the TV pairing code.", - "error_generic": "Something went wrong. Please try again.", - "error_permission_denied": "Camera permission is required to scan QR codes.", - "login_as": "Log in as {{username}}?", - "on_server": "on {{server}}", - "use_different_user": "Use a different user", - "open_settings": "Open Settings" + "error_invalid_qr": "Ungรผltiger QR-Code. Bitte scannen Sie den TV-Kopplungscode.", + "error_generic": "Etwas ist schiefgelaufen. Bitte versuche es erneut.", + "error_permission_denied": "Kameraberechtigung erforderlich zum Scannen von QR-Codes.", + "login_as": "Als {{username}} anmelden?", + "on_server": "auf {{server}}", + "use_different_user": "Verwende einen anderen Benutzer", + "open_settings": "Einstellungen รถffnen" }, "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", - "waiting_for_phone": "Waiting for phone...", - "scan_with_phone": "Scan with the Streamyfin app on your phone", - "logging_in": "Logging in...", - "logging_in_description": "Connecting to your server" + "waiting_for_phone": "Warte auf Telefon...", + "scan_with_phone": "Scanne mit der Streamyfin-App auf deinem Handy", + "logging_in": "Anmeldung...", + "logging_in_description": "Verbinde mit deinem Server" } } diff --git a/translations/el.json b/translations/el.json index 0a519f48..f8ba3917 100644 --- a/translations/el.json +++ b/translations/el.json @@ -261,43 +261,6 @@ "None": "ฮšฮฑฮฝฮญฮฝฮฑ", "OnlyForced": "ฮœฯŒฮฝฮฟ" }, - "text_color": "ฮงฯฯŽฮผฮฑ ฮšฮตฮนฮผฮญฮฝฮฟฯ…", - "background_color": "ฮงฯฯŽฮผฮฑ ฮฆฯŒฮฝฯ„ฮฟฯ…", - "outline_color": "ฮงฯฯŽฮผฮฑ ฮ ฮตฯฮนฮณฯฮฌฮผฮผฮฑฯ„ฮฟฯ‚", - "outline_thickness": "ฮ ฮฌฯ‡ฮฟฯ‚ ฮ ฮตฯฮนฮณฯฮฌฮผฮผฮฑฯ„ฮฟฯ‚", - "background_opacity": "ฮ‘ฮดฮนฮฑฯ†ฮฌฮฝฮตฮนฮฑ ฮฆฯŒฮฝฯ„ฮฟฯ…", - "outline_opacity": "ฮ‘ฮดฮนฮฑฯ†ฮฌฮฝฮตฮนฮฑ ฮ ฮตฯฮนฮณฯฮฌฮผฮผฮฑฯ„ฮฟฯ‚", - "bold_text": "Bold Text", - "colors": { - "Black": "ฮœฮฑฯฯฮฟ", - "Gray": "ฮ“ฮบฯฮน", - "Silver": "ฮ‘ฯƒฮทฮผฮญฮฝฮนฮฟ", - "White": "ฮ›ฮตฯ…ฮบฯŒ", - "Maroon": "ฮœฮฑฯฯŽ", - "Red": "ฮšฯŒฮบฮบฮนฮฝฮฟ", - "Fuchsia": "Fuchsia", - "Yellow": "ฮšฮฏฯ„ฯฮนฮฝฮฟ", - "Olive": "ฮ•ฮปฮนฮญฯ‚", - "Green": "ฮ ฯฮฌฯƒฮนฮฝฮฟ", - "Teal": "ฮคฮนฯฮบฮฟฯ…ฮฌฮถ", - "Lime": "ฮ†ฯƒฮฒฮตฯƒฯ„ฮฟฯ‚", - "Purple": "ฮœฯ‰ฮฒ", - "Navy": "ฮฮฑฯ…ฯ„ฮนฮบฯŒ", - "Blue": "ฮœฯ€ฮปฮต", - "Aqua": "ฮฮตฯฯŒ" - }, - "thickness": { - "None": "ฮšฮฑฮฝฮญฮฝฮฑ", - "Thin": "ฮ›ฮตฯ€ฯ„ฯŒ", - "Normal": "ฮšฮฑฮฝฮฟฮฝฮนฮบฯŒ", - "Thick": "ฮ ฮฑฯ‡ฯ" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "ฮ†ฮปฮปฮฟ", "video_orientation": "ฮ ฯฮฟฯƒฮฑฮฝฮฑฯ„ฮฟฮปฮนฯƒฮผฯŒฯ‚ ฮ’ฮฏฮฝฯ„ฮตฮฟ", @@ -351,11 +295,6 @@ "UNKNOWN": "ฮ†ฮณฮฝฯ‰ฯƒฯ„ฮฟ" }, "safe_area_in_controls": "ฮ‘ฯƒฯ†ฮฑฮปฮฎฯ‚ ฯ€ฮตฯฮนฮฟฯ‡ฮฎ ฯƒฮต ฯ‡ฮตฮนฯฮนฯƒฯ„ฮฎฯฮนฮฑ", - "video_player": "ฮ‘ฮฝฮฑฯ€ฮฑฯฮฑฮณฯ‰ฮณฮญฮฑฯ‚ ฮ’ฮฏฮฝฯ„ฮตฮฟ", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (ฮ ฮตฮนฯฮฑฮผฮฑฯ„ฮนฮบฮฎ + PiP)" - }, "show_custom_menu_links": "ฮ•ฮผฯ†ฮฌฮฝฮนฯƒฮท ฮ ฯฮฟฯƒฮฑฯฮผฮฟฯƒฮผฮญฮฝฯ‰ฮฝ ฮฃฯ…ฮฝฮดฮญฯƒฮผฯ‰ฮฝ ฮœฮตฮฝฮฟฯ", "show_large_home_carousel": "Show Large Home Carousel (beta)", "hide_libraries": "ฮ‘ฯ€ฯŒฮบฯฯ…ฯˆฮท ฮ’ฮนฮฒฮปฮนฮฟฮธฮทฮบฯŽฮฝ", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "ฮœฮญฮณฮนฯƒฯ„ฮฟ ฮ ฮปฮฎฮธฮฟฯ‚ ฮ•ฯ€ฮตฮนฯƒฯŒฮดฮนฮฟ ฮ‘ฯ…ฯ„ฯŒฮผฮฑฯ„ฮฟฯ… ฮ ฮฑฮนฯ‡ฮฝฮนฮดฮนฮฟฯ", "disabled": "ฮ‘ฯ€ฮตฮฝฮตฯฮณฮฟฯ€ฮฟฮนฮทฮผฮญฮฝฮฟ" }, - "downloads": { - "downloads_title": "ฮ›ฮฎฯˆฮตฮนฯ‚" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "ฮ ฯฯŒฯƒฮธฮตฯ„ฮฑ", "jellyseerr": { - "jellyseerr_warning": "ฮ‘ฯ…ฯ„ฮฎ ฮท ฮตฮฝฯƒฯ‰ฮผฮฌฯ„ฯ‰ฯƒฮท ฮฒฯฮฏฯƒฮบฮตฯ„ฮฑฮน ฯƒฯ„ฮฑ ฮฑฯฯ‡ฮนฮบฮฌ ฯ„ฮทฯ‚ ฯƒฯ„ฮฌฮดฮนฮฑ.", "server_url": "Url ฮ”ฮนฮฑฮบฮฟฮผฮนฯƒฯ„ฮฎ", "server_url_hint": "ฮ ฮฑฯฮฌฮดฮตฮนฮณฮผฮฑ: http(s)://your-host.url\n(ฯ€ฯฮฟฯƒฮธฮญฯƒฯ„ฮต ฮธฯฯฮฑ ฮตฯ†ฯŒฯƒฮฟฮฝ ฮฑฯ€ฮฑฮนฯ„ฮตฮฏฯ„ฮฑฮน)", "server_url_placeholder": "Seerr URL", @@ -413,23 +348,18 @@ "read_more_about_marlin": "ฮ”ฮนฮฑฮฒฮฌฯƒฯ„ฮต ฮ ฮตฯฮนฯƒฯƒฯŒฯ„ฮตฯฮฑ ฮฃฯ‡ฮตฯ„ฮนฮบฮฌ ฮœฮต Marlin.", "save_button": "ฮ‘ฯ€ฮฟฮธฮฎฮบฮตฯ…ฯƒฮท", "toasts": { - "saved": "ฮ‘ฯ€ฮฟฮธฮทฮบฮตฯฯ„ฮทฮบฮต", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "ฮ‘ฯ€ฮฟฮธฮทฮบฮตฯฯ„ฮทฮบฮต" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "ฮ”ฮนฮฑฮณฯฮฑฯ†ฮฎ ฮŒฮปฯ‰ฮฝ ฮคฯ‰ฮฝ ฮ›ฮทฯ†ฮธฮญฮฝฯ„ฯ‰ฮฝ ฮ‘ฯฯ‡ฮตฮฏฯ‰ฮฝ", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "ฮฃฯฯƒฯ„ฮทฮผฮฑ" }, "toasts": { - "error_deleting_files": "ฮฃฯ†ฮฌฮปฮผฮฑ ฮ”ฮนฮฑฮณฯฮฑฯ†ฮฎฯ‚ ฮ‘ฯฯ‡ฮตฮฏฯ‰ฮฝ", - "background_downloads_enabled": "ฮŸฮน ฮปฮฎฯˆฮตฮนฯ‚ ฯƒฯ„ฮฟ ฯ€ฮฑฯฮฑฯƒฮบฮฎฮฝฮนฮฟ ฮตฮฝฮตฯฮณฮฟฯ€ฮฟฮนฮฎฮธฮทฮบฮฑฮฝ", - "background_downloads_disabled": "ฮŸฮน ฮปฮฎฯˆฮตฮนฯ‚ ฯ€ฮฑฯฮฑฯƒฮบฮทฮฝฮฏฮฟฯ… ฮฑฯ€ฮตฮฝฮตฯฮณฮฟฯ€ฮฟฮนฮฎฮธฮทฮบฮฑฮฝ" + "error_deleting_files": "ฮฃฯ†ฮฌฮปฮผฮฑ ฮ”ฮนฮฑฮณฯฮฑฯ†ฮฎฯ‚ ฮ‘ฯฯ‡ฮตฮฏฯ‰ฮฝ" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "ฮ›ฮฎฯˆฮตฮนฯ‚", "series": "ฮคฮทฮปฮตฯŒฯฮฑฯƒฮท-ฮฃฮตฮนฯฮฌ", "movies": "ฮคฮฑฮนฮฝฮฏฮตฯ‚", - "queue": "ฮŸฯ…ฯฮฌ", "other_media": "ฮ†ฮปฮปฮฑ ฮผฮญฯƒฮฑ", - "queue_hint": "ฮŸฯ…ฯฮฌ ฮบฮฑฮน ฮปฮฎฯˆฮตฮนฯ‚ ฮธฮฑ ฯ‡ฮฑฮธฮฟฯฮฝ ฮบฮฑฯ„ฮฌ ฯ„ฮทฮฝ ฮตฯ€ฮฑฮฝฮตฮบฮบฮฏฮฝฮทฯƒฮท ฯ„ฮทฯ‚ ฮตฯ†ฮฑฯฮผฮฟฮณฮฎฯ‚", - "no_items_in_queue": "ฮ”ฮตฮฝ ฯ…ฯ€ฮฌฯฯ‡ฮฟฯ…ฮฝ ฮฑฮฝฯ„ฮนฮบฮตฮฏฮผฮตฮฝฮฑ ฯƒฯ„ฮทฮฝ ฮฟฯ…ฯฮฌ", "no_downloaded_items": "ฮ”ฮตฮฝ ฮˆฯ‡ฮฟฯ…ฮฝ ฮ›ฮทฯ†ฮธฮตฮฏ ฮ‘ฮฝฯ„ฮนฮบฮตฮฏฮผฮตฮฝฮฑ", "delete_all_movies_button": "ฮ”ฮนฮฑฮณฯฮฑฯ†ฮฎ ฮŒฮปฯ‰ฮฝ ฮคฯ‰ฮฝ ฮคฮฑฮนฮฝฮนฯŽฮฝ", "delete_all_series_button": "ฮ”ฮนฮฑฮณฯฮฑฯ†ฮฎ ฮŒฮปฯ‰ฮฝ ฮคฯ‰ฮฝ ฮคฮทฮปฮตฮฟฯ€ฯ„ฮนฮบฯŽฮฝ ฮฃฮตฮนฯฯŽฮฝ", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "ฮ‘ฯ€ฮฟฯ„ฯ…ฯ‡ฮฏฮฑ ฮดฮนฮฑฮณฯฮฑฯ†ฮฎฯ‚ ฮŒฮปฯ‰ฮฝ ฯ„ฯ‰ฮฝ TV-Series", "deleted_media_successfully": "ฮ”ฮนฮฑฮณฯฮฌฯ†ฮทฮบฮต ฮฌฮปฮปฮฟ ฮผฮญฯƒฮฟ ฮตฯ€ฮนฯ„ฯ…ฯ‡ฯŽฯ‚!", "failed_to_delete_media": "ฮ‘ฯ€ฮฟฯ„ฯ…ฯ‡ฮฏฮฑ ฮดฮนฮฑฮณฯฮฑฯ†ฮฎฯ‚ ฮฌฮปฮปฯ‰ฮฝ ฯ€ฮฟฮปฯ…ฮผฮญฯƒฯ‰ฮฝ", - "download_deleted": "ฮ— ฮ›ฮฎฯˆฮท ฮ”ฮนฮฑฮณฯฮฌฯ†ฮทฮบฮต", "download_cancelled": "Download Cancelled", "could_not_delete_download": "ฮ‘ฮดฯ…ฮฝฮฑฮผฮฏฮฑ ฮ”ฮนฮฑฮณฯฮฑฯ†ฮฎฯ‚ ฮ›ฮฎฯˆฮทฯ‚", - "download_paused": "ฮ›ฮฎฯˆฮท ฮฃฮต ฮ ฮฑฯฯƒฮท", - "could_not_pause_download": "ฮ‘ฮดฯ…ฮฝฮฑฮผฮฏฮฑ ฮ ฮฑฯฯƒฮทฯ‚ ฮ›ฮฎฯˆฮทฯ‚", - "download_resumed": "ฮฃฯ…ฮฝฮญฯ‡ฮนฯƒฮท ฮ›ฮฎฯˆฮทฯ‚", - "could_not_resume_download": "ฮ‘ฮดฯ…ฮฝฮฑฮผฮฏฮฑ ฮฃฯ…ฮฝฮญฯ‡ฮนฯƒฮทฯ‚ ฮ›ฮฎฯˆฮทฯ‚", "download_completed": "ฮ— ฮ›ฮฎฯˆฮท ฮŸฮปฮฟฮบฮปฮทฯฯŽฮธฮทฮบฮต", "download_failed": "Download Failed", "download_failed_for_item": "ฮ— ฮปฮฎฯˆฮท ฮฑฯ€ฮญฯ„ฯ…ฯ‡ฮต ฮณฮนฮฑ ฯ„ฮฟ {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "All Downloads Deleted Successfully", "files_deleted_by_type": "{{count}} {{type}} deleted", - "all_files_folders_and_jobs_deleted_successfully": "ฮŒฮปฮฑ ฯ„ฮฑ ฮฑฯฯ‡ฮตฮฏฮฑ, ฮฟฮน ฯ†ฮฌฮบฮตฮปฮฟฮน ฮบฮฑฮน ฮฟฮน ฮตฯฮณฮฑฯƒฮฏฮตฯ‚ ฮดฮนฮฑฮณฯฮฌฯ†ฮทฮบฮฑฮฝ ฮผฮต ฮตฯ€ฮนฯ„ฯ…ฯ‡ฮฏฮฑ", - "failed_to_clean_cache_directory": "ฮ‘ฯ€ฮฟฯ„ฯ…ฯ‡ฮฏฮฑ ฮบฮฑฮธฮฑฯฮนฯƒฮผฮฟฯ ฯ†ฮฑฮบฮญฮปฮฟฯ… ฯ€ฯฮฟฯƒฯ‰ฯฮนฮฝฮฎฯ‚ ฮผฮฝฮฎฮผฮทฯ‚", "could_not_get_download_url_for_item": "ฮ‘ฮดฯ…ฮฝฮฑฮผฮฏฮฑ ฮปฮฎฯˆฮทฯ‚ ฯ„ฮฟฯ… URL ฮปฮฎฯˆฮทฯ‚ ฮณฮนฮฑ ฯ„ฮฟ {{itemName}}", - "go_to_downloads": "ฮœฮตฯ„ฮฌฮฒฮฑฯƒฮท ฯƒฯ„ฮนฯ‚ ฮปฮฎฯˆฮตฮนฯ‚", "file_deleted": "{{item}} deleted" } } @@ -583,16 +495,17 @@ "none": "None", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "ฮ‘ฮฝฮฑฮถฮฎฯ„ฮทฯƒฮท...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "ฮ‘ฮดฯ…ฮฝฮฑฮผฮฏฮฑ ฮดฮทฮผฮนฮฟฯ…ฯฮณฮฏฮฑฯ‚ ฯฮฟฮฎฯ‚ ฮณฮนฮฑ ฯ„ฮฟ Chromecast", "message_from_server": "ฮœฮฎฮฝฯ…ฮผฮฑ ฮฑฯ€ฯŒ ฯ„ฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯƒฯ„ฮฎ: {{message}}", "next_episode": "ฮ•ฯ€ฯŒฮผฮตฮฝฮฟ ฮ•ฯ€ฮตฮนฯƒฯŒฮดฮนฮฟ", - "refresh_tracks": "ฮ‘ฮฝฮฑฮฝฮญฯ‰ฯƒฮท ฮšฮฟฮผฮผฮฑฯ„ฮนฯŽฮฝ", - "audio_tracks": "ฮšฮฟฮผฮผฮฌฯ„ฮนฮฑ ฮ‰ฯ‡ฮฟฯ…:", - "playback_state": "ฮšฮฑฯ„ฮฌฯƒฯ„ฮฑฯƒฮท ฮ‘ฮฝฮฑฯ€ฮฑฯฮฑฮณฯ‰ฮณฮฎฯ‚:", - "index": "ฮ”ฮตฮฏฮบฯ„ฮทฯ‚:", "continue_watching": "ฮฃฯ…ฮฝฮญฯ‡ฮตฮนฮฑ ฮ ฮฑฯฮฑฮบฮฟฮปฮฟฯฮธฮทฯƒฮทฯ‚", "go_back": "ฮœฮตฯ„ฮฌฮฒฮฑฯƒฮท ฮ ฮฏฯƒฯ‰", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "ฮ•ฮผฯ†ฮฌฮฝฮนฯƒฮท ฮ ฮตฯฮนฯƒฯƒฯŒฯ„ฮตฯฯ‰ฮฝ", "show_less": "ฮ•ฮผฯ†ฮฌฮฝฮนฯƒฮท ฮ›ฮนฮณฯŒฯ„ฮตฯฯ‰ฮฝ", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "ฮ•ฯ€ฯŒฮผฮตฮฝฮฟ", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/es.json b/translations/es.json index 03216dee..57f30e9b 100644 --- a/translations/es.json +++ b/translations/es.json @@ -261,43 +261,6 @@ "None": "Nada", "OnlyForced": "Solo forzados" }, - "text_color": "Color del texto", - "background_color": "Color de fondo", - "outline_color": "Color de salida", - "outline_thickness": "Grosor exterior", - "background_opacity": "Opacidad de fondo", - "outline_opacity": "Opacidad exterior", - "bold_text": "Texto en negrita", - "colors": { - "Black": "Negro", - "Gray": "Gris", - "Silver": "Plata", - "White": "Blanco", - "Maroon": "Granate", - "Red": "Rojo", - "Fuchsia": "Fucsia", - "Yellow": "Amarillo", - "Olive": "Oliva", - "Green": "Verde", - "Teal": "Cereal", - "Lime": "Lima", - "Purple": "Morado", - "Navy": "Naval", - "Blue": "Azul", - "Aqua": "Agua" - }, - "thickness": { - "None": "Ninguno", - "Thin": "Ligero", - "Normal": "Normal", - "Thick": "Grosor" - }, - "subtitle_color": "Color de los Subtรญtulos", - "subtitle_background_color": "Color del fondo", - "subtitle_font": "Fuente de los subtรญtulos", - "ksplayer_title": "Ajustes de KSPlayer", - "hardware_decode": "Decodificaciรณn de hardware", - "hardware_decode_description": "Utilizar la aceleraciรณn de hardware para la decodificaciรณn de vรญdeo. Deshabilite si experimenta problemas de reproducciรณn.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "Configuraciรณn de subtรญtulos VLC", - "hint": "Personalizar la apariencia de los subtรญtulos para el reproductor VLC. Los cambios tendrรกn efecto en la prรณxima reproducciรณn.", - "text_color": "Color del texto", - "background_color": "Color del fondo", - "background_opacity": "Opacidad del fondo", - "outline_color": "Color del contorno", - "outline_opacity": "Opacidad del contorno", - "outline_thickness": "Grosor del contorno", - "bold": "Texto en negrita", - "margin": "Margen inferior" - }, - "video_player": { - "title": "Reproductor de vรญdeo", - "video_player": "Reproductor de vรญdeo", - "video_player_description": "Elige quรฉ reproductor de vรญdeo en iOS", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Otros", "video_orientation": "Orientaciรณn de vรญdeo", @@ -351,11 +295,6 @@ "UNKNOWN": "Desconocida" }, "safe_area_in_controls": "รrea segura en controles", - "video_player": "Reproductor de vรญdeo", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Experimental + PiP)" - }, "show_custom_menu_links": "Mostrar enlaces de menรบ personalizados", "show_large_home_carousel": "Mostrar carrusel del menรบ principal grande (beta)", "hide_libraries": "Ocultar bibliotecas", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Mรกximo nรบmero de episodios de Auto Play", "disabled": "Deshabilitado" }, - "downloads": { - "downloads_title": "Descargas" - }, "music": { "title": "Mรบsica", "playback_title": "Reproducir", @@ -378,13 +314,12 @@ "caching_title": "Almacenando en cachรฉ", "caching_description": "Cachear automรกticamente las prรณximas canciones para una reproducciรณn mรกs suave.", "lookahead_enabled": "Activar el look-Ahead Cache", - "lookahead_count": "", + "lookahead_count": "Songs to pre-cache", "max_cache_size": "Tamaรฑo mรกximo del cachรฉ" }, "plugins": { "plugins_title": "Plugins", "jellyseerr": { - "jellyseerr_warning": "Esta integraciรณn estรก en sus primeras etapas. Cuenta con posibles cambios.", "server_url": "URL del servidor", "server_url_hint": "Ejemplo: http(s)://tu-dominio.url\n(aรฑade el puerto si es necesario)", "server_url_placeholder": "URL de Jellyseerr...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Leer mรกs sobre Marlin.", "save_button": "Guardar", "toasts": { - "saved": "Guardado", - "refreshed": "Ajustes del servidor actualizados" - }, - "refresh_from_server": "Actualizar ajustes del servidor" + "saved": "Guardado" + } }, "streamystats": { - "enable_streamystats": "Habilitar Streamystats", "disable_streamystats": "Deshabilitar Streamystats", "enable_search": "Usar para la bรบsqueda", "url": "URL", "server_url_placeholder": "http(s)://streamystats.ejemplo.com", "streamystats_search_hint": "Introduzca la URL para su servidor Streamystats. La URL debe incluir http o https y opcionalmente el puerto.", "read_more_about_streamystats": "Leer mรกs sobre Streamystats.", - "save_button": "Guardar", "save": "Guardar", "features_title": "Caracterรญsticas", - "home_sections_title": "Secciones de inicio", "enable_movie_recommendations": "Recomendaciones de pelรญculas", "enable_series_recommendations": "Recomendaciones de series", "enable_promoted_watchlists": "Listas promocionadas", @@ -445,8 +375,7 @@ "refresh_from_server": "Actualizar ajustes desde el servidor" }, "kefinTweaks": { - "watchlist_enabler": "Habilitar la integraciรณn de la lista de seguimiento", - "watchlist_button": "Activar o desactivar la integraciรณn de la lista de seguimiento" + "watchlist_enabler": "Habilitar la integraciรณn de la lista de seguimiento" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Eliminar todos los archivos descargados", "music_cache_title": "Cachรฉ de mรบsica", "music_cache_description": "Cachear automรกticamente las canciones mientras escuchas una reproducciรณn mรกs suave y soporte sin conexiรณn", - "enable_music_cache": "Activar Cachรฉ de Mรบsica", "clear_music_cache": "Borrar Cachรฉ de Mรบsica", "music_cache_size": "Cachรฉ {{Tamaรฑo}}", "music_cache_cleared": "Cachรฉ de mรบsica eliminado", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "Sistema" }, "toasts": { - "error_deleting_files": "Error al eliminar archivos", - "background_downloads_enabled": "Descargas en segundo plano habilitadas", - "background_downloads_disabled": "Descargas en segundo plano deshabilitadas" + "error_deleting_files": "Error al eliminar archivos" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Descargas", "series": "Series", "movies": "Pelรญculas", - "queue": "Cola", "other_media": "Otros medios", - "queue_hint": "La cola de series y pelรญculas se perderรก al reiniciar la app", - "no_items_in_queue": "No hay รญtems en la cola", "no_downloaded_items": "No hay รญtems descargados", "delete_all_movies_button": "Eliminar todas las pelรญculas", "delete_all_series_button": "Eliminar todas las series", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Error al eliminar todas las series", "deleted_media_successfully": "ยกOtros medios eliminados con รฉxito!", "failed_to_delete_media": "Error al eliminar otros medios", - "download_deleted": "Descarga eliminada", "download_cancelled": "Descarga cancelada", "could_not_delete_download": "No se pudo eliminar la descarga", - "download_paused": "Descarga pausada", - "could_not_pause_download": "No se pudo pausar la descarga", - "download_resumed": "Descarga rebatida", - "could_not_resume_download": "No se pudo reiniciar la descarga", "download_completed": "Descarga completada", "download_failed": "Descarga fallida", "download_failed_for_item": "Descarga fallida para {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} ya estรก descargando", "all_files_deleted": "Todas las descargas eliminadas correctamente", "files_deleted_by_type": "{{count}} {{type}} eliminado", - "all_files_folders_and_jobs_deleted_successfully": "Todos los archivos, carpetas y trabajos eliminados con รฉxito", - "failed_to_clean_cache_directory": "Error al limpiar el directorio de cachรฉ", "could_not_get_download_url_for_item": "No se pudo obtener la URL de descarga para {{itemName}}", - "go_to_downloads": "Ir a descargas", "file_deleted": "{{item}} eliminado" } } @@ -583,16 +495,17 @@ "none": "Nada", "track": "Pista", "cancel": "Cancelar", - "stop": "Stop", "delete": "Borrar", "ok": "Aceptar", "remove": "Eliminar", - "next": "Siguiente", "back": "Atrรกs", "continue": "Continuar", "verifying": "Verificando...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Buscar...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "No se pudo crear el Steam para Chromecast", "message_from_server": "Mensaje del servidor: {{message}}", "next_episode": "Siguiente episodio", - "refresh_tracks": "Refrescar pistas", - "audio_tracks": "Pistas de audio:", - "playback_state": "Estado de la reproducciรณn:", - "index": "รndice:", "continue_watching": "Continuar viendo", "go_back": "Volver", "downloaded_file_title": "Ya tienes este archivo descargado", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Mostrar mรกs", "show_less": "Mostrar menos", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Siguiente", @@ -888,13 +798,9 @@ "playlists": "Listas de reproducciรณn", "tracks": "Canciones" }, - "filters": { - "all": "Todas" - }, "recently_added": "Recientemente aรฑadido", "recently_played": "Reproducidos Recientemente", "frequently_played": "Reproducido con frecuencia", - "explore": "Explorar", "top_tracks": "Canciones Populares", "play": "Reproducir", "shuffle": "Aleatorio", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/fi.json b/translations/fi.json index 3128b3be..471b3c29 100644 --- a/translations/fi.json +++ b/translations/fi.json @@ -261,43 +261,6 @@ "None": "Ei mitรครคn", "OnlyForced": "Vain pakotettu" }, - "text_color": "Tekstin vรคri", - "background_color": "Taustavรคri", - "outline_color": "ร„รคriviivan vรคri", - "outline_thickness": "ร„รคriviivan paksuus", - "background_opacity": "Taustan lรคpinรคkyvyys", - "outline_opacity": "ร„รคriviivan Lรคpinรคkyvyys", - "bold_text": "Lihavoi teksti", - "colors": { - "Black": "Musta", - "Gray": "Harmaa", - "Silver": "Hopea", - "White": "Valkoinen", - "Maroon": "Maroon", - "Red": "Punainen", - "Fuchsia": "Fuchsia", - "Yellow": "Keltainen", - "Olive": "Oliivit", - "Green": "Vihreรค", - "Teal": "Sinappi", - "Lime": "Limea", - "Purple": "Violetti", - "Navy": "Laiva", - "Blue": "Sininen", - "Aqua": "Vesi" - }, - "thickness": { - "None": "Ei mitรครคn", - "Thin": "Ohut", - "Normal": "Normaali", - "Thick": "Paksu" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Muut", "video_orientation": "Videon suunta", @@ -351,11 +295,6 @@ "UNKNOWN": "Tuntematon" }, "safe_area_in_controls": "Turvallinen alue ohjaimissa", - "video_player": "Videosoitin", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Kokeellinen + PiP)" - }, "show_custom_menu_links": "Nรคytรค mukautetut valikkolinkit", "show_large_home_carousel": "Nรคytรค suuri kotikaruselli (beta)", "hide_libraries": "Piilota kirjastot", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Automaattisten Toistojaksojen Maksimimรครคrรค", "disabled": "Pois Kรคytรถstรค" }, - "downloads": { - "downloads_title": "Lataukset" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Liitรคnnรคiset", "jellyseerr": { - "jellyseerr_warning": "Tรคmรค integraatio on alkuvaiheessa. Odota muutoksia.", "server_url": "Palvelimen URL", "server_url_hint": "Esimerkki: http(s)://verkkotunnus.url\n(lisรครค portti tarvittaessa)", "server_url_placeholder": "Jellyseerr URL...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Lue lisรครค Marlinista.", "save_button": "Tallenna", "toasts": { - "saved": "Tallennettu", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "Tallennettu" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Poista kaikki ladatut tiedostot", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "Jรคrjestelmรค" }, "toasts": { - "error_deleting_files": "Virhe tiedostojen poistamisessa", - "background_downloads_enabled": "Taustalataukset kรคytรถssรค", - "background_downloads_disabled": "Taustalataukset pois kรคytรถstรค" + "error_deleting_files": "Virhe tiedostojen poistamisessa" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Lataukset", "series": "TV-sarjat", "movies": "Elokuvat", - "queue": "Jonot", "other_media": "Muu media", - "queue_hint": "Jonot ja lataukset menetetรครคn sovelluksen uudelleenkรคynnistyksen yhteydessรค", - "no_items_in_queue": "Ei kohteita jonossa", "no_downloaded_items": "Ei ladattuja kohteita", "delete_all_movies_button": "Poista kaikki elokuvat", "delete_all_series_button": "Poista kaikki TV-sarjat", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Kaikkien TV-sarjojen poistaminen epรคonnistui", "deleted_media_successfully": "Muu media poistettu onnistuneesti!", "failed_to_delete_media": "Muiden medioiden poistaminen epรคonnistui", - "download_deleted": "Lataus Poistettu", "download_cancelled": "Lataus peruutettu", "could_not_delete_download": "Latausta Ei Voitu Poistaa", - "download_paused": "Lataus Keskeytetty", - "could_not_pause_download": "Latausta Ei Voitu Keskeyttรครค", - "download_resumed": "Lataus Jatketaan", - "could_not_resume_download": "Latausta Ei Voitu Jatkaa.", "download_completed": "Lataus valmis", "download_failed": "Lataus epรคonnistui", "download_failed_for_item": "Lataus epรคonnistui kohteelle {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "Kaikki lataukset poistettu onnistuneesti", "files_deleted_by_type": "{{count}} {{type}} poistettu", - "all_files_folders_and_jobs_deleted_successfully": "Kaikki tiedostot, kansiot ja tehtรคvรคt poistettu onnistuneesti", - "failed_to_clean_cache_directory": "Vรคlimuistin hakemiston puhdistus epรคonnistui", "could_not_get_download_url_for_item": "Latauksen URL-osoitetta ei voitu ladata {{itemName}}", - "go_to_downloads": "Siirry latauksiin", "file_deleted": "{{item}} poistettu" } } @@ -583,16 +495,17 @@ "none": "Ei mitรครคn", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Haku...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Suoratoistoa ei voitu luoda Chromecastia varten", "message_from_server": "Viesti palvelimelta: {{message}}", "next_episode": "Seuraava Jakso", - "refresh_tracks": "Pรคivitรค Kappaleet", - "audio_tracks": "ร„รคni Kappaleet:", - "playback_state": "Toiston Tila:", - "index": "Indeksi:", "continue_watching": "Jatka katsomista", "go_back": "Siirry Takaisin", "downloaded_file_title": "Tรคmรค tiedosto on ladattuna", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Nรคytรค Lisรครค", "show_less": "Nรคytรค Vรคhemmรคn", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Seuraava", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/fr.json b/translations/fr.json index 8aaa3aba..daf35a82 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -261,43 +261,6 @@ "None": "Aucun", "OnlyForced": "Forcรฉs seulement" }, - "text_color": "Couleur du texte", - "background_color": "Couleur d'arriรจre-plan", - "outline_color": "Couleur du contour", - "outline_thickness": "ร‰paisseur du contour", - "background_opacity": "Opacitรฉ de l'arriรจre-plan", - "outline_opacity": "Opacitรฉ du contour", - "bold_text": "Texte en gras", - "colors": { - "Black": "Noir", - "Gray": "Gris", - "Silver": "Argent", - "White": "Blanc", - "Maroon": "Marron", - "Red": "Rouge", - "Fuchsia": "Fuchsia", - "Yellow": "Jaune", - "Olive": "Olive", - "Green": "Vert", - "Teal": "Bleu canard", - "Lime": "Citron vert", - "Purple": "Violet", - "Navy": "Bleu marine", - "Blue": "Bleu", - "Aqua": "Bleu turquoise" - }, - "thickness": { - "None": "Aucun", - "Thin": "Maigre", - "Normal": "Normale", - "Thick": "ร‰pais" - }, - "subtitle_color": "Couleur des sous-titres", - "subtitle_background_color": "Couleur d'arriรจre-plan", - "subtitle_font": "Police des sous-titres", - "ksplayer_title": "Paramรจtres de KSPlayer", - "hardware_decode": "Dรฉcodage matรฉriel", - "hardware_decode_description": "Utilisez lโ€™accรฉlรฉration matรฉrielle pour le dรฉcodage vidรฉo. Dรฉsactivez si vous rencontrez des problรจmes de lecture.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "Paramรจtres des sous-titres VLC", - "hint": "Personnaliser l'apparence des sous-titres pour le lecteur VLC. Les changements prennent effet lors de la lecture suivante.", - "text_color": "Couleur du texte", - "background_color": "Couleur d'arriรจre-plan", - "background_opacity": "Opacitรฉ de l'arriรจre-plan", - "outline_color": "Couleur du contour", - "outline_opacity": "Opacitรฉ du contour", - "outline_thickness": "ร‰paisseur du contour", - "bold": "Texte en gras", - "margin": "Marge infรฉrieure" - }, - "video_player": { - "title": "Lecteur vidรฉo", - "video_player": "Lecteur vidรฉo", - "video_player_description": "Choisissez le lecteur vidรฉo ร  utiliser sur iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Autres", "video_orientation": "Orientation vidรฉo", @@ -351,11 +295,6 @@ "UNKNOWN": "Inconnu" }, "safe_area_in_controls": "Zone de sรฉcuritรฉ dans les contrรดles", - "video_player": "Lecteur vidรฉo", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Expรฉrimental + PiP)" - }, "show_custom_menu_links": "Afficher les liens personnalisรฉs", "show_large_home_carousel": "Afficher le grand carrousel dโ€™accueil (bรชta)", "hide_libraries": "Cacher des bibliothรจques", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Nombre d'รฉpisodes en lecture automatique max", "disabled": "Dรฉsactivรฉ" }, - "downloads": { - "downloads_title": "Tรฉlรฉchargements" - }, "music": { "title": "Musique", "playback_title": "Lecture", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Plugins", "jellyseerr": { - "jellyseerr_warning": "Cette intรฉgration est dans ses dรฉbuts. Attendez-vous ร  ce que des choses changent.", "server_url": "URL du serveur", "server_url_hint": "Exempleย : http(s)://votre-domaine.url\n(ajouter le port si nรฉcessaire)", "server_url_placeholder": "URL de Seerr...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "En savoir plus sur Marlin.", "save_button": "Enregistrer", "toasts": { - "saved": "Enregistrรฉ", - "refreshed": "Paramรจtres actualisรฉs depuis le serveur" - }, - "refresh_from_server": "Rafraรฎchir les paramรจtres depuis le serveur" + "saved": "Enregistrรฉ" + } }, "streamystats": { - "enable_streamystats": "Activer Streamystats", "disable_streamystats": "Dรฉsactiver Streamystats", "enable_search": "Utiliser pour la recherche", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Entrez l'URL de votre serveur Streamystats. L'URL doit inclure http ou https et รฉventuellement le port.", "read_more_about_streamystats": "En savoir plus sur Streamystats.", - "save_button": "Enregistrer", "save": "Enregistrer", "features_title": "Fonctionnalitรฉs", - "home_sections_title": "Sections de la page dยดaccueil", "enable_movie_recommendations": "Recommandations de films", "enable_series_recommendations": "Recommandations de sรฉries", "enable_promoted_watchlists": "Listes de lecture promues", @@ -445,8 +375,7 @@ "refresh_from_server": "Rafraรฎchir les paramรจtres depuis le serveur" }, "kefinTweaks": { - "watchlist_enabler": "Activer l'intรฉgration de notre liste de lecture", - "watchlist_button": "Activer l'intรฉgration de notre liste de lecture" + "watchlist_enabler": "Activer l'intรฉgration de notre liste de lecture" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Supprimer tous les fichiers tรฉlรฉchargรฉs", "music_cache_title": "Mise en cache de la musique", "music_cache_description": "Mettez automatiquement en cache les chansons au fur et ร  mesure que vous รฉcoutez pour une lecture plus fluide et une prise en charge hors ligne", - "enable_music_cache": "Activer le cache sur la musique", "clear_music_cache": "Vider le cache de la musique", "music_cache_size": "{{size}} mis en cache", "music_cache_cleared": "Cache de musique effacรฉ", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "Systรจme" }, "toasts": { - "error_deleting_files": "Erreur lors de la suppression des fichiers", - "background_downloads_enabled": "Tรฉlรฉchargements en arriรจre-plan activรฉs", - "background_downloads_disabled": "Tรฉlรฉchargements en arriรจre-plan dรฉsactivรฉs" + "error_deleting_files": "Erreur lors de la suppression des fichiers" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Tรฉlรฉchargements", "series": "Sรฉries", "movies": "Films", - "queue": "File d'attente", "other_media": "Autres mรฉdias", - "queue_hint": "La file d'attente et les tรฉlรฉchargements seront perdus au redรฉmarrage de l'application", - "no_items_in_queue": "Aucun tรฉlรฉchargement de mรฉdia dans la file d'attente", "no_downloaded_items": "Aucun mรฉdia tรฉlรฉchargรฉ", "delete_all_movies_button": "Supprimer tous les films", "delete_all_series_button": "Supprimer toutes les sรฉries", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "ร‰chec de la suppression de toutes les sรฉries", "deleted_media_successfully": "Les autres mรฉdias ont รฉtรฉ supprimรฉs avec succรจs !", "failed_to_delete_media": "ร‰chec de la suppression d'un autre mรฉdia", - "download_deleted": "Tรฉlรฉchargement supprimรฉ", "download_cancelled": "Tรฉlรฉchargement annulรฉ", "could_not_delete_download": "Impossible de supprimer le tรฉlรฉchargement", - "download_paused": "Tรฉlรฉchargement en pause", - "could_not_pause_download": "Impossible de mettre en pause le tรฉlรฉchargement", - "download_resumed": "Reprise du tรฉlรฉchargement", - "could_not_resume_download": "Impossible de reprendre le tรฉlรฉchargement", "download_completed": "Tรฉlรฉchargement terminรฉ", "download_failed": "ร‰chec du tรฉlรฉchargement", "download_failed_for_item": "ร‰chec du tรฉlรฉchargement pour {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} est dรฉjร  en cours de tรฉlรฉchargement", "all_files_deleted": "Tous les tรฉlรฉchargements supprimรฉs avec succรจs", "files_deleted_by_type": "{{count}} {{type}} supprimรฉ", - "all_files_folders_and_jobs_deleted_successfully": "Tous les fichiers, dossiers et tรขches ont รฉtรฉ supprimรฉs avec succรจs", - "failed_to_clean_cache_directory": "ร‰chec du nettoyage du rรฉpertoire de cache", "could_not_get_download_url_for_item": "ร‰chec d'obtention de l'URL de tรฉlรฉchargement pour {{itemName}}", - "go_to_downloads": "Aller aux tรฉlรฉchargements", "file_deleted": "{{item}} supprimรฉ" } } @@ -583,16 +495,17 @@ "none": "Aucun", "track": "Suivre", "cancel": "Annuler", - "stop": "Stop", "delete": "Supprimer", "ok": "Ok", "remove": "Retirer", - "next": "Suivant", "back": "Prรฉcรฉdent", "continue": "Continuer", "verifying": "Vรฉrification...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Rechercher...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Impossible de crรฉer un flux sur la Chromecast", "message_from_server": "Message du serveurย : {{message}}", "next_episode": "ร‰pisode suivant", - "refresh_tracks": "Rafraรฎchir les pistes", - "audio_tracks": "Pistes audioย :", - "playback_state": "ร‰tat de lectureย :", - "index": "Index :", "continue_watching": "Continuer ร  regarder", "go_back": "Retour", "downloaded_file_title": "Ce fichier est tรฉlรฉchargรฉ", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Afficher plus", "show_less": "Afficher moins", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Suivant", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "morceaux" }, - "filters": { - "all": "Toutes" - }, "recently_added": "Ajoutรฉs rรฉcemment", "recently_played": "Rรฉcemment jouรฉ", "frequently_played": "Frรฉquemment jouรฉ", - "explore": "Explorez", "top_tracks": "Top chansons", "play": "Lecture", "shuffle": "Alรฉatoire", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/he.json b/translations/he.json index 81de0117..a5fff137 100644 --- a/translations/he.json +++ b/translations/he.json @@ -261,43 +261,6 @@ "None": "ืœืœื", "OnlyForced": "ืจืง ื›ืคื•ื™" }, - "text_color": "ืฆื‘ืข ื”ื˜ืงืกื˜", - "background_color": "ืฆื‘ืข ืจืงืข", - "outline_color": "ืฆื‘ืข ืงื• ืžืชืืจ", - "outline_thickness": "ืขื•ื‘ื™ ืงื• ืžืชืืจ", - "background_opacity": "ืฉืงื™ืคื•ืช ืจืงืข", - "outline_opacity": "ืื˜ื™ืžื•ืช ืงื• ืžืชืืจ", - "bold_text": "ื˜ืงืกื˜ ื‘ื•ืœื˜", - "colors": { - "Black": "ืฉื—ื•ืจ", - "Gray": "ืืคื•ืจ", - "Silver": "ื›ืกืฃ", - "White": "ืœื‘ืŸ", - "Maroon": "ื—ื•ื ืขืจืžื•ื ื™", - "Red": "ืื“ื•ื", - "Fuchsia": "ืคื•ืงืกื™ื”", - "Yellow": "ืฆื”ื•ื‘", - "Olive": "ื–ื™ืช", - "Green": "ื™ืจื•ืง", - "Teal": "ืชื›ืœืช", - "Lime": "ื™ืจื•ืง ืœื™ื™ื", - "Purple": "ืกื’ื•ืœ", - "Navy": "ื›ื—ื•ืœ ื›ื”ื”", - "Blue": "ื›ื—ื•ืœ", - "Aqua": "ื›ื—ื•ืœ ื‘ื”ื™ืจ" - }, - "thickness": { - "None": "ืœืœื", - "Thin": "ื“ืง", - "Normal": "ืจื’ื™ืœ", - "Thick": "ืขื‘ื”" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "ื ื’ืŸ ื•ื™ื“ืื•", - "video_player": "ื ื’ืŸ ื•ื™ื“ืื•", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "ืื—ืจ", "video_orientation": "ื›ื™ื•ื•ืŸ ื•ื™ื“ื™ืื•", @@ -351,11 +295,6 @@ "UNKNOWN": "ืœื ื™ื“ื•ืข" }, "safe_area_in_controls": "ืื™ื–ื•ืจ ื‘ื˜ื•ื— ื‘ืคืงื“ื™ื", - "video_player": "ื ื’ืŸ ื•ื™ื“ืื•", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (ื ื™ืกื™ื•ื ื™ + ื ื’ืŸ ื‘ืชื•ืš ื ื’ืŸ)" - }, "show_custom_menu_links": "ื”ืฆื’ ืงื™ืฉื•ืจื™ื ืœืชืคืจื™ื˜ื™ื ืžื•ืชืืžื™ื ืื™ืฉื™ืช", "show_large_home_carousel": "ื”ืฆื’ ืงืจื•ืกืœื” ื’ื“ื•ืœื” ื‘ืžืกืš ื”ื‘ื™ืช (ื‘ื˜ื)", "hide_libraries": "ื”ืกืชืจ ืกืคืจื™ื•ืช", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "ื›ืžื•ืช ืคืจืงื™ื ืžืงืกื™ืžืœื™ืช ืœื ื™ื’ื•ืŸ ืื•ื˜ื•ืžื˜ื™", "disabled": "ื›ื‘ื•ื™" }, - "downloads": { - "downloads_title": "ื”ื•ืจื“ื•ืช" - }, "music": { "title": "ืžื•ื–ื™ืงื”", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "ืชื•ืกืคื™ื", "jellyseerr": { - "jellyseerr_warning": "ื—ืœืง ื–ื” ื ืžืฆื ืขื“ื™ื™ืŸ ื‘ืฉืœื‘ื™ื ืžื•ืงื“ืžื™ื. ืฆืคื• ืฉื“ื‘ืจื™ื ื™ืฉืชื ื•.", "server_url": "ื›ืชื•ื‘ืช ื”-URL ืฉืœ ื”ืฉืจืช", "server_url_hint": "ืœื“ื•ื’ืžื: http(s)://your-host.url\n(ื”ื•ืกืฃ ืคื•ืจื˜ ื‘ืžื™ื“ืช ื”ืฆื•ืจืš)", "server_url_placeholder": "ื›ืชื•ื‘ืช ื”-URL ืฉืœ Seerr", @@ -413,23 +348,18 @@ "read_more_about_marlin": "ืงืจื ืขื•ื“ ืขืœ Marlin.", "save_button": "ืฉืžื•ืจ", "toasts": { - "saved": "ื ืฉืžืจ", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "ื ืฉืžืจ" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "ืžื—ืง ืืช ื›ืœ ื”ืงื‘ืฆื™ื ืฉื”ื•ืจื“ื•", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "ืžืขืจื›ืช" }, "toasts": { - "error_deleting_files": "ืฉื’ื™ืื” ื‘ืžื—ื™ืงืช ืงื‘ืฆื™ื", - "background_downloads_enabled": "ื”ื•ืจื“ื” ื‘ืจืงืข ืžื•ืคืขืœืช", - "background_downloads_disabled": "ื”ื•ืจื“ื” ื‘ืจืงืข ื›ื‘ื•ื™ื”" + "error_deleting_files": "ืฉื’ื™ืื” ื‘ืžื—ื™ืงืช ืงื‘ืฆื™ื" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "ื”ื•ืจื“ื•ืช", "series": "ืกื“ืจื•ืช", "movies": "ืกืจื˜ื™ื", - "queue": "ืชื•ึนืจ", "other_media": "ืชื•ื›ืŸ ืื—ืจ", - "queue_hint": "ื”ืชื•ืจ ื•ื”ื”ื•ืจื“ื•ืช ื™ืื‘ื“ื• ื‘ืคืชื™ื—ื” ืžื—ื“ืฉ ืฉืœ ื”ืืคืœื™ืงืฆื™ื”", - "no_items_in_queue": "ืื™ืŸ ืคืจื˜ื™ื ื‘ืชื•ืจ", "no_downloaded_items": "ืื™ืŸ ืคืจื™ื˜ื™ื ืฉื”ื•ืจื“ื•", "delete_all_movies_button": "ืžื—ืง ืืช ื›ืœ ื”ืกืจื˜ื™ื", "delete_all_series_button": "ืžื—ืง ืืช ื›ืœ ื”ืกื“ืจื•ืช", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "ื ื›ืฉืœ ื‘ืžื—ื™ืงืช ื›ืœ ื”ืกื“ืจื•ืช", "deleted_media_successfully": "ื›ืœ ืฉืืจ ื”ืชื•ื›ืŸ ื ืžื—ืง ื‘ื”ืฆืœื—ื”!", "failed_to_delete_media": "ื ื›ืฉืœ ื‘ืžื—ื™ืงืช ืฉืืจ ื”ืชื•ื›ืŸ", - "download_deleted": "ื”ื”ื•ืจื“ื” ื ืžื—ืงื”", "download_cancelled": "ื”ื”ื•ืจื“ื” ื‘ื•ื˜ืœื”", "could_not_delete_download": "ืœื ื”ื™ื” ื ื™ืชืŸ ืœืžื—ื•ืง ืืช ื”ื”ื•ืจื“ื”", - "download_paused": "ื”ื”ื•ืจื“ื” ื ืขืฆืจื”", - "could_not_pause_download": "ืœื ื”ื™ื” ื ื™ืชืŸ ืœืขืฆื•ืจ ืืช ื”ื”ื•ืจื“ื”", - "download_resumed": "ื”ื”ื•ืจื“ื” ื—ื•ื“ืฉื”", - "could_not_resume_download": "ืœื ื”ื™ื” ื ื™ืชืŸ ืœื—ื“ืฉ ืืช ื”ื”ื•ืจื“ื”", "download_completed": "ื”ื”ื•ืจื“ื” ื”ื•ืฉืœืžื”", "download_failed": "ื”ื”ื•ืจื“ื” ื ื›ืฉืœื”", "download_failed_for_item": "ื”ื”ื•ืจื“ื” ื ื›ืฉืœื” ืขื‘ื•ืจ {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} ื›ื‘ืจ ื ืžืฆื ื‘ื”ื•ืจื“ื”", "all_files_deleted": "ื›ืœ ื”ื”ื•ืจื“ื•ืช ื ืžื—ืงื• ื‘ื”ืฆืœื—ื”", "files_deleted_by_type": "{{count}} {{type}} ื ืžื—ืงื•", - "all_files_folders_and_jobs_deleted_successfully": "ื›ืœ ื”ืงื‘ืฆื™ื, ื”ืชื™ืงื™ื•ืช ื•ื”ืขื‘ื•ื“ื•ืช ื ืžื—ืงื• ื‘ื”ืฆืœื—ื”", - "failed_to_clean_cache_directory": "ื ื›ืฉืœ ื‘ื ื™ืกื™ื•ืŸ ืœืžื—ื•ืง ืืช ืชื™ืงื™ื™ืช ื”ืžื˜ืžื•ืŸ", "could_not_get_download_url_for_item": "ืœื ื”ื™ื” ื ื™ืชืŸ ืœื”ืฉื™ื’ ืืช ืงื™ืฉื•ืจ ื”ื”ื•ืจื“ื” ืฉืœ {{itemName}}", - "go_to_downloads": "ืขื‘ื•ืจ ืœื”ื•ืจื“ื•ืช", "file_deleted": "{{item}} ื ืžื—ืง" } } @@ -583,16 +495,17 @@ "none": "ืœืœื", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "ื—ืคืฉ...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "ื ื›ืฉืœ ื‘ื™ืฆื™ืจืช ื–ืจื ืขื‘ื•ืจ Chromecast", "message_from_server": "ื”ื•ื“ืขื” ืžื”ืฉืจืช: {{message}}", "next_episode": "ื”ืคืจืง ื”ื‘ื", - "refresh_tracks": "ืจืขื ืŸ ืจืฆื•ืขื•ืช", - "audio_tracks": "ืจืฆื•ืขื•ืช ืฉืžืข:", - "playback_state": "ืžืฆื‘ ื ื™ื’ื•ืŸ:", - "index": "ืžื™ืงื•ื:", "continue_watching": "ื”ืžืฉืš ืœืฆืคื•ืช", "go_back": "ื—ื–ื•ืจ", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "ื”ืฆื’ ืขื•ื“", "show_less": "ื”ืฆื’ ืคื—ื•ืช", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "ื”ื‘ื", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/hu.json b/translations/hu.json index 0a428ed6..0ca2121e 100644 --- a/translations/hu.json +++ b/translations/hu.json @@ -261,43 +261,6 @@ "None": "Nincs", "OnlyForced": "Csak Kรฉnyszerรญtett" }, - "text_color": "Szรถvegszรญn", - "background_color": "Hรกttรฉrszรญn", - "outline_color": "Kรถrvonal szรญne", - "outline_thickness": "Kรถrvonal Vastagsรกga", - "background_opacity": "Hรกttรฉr รttetszล‘sรฉg", - "outline_opacity": "Kรถrvonal รttetszล‘sรฉg", - "bold_text": "Fรฉlkรถvรฉr Szรถveg", - "colors": { - "Black": "Fekete", - "Gray": "Szรผrke", - "Silver": "Ezรผst", - "White": "Fehรฉr", - "Maroon": "Sรถtรฉtvรถrรถs", - "Red": "Piros", - "Fuchsia": "Fukszia", - "Yellow": "Sรกrga", - "Olive": "Oliva", - "Green": "Zรถld", - "Teal": "Tรผrkiz", - "Lime": "Lime", - "Purple": "Lila", - "Navy": "Sรถtรฉtkรฉk", - "Blue": "Kรฉk", - "Aqua": "Tรผrkizkรฉk" - }, - "thickness": { - "None": "Nincs", - "Thin": "Vรฉkony", - "Normal": "Normรกl", - "Thick": "Vastag" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Egyรฉb", "video_orientation": "Videรณ Tรกjolรกs", @@ -351,11 +295,6 @@ "UNKNOWN": "Ismeretlen" }, "safe_area_in_controls": "Biztonsรกgi Sรกv a Vezรฉrlล‘kben", - "video_player": "Videรณlejรกtszรณ", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Kรญsรฉrleti + PiP)" - }, "show_custom_menu_links": "Egyรฉni Menรผlinkek Megjelenรญtรฉse", "show_large_home_carousel": "Show Large Home Carousel (beta)", "hide_libraries": "Kรถnyvtรกrak Elrejtรฉse", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Max. Auto. Epizรณdlejรกtszรกs", "disabled": "Letiltva" }, - "downloads": { - "downloads_title": "Letรถltรฉsek" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Bล‘vรญtmรฉnyek", "jellyseerr": { - "jellyseerr_warning": "Ez az integrรกciรณ mรฉg korai stรกdiumban van. Szรกmรญts a vรกltozรกsokra.", "server_url": "Szerver URL", "server_url_hint": "Pรฉlda: http(s)://a-te-szolgรกltatรณd.url\n(adj meg portot, ha szรผksรฉges)", "server_url_placeholder": "Jellyseerr URL...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Tudj Meg Tรถbbet a Marlinrรณl", "save_button": "Mentรฉs", "toasts": { - "saved": "Mentve", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "Mentve" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Minden Letรถltรถtt Fรกjl Tรถrlรฉse", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "Rendszer" }, "toasts": { - "error_deleting_files": "Hiba a Fรกjlok Tรถrlรฉsekor", - "background_downloads_enabled": "Background downloads enabled", - "background_downloads_disabled": "Background downloads disabled" + "error_deleting_files": "Hiba a Fรกjlok Tรถrlรฉsekor" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Letรถltรฉsek", "series": "Sorozatok", "movies": "Filmek", - "queue": "Sor", "other_media": "Other media", - "queue_hint": "A sor รฉs a letรถltรฉsek az alkalmazรกs รบjraindรญtรกsakor elvesznek", - "no_items_in_queue": "Nincs Elem a Sorban", "no_downloaded_items": "Nincsenek Letรถltรถtt Elemek", "delete_all_movies_button": "ร–sszes Film Tรถrlรฉse", "delete_all_series_button": "ร–sszes Sorozat Tรถrlรฉse", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Nem Sikerรผlt Tรถrรถlni Az ร–sszes Sorozatot", "deleted_media_successfully": "Deleted other media Successfully!", "failed_to_delete_media": "Failed to Delete other media", - "download_deleted": "Letรถltรฉs Tรถrรถlve", "download_cancelled": "Download Cancelled", "could_not_delete_download": "Nem Sikerรผlt Tรถrรถlni a Letรถltรฉst", - "download_paused": "Letรถltรฉs Szรผneteltetve", - "could_not_pause_download": "Nem Sikerรผlt Szรผneteltetni a Letรถltรฉst", - "download_resumed": "Letรถltรฉs Folytatva", - "could_not_resume_download": "Nem Sikerรผlt Folytatni a Letรถltรฉst", "download_completed": "Letรถltรฉs Befejezve", "download_failed": "Download Failed", "download_failed_for_item": "A(z) {{item}} letรถltรฉse sikertelen - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "All Downloads Deleted Successfully", "files_deleted_by_type": "{{count}} {{type}} deleted", - "all_files_folders_and_jobs_deleted_successfully": "Minden fรกjl, mappa รฉs feladat sikeresen tรถrรถlve", - "failed_to_clean_cache_directory": "Failed to clean cache directory", "could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}", - "go_to_downloads": "Ugrรกs a Letรถltรฉsekhez", "file_deleted": "{{item}} deleted" } } @@ -583,16 +495,17 @@ "none": "None", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Keresรฉs...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "A Chromecast stream lรฉtrehozรกsa sikertelen volt", "message_from_server": "รœzenet a szervertล‘l: {{message}}", "next_episode": "Kรถvetkezล‘ Epizรณd", - "refresh_tracks": "Sรกvok Frissรญtรฉse", - "audio_tracks": "Hangsรกvok:", - "playback_state": "Lejรกtszรกs รllapota:", - "index": "Index:", "continue_watching": "Folytatรกs", "go_back": "Vissza", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Tรถbb Megjelenรญtรฉse", "show_less": "Kevesebb Megjelenรญtรฉse", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Kรถvetkezล‘", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/it.json b/translations/it.json index 3cdfd1c6..b714aafe 100644 --- a/translations/it.json +++ b/translations/it.json @@ -4,8 +4,8 @@ "error_title": "Errore", "login_title": "Accesso", "login_to_title": "Accedi a", - "select_user": "Select a user to log in", - "add_user_to_login": "Add a user to log in", + "select_user": "Seleziona un utente per accedere", + "add_user_to_login": "Aggiungi un utente per accedere", "add_user": "Add User", "username_placeholder": "Nome utente", "password_placeholder": "Password", @@ -33,7 +33,7 @@ "connect_button": "Connetti", "previous_servers": "server precedente", "clear_button": "Cancella", - "swipe_to_remove": "Swipe to remove", + "swipe_to_remove": "Scorri per rimuovere", "search_for_local_servers": "Ricerca dei server locali", "searching": "Cercando...", "servers": "Server", @@ -41,46 +41,46 @@ "session_expired": "Session Expired", "please_login_again": "La tua sessione รจ scaduta. Si prega di eseguire nuovamente l'accesso.", "remove_saved_login": "Remove Saved Login", - "remove_saved_login_description": "This will remove your saved credentials for this server. You'll need to enter your username and password again next time.", - "accounts_count": "{{count}} accounts", + "remove_saved_login_description": "Questo rimuoverร  le tue credenziali salvate per questo server. Dovrai inserire nuovamente il tuo nome utente e la password la prossima volta.", + "accounts_count": "Account {{count}}", "select_account": "Select Account", "add_account": "Add Account", - "remove_account_description": "This will remove the saved credentials for {{username}}.", + "remove_account_description": "Questo rimuoverร  le credenziali salvate per {{username}}.", "remove_server": "Remove Server", - "remove_server_description": "This will remove {{server}} and all saved accounts from your list.", + "remove_server_description": "Questo rimuoverร  {{server}} e tutti gli account salvati dall'elenco.", "select_your_server": "Select Your Server", - "add_server_to_get_started": "Add a server to get started", + "add_server_to_get_started": "Aggiungi un server per iniziare", "add_server": "Add Server", "change_server": "Change Server" }, "save_account": { "title": "Save Account", - "save_for_later": "Save this account", + "save_for_later": "Salva questo account", "security_option": "Security Option", - "no_protection": "No protection", - "no_protection_desc": "Quick login without authentication", - "pin_code": "PIN code", - "pin_code_desc": "4-digit PIN required when switching", - "password": "Re-enter password", - "password_desc": "Password required when switching", - "save_button": "Save", - "cancel_button": "Cancel" + "no_protection": "Nessuna Protezione", + "no_protection_desc": "Accesso rapido senza autenticazione", + "pin_code": "Codice PIN", + "pin_code_desc": "PIN di 4 cifre richiesto quando si cambia utente", + "password": "Inserisci nuovamente la password", + "password_desc": "Password richiesta quando si cambia", + "save_button": "Salva", + "cancel_button": "Annulla" }, "pin": { - "enter_pin": "Enter PIN", - "enter_pin_for": "Enter PIN for {{username}}", - "enter_4_digits": "Enter 4 digits", - "invalid_pin": "Invalid PIN", + "enter_pin": "Inserisci il PIN", + "enter_pin_for": "Inserisci PIN per {{username}}", + "enter_4_digits": "Inserisci 4 cifre", + "invalid_pin": "PIN non valido", "setup_pin": "Set Up PIN", - "confirm_pin": "Confirm PIN", - "pins_dont_match": "PINs don't match", - "forgot_pin": "Forgot PIN?", - "forgot_pin_desc": "Your saved credentials will be removed" + "confirm_pin": "Conferma PIN", + "pins_dont_match": "I PIN non corrispondono", + "forgot_pin": "Hai dimenticato il PIN?", + "forgot_pin_desc": "Le credenziali salvate verranno rimosse" }, "password": { "enter_password": "Enter Password", - "enter_password_for": "Enter password for {{username}}", - "invalid_password": "Invalid password" + "enter_password_for": "Inserire la password per {{username}}", + "invalid_password": "Password errata" }, "home": { "checking_server_connection": "Controllo connessione server...", @@ -95,7 +95,7 @@ "oops": "Ops!", "error_message": "Qualcosa รจ andato storto. \nEffetturare il logout e riaccedere.", "continue_watching": "Continua a guardare", - "continue": "Continue", + "continue": "Continua", "next_up": "Prossimo", "continue_and_next_up": "Continue & Next Up", "recently_added_in": "Aggiunti di recente a {{libraryName}}", @@ -123,7 +123,7 @@ "title": "Switch User", "account": "Account", "switch_user": "Switch User on This Server", - "current": "current" + "current": "attuale" }, "categories": { "title": "Categorie" @@ -143,37 +143,37 @@ "show_series_poster_on_episode": "Show Series Poster on Episodes", "theme_music": "Theme Music", "display_size": "Display Size", - "display_size_small": "Small", - "display_size_default": "Default", - "display_size_large": "Large", + "display_size_small": "Piccolo", + "display_size_default": "Predefinito", + "display_size_large": "Grande", "display_size_extra_large": "Extra Large" }, "network": { - "title": "Network", - "local_network": "", - "auto_switch_enabled": "Auto-switch when at home", + "title": "Rete", + "local_network": "Rete locale", + "auto_switch_enabled": "Cambia automaticamente quando sei in casa", "auto_switch_description": "Automatically switch to local URL when connected to home WiFi", - "local_url": "Local URL", + "local_url": "URL locale", "local_url_hint": "Enter your local server address (e.g., http://192.168.1.100:8096)", "local_url_placeholder": "http://192.168.1.100:8096", "home_wifi_networks": "Home WiFi Networks", - "add_current_network": "Add \"{{ssid}}\"", + "add_current_network": "Aggiungi \"{{ssid}}\"", "not_connected_to_wifi": "Not connected to WiFi", - "no_networks_configured": "No networks configured", + "no_networks_configured": "Nessuna rete configurata", "add_network_hint": "Add your home WiFi network to enable auto-switching", "current_wifi": "WiFi Attuale", "using_url": "Sta utilizzando", - "local": "Local URL", - "remote": "Remote URL", - "not_connected": "Not connected", + "local": "URL locale", + "remote": "URL remoto", + "not_connected": "Non connesso", "current_server": "Current Server", - "remote_url": "Remote URL", - "active_url": "Active URL", - "not_configured": "Not configured", - "network_added": "Network added", - "network_already_added": "Network already added", + "remote_url": "URL remoto", + "active_url": "URL Attivo", + "not_configured": "Non configurato", + "network_added": "Rete aggiunta", + "network_already_added": "Rete giร  inserita", "no_wifi_connected": "Not connected to WiFi", - "permission_denied": "Location permission denied", + "permission_denied": "Autorizzazione alla posizione negata", "permission_denied_explanation": "Location permission is required to detect WiFi network for auto-switching. Please enable it in Settings." }, "user_info": { @@ -202,9 +202,9 @@ "buffer": { "title": "Buffer Settings", "cache_mode": "Cache Mode", - "cache_auto": "Auto", - "cache_yes": "Enabled", - "cache_no": "Disabled", + "cache_auto": "Automatico", + "cache_yes": "Abilitato", + "cache_no": "Disabilitato", "buffer_duration": "Buffer Duration", "max_cache_size": "Max Cache Size", "max_backward_cache": "Max Backward Cache" @@ -212,7 +212,7 @@ "vo_driver": { "title": "Video Output", "vo_mode": "VO Driver", - "gpu_next": "gpu-next (Recommended)", + "gpu_next": "gpu-next (Consigliato)", "gpu": "gpu" }, "gesture_controls": { @@ -224,7 +224,7 @@ "right_side_volume": "Controllo Volume Laterale Destro", "right_side_volume_description": "Scorri verso l'alto/verso il basso per regolare il volume", "hide_volume_slider": "Hide Volume Slider", - "hide_volume_slider_description": "Hide the volume slider in the video player", + "hide_volume_slider_description": "Nascondi il cursore del volume nel lettore video", "hide_brightness_slider": "Hide Brightness Slider", "hide_brightness_slider_description": "Hide the brightness slider in the video player" }, @@ -261,43 +261,6 @@ "None": "Nessuno", "OnlyForced": "Solo forzati" }, - "text_color": "Colore Del Testo", - "background_color": "Colore Di Sfondo", - "outline_color": "Colore Contorno", - "outline_thickness": "Spessore Contorno", - "background_opacity": "Opacitร  Dello Sfondo", - "outline_opacity": "Opacitร  Contorno", - "bold_text": "Bold Text", - "colors": { - "Black": "Nero", - "Gray": "Grigio", - "Silver": "Argento", - "White": "Bianco", - "Maroon": "Maroon", - "Red": "Rosso", - "Fuchsia": "Fuchsia", - "Yellow": "Giallo", - "Olive": "Olive", - "Green": "Verde", - "Teal": "Teal", - "Lime": "Lime", - "Purple": "Viola", - "Navy": "Marina", - "Blue": "Blu", - "Aqua": "Aqua" - }, - "thickness": { - "None": "Nessuno", - "Thin": "Sottile", - "Normal": "Normale", - "Thick": "Spessa" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Altro", "video_orientation": "Orientamento del video", @@ -351,11 +295,6 @@ "UNKNOWN": "Sconosciuto" }, "safe_area_in_controls": "Area sicura per i controlli", - "video_player": "Video player", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Sperimentale + PiP)" - }, "show_custom_menu_links": "Mostra i link del menu personalizzato", "show_large_home_carousel": "Mostra Carosello Grande nella Home (beta)", "hide_libraries": "Nascondi Librerie", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Numero Massimo Di Episodi Riproduzione Automatica", "disabled": "Disabilitato" }, - "downloads": { - "downloads_title": "Scaricamento" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Plugin", "jellyseerr": { - "jellyseerr_warning": "Questa integrazione รจ in fase iniziale. Aspettarsi cambiamenti.", "server_url": "URL del Server", "server_url_hint": "Esempio: http(s)://tuo-host.url\n(aggiungere la porta se richiesto)", "server_url_placeholder": "URL di Jellyseerr...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Leggi di piรน su Marlin.", "save_button": "Salva", "toasts": { - "saved": "Salvato", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "Salvato" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Cancella Tutti i File Scaricati", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "Sistema" }, "toasts": { - "error_deleting_files": "Errore nella cancellazione dei file", - "background_downloads_enabled": "Scaricamento in background abilitato", - "background_downloads_disabled": "Scaricamento in background disabilitato" + "error_deleting_files": "Errore nella cancellazione dei file" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Scaricati", "series": "Serie TV", "movies": "Film", - "queue": "Coda", "other_media": "Altri supporti", - "queue_hint": "La coda e gli elementi scaricati saranno persi con il riavvio dell'app", - "no_items_in_queue": "Nessun elemento in coda", "no_downloaded_items": "Nessun elemento scaricato", "delete_all_movies_button": "Cancella tutti i film", "delete_all_series_button": "Cancella tutte le serie TV", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Impossibile eliminare tutte le serie TV", "deleted_media_successfully": "Eliminato altri supporti con successo!", "failed_to_delete_media": "Impossibile eliminare altri media", - "download_deleted": "Download Eliminato", "download_cancelled": "Scaricamento annullato", "could_not_delete_download": "Impossibile Eliminare Il Download", - "download_paused": "Download In Pausa", - "could_not_pause_download": "Impossibile Sbloccare Il Download", - "download_resumed": "Download Ripreso", - "could_not_resume_download": "Impossibile Riprendere Il Download", "download_completed": "Scaricamento completato", "download_failed": "Scaricamento non riuscito", "download_failed_for_item": "Scaricamento fallito per {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} รจ giร  in download", "all_files_deleted": "Tutti i Download Eliminati con Successo", "files_deleted_by_type": "{{count}} {{type}} cancellati", - "all_files_folders_and_jobs_deleted_successfully": "Tutti i file, le cartelle e i processi sono stati eliminati con successo.", - "failed_to_clean_cache_directory": "Pulizia della directory della cache non riuscita", "could_not_get_download_url_for_item": "Impossibile ottenere l'URL di download per {{itemName}}", - "go_to_downloads": "Vai agli elementi scaricati", "file_deleted": "{{item}} cancellato" } } @@ -583,16 +495,17 @@ "none": "Nulla", "track": "Traccia", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Cerca...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Impossibile creare uno stream per Chromecast", "message_from_server": "Messaggio dal server", "next_episode": "Prossimo Episodio", - "refresh_tracks": "Aggiorna tracce", - "audio_tracks": "Tracce audio:", - "playback_state": "Stato della riproduzione:", - "index": "Indice:", "continue_watching": "Continua a guardare", "go_back": "Indietro", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Mostra di piรน", "show_less": "Mostra di meno", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Prossimo", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/ja.json b/translations/ja.json index 6f5b08f6..70a2ad4c 100644 --- a/translations/ja.json +++ b/translations/ja.json @@ -261,43 +261,6 @@ "None": "ใชใ—", "OnlyForced": "ๅผทๅˆถใฎใฟ" }, - "text_color": "ใƒ†ใ‚ญใ‚นใƒˆใฎ่‰ฒ", - "background_color": "่ƒŒๆ™ฏ่‰ฒ", - "outline_color": "ใ‚ขใ‚ฆใƒˆใƒฉใ‚คใƒณใฎ่‰ฒ", - "outline_thickness": "ๆฆ‚่ฆ ๅŽšใ•", - "background_opacity": "่ƒŒๆ™ฏใฎ้€ๆ˜Žๅบฆ", - "outline_opacity": "ใ‚ขใ‚ฆใƒˆใƒฉใ‚คใƒณใฎ้€ๆ˜Žๅบฆ", - "bold_text": "Bold Text", - "colors": { - "Black": "ใƒ–ใƒฉใƒƒใ‚ฏ", - "Gray": "ใ‚ฐใƒฌใƒผ", - "Silver": "ใ‚ทใƒซใƒใƒผ", - "White": "็™ฝ", - "Maroon": "Maroon", - "Red": "่ตค", - "Fuchsia": "Fuchsia", - "Yellow": "้ป„่‰ฒ", - "Olive": "ใ‚ชใƒชใƒผใƒ–", - "Green": "็ท‘", - "Teal": "ใƒ†ใ‚ฃใƒผใƒซ", - "Lime": "้ป„็ท‘", - "Purple": "ใƒ‘ใƒผใƒ—ใƒซ", - "Navy": "ๆตท่ปformat@@0", - "Blue": "้’", - "Aqua": "Aqua" - }, - "thickness": { - "None": "ใชใ—", - "Thin": "็ดฐใ„ใงใ™", - "Normal": "ๆจ™ๆบ–", - "Thick": "ๆฟƒๅŽšใช" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "ใใฎไป–", "video_orientation": "ๅ‹•็”ปใฎๅ‘ใ", @@ -351,11 +295,6 @@ "UNKNOWN": "ไธๆ˜Ž" }, "safe_area_in_controls": "ใ‚ณใƒณใƒˆใƒญใƒผใƒซใฎๅฎ‰ๅ…จใ‚จใƒชใ‚ข", - "video_player": "Video player", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Experimental + PiP)" - }, "show_custom_menu_links": "ใ‚ซใ‚นใ‚ฟใƒ ใƒกใƒ‹ใƒฅใƒผใฎใƒชใƒณใ‚ฏใ‚’่กจ็คบ", "show_large_home_carousel": "ๅคงใใชใƒ’ใƒผใƒญใƒผ๏ผˆBeta๏ผ‰", "hide_libraries": "ใƒฉใ‚คใƒ–ใƒฉใƒชใ‚’้ž่กจ็คบ", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "่‡ชๅ‹•ๅ†็”Ÿใ‚จใƒ”ใ‚ฝใƒผใƒ‰ใฎๆœ€ๅคงๆ•ฐ", "disabled": "็„กๅŠน" }, - "downloads": { - "downloads_title": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "ใƒ—ใƒฉใ‚ฐใ‚คใƒณ", "jellyseerr": { - "jellyseerr_warning": "ใ“ใฎ็ตฑๅˆใฏใพใ ๅˆๆœŸๆฎต้šŽใงใ™ใ€‚็ŠถๆณใŒๅค‰ๅŒ–ใ™ใ‚‹ๅฏ่ƒฝๆ€งใŒใ‚ใ‚Šใพใ™ใ€‚", "server_url": "ใ‚ตใƒผใƒใƒผURL", "server_url_hint": "ไพ‹: http(s)://your-host.url\n(ๅฟ…่ฆใซๅฟœใ˜ใฆใƒใƒผใƒˆใ‚’่ฟฝๅŠ )", "server_url_placeholder": "Jellyseerr URL...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Marlinใซใคใ„ใฆ่ฉณใ—ใ่ชญใ‚€ใ€‚", "save_button": "ไฟๅญ˜", "toasts": { - "saved": "ไฟๅญ˜ใ—ใพใ—ใŸ", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "ไฟๅญ˜ใ—ใพใ—ใŸ" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "ใ™ในใฆใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใƒ•ใ‚กใ‚คใƒซใ‚’ๅ‰Š้™ค", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "ใ‚ทใ‚นใƒ†ใƒ " }, "toasts": { - "error_deleting_files": "ใƒ•ใ‚กใ‚คใƒซใฎๅ‰Š้™คใ‚จใƒฉใƒผ", - "background_downloads_enabled": "ใƒใƒƒใ‚ฏใ‚ฐใƒฉใ‚ฆใƒณใƒ‰ใงใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใฏๆœ‰ๅŠนใงใ™", - "background_downloads_disabled": "ใƒใƒƒใ‚ฏใ‚ฐใƒฉใ‚ฆใƒณใƒ‰ใงใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใฏ็„กๅŠนใงใ™" + "error_deleting_files": "ใƒ•ใ‚กใ‚คใƒซใฎๅ‰Š้™คใ‚จใƒฉใƒผ" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰", "series": "TVใ‚ทใƒชใƒผใ‚บ", "movies": "ๆ˜ ็”ป", - "queue": "ใ‚ญใƒฅใƒผ", "other_media": "ใใฎไป–ใฎใƒกใƒ‡ใ‚ฃใ‚ข", - "queue_hint": "ใ‚ขใƒ—ใƒชใ‚’ๅ†่ตทๅ‹•ใ™ใ‚‹ใจใ‚ญใƒฅใƒผใจใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใฏๅคฑใ‚ใ‚Œใพใ™", - "no_items_in_queue": "ใ‚ญใƒฅใƒผใซใ‚ขใ‚คใƒ†ใƒ ใŒใ‚ใ‚Šใพใ›ใ‚“", "no_downloaded_items": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใŸใ‚ขใ‚คใƒ†ใƒ ใฏใ‚ใ‚Šใพใ›ใ‚“", "delete_all_movies_button": "ใ™ในใฆใฎๆ˜ ็”ปใ‚’ๅ‰Š้™ค", "delete_all_series_button": "ใ™ในใฆใฎใ‚ทใƒชใƒผใ‚บใ‚’ๅ‰Š้™ค", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "ใ™ในใฆใฎใ‚ทใƒชใƒผใ‚บใ‚’ๅ‰Š้™คใงใใพใ›ใ‚“ใงใ—ใŸ", "deleted_media_successfully": "ไป–ใฎใƒกใƒ‡ใ‚ฃใ‚ขใ‚’ๅ‰Š้™คใ—ใพใ—ใŸ๏ผ", "failed_to_delete_media": "ไป–ใฎใƒกใƒ‡ใ‚ฃใ‚ขใฎๅ‰Š้™คใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "download_deleted": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใŒๅ‰Š้™คใ•ใ‚Œใพใ—ใŸ", "download_cancelled": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ‚’ใ‚ญใƒฃใƒณใ‚ปใƒซใ—ใพใ—ใŸ", "could_not_delete_download": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ‚’ๅ‰Š้™คใงใใพใ›ใ‚“ใงใ—ใŸ", - "download_paused": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ‚’ไธ€ๆ™‚ๅœๆญขใ—ใพใ—ใŸ", - "could_not_pause_download": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ‚’ไธ€ๆ™‚ๅœๆญขใงใใพใ›ใ‚“ใงใ—ใŸ", - "download_resumed": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ๅ†้–‹", - "could_not_resume_download": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ‚’ๅ†้–‹ใงใใพใ›ใ‚“ใงใ—ใŸ", "download_completed": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใŒๅฎŒไบ†ใ—ใพใ—ใŸ", "download_failed": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใซๅคฑๆ•—ใ—ใพใ—ใŸ", "download_failed_for_item": "{{item}}ใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใซๅคฑๆ•—ใ—ใพใ—ใŸ - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "All Downloads Deleted Successfully", "files_deleted_by_type": "{{count}} {{type}} deleted", - "all_files_folders_and_jobs_deleted_successfully": "ใ™ในใฆใฎใƒ•ใ‚กใ‚คใƒซใ€ใƒ•ใ‚ฉใƒซใƒ€ใ€ใ‚ธใƒงใƒ–ใŒๆญฃๅธธใซๅ‰Š้™คใ•ใ‚Œใพใ—ใŸ", - "failed_to_clean_cache_directory": "ใ‚ญใƒฃใƒƒใ‚ทใƒฅใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใฎใ‚ฏใƒชใƒผใƒณใ‚ขใƒƒใƒ—ใซๅคฑๆ•—ใ—ใพใ—ใŸ", "could_not_get_download_url_for_item": "{{itemName}} ใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰URLใ‚’ๅ–ๅพ—ใงใใพใ›ใ‚“ใงใ—ใŸ", - "go_to_downloads": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใซ็งปๅ‹•", "file_deleted": "{{item}} deleted" } } @@ -583,16 +495,17 @@ "none": "None", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "ๆคœ็ดข...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Chromecastใฎใ‚นใƒˆใƒชใƒผใƒ ใ‚’ไฝœๆˆใงใใพใ›ใ‚“ใงใ—ใŸ", "message_from_server": "ใ‚ตใƒผใƒใƒผใ‹ใ‚‰ใฎใƒกใƒƒใ‚ปใƒผใ‚ธ", "next_episode": "ๆฌกใฎใ‚จใƒ”ใ‚ฝใƒผใƒ‰", - "refresh_tracks": "ใƒˆใƒฉใƒƒใ‚ฏใ‚’ๆ›ดๆ–ฐ", - "audio_tracks": "้Ÿณๅฃฐใƒˆใƒฉใƒƒใ‚ฏ:", - "playback_state": "ๅ†็”Ÿ็Šถๆ…‹:", - "index": "ใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚น:", "continue_watching": "่ฆ–่ดใ‚’็ถšใ‘ใ‚‹", "go_back": "ๆˆปใ‚‹", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "ใ‚‚ใฃใจ่ฆ‹ใ‚‹", "show_less": "ๅฐ‘ใชใ่กจ็คบ", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "ๆฌก", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/ko.json b/translations/ko.json index f6d01d4b..8c6a5339 100644 --- a/translations/ko.json +++ b/translations/ko.json @@ -261,43 +261,6 @@ "None": "None", "OnlyForced": "OnlyForced" }, - "text_color": "Text Color", - "background_color": "Background Color", - "outline_color": "Outline Color", - "outline_thickness": "Outline Thickness", - "background_opacity": "Background Opacity", - "outline_opacity": "Outline Opacity", - "bold_text": "Bold Text", - "colors": { - "Black": "๊ฒ€์ •์ƒ‰", - "Gray": "ํšŒ์ƒ‰", - "Silver": "์€์ƒ‰", - "White": "ํฐ์ƒ‰", - "Maroon": "๋ฐค์ƒ‰", - "Red": "๋นจ๊ฐ„์ƒ‰", - "Fuchsia": "๋ถ„ํ™์ƒ‰", - "Yellow": "๋…ธ๋ž€์ƒ‰", - "Olive": "์˜ฌ๋ฆฌ๋ธŒ ์ƒ‰", - "Green": "๋…น์ƒ‰", - "Teal": "์ฒญ๋ก์ƒ‰", - "Lime": "๋ผ์ž„์ƒ‰", - "Purple": "๋ณด๋ผ์ƒ‰", - "Navy": "๋‚จ์ƒ‰", - "Blue": "ํŒŒ๋ž€์ƒ‰", - "Aqua": "์•„์ฟ ์•„์ƒ‰" - }, - "thickness": { - "None": "์—†์Œ", - "Thin": "์–‡๊ฒŒ", - "Normal": "๋ณดํ†ต", - "Thick": "๊ตต๊ฒŒ" - }, - "subtitle_color": "์ž๋ง‰ ์ƒ‰์ƒ", - "subtitle_background_color": "๋ฐฐ๊ฒฝ ์ƒ‰์ƒ", - "subtitle_font": "์ž๋ง‰ ํฐํŠธ", - "ksplayer_title": "KSPlayer ์„ค์ •", - "hardware_decode": "ํ•˜๋“œ์›จ์–ด ๋””์ฝ”๋”ฉ", - "hardware_decode_description": "๋น„๋””์˜ค ๋””์ฝ”๋”ฉ์— ํ•˜๋“œ์›จ์–ด ๊ฐ€์†์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์žฌ์ƒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ๋น„ํ™œ์„ฑํ™”ํ•˜์‹ญ์‹œ์˜ค.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC ์ž๋ง‰ ์„ค์ •", - "hint": "VLC ํ”Œ๋ ˆ์ด์–ด์˜ ์ž๋ง‰ ํ‘œ์‹œ ๋ฐฉ์‹์„ ์„ค์ •ํ•˜์„ธ์š”. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ ์žฌ์ƒ ์‹œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.", - "text_color": "๊ธ€์ž์ƒ‰", - "background_color": "๋ฐฐ๊ฒฝ ์ƒ‰์ƒ", - "background_opacity": "๋ฐฐ๊ฒฝ ํˆฌ๋ช…๋„", - "outline_color": "์™ธ๊ณฝ์„  ์ƒ‰์ƒ", - "outline_opacity": "์™ธ๊ณฝ์„  ํˆฌ๋ช…๋„", - "outline_thickness": "์™ธ๊ณฝ์„  ๊ตต๊ธฐ", - "bold": "๊ตต์€ ๊ธ€์”จ", - "margin": "์•„๋ž˜์ชฝ ์—ฌ๋ฐฑ" - }, - "video_player": { - "title": "๋น„๋””์˜ค ํ”Œ๋ ˆ์ด์–ด", - "video_player": "๋น„๋””์˜ค ํ”Œ๋ ˆ์ด์–ด", - "video_player_description": "iOS ์‚ฌ์šฉ์ž๋Š” ๋น„๋””์˜ค ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์„ ํƒํ•˜์„ธ์š”.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Other", "video_orientation": "Video Orientation", @@ -351,11 +295,6 @@ "UNKNOWN": "Unknown" }, "safe_area_in_controls": "์ปจํŠธ๋กค ์•ˆ์ „ ์˜์—ญ", - "video_player": "Video Player", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Experimental + PiP)" - }, "show_custom_menu_links": "์‚ฌ์šฉ์ž ์ง€์ • ๋ฉ”๋‰ด ๋งํฌ ํ‘œ์‹œ", "show_large_home_carousel": "๋Œ€ํ˜• ํ™ˆ ์Šฌ๋ผ์ด๋“œ ๋ฐฐ๋„ˆ ํ‘œ์‹œ (๋ฒ ํƒ€)", "hide_libraries": "๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ˆจ๊ธฐ๊ธฐ", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Max Auto Play Episode Count", "disabled": "Disabled" }, - "downloads": { - "downloads_title": "Downloads" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Plugins", "jellyseerr": { - "jellyseerr_warning": "This integration is in its early stages. Expect things to change.", "server_url": "Server URL", "server_url_hint": "Example: http(s)://your-host.url\n(add port if required)", "server_url_placeholder": "Seerr URL", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Read More About Marlin.", "save_button": "Save", "toasts": { - "saved": "Saved", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "Saved" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "์‹œ๋ฆฌ์ฆˆ ์ถ”์ฒœ", "enable_promoted_watchlists": "์ถ”์ฒœ ๊ด€์‹ฌ ๋ชฉ๋ก", @@ -445,8 +375,7 @@ "refresh_from_server": "์„œ๋ฒ„์—์„œ ์„ค์ • ์ƒˆ๋กœ๊ณ ์นจ" }, "kefinTweaks": { - "watchlist_enabler": "๊ด€์‹ฌ ๋ชฉ๋ก ํ†ตํ•ฉ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”", - "watchlist_button": "๊ด€์‹ฌ ๋ชฉ๋ก ์—ฐ๋™ ์ผœ๊ธฐ/๋„๊ธฐ" + "watchlist_enabler": "๊ด€์‹ฌ ๋ชฉ๋ก ํ†ตํ•ฉ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Delete All Downloaded Files", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "์Œ์•… ์บ์‹œ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "System" }, "toasts": { - "error_deleting_files": "Error Deleting Files", - "background_downloads_enabled": "Background downloads enabled", - "background_downloads_disabled": "Background downloads disabled" + "error_deleting_files": "Error Deleting Files" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Downloads", "series": "TV-Series", "movies": "Movies", - "queue": "Queue", "other_media": "Other media", - "queue_hint": "Queue and downloads will be lost on app restart", - "no_items_in_queue": "No Items in Queue", "no_downloaded_items": "No Downloaded Items", "delete_all_movies_button": "Delete All Movies", "delete_all_series_button": "Delete All TV-Series", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Failed to Delete All TV-Series", "deleted_media_successfully": "Deleted other media Successfully!", "failed_to_delete_media": "Failed to Delete other media", - "download_deleted": "Download Deleted", "download_cancelled": "Download Cancelled", "could_not_delete_download": "Could Not Delete Download", - "download_paused": "Download Paused", - "could_not_pause_download": "Could Not Pause Download", - "download_resumed": "Download Resumed", - "could_not_resume_download": "Could Not Resume Download", "download_completed": "Download Completed", "download_failed": "Download Failed", "download_failed_for_item": "Download failed for {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "All Downloads Deleted Successfully", "files_deleted_by_type": "{{count}} {{type}} deleted", - "all_files_folders_and_jobs_deleted_successfully": "All files, folders, and jobs deleted successfully", - "failed_to_clean_cache_directory": "Failed to clean cache directory", "could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}", - "go_to_downloads": "Go to Downloads", "file_deleted": "{{item}} deleted" } } @@ -583,16 +495,17 @@ "none": "None", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Search...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast", "message_from_server": "Message from Server: {{message}}", "next_episode": "Next Episode", - "refresh_tracks": "Refresh Tracks", - "audio_tracks": "Audio Tracks:", - "playback_state": "Playback State:", - "index": "Index:", "continue_watching": "Continue Watching", "go_back": "Go Back", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Show More", "show_less": "Show Less", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Next", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/nl.json b/translations/nl.json index cab76f84..e7137439 100644 --- a/translations/nl.json +++ b/translations/nl.json @@ -261,43 +261,6 @@ "None": "Geen", "OnlyForced": "Alleen Geforceerd" }, - "text_color": "Tekst kleur", - "background_color": "Achtergrond Kleur", - "outline_color": "Kleur omlijning", - "outline_thickness": "Dikte omlijning", - "background_opacity": "Transparantie achtergrond", - "outline_opacity": "Doorzichtigheid omlijning", - "bold_text": "Bold Text", - "colors": { - "Black": "Zwart", - "Gray": "Grijs", - "Silver": "Zilver", - "White": "Wit", - "Maroon": "Kastanjebruin", - "Red": "Rood", - "Fuchsia": "Fuchsia", - "Yellow": "Geel", - "Olive": "Olijf", - "Green": "Groen", - "Teal": "Groenblauw", - "Lime": "Lichtgroen", - "Purple": "Paars", - "Navy": "Marine", - "Blue": "Blauw", - "Aqua": "Aqua" - }, - "thickness": { - "None": "Geen", - "Thin": "Dun", - "Normal": "normaal", - "Thick": "Dikke" - }, - "subtitle_color": "Kleur ondertiteling", - "subtitle_background_color": "Achtergrondkleur", - "subtitle_font": "Lettertype ondertitels", - "ksplayer_title": "KSPlayer Instellingen", - "hardware_decode": "Hardware Acceleratie", - "hardware_decode_description": "Gebruik hardware acceleratie voor video-decodering. Uitschakelen als u problemen met afspelen ondervindt.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC ondertitel instellingen", - "hint": "Aanpassen van ondertiteling voor VLC-speler. Wijzigingen worden toegepast bij het afspelen.", - "text_color": "Tekstkleur", - "background_color": "Achtergrondkleur", - "background_opacity": "Doorzichtigheid achtergrond", - "outline_color": "Kleur omlijning", - "outline_opacity": "Omtrek opaciteit", - "outline_thickness": "Omtrek dikte", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Videospeler", - "video_player": "Videospeler", - "video_player_description": "Kies welke videospeler gebruikt moet worden op iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Andere", "video_orientation": "Video oriรซntatie", @@ -351,11 +295,6 @@ "UNKNOWN": "Onbekend" }, "safe_area_in_controls": "Veilig gebied in bedieningen", - "video_player": "Video player", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Experimentele + PiP)" - }, "show_custom_menu_links": "Aangepaste menulinks tonen", "show_large_home_carousel": "Toon grote carrousel op startpagina (bรจta)", "hide_libraries": "Verberg Bibliotheken", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Max Automatisch Aflevering Aantal", "disabled": "Uitgeschakeld" }, - "downloads": { - "downloads_title": "Downloads" - }, "music": { "title": "Muziek", "playback_title": "Afspelen", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Uitbreidingen", "jellyseerr": { - "jellyseerr_warning": "Deze integratie is nog in een vroeg stadium. Verwacht dat zaken nog veranderen.", "server_url": "Server-URL", "server_url_hint": "Voorbeeld: http(s)://je-host.url\n(indien nodig: voeg de poort toe)", "server_url_placeholder": "Jellyseerr URL...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Lees meer over Marlin.", "save_button": "Opslaan", "toasts": { - "saved": "Opgeslagen", - "refreshed": "Instellingen zijn vernieuwd vanaf server" - }, - "refresh_from_server": "Ververs Instellingen van Server" + "saved": "Opgeslagen" + } }, "streamystats": { - "enable_streamystats": "Streamystats inschakelen", "disable_streamystats": "Streamystats Uitschakelen", "enable_search": "Gebruik voor Zoeken", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Vul de URL van de Streamystats server in. De URL moet http of https bevatten en optioneel de poort.", "read_more_about_streamystats": "Lees Meer over Streamystats.", - "save_button": "Opslaan", "save": "Opslaan", "features_title": "Functies", - "home_sections_title": "Thuis Secties", "enable_movie_recommendations": "Film Aanbevelingen", "enable_series_recommendations": "Series Aanbevelingen", "enable_promoted_watchlists": "Gepromote Kijklijst", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Verwijder alle gedownloade bestanden", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} gecached", "music_cache_cleared": "Muziek cache gewist", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "Systeem" }, "toasts": { - "error_deleting_files": "Fout bij het verwijderen van bestanden", - "background_downloads_enabled": "Downloads op de achtergrond ingeschakeld", - "background_downloads_disabled": "Downloads op de achtergrond uitgeschakeld" + "error_deleting_files": "Fout bij het verwijderen van bestanden" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Downloads", "series": "Series", "movies": "Films", - "queue": "Wachtrij", "other_media": "Andere media", - "queue_hint": "Wachtrij en downloads verdwijnen bij een herstart van de app", - "no_items_in_queue": "Geen items in wachtrij", "no_downloaded_items": "Geen gedownloade items", "delete_all_movies_button": "Verwijder alle films", "delete_all_series_button": "Verwijder alle Series", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Alle series zijn niet verwijderd", "deleted_media_successfully": "Andere media succesvol verwijderd!", "failed_to_delete_media": "Verwijderen van andere media mislukt", - "download_deleted": "Download verwijderd", "download_cancelled": "Download geannuleerd", "could_not_delete_download": "Kon download niet verwijderen", - "download_paused": "Download gepauzeerd", - "could_not_pause_download": "Kan niet pauzeren download", - "download_resumed": "Download hervat", - "could_not_resume_download": "Kon de download niet hervatten", "download_completed": "Download afgerond", "download_failed": "Download Mislukt", "download_failed_for_item": "Download gefaald voor {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} wordt al gedownload", "all_files_deleted": "Alle Bestanden Succesvol Gedownload", "files_deleted_by_type": "{{count}} {{type}} verwijderd", - "all_files_folders_and_jobs_deleted_successfully": "Alle bestanden, mappen en taken succesvol verwijderd", - "failed_to_clean_cache_directory": "Opschonen cachemap mislukt", "could_not_get_download_url_for_item": "Kan download-URL voor {{itemName}} niet ophalen", - "go_to_downloads": "Ga naar downloads", "file_deleted": "{{item}} verwijderd" } } @@ -583,16 +495,17 @@ "none": "Geen", "track": "Spoor", "cancel": "Annuleren", - "stop": "Stop", "delete": "Verwijderen", "ok": "Okรฉ", "remove": "Verwijderen", - "next": "Volgende", "back": "Terug", "continue": "Doorgaan", "verifying": "Verifiรซren...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Zoek...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Kon geen stream maken voor Chromecast", "message_from_server": "Bericht van de server", "next_episode": "Volgende Aflevering", - "refresh_tracks": "Tracks verversen", - "audio_tracks": "Audio Tracks:", - "playback_state": "Afspeelstatus:", - "index": "Index:", "continue_watching": "Verder kijken", "go_back": "Terug", "downloaded_file_title": "Je hebt dit bestand gedownload", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Toon meer", "show_less": "Toon minder", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Volgende ", @@ -888,13 +798,9 @@ "playlists": "Afspeellijsten", "tracks": "Nummers" }, - "filters": { - "all": "Alle" - }, "recently_added": "Recent toegevoegd", "recently_played": "Onlangs afgespeeld", "frequently_played": "Vaak afgespeeld", - "explore": "Ontdek", "top_tracks": "Top Tracks", "play": "Afspelen", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/no.json b/translations/no.json index 97307753..38fda84f 100644 --- a/translations/no.json +++ b/translations/no.json @@ -123,7 +123,7 @@ "title": "Switch User", "account": "Account", "switch_user": "Switch User on This Server", - "current": "current" + "current": "nรฅvรฆrende" }, "categories": { "title": "Categories" @@ -261,43 +261,6 @@ "None": "Ingen", "OnlyForced": "Enkelt" }, - "text_color": "Tekst farge", - "background_color": "Bakgrunnsfarge", - "outline_color": "Omrissets farge", - "outline_thickness": "Omriss Tykkelse", - "background_opacity": "Bakgrunns gjennomsiktighet", - "outline_opacity": "Omrissets gjennomsiktighet", - "bold_text": "Bold Text", - "colors": { - "Black": "Svart", - "Gray": "Grรฅ", - "Silver": "Sรธlv", - "White": "Hvit", - "Maroon": "Rรธdbrun", - "Red": "Rรธd", - "Fuchsia": "Fuchsia", - "Yellow": "Gul", - "Olive": "Olivengrรธnn", - "Green": "Grรธnn", - "Teal": "Blรฅgrรธnn", - "Lime": "Limegrรธnn", - "Purple": "Lilla", - "Navy": "Marineblรฅ", - "Blue": "Blรฅ", - "Aqua": "Vann" - }, - "thickness": { - "None": "Ingen", - "Thin": "Tynn", - "Normal": "Vanlig", - "Thick": "Tykk" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Annet", "video_orientation": "Video Retning", @@ -351,11 +295,6 @@ "UNKNOWN": "Ukjent" }, "safe_area_in_controls": "Sikker sone i kontroller", - "video_player": "Video Spiller", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (eksperimentell + PiP)" - }, "show_custom_menu_links": "Vis tilpassede menylenker", "show_large_home_carousel": "Show Large Home Carousel (beta)", "hide_libraries": "Skjul biblioteker", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Maks automatisk avspilling Episode Telling", "disabled": "Deaktivert" }, - "downloads": { - "downloads_title": "Nedlastinger" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Utvidelser", "jellyseerr": { - "jellyseerr_warning": "Denne integreringen er i tidlige faser. Forvent ting รฅ forandre.", "server_url": "URL til server", "server_url_hint": "Eksempel: http(s)://your-host.url\n(legg til port hvis nรธdvendig)", "server_url_placeholder": "Seerr URL", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Les mer om Marlin.", "save_button": "Lagre", "toasts": { - "saved": "Lagret", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "Lagret" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Slett alle nedlastede filer", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "Systemadministrasjon" }, "toasts": { - "error_deleting_files": "Feil ved sletting av filer", - "background_downloads_enabled": "Nedlastinger av bakgrunn aktivert", - "background_downloads_disabled": "Bakgrunnsnedlastinger deaktivert" + "error_deleting_files": "Feil ved sletting av filer" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Nedlastinger", "series": "TV-Serier", "movies": "Filmer", - "queue": "Kรธ", "other_media": "Andre medier", - "queue_hint": "Kรธ og nedlastinger vil gรฅ tapt nรฅr appen startes pรฅ nytt", - "no_items_in_queue": "Ingen elementer i kรธen", "no_downloaded_items": "Ingen nedlastede elementer", "delete_all_movies_button": "Slett alle filmer", "delete_all_series_button": "Slett alle TV-Serier", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Kunne ikke slette alle TV-Serier", "deleted_media_successfully": "Slettet andre media vellykket!", "failed_to_delete_media": "Kunne ikke slette andre medier", - "download_deleted": "Nedlasting slettet", "download_cancelled": "Download Cancelled", "could_not_delete_download": "Kunne ikke slette nedlasting", - "download_paused": "Last ned Pauset", - "could_not_pause_download": "Kunne ikke pause nedlasting", - "download_resumed": "Nedlastingen er gjenopptatt", - "could_not_resume_download": "Kunne ikke fortsette nedlasting", "download_completed": "Nedlasting fullfรธrt", "download_failed": "Download Failed", "download_failed_for_item": "Nedlasting feilet for {{item}} โ€“ {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "All Downloads Deleted Successfully", "files_deleted_by_type": "{{count}} {{type}} deleted", - "all_files_folders_and_jobs_deleted_successfully": "Alle filer, mapper og jobber slettet", - "failed_to_clean_cache_directory": "Klarte ikke รฅ tรธmme mellomlagermappen", "could_not_get_download_url_for_item": "Kunne ikke hente nedlastings-URL for {{itemName}}", - "go_to_downloads": "Gรฅ til nedlastinger", "file_deleted": "{{item}} deleted" } } @@ -583,16 +495,17 @@ "none": "None", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Sรธk...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Kan ikke opprette en strรธm for Chromecast", "message_from_server": "Melding fra tjener: {{message}}", "next_episode": "Neste Episode", - "refresh_tracks": "Oppdater sporing", - "audio_tracks": "Lyd Tracks:", - "playback_state": "Avspillingsstatus:", - "index": "Indeks:", "continue_watching": "Fortsett รฅ se", "go_back": "Gรฅ tilbake", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Vis mer", "show_less": "Vis mindre", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Neste", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/pl.json b/translations/pl.json index 0137fb69..1370e947 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -261,43 +261,6 @@ "None": "Brak", "OnlyForced": "Tylko wymuszone" }, - "text_color": "Kolor tekstu", - "background_color": "Kolor tล‚a", - "outline_color": "Kolor konturu", - "outline_thickness": "Gruboล›ฤ‡ konturu", - "background_opacity": "Przezroczystoล›ฤ‡ tล‚a", - "outline_opacity": "Przezroczystoล›ฤ‡ konturu", - "bold_text": "Tekst pogrubiony", - "colors": { - "Black": "Czarny", - "Gray": "Szary", - "Silver": "Srebro", - "White": "Biaล‚y", - "Maroon": "Bordowy", - "Red": "Czerwony", - "Fuchsia": "Fuksja", - "Yellow": "ลปรณล‚ty", - "Olive": "Oliwki", - "Green": "Zielony", - "Teal": "Turkusowy", - "Lime": "Limonkowy", - "Purple": "Fioletowy", - "Navy": "Granatowy", - "Blue": "Niebieski", - "Aqua": "Aqua" - }, - "thickness": { - "None": "Brak", - "Thin": "Cienka", - "Normal": "Normalny", - "Thick": "Gruba" - }, - "subtitle_color": "Kolor napisรณw", - "subtitle_background_color": "Kolor tล‚a", - "subtitle_font": "Czcionka napisรณw", - "ksplayer_title": "Ustawienia KSPlayer", - "hardware_decode": "Dekodowanie sprzฤ™towe", - "hardware_decode_description": "Uลผywaj akceleracji sprzฤ™towej dla dekodowania wideo. Wyล‚ฤ…cz, jeล›li doล›wiadczasz problemรณw z odtwarzaniem.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "Ustawienia napisรณw VLC", - "hint": "Personalizuj wyglฤ…d napisรณw dla odtwarzacza VLC. Zmiany zajdฤ… przy nastฤ™pnym odtwarzaniu.", - "text_color": "Kolor tekstu", - "background_color": "Kolor tล‚a", - "background_opacity": "Przezroczystoล›ฤ‡ tล‚a", - "outline_color": "Kolor obrysu", - "outline_opacity": "Przezroczystoล›ฤ‡ obrysu", - "outline_thickness": "Gruboล›ฤ‡ obrysu", - "bold": "Pogrubiony tekst", - "margin": "Dolny margines" - }, - "video_player": { - "title": "Odtwarzacz wideo", - "video_player": "Odtwarzacz wideo", - "video_player_description": "Wybierz ktรณrego odtwarzacza wideo uลผywaฤ‡ w iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Inne", "video_orientation": "Orientacja wideo", @@ -351,11 +295,6 @@ "UNKNOWN": "Nieznana" }, "safe_area_in_controls": "Bezpieczny obszar w kontrolkach", - "video_player": "Odtwarzacz wideo", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Eksperymentalny + PiP)" - }, "show_custom_menu_links": "Pokaลผ niestandardowe odnoล›niki w menu", "show_large_home_carousel": "Wyล›wietl Duลผฤ… Karuzelฤ™ na ekranie gล‚รณwnym (beta)", "hide_libraries": "Ukryj biblioteki", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Maksymalna liczba odcinkรณw automatycznego odtwarzania", "disabled": "Wyล‚ฤ…czone" }, - "downloads": { - "downloads_title": "Pobieranie" - }, "music": { "title": "Muzyka", "playback_title": "Odtwarzanie", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Wtyczki", "jellyseerr": { - "jellyseerr_warning": "Ta integracja jest na wczesnym etapie. Naleลผy oczekiwaฤ‡ zmian.", "server_url": "URL serwera", "server_url_hint": "Przykล‚ad: http(s)://twoja-nazwa.url\n(dodaj port, jeล›li jest wymagany)", "server_url_placeholder": "Adres URL Seerr", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Dowiedz siฤ™ wiฤ™cej o Marlin.", "save_button": "Zapisz", "toasts": { - "saved": "Zapisano", - "refreshed": "Ustawienia odล›wieลผone z serwera" - }, - "refresh_from_server": "Odล›wieลผ ustawienia z serwera" + "saved": "Zapisano" + } }, "streamystats": { - "enable_streamystats": "Wล‚ฤ…cz Streamystats", "disable_streamystats": "Wyล‚ฤ…cz Streamystats", "enable_search": "Uลผywaj do wyszukiwania", "url": "Adres URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Wprowadลบ adres URL dla twojego serwera Streamystats. URL powinien zawieraฤ‡ http lub https i opcjonalnie port.", "read_more_about_streamystats": "Dowiedz siฤ™ wiฤ™cej o Streamystats.", - "save_button": "Zapisz", "save": "Zapisz", "features_title": "Funkcje", - "home_sections_title": "Sekcja gล‚รณwna", "enable_movie_recommendations": "Rekomendacje filmรณw", "enable_series_recommendations": "Rekomendacjฤ™ seriali", "enable_promoted_watchlists": "Promowane listy oglฤ…dania", @@ -445,8 +375,7 @@ "refresh_from_server": "Odล›wieลผ ustawienia z serwera" }, "kefinTweaks": { - "watchlist_enabler": "Aktywuj naszฤ… integracjฤ™ Listy Oglฤ…dania", - "watchlist_button": "Przelฤ…cz integracjฤ™ Listy Oglฤ…dania" + "watchlist_enabler": "Aktywuj naszฤ… integracjฤ™ Listy Oglฤ…dania" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Usuล„ wszystkie pobrane pliki", "music_cache_title": "Bufor muzyki", "music_cache_description": "Automatycznie buforuj piosenki w trakcie sล‚uchania dla pล‚ynniejszego odtwarzania i wsparcia offline", - "enable_music_cache": "Wล‚ฤ…cz bufor muzyki", "clear_music_cache": "Wyczyล›ฤ‡ bufor muzyki", "music_cache_size": "Zbuforowano {{size}}", "music_cache_cleared": "Wyczyszczono bufor muzyki", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "System" }, "toasts": { - "error_deleting_files": "Bล‚ฤ…d podczas usuwania plikรณw", - "background_downloads_enabled": "Pobieranie w tle wล‚ฤ…czone", - "background_downloads_disabled": "Pobieranie w tle wyล‚ฤ…czone" + "error_deleting_files": "Bล‚ฤ…d podczas usuwania plikรณw" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Pobrane", "series": "Seriale", "movies": "Filmy", - "queue": "Kolejka", "other_media": "Inne media", - "queue_hint": "Kolejka i pobierania zostanฤ… utracone po ponownym uruchomieniu aplikacji", - "no_items_in_queue": "Brak elementรณw w kolejce", "no_downloaded_items": "Brak pobranych elementรณw", "delete_all_movies_button": "Usuล„ wszystkie filmy", "delete_all_series_button": "Usuล„ wszystkie seriale", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Nie udaล‚o siฤ™ usunฤ…ฤ‡ wszystkich seriali", "deleted_media_successfully": "Pomyล›lnie usuniฤ™to inne media!", "failed_to_delete_media": "Nie udaล‚o siฤ™ usunฤ…ฤ‡ innych mediรณw", - "download_deleted": "Pobieranie usuniฤ™te", "download_cancelled": "Pobieranie anulowane", "could_not_delete_download": "Nie moลผna usunฤ…ฤ‡ pobrania", - "download_paused": "Pobieranie wstrzymane", - "could_not_pause_download": "Nie moลผna wstrzymaฤ‡ pobierania", - "download_resumed": "Pobieranie wznowione", - "could_not_resume_download": "Nie moลผna wznowiฤ‡ pobierania", "download_completed": "Pobieranie zakoล„czone", "download_failed": "Pobieranie nie powiodล‚o siฤ™", "download_failed_for_item": "Pobieranie nie powiodล‚o siฤ™ dla {{item}} โ€“ {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} jest w trakcie pobierania", "all_files_deleted": "Pomyล›lnie usuniฤ™to wszystkie pobrane", "files_deleted_by_type": "{{count}} {{type}} usuniฤ™to", - "all_files_folders_and_jobs_deleted_successfully": "Wszystkie pliki, foldery i zadania zostaล‚y pomyล›lnie usuniฤ™te", - "failed_to_clean_cache_directory": "Nie udaล‚o siฤ™ wyczyล›ciฤ‡ katalogu pamiฤ™ci podrฤ™cznej", "could_not_get_download_url_for_item": "Nie moลผna pobraฤ‡ adresu URL dla {{itemName}}", - "go_to_downloads": "Przejdลบ do pobranych", "file_deleted": "Usuniฤ™to {{item}}" } } @@ -583,16 +495,17 @@ "none": "Nic", "track": "Utwรณr", "cancel": "Anuluj", - "stop": "Stop", "delete": "Usuล„", "ok": "OK", "remove": "Usuล„", - "next": "Nastฤ™pne", "back": "Poprzednie", "continue": "Kontynuuj", "verifying": "Weryfikacja...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Szukaj...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Nie udaล‚o siฤ™ utworzyฤ‡ strumienia dla Chromecasta", "message_from_server": "Wiadomoล›ฤ‡ z serwera: {{message}}", "next_episode": "Nastฤ™pny odcinek", - "refresh_tracks": "Odล›wieลผ ล›cieลผki", - "audio_tracks": "ลšcieลผki audio:", - "playback_state": "Stan odtwarzania:", - "index": "Indeks:", "continue_watching": "Kontynuuj oglฤ…danie", "go_back": "Wstecz", "downloaded_file_title": "Ten plik masz juลผ pobrany", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Pokaลผ wiฤ™cej", "show_less": "Pokaลผ mniej", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Nastฤ™pny", @@ -888,13 +798,9 @@ "playlists": "Playlisty", "tracks": "utwory" }, - "filters": { - "all": "Wszystkie" - }, "recently_added": "Ostatnio dodano", "recently_played": "Ostatnio odtwarzano", "frequently_played": "Czฤ™sto odtwarzane", - "explore": "Odkrywaj", "top_tracks": "Popularne utwory", "play": "Odtwรณrz", "shuffle": "Losuj", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/pt.json b/translations/pt.json index a34fa1ff..f76876f4 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -261,43 +261,6 @@ "None": "Nenhuma", "OnlyForced": "Somente Forรงado" }, - "text_color": "Cor do texto", - "background_color": "Cor de fundo", - "outline_color": "Cor do contorno", - "outline_thickness": "Espessura do Contorno", - "background_opacity": "Opacidade de fundo", - "outline_opacity": "Opacidade do Contorno", - "bold_text": "Texto em negrito", - "colors": { - "Black": "Preto", - "Gray": "Cinzento", - "Silver": "Prata", - "White": "Branco", - "Maroon": "Castanho", - "Red": "Vermelho", - "Fuchsia": "Fuchsia", - "Yellow": "Amarelo", - "Olive": "Verde-oliva", - "Green": "Verde", - "Teal": "Verde-azulado", - "Lime": "Verde-limรฃo", - "Purple": "Roxo", - "Navy": "Azul-marinho", - "Blue": "Azul", - "Aqua": "รgua" - }, - "thickness": { - "None": "Nenhuma", - "Thin": "Magro", - "Normal": "Normal", - "Thick": "Grosso" - }, - "subtitle_color": "Cor da legenda", - "subtitle_background_color": "Cor de fundo", - "subtitle_font": "Fonte da legenda", - "ksplayer_title": "Configuraรงรตes do KSPlayer", - "hardware_decode": "Decodificaรงรฃo por hardware", - "hardware_decode_description": "Use aceleraรงรฃo de hardware para decodificaรงรฃo de vรญdeo. Desative se vocรช tiver problemas de reproduรงรฃo.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Reprodutor de Vรญdeo", - "video_player": "Reprodutor de Vรญdeo", - "video_player_description": "Escolha qual player de vรญdeo usar no iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Outros", "video_orientation": "Orientaรงรฃo do Vรญdeo", @@ -351,11 +295,6 @@ "UNKNOWN": "Desconhecido" }, "safe_area_in_controls": "รrea segura nos controles", - "video_player": "Reprodutor de Vรญdeo", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Experimental + PiP)" - }, "show_custom_menu_links": "Mostrar Links de Menu Personalizado", "show_large_home_carousel": "Mostrar Carrossel Grande (beta)", "hide_libraries": "Ocultar bibliotecas", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Contagem mรกxima de episรณdios de reproduรงรฃo automรกtica", "disabled": "Desabilitado" }, - "downloads": { - "downloads_title": "Downloads" - }, "music": { "title": "Mรบsica", "playback_title": "Reproduzir", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Complementos", "jellyseerr": { - "jellyseerr_warning": "Essa integraรงรฃo estรก em suas fases iniciais. Espere que as coisas mudem.", "server_url": "URL do servidor", "server_url_hint": "Exemplo: http(s)://seu-host.url\n(adicionar porta se necessรกrio)", "server_url_placeholder": "URL do Seerr", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Leia mais sobre Marlin.", "save_button": "Salvar", "toasts": { - "saved": "Salvo", - "refreshed": "Configuraรงรตes atualizadas do servidor" - }, - "refresh_from_server": "Atualizar as configuraรงรตes do servidor" + "saved": "Salvo" + } }, "streamystats": { - "enable_streamystats": "Ativar Streamystats", "disable_streamystats": "Desativar streamystats", "enable_search": "Usar para Pesquisa", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Digite a URL para seu servidor de StreamyStats. A URL deve incluir http ou https e, opcionalmente, a porta.", "read_more_about_streamystats": "Leia mais sobre Streamystats.", - "save_button": "Salvar", "save": "Salvar", "features_title": "Funcionalidades", - "home_sections_title": "Seรงรตes da Pรกgina Inicial", "enable_movie_recommendations": "Recomendaรงรตes de filmes", "enable_series_recommendations": "Recomendaรงรตes de Sรฉries", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Atualizar Configuraรงรตes do Servidor" }, "kefinTweaks": { - "watchlist_enabler": "Ative nossa integraรงรฃo de Lista de Interesses", - "watchlist_button": "Ativar/desativar Lista de Interesses" + "watchlist_enabler": "Ative nossa integraรงรฃo de Lista de Interesses" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Excluir todos os arquivos baixados", "music_cache_title": "Cache de Mรบsica", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Habilitar Cache de Mรบsica", "clear_music_cache": "Limpar Cache de Mรบsica", "music_cache_size": "{{size}} em cache", "music_cache_cleared": "Cache de mรบsica limpo", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "Sistema" }, "toasts": { - "error_deleting_files": "Erro ao excluir arquivos", - "background_downloads_enabled": "Downloads em segundo plano ativados", - "background_downloads_disabled": "Downloads em segundo plano desativados" + "error_deleting_files": "Erro ao excluir arquivos" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Downloads", "series": "TV-Sรฉries", "movies": "Filmes", - "queue": "Fila", "other_media": "Outras mรญdias", - "queue_hint": "A fila e os downloads serรฃo perdidos ao reiniciar o aplicativo", - "no_items_in_queue": "Nenhum item na fila", "no_downloaded_items": "Nenhum item baixado", "delete_all_movies_button": "Excluir todos os filmes", "delete_all_series_button": "Excluir todas as sรฉries", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Falha ao excluir todas as sรฉries", "deleted_media_successfully": "Outras mรญdias excluรญdas com sucesso!", "failed_to_delete_media": "Falha ao excluir outras mรญdias", - "download_deleted": "Download Excluรญdo", "download_cancelled": "Download Cancelado", "could_not_delete_download": "Nรฃo foi possรญvel excluir o download", - "download_paused": "Download Pausado", - "could_not_pause_download": "Nรฃo foi possรญvel Pausar o Download", - "download_resumed": "Download Retomado", - "could_not_resume_download": "Nรฃo foi possรญvel retomar o download", "download_completed": "Download concluรญdo", "download_failed": "Download Falhou", "download_failed_for_item": "Download Falhou para {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} jรก estรก sendo baixado", "all_files_deleted": "Todos os Downloads Excluรญdos com Sucesso", "files_deleted_by_type": "{{count}} {{type}} excluรญdo", - "all_files_folders_and_jobs_deleted_successfully": "Todos os arquivos, pastas e trabalhos excluรญdos com sucesso", - "failed_to_clean_cache_directory": "Falha ao limpar o diretรณrio de cache", "could_not_get_download_url_for_item": "Nรฃo foi possรญvel obter o URL de download para {{itemName}}", - "go_to_downloads": "Ir para Downloads", "file_deleted": "{{item}} deletado" } } @@ -583,16 +495,17 @@ "none": "Nenhum", "track": "Faixa", "cancel": "Cancelar", - "stop": "Stop", "delete": "Apagar", "ok": "OK", "remove": "Remover", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Buscar...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Nรฃo foi possรญvel criar um fluxo para o Chromecast", "message_from_server": "Mensagem do Servidor: {{message}}", "next_episode": "Prรณximo Episรณdio", - "refresh_tracks": "Atualizar Faixas", - "audio_tracks": "Faixas de รudio:", - "playback_state": "Estado de Reproduรงรฃo:", - "index": "รndice", "continue_watching": "Continuar assistindo", "go_back": "Voltar atrรกs", "downloaded_file_title": "Vocรช jรก fez o download deste arquivo", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Mostrar mais", "show_less": "Mostrar menos", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Prรณximo", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "faixas" }, - "filters": { - "all": "Tudo" - }, "recently_added": "Adicionado recentemente", "recently_played": "Reproduzido Recentemente", "frequently_played": "Reproduzidos com frequรชncia", - "explore": "Explorar", "top_tracks": "Mรบsicas populares", "play": "Reproduzir", "shuffle": "Alteatรณrio", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/ro.json b/translations/ro.json index 0724f212..7ca56a27 100644 --- a/translations/ro.json +++ b/translations/ro.json @@ -261,43 +261,6 @@ "None": "Niciuna", "OnlyForced": "OnlyForced" }, - "text_color": "Culoare text", - "background_color": "Culoare fundal", - "outline_color": "Culoare contur", - "outline_thickness": "Grosime contur", - "background_opacity": "Opacitatea fundalului", - "outline_opacity": "Opacitatea conturului", - "bold_text": "Bold Text", - "colors": { - "Black": "Negru", - "Gray": "Gri", - "Silver": "Argint", - "White": "Alb", - "Maroon": "Maro", - "Red": "Roศ™u", - "Fuchsia": "Fuchsia", - "Yellow": "Galben", - "Olive": "Oliv", - "Green": "Verde", - "Teal": "Turcoaz", - "Lime": "Verde-Deschis", - "Purple": "Violet", - "Navy": "Marinฤƒ", - "Blue": "Albastru", - "Aqua": "Aqua" - }, - "thickness": { - "None": "Nimic", - "Thin": "Subศ›ire", - "Normal": "Normalฤƒ", - "Thick": "Grozav" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Altele", "video_orientation": "Orientarea video", @@ -351,11 +295,6 @@ "UNKNOWN": "Necunoscut" }, "safe_area_in_controls": "Zona sigurฤƒ pentru controale", - "video_player": "Player video", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Experimental + PiP)" - }, "show_custom_menu_links": "Afiศ™eazฤƒ link-uri personalizate รฎn meniu", "show_large_home_carousel": "Aratฤƒ Caruselul Media Mare (beta)", "hide_libraries": "Ascunde bibliotecile", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Maxim episoade redare automatฤƒ", "disabled": "Dezactivat" }, - "downloads": { - "downloads_title": "Descฤƒrcฤƒri" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Plugin-uri", "jellyseerr": { - "jellyseerr_warning": "Aceastฤƒ integrare este รฎn stadii incipiente. Aศ™teptaศ›i-vฤƒ ca lucrurile sฤƒ se schimbe.", "server_url": "URL Server", "server_url_hint": "Exemplu: http(s)://your-host.url\n(adฤƒugaศ›i portul dacฤƒ este necesar)", "server_url_placeholder": "Jellyseerr URL...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Citeศ™te mai multe despre Marlin.", "save_button": "Salveazฤƒ", "toasts": { - "saved": "Salvat", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "Salvat" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "ศ˜tergeศ›i toate fiศ™ierele descฤƒrcate", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "Sistem" }, "toasts": { - "error_deleting_files": "Eroare la ศ™tergerea fiศ™ierelor", - "background_downloads_enabled": "Descฤƒrcฤƒri รฎn fundal activate", - "background_downloads_disabled": "Descฤƒrcฤƒri รฎn fundal dezactivate" + "error_deleting_files": "Eroare la ศ™tergerea fiศ™ierelor" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Descฤƒrcฤƒri", "series": "Seriale", "movies": "Filme", - "queue": "Coadฤƒ", "other_media": "Alte suporturi", - "queue_hint": "Descฤƒrcฤƒrile se vor pierde la repornirea aplicaศ›iei", - "no_items_in_queue": "Niciun articol รฎn coadฤƒ", "no_downloaded_items": "Niciun element descฤƒrcat", "delete_all_movies_button": "ศ˜terge toate filmele", "delete_all_series_button": "ศ˜terge toate serialele", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Nu s-au putut ศ™terge toate serialele", "deleted_media_successfully": "Alte fiศ™iere ศ™terse cu succes!", "failed_to_delete_media": "ศ˜tergerea altor fiศ™iere media a eศ™uat", - "download_deleted": "Descฤƒrcare ลŸtearsฤƒ", "download_cancelled": "Descฤƒrcare anulatฤƒ", "could_not_delete_download": "Nu s-a putut ศ™terge descฤƒrcarea", - "download_paused": "Descฤƒrcare รฎntreruptฤƒ", - "could_not_pause_download": "Nu s-a putut รฎntrerupe descฤƒrcarea", - "download_resumed": "Descฤƒrcare din nou", - "could_not_resume_download": "Nu s-a putut relua descฤƒrcarea", "download_completed": "Descฤƒrcare completฤƒ", "download_failed": "Descฤƒrcare eศ™uatฤƒ", "download_failed_for_item": "Descฤƒrcarea a eศ™uat {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} se descarcฤƒ deja", "all_files_deleted": "Toate descฤƒrcฤƒrile au fost ศ™terse cu succes", "files_deleted_by_type": "{{count}} {{type}} au fost ศ™terse", - "all_files_folders_and_jobs_deleted_successfully": "Toate fiศ™ierele, folderele ศ™i lucrฤƒrile au fost ศ™terse cu succes", - "failed_to_clean_cache_directory": "Curฤƒศ›area directorului cache a eศ™uat", "could_not_get_download_url_for_item": "Nu s-a putut obศ›ine URL-ul de descฤƒrcare pentru {{itemName}}", - "go_to_downloads": "Accesaศ›i descฤƒrcฤƒrile", "file_deleted": "{{item}} ศ™ters" } } @@ -583,16 +495,17 @@ "none": "Nimic", "track": "Limbฤƒ audio", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Cautฤƒ...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Nu s-a putut crea un flux pentru Chromecast", "message_from_server": "Mesaj de la server: {{message}}", "next_episode": "Episodul urmฤƒtor", - "refresh_tracks": "Reรฎmprospฤƒtare piese", - "audio_tracks": "Audio:", - "playback_state": "Stare de redare:", - "index": "Indice:", "continue_watching": "Continuฤƒ sฤƒ vizionezi", "go_back": "รŽnapoi", "downloaded_file_title": "Aveลฃi acest fiลŸier descฤƒrcat", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Aratฤƒ mai mult", "show_less": "Aratฤƒ mai puศ›in", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Urmฤƒtorul", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/ru.json b/translations/ru.json index 1626f743..3f7e1bec 100644 --- a/translations/ru.json +++ b/translations/ru.json @@ -261,43 +261,6 @@ "None": "ะžั‚ััƒั‚ัั‚ะฒัƒะตั‚", "OnlyForced": "ะขะพะปัŒะบะพ ะฟั€ะธะฝัƒะดะธั‚ะตะปัŒะฝั‹ะต" }, - "text_color": "ะฆะฒะตั‚ ั‚ะตะบัั‚ะฐ", - "background_color": "ะฆะฒะตั‚ ั„ะพะฝะฐ", - "outline_color": "ะฆะฒะตั‚ ะบะพะฝั‚ัƒั€ะฐ", - "outline_thickness": "ะขะพะปั‰ะธะฝะฐ ะบะพะฝั‚ัƒั€ะฐ", - "background_opacity": "ะŸั€ะพะทั€ะฐั‡ะฝะพัั‚ัŒ ั„ะพะฝะฐ", - "outline_opacity": "ะŸั€ะพะทั€ะฐั‡ะฝะพัั‚ัŒ ะบะพะฝั‚ัƒั€ะฐ", - "bold_text": "ะ–ะธั€ะฝั‹ะน", - "colors": { - "Black": "ะงะตั€ะฝั‹ะน", - "Gray": "ะกะตั€ั‹ะน", - "Silver": "ะกะตั€ะตะฑั€ะธัั‚ั‹ะน", - "White": "ะ‘ะตะปั‹ะน", - "Maroon": "ะ‘ะพั€ะดะพะฒั‹ะน", - "Red": "ะšั€ะฐัะฝั‹ะน", - "Fuchsia": "ะŸัƒั€ะฟัƒั€ะฝั‹ะน", - "Yellow": "ะ–ั‘ะปั‚ั‹ะน", - "Olive": "ะžะปะธะฒะบะพะฒั‹ะน", - "Green": "ะ—ะตะปั‘ะฝั‹ะน", - "Teal": "ะ‘ะธั€ัŽะทะพะฒั‹ะน", - "Lime": "ะ›ะฐะนะผะพะฒั‹ะน", - "Purple": "ะคะธะพะปะตั‚ะพะฒั‹ะน", - "Navy": "ะขั‘ะผะฝะพ-ัะธะฝะธะน", - "Blue": "ะกะธะฝะธะน", - "Aqua": "ะ“ะพะปัƒะฑะพะน" - }, - "thickness": { - "None": "ะžั‚ััƒั‚ัั‚ะฒัƒะตั‚", - "Thin": "ะขะพะฝะบะธะน", - "Normal": "ะžะฑั‹ั‡ะฝั‹ะน", - "Thick": "ะขะพะปัั‚ั‹ะน" - }, - "subtitle_color": "ะฆะฒะตั‚ ััƒะฑั‚ะธั‚ั€ะพะฒ", - "subtitle_background_color": "ะฆะฒะตั‚ ั„ะพะฝะฐ", - "subtitle_font": "ะจั€ะธั„ั‚ ััƒะฑั‚ะธั‚ั€ะพะฒ", - "ksplayer_title": "ะะฐัั‚ั€ะพะนะบะธ KSPlayer", - "hardware_decode": "ะะฟะฟะฐั€ะฐั‚ะฝะพะต ะดะตะบะพะดะธั€ะพะฒะฐะฝะธะต", - "hardware_decode_description": "ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะฐะฟะฟะฐั€ะฐั‚ะฝะพะต ัƒัะบะพั€ะตะฝะธะต ะดะปั ะดะตะบะพะดะธั€ะพะฒะฐะฝะธั ะฒะธะดะตะพ. ะ’ั‹ะบะปัŽั‡ะธั‚ะต, ะตัะปะธ ะฝะฐะฑะปัŽะดะฐะตั‚ะต ะฟั€ะพะฑะปะตะผั‹ ั ะฒะพัะฟั€ะพะธะทะฒะตะดะตะฝะธะตะผ.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "ะะฐัั‚ั€ะพะนะบะธ ััƒะฑั‚ะธั‚ั€ะพะฒ ะฒ VLC", - "hint": "ะะฐัั‚ั€ะพะนั‚ะต ะฒะฝะตัˆะฝะธะน ะฒะธะด ััƒะฑั‚ะธั‚ั€ะพะฒ ะฒ VLC ะฟะปะตะตั€ะต. ะ˜ะทะผะตะฝะตะฝะธั ะฟั€ะธะผะตะฝัั‚ัั ะฟั€ะธ ัะปะตะดัƒัŽั‰ะตะผ ะฒะพัะฟั€ะพะธะทะฒะตะดะตะฝะธะธ.", - "text_color": "ะฆะฒะตั‚ ั‚ะตะบัั‚ะฐ", - "background_color": "ะฆะฒะตั‚ ั„ะพะฝะฐ", - "background_opacity": "ะŸั€ะพะทั€ะฐั‡ะฝะพัั‚ัŒ ั„ะพะฝะฐ", - "outline_color": "ะฆะฒะตั‚ ะบะพะฝั‚ัƒั€ะฐ", - "outline_opacity": "ะŸั€ะพะทั€ะฐั‡ะฝะพัั‚ัŒ ะบะพะฝั‚ัƒั€ะฐ", - "outline_thickness": "ะขะพะปั‰ะธะฝะฐ ะบะพะฝั‚ัƒั€ะฐ", - "bold": "ะ–ะธั€ะฝั‹ะน", - "margin": "ะžั‚ัั‚ัƒะฟ ัะฝะธะทัƒ" - }, - "video_player": { - "title": "ะ’ะธะดะตะพ ะฟะปะตะตั€", - "video_player": "ะ’ะธะดะตะพ ะฟะปะตะตั€", - "video_player_description": "ะ’ั‹ะฑะตั€ะธั‚ะต ะฒะธะดะตะพ ะฟะปะตะตั€ ะฒ iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "ะ”ั€ัƒะณะพะต", "video_orientation": "ะžั€ะธะตะฝั‚ะฐั†ะธั ะฒะธะดะตะพ", @@ -351,11 +295,6 @@ "UNKNOWN": "ะะตะธะทะฒะตัั‚ะฝะพะต" }, "safe_area_in_controls": "ะ‘ะตะทะพะฟะฐัะฝะฐั ะทะพะฝะฐ ะฒ ัะปะตะผะตะฝั‚ะฐั… ัƒะฟั€ะฐะฒะปะตะฝะธั", - "video_player": "ะ’ะธะดะตะพ ะฟะปะตะตั€", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (ะญะบัะฟะตั€ะธะผะตะฝั‚ะฐะปัŒะฝั‹ะน + PiP)" - }, "show_custom_menu_links": "ะŸะพะบะฐะทะฐั‚ัŒ ััั‹ะปะบะธ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัŒัะบะพะณะพ ะผะตะฝัŽ", "show_large_home_carousel": "ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ะฑะพะปัŒัˆัƒัŽ ะบะฐั€ัƒัะตะปัŒ (beta)", "hide_libraries": "ะกะบั€ั‹ั‚ัŒ ะฑะธะฑะปะธะพั‚ะตะบะธ", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะฐะฒั‚ะพ ะฒะพัะฟั€ะพะธะทะฒะพะดะธะผั‹ั… ัะฟะธะทะพะดะพะฒ", "disabled": "ะžั‚ะบะปัŽั‡ะตะฝะพ" }, - "downloads": { - "downloads_title": "ะ—ะฐะณั€ัƒะทะบะธ" - }, "music": { "title": "ะœัƒะทั‹ะบะฐ", "playback_title": "ะ’ะพัะฟั€ะพะธะทะฒะตะดะตะฝะธะต", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "ะŸะปะฐะณะธะฝั‹", "jellyseerr": { - "jellyseerr_warning": "ะญั‚ะฐ ะธะฝั‚ะตะณั€ะฐั†ะธั ะฝะฐั…ะพะดะธั‚ัั ะฝะฐ ั€ะฐะฝะฝะตะน ัั‚ะฐะดะธะธ. ะžะถะธะดะฐะนั‚ะต ะธะทะผะตะฝะตะฝะธะน.", "server_url": "URL ัะตั€ะฒะตั€ะฐ", "server_url_hint": "ะŸั€ะธะผะตั€: http(s)://your-host.url\n(ะดะพะฑะฐะฒัŒั‚ะต ะฟะพั€ั‚ ะตัะปะธ ะฝะตะพะฑั…ะพะดะธะผะพ)", "server_url_placeholder": "Seerr URL...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "ะฃะทะฝะฐั‚ัŒ ะฑะพะปัŒัˆะต ะพ Marlin.", "save_button": "ะกะพั…ั€ะฐะฝะธั‚ัŒ", "toasts": { - "saved": "ะกะพั…ั€ะฐะฝะตะฝะพ", - "refreshed": "ะะฐัั‚ั€ะพะนะบะธ ะพะฑะฝะพะฒะปะตะฝั‹ ั ัะตั€ะฒะตั€ะฐ" - }, - "refresh_from_server": "ะžะฑะฝะพะฒะธั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ ั ัะตั€ะฒะตั€ะฐ" + "saved": "ะกะพั…ั€ะฐะฝะตะฝะพ" + } }, "streamystats": { - "enable_streamystats": "ะ’ะบะปัŽั‡ะธั‚ัŒ Streamystats", "disable_streamystats": "ะ’ั‹ะบะปัŽั‡ะธั‚ัŒ Streamystats", "enable_search": "ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะฒ ะฟะพะธัะบะต", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "ะ’ะฒะตะดะธั‚ะต URL ะฒะฐัˆะตะณะพ ัะตั€ะฒะตั€ะฐ Streamystats. URL ะดะพะปะถะตะฝ ะฒะบะปัŽั‡ะฐั‚ัŒ http/https ะธ ะฟะพั€ั‚ ะฟั€ะธ ะฝะตะพะฑั…ะพะดะธะผะพัั‚ะธ.", "read_more_about_streamystats": "ะฃะทะฝะฐั‚ัŒ ะฑะพะปัŒัˆะต ะฟั€ะพ Streamystats.", - "save_button": "ะกะพั…ั€ะฐะฝะธั‚ัŒ", "save": "ะกะพั…ั€ะฐะฝะธั‚ัŒ", "features_title": "ะคัƒะฝะบั†ะธะธ", - "home_sections_title": "ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ะฝะฐ ะณะปะฐะฒะฝะพะน", "enable_movie_recommendations": "ะ ะตะบะพะผะตะฝะดะฐั†ะธะธ ั„ะธะปัŒะผะพะฒ", "enable_series_recommendations": "ะ ะตะบะพะผะตะฝะดะฐั†ะธะธ ัะตั€ะธะฐะปะพะฒ", "enable_promoted_watchlists": "ะŸั€ะพะดะฒะธะณะฐะตะผั‹ะต ัะฟะธัะบะธ ะฟั€ะพัะผะพั‚ั€ะฐ", @@ -445,8 +375,7 @@ "refresh_from_server": "ะžะฑะฝะพะฒะธั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ ั ัะตั€ะฒะตั€ะฐ" }, "kefinTweaks": { - "watchlist_enabler": "ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ัะพ ัะฟะธัะบะฐะผะธ ะฟั€ะพัะผะพั‚ั€ะฐ", - "watchlist_button": "ะ˜ะทะผะตะฝะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ัะพ ัะฟะธัะบะฐะผะธ ะฟั€ะพัะผะพั‚ั€ะฐ" + "watchlist_enabler": "ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ัะพ ัะฟะธัะบะฐะผะธ ะฟั€ะพัะผะพั‚ั€ะฐ" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "ะฃะดะฐะปะธั‚ัŒ ะฒัะต ะทะฐะณั€ัƒะถะตะฝะฝั‹ะต ั„ะฐะนะปั‹", "music_cache_title": "ะšะตัˆ ะผัƒะทั‹ะบะธ", "music_cache_description": "ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ะบะตัˆะธั€ะพะฒะฐั‚ัŒ ะฟะตัะฝะธ ะฟะพ ะผะตั€ะต ะฟั€ะพัะปัƒัˆะธะฒะฐะฝะธั ะดะปั ะฟะปะฐะฒะฝะพะณะพ ะฒะพัะฟั€ะพะธะทะฒะตะดะตะฝะธั ะธ ะฟะพะดะดะตั€ะถะบะธ ะพั‚ััƒั‚ัั‚ะฒะธั ะธะฝั‚ะตั€ะฝะตั‚ะฐ", - "enable_music_cache": "ะšะตัˆะธั€ะพะฒะฐั‚ัŒ ะผัƒะทั‹ะบัƒ", "clear_music_cache": "ะžั‡ะธัั‚ะธั‚ัŒ ะบะตัˆ ะผัƒะทั‹ะบะธ", "music_cache_size": "ะšะตัˆะธั€ะพะฒะฐะฝะพ: {{size}}", "music_cache_cleared": "ะšะตัˆ ะผัƒะทั‹ะบะธ ะพั‡ะธั‰ะตะฝ", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "ะกะธัั‚ะตะผะฝั‹ะน" }, "toasts": { - "error_deleting_files": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ัƒะดะฐะปะตะฝะธะธ ั„ะฐะนะปะพะฒ", - "background_downloads_enabled": "ะคะพะฝะพะฒะฐั ะทะฐะณั€ัƒะทะบะฐ ะฒะบะปัŽั‡ะตะฝะฐ", - "background_downloads_disabled": "ะคะพะฝะพะฒะฐั ะทะฐะณั€ัƒะทะบะฐ ะพั‚ะบะปัŽั‡ะตะฝะฐ" + "error_deleting_files": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ัƒะดะฐะปะตะฝะธะธ ั„ะฐะนะปะพะฒ" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "ะ—ะฐะณั€ัƒะทะบะธ", "series": "ะกะตั€ะธะฐะปั‹", "movies": "ะคะธะปัŒะผั‹", - "queue": "ะžั‡ะตั€ะตะดัŒ", "other_media": "ะŸั€ะพั‡ะธะต ั„ะฐะนะปั‹", - "queue_hint": "ะžั‡ะตั€ะตะดัŒ ะพั‡ะธัั‚ะธั‚ัั ะฟะพัะปะต ะฟะตั€ะตะทะฐะฟัƒัะบะฐ", - "no_items_in_queue": "ะะตั‚ ัะปะตะผะตะฝั‚ะพะฒ ะฒ ะพั‡ะตั€ะตะดะธ", "no_downloaded_items": "ะะตั‚ ะทะฐะณั€ัƒะถะตะฝะฝั‹ั… ั„ะฐะนะปะพะฒ", "delete_all_movies_button": "ะฃะดะฐะปะธั‚ัŒ ะฒัะต ั„ะธะปัŒะผั‹", "delete_all_series_button": "ะฃะดะฐะปะธั‚ัŒ ะฒัะต ัะตั€ะธะฐะปั‹", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "ะ’ะพะทะฝะธะบะปะฐ ะพัˆะธะฑะบะฐ ะฟั€ะธ ัƒะดะฐะปะตะฝะธะธ ะฒัะตั… ัะตั€ะธะฐะปะพะฒ", "deleted_media_successfully": "ะžัั‚ะฐะปัŒะฝั‹ะต ะผะตะดะธะฐั„ะฐะนะปั‹ ัƒัะฟะตัˆะฝะพ ัƒะดะฐะปะตะฝั‹!", "failed_to_delete_media": "ะะต ัƒะดะฐะปะพััŒ ัƒะดะฐะปะธั‚ัŒ ะพัั‚ะฐะปัŒะฝั‹ะต ะผะตะดะธะฐั„ะฐะนะปั‹", - "download_deleted": "ะ—ะฐะณั€ัƒะถะตะฝะฝั‹ะน ะบะพะฝั‚ะตะฝั‚ ัƒะดะฐะปั‘ะฝ", "download_cancelled": "ะ—ะฐะณั€ัƒะทะบะฐ ะพั‚ะผะตะฝะตะฝะฐ", "could_not_delete_download": "ะะต ัƒะดะฐะปะพััŒ ัƒะดะฐะปะธั‚ัŒ ะทะฐะณั€ัƒะทะบัƒ", - "download_paused": "ะะฐ ะฟะฐัƒะทะต", - "could_not_pause_download": "ะะต ัƒะดะฐะปะพััŒ ะฟั€ะธะพัั‚ะฐะฝะพะฒะธั‚ัŒ ะทะฐะณั€ัƒะทะบัƒ", - "download_resumed": "ะŸั€ะพะดะพะปะถะตะฝะพ", - "could_not_resume_download": "ะะต ัƒะดะฐะปะพััŒ ะฒะพะทะพะฑะฝะพะฒะธั‚ัŒ ะทะฐะณั€ัƒะทะบัƒ", "download_completed": "ะ—ะฐะฒะตั€ัˆะตะฝะพ", "download_failed": "ะะต ัƒะดะฐะปะพััŒ ะทะฐะณั€ัƒะทะธั‚ัŒ", "download_failed_for_item": "ะ—ะฐะณั€ัƒะทะบะฐ {{item}} ะฟั€ะพะฒะฐะปะธะปะฐััŒ ั ะพัˆะธะฑะบะพะน: {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} ัƒะถะต ะทะฐะณั€ัƒะถะฐะตั‚ัั", "all_files_deleted": "ะ’ัะต ะทะฐะณั€ัƒะทะบะธ ัƒะดะฐะปะตะฝั‹", "files_deleted_by_type": "ะฃะดะฐะปะตะฝะพ: {{count}} {{type}}", - "all_files_folders_and_jobs_deleted_successfully": "ะ’ัะต ั„ะฐะนะปั‹, ะฟะฐะฟะบะธ, ะธ ะทะฐะดะฐั‡ะธ ะฑั‹ะปะธ ัƒัะฟะตัˆะฝะพ ัƒะดะฐะปะตะฝั‹", - "failed_to_clean_cache_directory": "ะะต ัƒะดะฐะปะพััŒ ะพั‡ะธัั‚ะธั‚ัŒ ะดะธั€ะตะบั‚ะพั€ะธัŽ ะบััˆะฐ", "could_not_get_download_url_for_item": "ะะต ัƒะดะฐะปะพััŒ ะฟะพะปัƒั‡ะธั‚ัŒ URL ะดะปั ะทะฐะณั€ัƒะทะบะธ {{itemName}}", - "go_to_downloads": "ะ’ ะทะฐะณั€ัƒะทะบะธ", "file_deleted": "ะฃะดะฐะปะตะฝะพ: {{item}}" } } @@ -583,16 +495,17 @@ "none": "ะžั‚ััƒั‚ัั‚ะฒัƒะตั‚", "track": "ะขั€ะตะบ", "cancel": "ะžั‚ะผะตะฝะฐ", - "stop": "Stop", "delete": "ะฃะดะฐะปะธั‚ัŒ", "ok": "ะžะš", "remove": "ะฃะดะฐะปะธั‚ัŒ", - "next": "ะ’ะฟะตั€ะตะด", "back": "ะะฐะทะฐะด", "continue": "ะŸั€ะพะดะพะปะถะธั‚ัŒ", "verifying": "ะŸั€ะพะฒะตั€ะบะฐ...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "ะŸะพะธัะบ...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "ะะต ัƒะดะฐะปะพััŒ ัะพะทะดะฐั‚ัŒ ะฟะพั‚ะพะบ ะดะปั Chromecast", "message_from_server": "ะกะพะพะฑั‰ะตะฝะธะต ะพั‚ ัะตั€ะฒะตั€ะฐ: {{message}}", "next_episode": "ะกะปะตะดัƒัŽั‰ะฐั ัะตั€ะธั", - "refresh_tracks": "ะžะฑะฝะพะฒะธั‚ัŒ ะดะพั€ะพะถะบะธ", - "audio_tracks": "ะัƒะดะธะพ ะดะพั€ะพะถะบะธ:", - "playback_state": "ะกะพัั‚ะพัะฝะธะต ะฒะพัะฟั€ะพะธะทะฒะตะดะตะฝะธั:", - "index": "ะ˜ะฝะดะตะบั:", "continue_watching": "ะŸั€ะพะดะพะปะถะธั‚ัŒ ะฟั€ะพัะผะพั‚ั€", "go_back": "ะะฐะทะฐะด", "downloaded_file_title": "ะญั‚ะพั‚ ั„ะฐะนะป ัƒะถะต ัะบะฐั‡ะฐะฝ", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "ะŸะพะบะฐะทะฐั‚ัŒ ะฑะพะปัŒัˆะต", "show_less": "ะŸะพะบะฐะทะฐั‚ัŒ ะผะตะฝัŒัˆะต", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "ะ”ะฐะปะตะต", @@ -888,13 +798,9 @@ "playlists": "ะŸะปะตะนะปะธัั‚ั‹", "tracks": "ั‚ั€ะตะบะธ" }, - "filters": { - "all": "ะ’ัะต" - }, "recently_added": "ะะตะดะฐะฒะฝะพ ะดะพะฑะฐะฒะปะตะฝะพ", "recently_played": "ะะตะดะฐะฒะฝะพ ะฒะพัะฟั€ะพะธะทะฒะตะดะตะฝะพ", "frequently_played": "ะงะฐัั‚ะพ ะธะณั€ะฐะตั‚", - "explore": "ะะฐะนั‚ะธ ะฝะพะฒะพะต", "top_tracks": "ะขะพะฟ", "play": "ะ’ะพัะฟั€ะพะธะทะฒะตัั‚ะธ", "shuffle": "ะŸะตั€ะตะผะตัˆะฐั‚ัŒ", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/sv.json b/translations/sv.json index 37715e89..b36c4dc0 100644 --- a/translations/sv.json +++ b/translations/sv.json @@ -261,43 +261,6 @@ "None": "Inga", "OnlyForced": "Bara Tvingande" }, - "text_color": "Textfรคrg", - "background_color": "Bakgrundsfรคrg", - "outline_color": "Konturfรคrg", - "outline_thickness": "Konturtjocklek", - "background_opacity": "Bakgrundsgenomskinlighet", - "outline_opacity": "Kontursgenomskinlighet", - "bold_text": "FetStil", - "colors": { - "Black": "Svart", - "Gray": "Grรฅ", - "Silver": "Silver", - "White": "Vit", - "Maroon": "Rรถdbrun", - "Red": "Rรถd", - "Fuchsia": "Purpur", - "Yellow": "Gul", - "Olive": "Olivgrรถn", - "Green": "Grรถn", - "Teal": "Turkos", - "Lime": "Limegrรถn", - "Purple": "Lila", - "Navy": "Marinblรฅ", - "Blue": "Blรฅ", - "Aqua": "Aqua" - }, - "thickness": { - "None": "Inget", - "Thin": "Tunn", - "Normal": "Normal", - "Thick": "Tjock" - }, - "subtitle_color": "Undertextfรคrg", - "subtitle_background_color": "Bakgrundsfรคrg", - "subtitle_font": "Typsnitt fรถr undertexter", - "ksplayer_title": "KSPlayer-instรคllningar", - "hardware_decode": "Hรฅrdvaruavkodning", - "hardware_decode_description": "Anvรคnd hรฅrdvaruacceleration fรถr videoavkodning. Inaktivera om du upplever uppspelningsproblem.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Ange din OpenSubtitles API-nyckel fรถr att aktivera klientbaserad undertextsรถkning som reserv nรคr din Jellyfin-server inte har en undertextleverantรถr konfigurerad.", "opensubtitles_api_key": "API-nyckel", @@ -315,25 +278,6 @@ "bottom": "Botten" } }, - "vlc_subtitles": { - "title": "VLC undertextsinstรคllningar", - "hint": "Anpassa undertextens utseende fรถr VLC-spelare. Fรถrรคndringar trรคder i kraft vid nรคsta uppspelning.", - "text_color": "Textfรคrg", - "background_color": "Bakgrundsfรคrg", - "background_opacity": "Bakgrundsgenomskinlighet", - "outline_color": "Konturfรคrg", - "outline_opacity": "Kontursgenomskinlighet", - "outline_thickness": "Konturtjocklek", - "bold": "FetStil", - "margin": "Nedre marginal" - }, - "video_player": { - "title": "Videospelare", - "video_player": "Videospelare", - "video_player_description": "Vรคlj vilken videospelare som ska anvรคndas pรฅ iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "ร–vrigt", "video_orientation": "Videoriktning", @@ -351,11 +295,6 @@ "UNKNOWN": "Okรคnt" }, "safe_area_in_controls": "Sรคkert omrรฅde i kontrollerna", - "video_player": "Videospelare", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Experimentell + PiP)" - }, "show_custom_menu_links": "Visa anpassade menylรคnkar", "show_large_home_carousel": "Visa toppbanner (beta)", "hide_libraries": "Dรถlj bibliotek", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Antal Avsnitt fรถr Automatisk Uppspelning", "disabled": "Inaktiverad" }, - "downloads": { - "downloads_title": "Nedladdningar" - }, "music": { "title": "Musik", "playback_title": "Uppspelning", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Tillรคgg", "jellyseerr": { - "jellyseerr_warning": "Denna integration รคr i ett tidigt skede. Rรคkna med att saker och ting fรถrรคndras.", "server_url": "Serveradress", "server_url_hint": "Exempel: http(s)://your-host.url\n(lรคgg till port vid behov)", "server_url_placeholder": "Seerr URL", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Lรคs mer om Marlin.", "save_button": "Spara", "toasts": { - "saved": "Sparade", - "refreshed": "Instรคllningarna uppdateras frรฅn servern" - }, - "refresh_from_server": "Uppdatera instรคllningar frรฅn server" + "saved": "Sparade" + } }, "streamystats": { - "enable_streamystats": "Aktivera Streamystats", "disable_streamystats": "Inaktivera Streamystats", "enable_search": "Anvรคnd fรถr sรถkning", "url": "Webbadress", "server_url_placeholder": "http(s)://streamystats.exempel.se", "streamystats_search_hint": "Ange URL fรถr Marlin-servern. URL bรถr innehรฅlla http eller https och vid behov port.", "read_more_about_streamystats": "Lรคs mer om Streamystats.", - "save_button": "Spara", "save": "Spara", "features_title": "Funktioner", - "home_sections_title": "Hemsektioner", "enable_movie_recommendations": "Filmrekommendationer", "enable_series_recommendations": "serierekommendationer", "enable_promoted_watchlists": "rekommenderade listor att titta pรฅ", @@ -445,8 +375,7 @@ "refresh_from_server": "Uppdatera instรคllningar frรฅn server" }, "kefinTweaks": { - "watchlist_enabler": "Aktivera vรฅr bevakningslista integration", - "watchlist_button": "sรคtt pรฅ/av bevakningslisteintegrationen" + "watchlist_enabler": "Aktivera vรฅr bevakningslista integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Ta bort alla nerladdade filer", "music_cache_title": "Musikcache", "music_cache_description": "Cacha automatiskt lรฅtar nรคr du lyssnar fรถr smidigare uppspelning och offline-stรถd", - "enable_music_cache": "Aktivera musikcache", "clear_music_cache": "Rensa musikcache", "music_cache_size": "{{size}} cachad", "music_cache_cleared": "Musikcache rensad", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "System" }, "toasts": { - "error_deleting_files": "Fel Vid Borttagning Av Filer", - "background_downloads_enabled": "Bakgrundsnedladdningar aktiverade", - "background_downloads_disabled": "Bakgrundsnedladdningar inaktiverade" + "error_deleting_files": "Fel Vid Borttagning Av Filer" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Nedladdningar", "series": "TV-Serier", "movies": "Filmer", - "queue": "Kรถ", "other_media": "Annan media", - "queue_hint": "Kรถ och nedladdningar kommer fรถrsvinna vid omstart av appen", - "no_items_in_queue": "Inga objekt i Kรถn", "no_downloaded_items": "Inga Nedladdade Objekt", "delete_all_movies_button": "Ta Bort Alla Filmer", "delete_all_series_button": "Ta Bort Alla TV-Serier", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Det Gick Inte Att Ta Bort Alla TV-Serier", "deleted_media_successfully": "Andra Medier Har Tagits Bort!", "failed_to_delete_media": "Kunde Inte Ta Bort Andra Medier", - "download_deleted": "Nedladdning Borttagen", "download_cancelled": "Nerladdningen Avbruten", "could_not_delete_download": "Kunde Inte Ta Bort Nedladdning", - "download_paused": "Nedladdning Pausad", - "could_not_pause_download": "Kunde Inte Pausa Nedladdning", - "download_resumed": "Nedladdning ร…terupptagen", - "could_not_resume_download": "Kunde Inte ร…teruppta Nedladdning", "download_completed": "Nedladdning Slutfรถrd", "download_failed": "Nerladdningen misslyckades", "download_failed_for_item": "Nedladdning misslyckades fรถr {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} Laddas redan ner", "all_files_deleted": "Alla nedladdningar raderades", "files_deleted_by_type": "{{count}} {{type}} Raderad", - "all_files_folders_and_jobs_deleted_successfully": "Alla filer, mappar och jobb har tagits bort", - "failed_to_clean_cache_directory": "Det gick inte att rensa cachemappen", "could_not_get_download_url_for_item": "Kunde inte hรคmta nedladdnings-URL fรถr {{itemName}}", - "go_to_downloads": "Gรฅ till nedladdningar", "file_deleted": "{{item}} Raderad" } } @@ -583,16 +495,17 @@ "none": "Ingen", "track": "Spรฅr", "cancel": "Avbryt", - "stop": "Stoppa", "delete": "Ta bort", "ok": "OK", "remove": "Radera", - "next": "Nรคsta", "back": "Tillbaka", "continue": "Fortsรคtt", "verifying": "Verifierar...", "login": "Logga in", - "refresh": "Uppdatera" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Sรถk...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Kunde inte skapa stream fรถr Chromecast", "message_from_server": "Meddelande frรฅn servern: {{message}}", "next_episode": "Nรคsta avsnitt", - "refresh_tracks": "Uppdatera spรฅr", - "audio_tracks": "Ljudspรฅr:", - "playback_state": "Uppspelningsstatus:", - "index": "Index:", "continue_watching": "Fortsรคtt titta", "go_back": "Tillbaka", "downloaded_file_title": "Du har denna fil nedladdad", @@ -723,7 +632,8 @@ "stopPlayback": "Stoppa uppspelning", "stopPlayingTitle": "Sluta spela \"{{title}}\"?", "stopPlayingConfirm": "ร„r du sรคker pรฅ att du vill stoppa uppspelningen?", - "downloaded": "Nedladdad" + "downloaded": "Nedladdad", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Visa Mer", "show_less": "Visa Mindre", "left": "kvar", - "more_info": "Mer info", "director": "Regissรถr", "cast": "Skรฅdespelare", "technical_details": "Tekniska detaljer", @@ -784,7 +693,8 @@ "resume_playback": "ร…teruppta uppspelning", "resume_playback_description": "Vill du fortsรคtta dรคr du slutade eller bรถrja om frรฅn bรถrjan?", "play_from_start": "Spela frรฅn bรถrjan", - "continue_from": "Fortsรคtt frรฅn {{time}}" + "continue_from": "Fortsรคtt frรฅn {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Nรคsta", @@ -888,13 +798,9 @@ "playlists": "Spellistor", "tracks": "spรฅr" }, - "filters": { - "all": "Alla" - }, "recently_added": "Nyligen tillagt", "recently_played": "Nyligen spelat", "frequently_played": "Spelas ofta", - "explore": "Utforska", "top_tracks": "Toppspรฅr", "play": "Spela", "shuffle": "Blanda spรฅr", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/th.json b/translations/th.json index e24fd3f9..4feea2b8 100644 --- a/translations/th.json +++ b/translations/th.json @@ -261,43 +261,6 @@ "None": "None", "OnlyForced": "OnlyForced" }, - "text_color": "Text Color", - "background_color": "Background Color", - "outline_color": "Outline Color", - "outline_thickness": "Outline Thickness", - "background_opacity": "Background Opacity", - "outline_opacity": "Outline Opacity", - "bold_text": "Bold Text", - "colors": { - "Black": "Black", - "Gray": "Gray", - "Silver": "Silver", - "White": "White", - "Maroon": "Maroon", - "Red": "Red", - "Fuchsia": "Fuchsia", - "Yellow": "Yellow", - "Olive": "Olive", - "Green": "Green", - "Teal": "Teal", - "Lime": "Lime", - "Purple": "Purple", - "Navy": "Navy", - "Blue": "เธชเธตเธ™เน‰เธณเน€เธ‡เธดเธ™", - "Aqua": "Aqua" - }, - "thickness": { - "None": "None", - "Thin": "Thin", - "Normal": "Normal", - "Thick": "Thick" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Other", "video_orientation": "Video Orientation", @@ -346,16 +290,11 @@ "PORTRAIT_DOWN": "Portrait Down", "LANDSCAPE": "Landscape", "LANDSCAPE_LEFT": "Landscape Left", - "LANDSCAPE_RIGHT": "", + "LANDSCAPE_RIGHT": "Landscape right", "OTHER": "Other", "UNKNOWN": "Unknown" }, "safe_area_in_controls": "Safe Area in Controls", - "video_player": "Video Player", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Experimental + PiP)" - }, "show_custom_menu_links": "Show Custom Menu Links", "show_large_home_carousel": "Show Large Home Carousel (beta)", "hide_libraries": "Hide Libraries", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Max Auto Play Episode Count", "disabled": "Disabled" }, - "downloads": { - "downloads_title": "Downloads" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Plugins", "jellyseerr": { - "jellyseerr_warning": "This integration is in its early stages. Expect things to change.", "server_url": "Server URL", "server_url_hint": "Example: http(s)://your-host.url\n(add port if required)", "server_url_placeholder": "Seerr URL", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Read More About Marlin.", "save_button": "Save", "toasts": { - "saved": "Saved", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "Saved" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Delete All Downloaded Files", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "System" }, "toasts": { - "error_deleting_files": "Error Deleting Files", - "background_downloads_enabled": "Background downloads enabled", - "background_downloads_disabled": "Background downloads disabled" + "error_deleting_files": "Error Deleting Files" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Downloads", "series": "TV-Series", "movies": "Movies", - "queue": "Queue", "other_media": "Other media", - "queue_hint": "Queue and downloads will be lost on app restart", - "no_items_in_queue": "No Items in Queue", "no_downloaded_items": "No Downloaded Items", "delete_all_movies_button": "Delete All Movies", "delete_all_series_button": "Delete All TV-Series", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Failed to Delete All TV-Series", "deleted_media_successfully": "Deleted other media Successfully!", "failed_to_delete_media": "Failed to Delete other media", - "download_deleted": "Download Deleted", "download_cancelled": "Download Cancelled", "could_not_delete_download": "Could Not Delete Download", - "download_paused": "Download Paused", - "could_not_pause_download": "Could Not Pause Download", - "download_resumed": "Download Resumed", - "could_not_resume_download": "Could Not Resume Download", "download_completed": "Download Completed", "download_failed": "Download Failed", "download_failed_for_item": "Download failed for {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "All Downloads Deleted Successfully", "files_deleted_by_type": "{{count}} {{type}} deleted", - "all_files_folders_and_jobs_deleted_successfully": "All files, folders, and jobs deleted successfully", - "failed_to_clean_cache_directory": "Failed to clean cache directory", "could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}", - "go_to_downloads": "Go to Downloads", "file_deleted": "{{item}} deleted" } } @@ -583,16 +495,17 @@ "none": "None", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Search...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast", "message_from_server": "Message from Server: {{message}}", "next_episode": "Next Episode", - "refresh_tracks": "Refresh Tracks", - "audio_tracks": "Audio Tracks:", - "playback_state": "Playback State:", - "index": "Index:", "continue_watching": "Continue Watching", "go_back": "Go Back", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Show More", "show_less": "Show Less", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Next", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/tlh.json b/translations/tlh.json index feb06c0b..b99e701a 100644 --- a/translations/tlh.json +++ b/translations/tlh.json @@ -261,43 +261,6 @@ "None": "pagh", "OnlyForced": "Dun je'" }, - "text_color": "GhItlh rIt", - "background_color": "Tlhagh rIt", - "outline_color": "Outline Color", - "outline_thickness": "Outline Thickness", - "background_opacity": "Background Opacity", - "outline_opacity": "Outline Opacity", - "bold_text": "Bold Text", - "colors": { - "Black": "Black", - "Gray": "Gray", - "Silver": "Silver", - "White": "White", - "Maroon": "Maroon", - "Red": "Red", - "Fuchsia": "Fuchsia", - "Yellow": "Yellow", - "Olive": "Olive", - "Green": "Green", - "Teal": "Teal", - "Lime": "Lime", - "Purple": "Purple", - "Navy": "Navy", - "Blue": "Blue", - "Aqua": "Aqua" - }, - "thickness": { - "None": "pagh", - "Thin": "Thin", - "Normal": "Normal", - "Thick": "Thick" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "patlh", "video_orientation": "mu'tlhegh pegh", @@ -351,11 +295,6 @@ "UNKNOWN": "Sovbe'" }, "safe_area_in_controls": "SeHlawDaq yot QIH", - "video_player": "mu'tlhegh tlholwI'", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (PiP mIwHa')" - }, "show_custom_menu_links": "menuDaq ret teqlu' yInej", "show_large_home_carousel": "Show Large Home Carousel (beta)", "hide_libraries": "De'wI' bom yIQIj", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Max Auto Play Episode Count", "disabled": "Disabled" }, - "downloads": { - "downloads_title": "Qaw' Doch" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "mIwHom", "jellyseerr": { - "jellyseerr_warning": "mIwHomvam chu'. ghoSlaH.", "server_url": "Ho'Do' veS URL", "server_url_hint": "ghu': http(s)://HoDo-veS.url\n(pord yIbel)", "server_url_placeholder": "Jellyseerr URL...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Marlin latlh yIlaD", "save_button": "yIqIp", "toasts": { - "saved": "qIp", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "qIp" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Hoch Qaw' Doch yIQaw'", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "mIw'a'" }, "toasts": { - "error_deleting_files": "Qaw' ghIq", - "background_downloads_enabled": "tlhegh Qaw' chu'", - "background_downloads_disabled": "tlhegh Qaw' QIj" + "error_deleting_files": "Qaw' ghIq" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Qaw' Doch", "series": "TV Hem", "movies": "DIS", - "queue": "ghom", "other_media": "Other media", - "queue_hint": "ghun ghImDI' ghom Qaw'laH.", - "no_items_in_queue": "ghom Doch pagh", "no_downloaded_items": "Qaw' Doch pagh", "delete_all_movies_button": "Hoch DIS yIQaw'", "delete_all_series_button": "Hoch TV Hem yIQaw'", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Hoch TV Hem Qaw'laHbe'", "deleted_media_successfully": "Deleted other media Successfully!", "failed_to_delete_media": "Failed to Delete other media", - "download_deleted": "Download Deleted", "download_cancelled": "Qaw' ghIm", "could_not_delete_download": "Could Not Delete Download", - "download_paused": "Download Paused", - "could_not_pause_download": "Could Not Pause Download", - "download_resumed": "Download Resumed", - "could_not_resume_download": "Could Not Resume Download", "download_completed": "Qaw' Qapla'", "download_failed": "Download Failed", "download_failed_for_item": "{{item}} Qaw'laHbe' - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "All Downloads Deleted Successfully", "files_deleted_by_type": "{{count}} {{type}} deleted", - "all_files_folders_and_jobs_deleted_successfully": "Hoch De', ram 'ej vum Qaw' Qapla'", - "failed_to_clean_cache_directory": "Failed to clean cache directory", "could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}", - "go_to_downloads": "Qaw' Doch yIghoS", "file_deleted": "{{item}} deleted" } } @@ -583,16 +495,17 @@ "none": "None", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "yISam...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Chromecast tlhol ret qonlaHbe'", "message_from_server": "Ho'Do' veS jach: {{message}}", "next_episode": "wej HemHom", - "refresh_tracks": "ret yIchu'qa'", - "audio_tracks": "QoQ ret:", - "playback_state": "tlhol mIw:", - "index": "nem:", "continue_watching": "tlhol yIHaDqa'", "go_back": "Go Back", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "latlh yIHoch", "show_less": "Hom yIHoch", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "wej", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/tr.json b/translations/tr.json index 75837bb9..1600ebc1 100644 --- a/translations/tr.json +++ b/translations/tr.json @@ -261,43 +261,6 @@ "None": "Yok", "OnlyForced": "Sadece Zorunlu" }, - "text_color": "Metin Rengi", - "background_color": "Arkaplan Rengi", - "outline_color": "Kenarlฤฑk Rengi", - "outline_thickness": "Kenarlฤฑk kalฤฑnlฤฑฤŸฤฑ", - "background_opacity": "Arkaplan OpaklฤฑฤŸฤฑ", - "outline_opacity": "Kenarlฤฑk OpaklฤฑฤŸฤฑ", - "bold_text": "Kalฤฑn Metin", - "colors": { - "Black": "Siyah", - "Gray": "Gri", - "Silver": "GรผmรผลŸ", - "White": "Beyaz", - "Maroon": "Kestane", - "Red": "Kฤฑrmฤฑzฤฑ", - "Fuchsia": "FuลŸya", - "Yellow": "Sarฤฑ", - "Olive": "Zeytin yeลŸili", - "Green": "YeลŸil", - "Teal": "Deniz mavisi", - "Lime": "Limon", - "Purple": "Mor", - "Navy": "Lacivert", - "Blue": "Mavi", - "Aqua": "Aรงฤฑk Mavi" - }, - "thickness": { - "None": "Hiรงbiri", - "Thin": "ฤฐnce", - "Normal": "Normal", - "Thick": "Kalฤฑn" - }, - "subtitle_color": "Altyazฤฑ Rengi", - "subtitle_background_color": "Arkaplan Rengi", - "subtitle_font": "Altyazฤฑ Yazฤฑ Tipi", - "ksplayer_title": "KSPlayer Ayarlarฤฑ", - "hardware_decode": "Donanฤฑmsal Kod ร‡รถzme", - "hardware_decode_description": "Video kod รงรถzme iรงin donanฤฑmsal hฤฑzlandฤฑrma kullan. Oynatma sorunlarฤฑ yaลŸฤฑyorsanฤฑz devre dฤฑลŸฤฑ bฤฑrakฤฑn.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Altyazฤฑ Ayarlarฤฑ", - "hint": "VLC oynatฤฑcฤฑ iรงin altyazฤฑ gรถrรผnรผmรผnรผ deฤŸiลŸtirin. DeฤŸiลŸiklikler bir sonraki oynatmada etkili olacak.", - "text_color": "Metin Rengi", - "background_color": "Arkaplan Rengi", - "background_opacity": "Arkaplan OpaklฤฑฤŸฤฑ", - "outline_color": "Kenarlฤฑk Rengi", - "outline_opacity": "Kenarlฤฑk OpaklฤฑฤŸฤฑ", - "outline_thickness": "Kenarlฤฑk KalฤฑnlฤฑฤŸฤฑ", - "bold": "Kalฤฑn Metin", - "margin": "Alt Kenar BoลŸluฤŸu" - }, - "video_player": { - "title": "Video oynatฤฑcฤฑsฤฑ", - "video_player": "Video oynatฤฑcฤฑsฤฑ", - "video_player_description": "iOS'da hangi video oynatฤฑcฤฑnฤฑn kullanฤฑlacaฤŸฤฑnฤฑ seรงin.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "DiฤŸer", "video_orientation": "Video Yรถnรผ", @@ -351,11 +295,6 @@ "UNKNOWN": "Bilinmeyen" }, "safe_area_in_controls": "Kontrollerde Gรผvenli Alan", - "video_player": "Video player", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Deneysel + PiP)" - }, "show_custom_menu_links": "ร–zel Menรผ BaฤŸlantฤฑlarฤฑnฤฑ Gรถster", "show_large_home_carousel": "Show Large Home Carousel (beta)", "hide_libraries": "Kรผtรผphaneleri Gizle", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "En Fazla Otomatik Oynatฤฑlacak Bรถlรผm Sayฤฑsฤฑ", "disabled": "Devre dฤฑลŸฤฑ" }, - "downloads": { - "downloads_title": "ฤฐndirmeler" - }, "music": { "title": "Mรผzik", "playback_title": "Oynatma", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Eklentiler", "jellyseerr": { - "jellyseerr_warning": "Bu entegrasyon erken aลŸamalardadฤฑr. DeฤŸiลŸiklikler olabilir.", "server_url": "Sunucu URL'si", "server_url_hint": "ร–rnek: http(s)://your-host.url\n(port gerekiyorsa ekleyin)", "server_url_placeholder": "Jellyseerr URL...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Marlin hakkฤฑnda daha fazla oku.", "save_button": "Kaydet", "toasts": { - "saved": "Kaydedildi", - "refreshed": "Ayarlar sunucudan yeniden alฤฑndฤฑ" - }, - "refresh_from_server": "Ayarlarฤฑ Sunucudan Yeniden Al" + "saved": "Kaydedildi" + } }, "streamystats": { - "enable_streamystats": "Streamystats'ฤฑ EtkinleลŸtir", "disable_streamystats": "Streamystats'ฤฑ Devre DฤฑลŸฤฑ Bฤฑrak", "enable_search": "Arama iรงin kullan", "url": "URL Adresi", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Streamystats sunucu URL'sini girin. URL, http veya https iรงermeli ve isteฤŸe baฤŸlฤฑ olarak portu iรงerebilir.", "read_more_about_streamystats": "Streamystats hakkฤฑnda daha fazla bilgi.", - "save_button": "Kaydet", "save": "Kaydet", "features_title": "ร–zellikler", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Film ร–nerileri", "enable_series_recommendations": "Dizi ร–nerileri", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Ayarlarฤฑ Sunucudan Yeniden Al" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Tรผm indirilen dosyalarฤฑ sil", "music_cache_title": "Mรผzik ร–n BelleฤŸi", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Mรผzik ร–n BelleฤŸini EtkinleลŸtir", "clear_music_cache": "Mรผzik ร–n BelleฤŸini Temizle", "music_cache_size": "{{size}} รถn belleklendi", "music_cache_cleared": "Mรผzik รถn belleฤŸi temizlendi", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "Sistem" }, "toasts": { - "error_deleting_files": "Dosyalar silinirken hata oluลŸtu", - "background_downloads_enabled": "Arka plan indirmeleri etkinleลŸtirildi", - "background_downloads_disabled": "Arka plan indirmeleri devre dฤฑลŸฤฑ bฤฑrakฤฑldฤฑ" + "error_deleting_files": "Dosyalar silinirken hata oluลŸtu" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "ฤฐndirilenler", "series": "Diziler", "movies": "Filmler", - "queue": "Sฤฑra", "other_media": "DiฤŸer medya", - "queue_hint": "Sฤฑra ve indirmeler uygulama yeniden baลŸlatฤฑldฤฑฤŸฤฑnda kaybolacaktฤฑr", - "no_items_in_queue": "Sฤฑrada รถฤŸe yok", "no_downloaded_items": "ฤฐndirilen รถฤŸe yok", "delete_all_movies_button": "Tรผm Filmleri Sil", "delete_all_series_button": "Tรผm Dizileri Sil", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Diziler silinemedi", "deleted_media_successfully": "DiฤŸer medya baลŸarฤฑyla silindi!", "failed_to_delete_media": "Failed to Delete other media", - "download_deleted": "ฤฐndirme silindi", "download_cancelled": "ฤฐndirme iptal edildi", "could_not_delete_download": "ฤฐndirme Silinemedi", - "download_paused": "ฤฐndirme Duraklatฤฑldฤฑ", - "could_not_pause_download": "ฤฐndirme Duraklatฤฑlamadฤฑ", - "download_resumed": "ฤฐndirme Devam Ediyor", - "could_not_resume_download": "ฤฐndirme Devam Ettirilemedi", "download_completed": "ฤฐndirme tamamlandฤฑ", "download_failed": "ฤฐndirme baลŸarฤฑsฤฑz oldu", "download_failed_for_item": "{{item}} iรงin indirme baลŸarฤฑsฤฑz oldu - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} zaten indiriliyor", "all_files_deleted": "Bรผtรผn indirilenler baลŸarฤฑyla silindi", "files_deleted_by_type": "{{count}} {{type}} silindi", - "all_files_folders_and_jobs_deleted_successfully": "Tรผm dosyalar, klasรถrler ve iลŸler baลŸarฤฑyla silindi", - "failed_to_clean_cache_directory": "ร–nbellek dizini temizlenemedi", "could_not_get_download_url_for_item": "{{itemName}} iรงin indirme URL'si alฤฑnamadฤฑ", - "go_to_downloads": "ฤฐndirmelere git", "file_deleted": "{{item}} silindi" } } @@ -583,16 +495,17 @@ "none": "Hiรงbiri", "track": "Parรงa", "cancel": "Vazgeรง", - "stop": "Stop", "delete": "Sil", "ok": "Tamam", "remove": "Kaldฤฑr", - "next": "Sonraki", "back": "Geri", "continue": "Devam", "verifying": "DoฤŸrulanฤฑyor...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Ara...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Chromecast iรงin yayฤฑn oluลŸturulamadฤฑ", "message_from_server": "Sunucudan mesaj: {{message}}", "next_episode": "Sonraki bรถlรผm", - "refresh_tracks": "Parรงalarฤฑ yenile", - "audio_tracks": "Ses Parรงalarฤฑ:", - "playback_state": "Oynatma Durumu:", - "index": "ฤฐndeks:", "continue_watching": "ฤฐzlemeye devam et", "go_back": "Geri", "downloaded_file_title": "Bu dosya indirilmiลŸ", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Daha fazla gรถster", "show_less": "Daha az gรถster", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Sonraki", @@ -888,13 +798,9 @@ "playlists": "ร‡alma listeleri", "tracks": "parรงalar" }, - "filters": { - "all": "Tรผmรผ" - }, "recently_added": "Son Eklenenler", "recently_played": "Son Oynatฤฑlanlar", "frequently_played": "Sฤฑk Oynatฤฑlanlar", - "explore": "KeลŸfet", "top_tracks": "En Popรผlar Parรงalar", "play": "Oynat", "shuffle": "KarฤฑลŸtฤฑr", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/uk.json b/translations/uk.json index 2a2163c5..7be58253 100644 --- a/translations/uk.json +++ b/translations/uk.json @@ -261,43 +261,6 @@ "None": "ะัะบะธะน", "OnlyForced": "ะ’ะธะบะปัŽั‡ะฝะพ ะคะพั€ัะพะฒะฐะฝั–" }, - "text_color": "Text Color", - "background_color": "Background Color", - "outline_color": "Outline Color", - "outline_thickness": "Outline Thickness", - "background_opacity": "Background Opacity", - "outline_opacity": "Outline Opacity", - "bold_text": "Bold Text", - "colors": { - "Black": "Black", - "Gray": "Gray", - "Silver": "Silver", - "White": "White", - "Maroon": "Maroon", - "Red": "Red", - "Fuchsia": "Fuchsia", - "Yellow": "Yellow", - "Olive": "Olive", - "Green": "Green", - "Teal": "Teal", - "Lime": "Lime", - "Purple": "Purple", - "Navy": "Navy", - "Blue": "Blue", - "Aqua": "Aqua" - }, - "thickness": { - "None": "None", - "Thin": "Thin", - "Normal": "Normal", - "Thick": "Thick" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "ะ†ะฝัˆั–", "video_orientation": "ะžั€ั–ั”ะฝั‚ะฐั†ั–ั ะฒั–ะดะตะพ", @@ -351,11 +295,6 @@ "UNKNOWN": "ะะตะฒั–ะดะพะผะพ" }, "safe_area_in_controls": "ะ‘ะตะทะฟะตั‡ะฝะฐ ะทะพะฝะฐ ะฒ ะตะปะตะผะตะฝั‚ะฐั… ะบะตั€ัƒะฒะฐะฝะฝั", - "video_player": "ะ’ั–ะดะตะพ ะฟะปะตั”ั€", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Experimental + PiP)" - }, "show_custom_menu_links": "ะŸะพะบะฐะทะฐั‚ะธ ะบะพั€ะธัั‚ัƒะฒะฐั†ัŒะบั– ะฟะพัะธะปะฐะฝะฝั ะผะตะฝัŽ", "show_large_home_carousel": "Show Large Home Carousel (beta)", "hide_libraries": "ะกั…ะพะฒะฐั‚ะธ ะผะตะดั–ะฐั‚ะตะบะธ", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Max Auto Play Episode Count", "disabled": "ะ’ะธะผะบะฝะตะฝะพ" }, - "downloads": { - "downloads_title": "ะ—ะฐะฒะฐะฝั‚ะฐะถะตะฝะฝั" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "ะŸะปะฐะณั–ะฝะธ", "jellyseerr": { - "jellyseerr_warning": "ะฆั ั–ะฝั‚ะตะณั€ะฐั†ั–ั ะฟะตั€ะตะฑัƒะฒะฐั” ะฝะฐ ะฟะพั‡ะฐั‚ะบะพะฒั–ะน ัั‚ะฐะดั–ั—. ะžั‡ั–ะบัƒะนั‚ะต, ั‰ะพ ะฒัะต ะทะผั–ะฝะธั‚ัŒัั.", "server_url": "URL ะกะตั€ะฒะตั€ะฐ", "server_url_hint": "ะะฐะฟั€ะธะบะปะฐะด: http(s)://your-host.url\n(ะดะพะดะฐะนั‚ะต ะฟะพั€ั‚ ัะบั‰ะพ ะฝะตะพะฑั…ั–ะดะฝะพ)", "server_url_placeholder": "Jellyseerr URL...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "ะ”ั–ะทะฝะฐะนั‚ะตัั ะฑั–ะปัŒัˆะต ะฟั€ะพ Marlin.", "save_button": "ะ—ะฑะตั€ะตะณั‚ะธ", "toasts": { - "saved": "ะ—ะฑะตั€ะตะถะตะฝะพ", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "ะ—ะฑะตั€ะตะถะตะฝะพ" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "ะ’ะธะดะฐะปะธั‚ะธ ัƒัั– ะทะฐะฒะฐะฝั‚ะฐะถะตะฝะฝั– ั„ะฐะนะปะธ", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "ะกะธัั‚ะตะผะฝะฐ" }, "toasts": { - "error_deleting_files": "ะŸะพะผะธะปะบะฐ ะฟั€ะธ ะฒะธะดะฐะปะตะฝั– ั„ะฐะนะปั–ะฒ", - "background_downloads_enabled": "ะ—ะฐะฒะฐะฝั‚ะฐะถะตะฝะฝั ะฒ ั„ะพะฝั– ัƒะฒั–ะผะบะฝะตะฝะต", - "background_downloads_disabled": "ะ—ะฐะฒะฐะฝั‚ะฐะถะตะฝะฝั ะฒ ั„ะพะฝั– ะฒะธะผะบะฝะตะฝะต" + "error_deleting_files": "ะŸะพะผะธะปะบะฐ ะฟั€ะธ ะฒะธะดะฐะปะตะฝั– ั„ะฐะนะปั–ะฒ" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "ะ—ะฐะฒะฐะฝั‚ะฐะถะตะฝะฝั", "series": "ะขะ‘-ะกะตั€ั–ะฐะปะธ", "movies": "ะคั–ะปัŒะผะธ", - "queue": "ะงะตั€ะณะฐ", "other_media": "Other media", - "queue_hint": "ะงะตั€ะณะฐ ั– ะทะฐะฒะฐะฝั‚ะฐะถะตะฝะฝั ะฑัƒะดะต ะฒั‚ั€ะฐั‡ะตะฝะต ะฟั€ะธ ะฟะตั€ะตะทะฐะฟัƒัะบัƒ ะทะฐัั‚ะพััƒะฝะบัƒ", - "no_items_in_queue": "ะะตะผะฐ ะตะปะตะผะตะฝั‚ั–ะฒ ะฒ ั‡ะตั€ะทั–", "no_downloaded_items": "ะะตะผะฐ ะทะฐะฒะฐะฝั‚ะฐะถะตะฝะธั… ะตะปะตะผะตะฝั‚ั–ะฒ", "delete_all_movies_button": "ะ’ะธะดะฐะปะธั‚ะธ ะฒัั– ะคั–ะปัŒะผะธ", "delete_all_series_button": "ะ’ะธะดะฐะปะธั‚ะธ ะฒัั– ะขะ‘-ะกะตั€ั–ะฐะปะธ", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "ะะต ะฒะดะฐะปะพัั ะฒะธะดะฐะปะธั‚ะธ ะฒัั– ั‚ะตะปะตัะตั€ั–ะฐะปะธ", "deleted_media_successfully": "Deleted other media Successfully!", "failed_to_delete_media": "Failed to Delete other media", - "download_deleted": "Download Deleted", "download_cancelled": "ะ—ะฐะฒะฐะฝั‚ะฐะถะตะฝะฝั ัะบะฐัะพะฒะฐะฝะต", "could_not_delete_download": "Could Not Delete Download", - "download_paused": "Download Paused", - "could_not_pause_download": "Could Not Pause Download", - "download_resumed": "Download Resumed", - "could_not_resume_download": "Could Not Resume Download", "download_completed": "ะ—ะฐะฒะฐะฝั‚ะฐะถะตะฝะฝั ะทะฐะฒะตั€ัˆะตะฝะพ", "download_failed": "Download Failed", "download_failed_for_item": "ะะต ะฒะดะฐะปะพัั ะทะฐะฒะฐะฝั‚ะฐะถะธั‚ะธ {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "All Downloads Deleted Successfully", "files_deleted_by_type": "{{count}} {{type}} deleted", - "all_files_folders_and_jobs_deleted_successfully": "ะฃัั– ั„ะฐะนะปะธ, ะฟะฐะฟะบะธ ั‚ะฐ ะทะฐะฒะดะฐะฝะฝั ัƒัะฟั–ัˆะฝะพ ะฒะธะดะฐะปะตะฝะพ", - "failed_to_clean_cache_directory": "Failed to clean cache directory", "could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}", - "go_to_downloads": "ะŸะตั€ะตะนั‚ะธ ะดะพ ะทะฐะฒะฐะฝั‚ะฐะถะตะฝะฝั", "file_deleted": "{{item}} deleted" } } @@ -583,16 +495,17 @@ "none": "None", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "ะจัƒะบะฐั‚ะธ...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "ะะต ะฒะดะฐะปะพัั ัั‚ะฒะพั€ะธั‚ะธ ะฟะพั‚ั–ะบ ะดะปั Chromecast", "message_from_server": "ะŸะพะฒั–ะดะพะผะปะตะฝะฝั ะฒั–ะด ัะตั€ะฒะตั€ัƒ: {{message}}", "next_episode": "ะะฐัั‚ัƒะฟะฝะธะน ะ•ะฟั–ะทะพะด", - "refresh_tracks": "ะžะฝะพะฒะธั‚ะธ ะดะพั€ั–ะถะบะธ", - "audio_tracks": "ะัƒะดั–ะพ-ะดะพั€ั–ะถะบะธ:", - "playback_state": "ะกั‚ะฐะฝ ะฒั–ะดั‚ะฒะพั€ะตะฝะฝั:", - "index": "ะ†ะฝะดะตะบั:", "continue_watching": "ะŸั€ะพะดะพะฒะถะธั‚ะธ ะฟะตั€ะตะณะปัะด", "go_back": "ะะฐะทะฐะด", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "ะŸะพะบะฐะทะฐั‚ะธ ะฑั–ะปัŒัˆะต", "show_less": "ะŸะพะบะฐะทะฐั‚ะธ ะผะตะฝัˆะต", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "ะะฐัั‚ัƒะฟะฝะธะน", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/vi.json b/translations/vi.json index 666cfa9d..7977420b 100644 --- a/translations/vi.json +++ b/translations/vi.json @@ -261,43 +261,6 @@ "None": "Khรดng hiแปƒn thแป‹", "OnlyForced": "Bแบฏt buแป™c" }, - "text_color": "Text Color", - "background_color": "Background Color", - "outline_color": "Outline Color", - "outline_thickness": "Outline Thickness", - "background_opacity": "Background Opacity", - "outline_opacity": "Outline Opacity", - "bold_text": "Bold Text", - "colors": { - "Black": "Black", - "Gray": "Gray", - "Silver": "Silver", - "White": "White", - "Maroon": "Maroon", - "Red": "Red", - "Fuchsia": "Fuchsia", - "Yellow": "Yellow", - "Olive": "Olive", - "Green": "Green", - "Teal": "Teal", - "Lime": "Lime", - "Purple": "Purple", - "Navy": "Navy", - "Blue": "Blue", - "Aqua": "Aqua" - }, - "thickness": { - "None": "Khรดng cรณ", - "Thin": "Thin", - "Normal": "Normal", - "Thick": "Thick" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Khรกc", "video_orientation": "Hฦฐแป›ng video", @@ -351,11 +295,6 @@ "UNKNOWN": "Khรดng rรต" }, "safe_area_in_controls": "Vรนng an toร n trong ฤ‘iแปu khiแปƒn", - "video_player": "Trรฌnh phรกt video", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Thแปญ nghiแป‡m + PiP)" - }, "show_custom_menu_links": "Hiแป‡n liรชn kแบฟt tรนy chแป‰nh", "show_large_home_carousel": "Show Large Home Carousel (beta)", "hide_libraries": "แบจn thฦฐ viแป‡n", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Sแป‘ tแบญp tแปฑ chแบกy tแป‘i ฤ‘a", "disabled": "ฤรฃ tแบฏt" }, - "downloads": { - "downloads_title": "Tแบฃi xuแป‘ng" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Plugin", "jellyseerr": { - "jellyseerr_warning": "Tรญch hแปฃp ฤ‘ang trong giai ฤ‘oแบกn thแปญ nghiแป‡m. Nแป™i dung cรณ thแปƒ thay ฤ‘แป•i.", "server_url": "URL mรกy chแปง", "server_url_hint": "Vรญ dแปฅ: http(s)://your-host.url (cรณ port nแบฟu cแบงn)", "server_url_placeholder": "Jellyseerr URL...", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Tรฌm hiแปƒu thรชm vแป Marlin.", "save_button": "Lฦฐu", "toasts": { - "saved": "ฤรฃ lฦฐu", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "ฤรฃ lฦฐu" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Xรณa toร n bแป™ tแบญp tin ฤ‘รฃ tแบฃi", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "Hแป‡ thแป‘ng" }, "toasts": { - "error_deleting_files": "Lแป—i khi xรณa tแบญp tin", - "background_downloads_enabled": "Tแบฃi trong nแปn ฤ‘รฃ bแบญt", - "background_downloads_disabled": "Tแบฃi trong nแปn ฤ‘รฃ tแบฏt" + "error_deleting_files": "Lแป—i khi xรณa tแบญp tin" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Tแบฃi xuแป‘ng", "series": "Chฦฐฦกng trรฌnh TV", "movies": "Phim", - "queue": "Hร ng ฤ‘แปฃi", "other_media": "Other media", - "queue_hint": "Hร ng ฤ‘แปฃi vร  tแบฃi xuแป‘ng sแบฝ bแป‹ mแบฅt khi khแปŸi ฤ‘แป™ng lแบกi แปฉng dแปฅng", - "no_items_in_queue": "Khรดng cรณ mแปฅc trong hร ng ฤ‘แปฃi", "no_downloaded_items": "Khรดng cรณ mแปฅc ฤ‘รฃ tแบฃi", "delete_all_movies_button": "Xรณa tแบฅt cแบฃ phim", "delete_all_series_button": "Xรณa tแบฅt cแบฃ chฦฐฦกng trรฌnh TV", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Xรณa chฦฐฦกng trรฌnh TV thแบฅt bแบกi", "deleted_media_successfully": "Deleted other media Successfully!", "failed_to_delete_media": "Failed to Delete other media", - "download_deleted": "Download Deleted", "download_cancelled": "Tแบฃi xuแป‘ng bแป‹ hแปงy", "could_not_delete_download": "Could Not Delete Download", - "download_paused": "Download Paused", - "could_not_pause_download": "Could Not Pause Download", - "download_resumed": "Download Resumed", - "could_not_resume_download": "Could Not Resume Download", "download_completed": "Tแบฃi xuแป‘ng hoร n tแบฅt", "download_failed": "Download Failed", "download_failed_for_item": "Tแบฃi {{item}} thแบฅt bแบกi โ€“ {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "All Downloads Deleted Successfully", "files_deleted_by_type": "{{count}} {{type}} deleted", - "all_files_folders_and_jobs_deleted_successfully": "ฤรฃ xรณa thร nh cรดng tแบฅt cแบฃ tแบญp tin, thฦฐ mแปฅc vร  cรดng viแป‡c", - "failed_to_clean_cache_directory": "Failed to clean cache directory", "could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}", - "go_to_downloads": "Tแป›i phแบงn tแบฃi vแป", "file_deleted": "{{item}} deleted" } } @@ -583,16 +495,17 @@ "none": "None", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Tรฌm...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Khรดng thแปƒ tแบกo luแป“ng cho Chromecast", "message_from_server": "Thรดng bรกo tแปซ mรกy chแปง: {{message}}", "next_episode": "Tแบญp tiแบฟp theo", - "refresh_tracks": "Lร m mแป›i cรกc track", - "audio_tracks": "Track รขm thanh:", - "playback_state": "Trแบกng thรกi phรกt:", - "index": "Chแป‰ mแปฅc:", "continue_watching": "Tiแบฟp tแปฅc xem", "go_back": "Quay lแบกi", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Xem thรชm", "show_less": "Thu gแปn", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Tiแบฟp theo", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", diff --git a/translations/zh.json b/translations/zh.json index 0a68afc4..7c6c4a91 100644 --- a/translations/zh.json +++ b/translations/zh.json @@ -261,43 +261,6 @@ "None": "None", "OnlyForced": "OnlyForced" }, - "text_color": "Text Color", - "background_color": "Background Color", - "outline_color": "Outline Color", - "outline_thickness": "Outline Thickness", - "background_opacity": "Background Opacity", - "outline_opacity": "Outline Opacity", - "bold_text": "Bold Text", - "colors": { - "Black": "Black", - "Gray": "Gray", - "Silver": "Silver", - "White": "White", - "Maroon": "Maroon", - "Red": "Red", - "Fuchsia": "Fuchsia", - "Yellow": "Yellow", - "Olive": "Olive", - "Green": "Green", - "Teal": "Teal", - "Lime": "Lime", - "Purple": "Purple", - "Navy": "Navy", - "Blue": "Blue", - "Aqua": "Aqua" - }, - "thickness": { - "None": "None", - "Thin": "Thin", - "Normal": "Normal", - "Thick": "Thick" - }, - "subtitle_color": "Subtitle Color", - "subtitle_background_color": "Background Color", - "subtitle_font": "Subtitle Font", - "ksplayer_title": "KSPlayer Settings", - "hardware_decode": "Hardware Decoding", - "hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.", "opensubtitles_title": "OpenSubtitles", "opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.", "opensubtitles_api_key": "API Key", @@ -315,25 +278,6 @@ "bottom": "Bottom" } }, - "vlc_subtitles": { - "title": "VLC Subtitle Settings", - "hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.", - "text_color": "Text Color", - "background_color": "Background Color", - "background_opacity": "Background Opacity", - "outline_color": "Outline Color", - "outline_opacity": "Outline Opacity", - "outline_thickness": "Outline Thickness", - "bold": "Bold Text", - "margin": "Bottom Margin" - }, - "video_player": { - "title": "Video Player", - "video_player": "Video Player", - "video_player_description": "Choose which video player to use on iOS.", - "ksplayer": "KSPlayer", - "vlc": "VLC" - }, "other": { "other_title": "Other", "video_orientation": "Video Orientation", @@ -351,11 +295,6 @@ "UNKNOWN": "Unknown" }, "safe_area_in_controls": "Safe Area in Controls", - "video_player": "Video Player", - "video_players": { - "VLC_3": "VLC 3", - "VLC_4": "VLC 4 (Experimental + PiP)" - }, "show_custom_menu_links": "Show Custom Menu Links", "show_large_home_carousel": "Show Large Home Carousel (beta)", "hide_libraries": "Hide Libraries", @@ -367,9 +306,6 @@ "max_auto_play_episode_count": "Max Auto Play Episode Count", "disabled": "Disabled" }, - "downloads": { - "downloads_title": "Downloads" - }, "music": { "title": "Music", "playback_title": "Playback", @@ -384,7 +320,6 @@ "plugins": { "plugins_title": "Plugins", "jellyseerr": { - "jellyseerr_warning": "This integration is in its early stages. Expect things to change.", "server_url": "Server URL", "server_url_hint": "Example: http(s)://your-host.url\n(add port if required)", "server_url_placeholder": "Seerr URL", @@ -413,23 +348,18 @@ "read_more_about_marlin": "Read More About Marlin.", "save_button": "Save", "toasts": { - "saved": "Saved", - "refreshed": "Settings refreshed from server" - }, - "refresh_from_server": "Refresh Settings from Server" + "saved": "Saved" + } }, "streamystats": { - "enable_streamystats": "Enable Streamystats", "disable_streamystats": "Disable Streamystats", "enable_search": "Use for Search", "url": "URL", "server_url_placeholder": "http(s)://streamystats.example.com", "streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.", "read_more_about_streamystats": "Read More About Streamystats.", - "save_button": "Save", "save": "Save", "features_title": "Features", - "home_sections_title": "Home Sections", "enable_movie_recommendations": "Movie Recommendations", "enable_series_recommendations": "Series Recommendations", "enable_promoted_watchlists": "Promoted Watchlists", @@ -445,8 +375,7 @@ "refresh_from_server": "Refresh Settings from Server" }, "kefinTweaks": { - "watchlist_enabler": "Enable our Watchlist integration", - "watchlist_button": "Toggle Watchlist integration" + "watchlist_enabler": "Enable our Watchlist integration" } }, "storage": { @@ -457,7 +386,6 @@ "delete_all_downloaded_files": "Delete All Downloaded Files", "music_cache_title": "Music Cache", "music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support", - "enable_music_cache": "Enable Music Cache", "clear_music_cache": "Clear Music Cache", "music_cache_size": "{{size}} cached", "music_cache_cleared": "Music cache cleared", @@ -467,8 +395,6 @@ "clear_all_cache": "Clear All Cache", "clear_all_cache_confirm": "Clear All Cache?", "clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.", - "clear_all_cache_success": "Cache Cleared", - "clear_all_cache_success_desc": "All cache has been cleared successfully.", "clear_all_cache_error_desc": "An error occurred while clearing the cache." }, "intro": { @@ -490,15 +416,12 @@ "system": "System" }, "toasts": { - "error_deleting_files": "Error Deleting Files", - "background_downloads_enabled": "Background downloads enabled", - "background_downloads_disabled": "Background downloads disabled" + "error_deleting_files": "Error Deleting Files" }, "security": { "title": "Security", "inactivity_timeout": { "title": "Inactivity Timeout", - "description": "Auto logout after inactivity", "disabled": "Disabled", "1_minute": "1 minute", "5_minutes": "5 minutes", @@ -518,10 +441,7 @@ "downloads_title": "Downloads", "series": "TV-Series", "movies": "Movies", - "queue": "Queue", "other_media": "Other media", - "queue_hint": "Queue and downloads will be lost on app restart", - "no_items_in_queue": "No Items in Queue", "no_downloaded_items": "No Downloaded Items", "delete_all_movies_button": "Delete All Movies", "delete_all_series_button": "Delete All TV-Series", @@ -546,13 +466,8 @@ "failed_to_delete_all_series": "Failed to Delete All TV-Series", "deleted_media_successfully": "Deleted other media Successfully!", "failed_to_delete_media": "Failed to Delete other media", - "download_deleted": "Download Deleted", "download_cancelled": "Download Cancelled", "could_not_delete_download": "Could Not Delete Download", - "download_paused": "Download Paused", - "could_not_pause_download": "Could Not Pause Download", - "download_resumed": "Download Resumed", - "could_not_resume_download": "Could Not Resume Download", "download_completed": "Download Completed", "download_failed": "Download Failed", "download_failed_for_item": "Download failed for {{item}} - {{error}}", @@ -562,10 +477,7 @@ "item_already_downloading": "{{item}} is already downloading", "all_files_deleted": "All Downloads Deleted Successfully", "files_deleted_by_type": "{{count}} {{type}} deleted", - "all_files_folders_and_jobs_deleted_successfully": "All files, folders, and jobs deleted successfully", - "failed_to_clean_cache_directory": "Failed to clean cache directory", "could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}", - "go_to_downloads": "Go to Downloads", "file_deleted": "{{item}} deleted" } } @@ -583,16 +495,17 @@ "none": "None", "track": "Track", "cancel": "Cancel", - "stop": "Stop", "delete": "Delete", "ok": "OK", "remove": "Remove", - "next": "Next", "back": "Back", "continue": "Continue", "verifying": "Verifying...", "login": "Login", - "refresh": "Refresh" + "episodes": "Episodes", + "movies": "Movies", + "loading": "Loadingโ€ฆ", + "seeAll": "See all" }, "search": { "search": "Search...", @@ -691,10 +604,6 @@ "could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast", "message_from_server": "Message from Server: {{message}}", "next_episode": "Next Episode", - "refresh_tracks": "Refresh Tracks", - "audio_tracks": "Audio Tracks:", - "playback_state": "Playback State:", - "index": "Index:", "continue_watching": "Continue Watching", "go_back": "Go Back", "downloaded_file_title": "You have this file downloaded", @@ -723,7 +632,8 @@ "stopPlayback": "Stop Playback", "stopPlayingTitle": "Stop playing \"{{title}}\"?", "stopPlayingConfirm": "Are you sure you want to stop playback?", - "downloaded": "Downloaded" + "downloaded": "Downloaded", + "missing_parameters": "Missing playback parameters" }, "chapters": { "title": "Chapters", @@ -761,7 +671,6 @@ "show_more": "Show More", "show_less": "Show Less", "left": "left", - "more_info": "More Info", "director": "Director", "cast": "Cast", "technical_details": "Technical Details", @@ -784,7 +693,8 @@ "resume_playback": "Resume Playback", "resume_playback_description": "Do you want to continue where you left off or start from the beginning?", "play_from_start": "Play from Start", - "continue_from": "Continue from {{time}}" + "continue_from": "Continue from {{time}}", + "no_data_available": "No data available" }, "live_tv": { "next": "Next", @@ -888,13 +798,9 @@ "playlists": "Playlists", "tracks": "tracks" }, - "filters": { - "all": "All" - }, "recently_added": "Recently Added", "recently_played": "Recently Played", "frequently_played": "Frequently Played", - "explore": "Explore", "top_tracks": "Top Tracks", "play": "Play", "shuffle": "Shuffle", @@ -1028,7 +934,6 @@ "pairing": { "pair_with_phone": "Pair with Phone", "pair_with_phone_title": "Login TV", - "pair_with_phone_description": "Scan the QR code displayed on your TV to log in", "waiting_for_phone": "Waiting for phone...", "scan_with_phone": "Scan with the Streamyfin app on your phone", "logging_in": "Logging in...", From 872d14786eb51fce2f61a47df5d3993cc9df6ee8 Mon Sep 17 00:00:00 2001 From: lance chant <13349722+lancechant@users.noreply.github.com> Date: Wed, 17 Jun 2026 11:59:21 +0200 Subject: [PATCH 14/26] fix: apple top shelf currently cropping images (#1726) Signed-off-by: Lance Chant <13349722+lancechant@users.noreply.github.com> Co-authored-by: Gauvain --- targets/StreamyfinTopShelf/TopShelfProvider.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/StreamyfinTopShelf/TopShelfProvider.swift b/targets/StreamyfinTopShelf/TopShelfProvider.swift index ee73685d..c86e7192 100644 --- a/targets/StreamyfinTopShelf/TopShelfProvider.swift +++ b/targets/StreamyfinTopShelf/TopShelfProvider.swift @@ -65,7 +65,7 @@ final class TopShelfProvider: TVTopShelfContentProvider { let item = TVTopShelfSectionedItem(identifier: cacheItem.id) item.title = cacheItem.title - item.imageShape = .poster + item.imageShape = .hdtv item.displayAction = TVTopShelfAction(url: route) if let playRoute = cacheItem.playRoute, let playURL = URL(string: playRoute) { From df56d62acd82e602f7959680b467115e32396464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Fr=C3=B8ysa?= Date: Wed, 17 Jun 2026 13:26:40 +0200 Subject: [PATCH 15/26] fix(android): hold wake and wifi locks during downloads (#1546) Co-authored-by: Simon Eklundh Co-authored-by: Gauvain --- .../android/src/main/AndroidManifest.xml | 3 ++- .../modules/backgrounddownloader/DownloadService.kt | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/modules/background-downloader/android/src/main/AndroidManifest.xml b/modules/background-downloader/android/src/main/AndroidManifest.xml index 44554032..95d01ff9 100644 --- a/modules/background-downloader/android/src/main/AndroidManifest.xml +++ b/modules/background-downloader/android/src/main/AndroidManifest.xml @@ -2,7 +2,8 @@ - + + Date: Thu, 18 Jun 2026 20:46:54 +0200 Subject: [PATCH 16/26] chore(deps): Update actions/checkout action to v7 (#1746) --- .github/workflows/build-apps.yml | 12 ++++++------ .github/workflows/check-lockfile.yml | 2 +- .github/workflows/ci-codeql.yml | 2 +- .github/workflows/crowdin.yml | 2 +- .github/workflows/detect-duplicate.yml | 2 +- .github/workflows/linting.yml | 6 +++--- .github/workflows/release.yml | 4 ++-- .github/workflows/trivy-scan.yml | 2 +- .github/workflows/update-issue-form.yml | 2 +- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build-apps.yml b/.github/workflows/build-apps.yml index 3a50064c..02cb46a7 100644 --- a/.github/workflows/build-apps.yml +++ b/.github/workflows/build-apps.yml @@ -43,7 +43,7 @@ jobs: swap-storage: false - name: ๐Ÿ“ฅ Checkout code - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 @@ -143,7 +143,7 @@ jobs: swap-storage: false - name: ๐Ÿ“ฅ Checkout code - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 @@ -230,7 +230,7 @@ jobs: steps: - name: ๐Ÿ“ฅ Checkout code - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 @@ -302,7 +302,7 @@ jobs: steps: - name: ๐Ÿ“ฅ Checkout code - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 @@ -369,7 +369,7 @@ jobs: steps: - name: ๐Ÿ“ฅ Checkout code - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 @@ -439,7 +439,7 @@ jobs: steps: - name: ๐Ÿ“ฅ Checkout code - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 diff --git a/.github/workflows/check-lockfile.yml b/.github/workflows/check-lockfile.yml index efb5f221..b140e33d 100644 --- a/.github/workflows/check-lockfile.yml +++ b/.github/workflows/check-lockfile.yml @@ -19,7 +19,7 @@ jobs: steps: - name: ๐Ÿ“ฅ Checkout repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} show-progress: false diff --git a/.github/workflows/ci-codeql.yml b/.github/workflows/ci-codeql.yml index b77665f5..b9921780 100644 --- a/.github/workflows/ci-codeql.yml +++ b/.github/workflows/ci-codeql.yml @@ -27,7 +27,7 @@ jobs: steps: - name: ๐Ÿ“ฅ Checkout repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: ๐Ÿ Initialize CodeQL uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index 39883d8c..c14fe48f 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -23,7 +23,7 @@ jobs: steps: - name: ๐Ÿ“ฅ Checkout Repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 diff --git a/.github/workflows/detect-duplicate.yml b/.github/workflows/detect-duplicate.yml index 26da4f57..ebf515d7 100644 --- a/.github/workflows/detect-duplicate.yml +++ b/.github/workflows/detect-duplicate.yml @@ -21,7 +21,7 @@ jobs: contents: read steps: - name: ๐Ÿ“ฅ Checkout repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: ๐Ÿž Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index d36da31f..540c9a55 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -51,7 +51,7 @@ jobs: contents: read steps: - name: Checkout Repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 @@ -68,7 +68,7 @@ jobs: runs-on: ubuntu-26.04 steps: - name: ๐Ÿ›’ Checkout repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive @@ -104,7 +104,7 @@ jobs: steps: - name: "๐Ÿ“ฅ Checkout PR code" - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 454f8645..1dbad1b5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -64,7 +64,7 @@ jobs: steps: - name: ๐Ÿ“ฅ Checkout code - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 submodules: recursive @@ -184,7 +184,7 @@ jobs: actions: read # required for `gh run download` to list/fetch this run's artifacts steps: - name: ๐Ÿ“ฅ Checkout code - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 show-progress: false diff --git a/.github/workflows/trivy-scan.yml b/.github/workflows/trivy-scan.yml index 2f02dcfc..2e0f307b 100644 --- a/.github/workflows/trivy-scan.yml +++ b/.github/workflows/trivy-scan.yml @@ -27,7 +27,7 @@ jobs: security-events: write # upload SARIF to code scanning steps: - name: ๐Ÿ“ฅ Checkout repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 # Trivy's own action caches the vulnerability DB + binary internally # (cache-trivy-* / trivy-binary-* entries), so no manual ~/.cache/trivy diff --git a/.github/workflows/update-issue-form.yml b/.github/workflows/update-issue-form.yml index 0754735e..7f1ace97 100644 --- a/.github/workflows/update-issue-form.yml +++ b/.github/workflows/update-issue-form.yml @@ -26,7 +26,7 @@ jobs: pull-requests: write steps: - name: ๐Ÿ“ฅ Checkout repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: # On `release` events GITHUB_SHA is the tagged commit โ€” without this the # script would regenerate the form from the tag's (stale) copy and the bot From 2ec65944627d546f6c0f3cdf2674d441eb9487a3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 Jun 2026 21:19:10 +0200 Subject: [PATCH 17/26] chore(deps): Update CI dependencies to v24.17.0 (#1745) --- .github/workflows/linting.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 540c9a55..d2c70d5a 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -114,7 +114,7 @@ jobs: uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: # renovate: datasource=node-version depName=node versioning=node - node-version: "24.16.0" + node-version: "24.17.0" - name: "๐Ÿž Setup Bun" uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 From ce66f0256e0fc5da0ec86a3f7374c7a27841a0e0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 Jun 2026 21:53:02 +0200 Subject: [PATCH 18/26] chore(deps): Update dependency @shopify/flash-list to v2.0.3 (#1629) --- bun.lock | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bun.lock b/bun.lock index 8ca83cb3..a50086e8 100644 --- a/bun.lock +++ b/bun.lock @@ -16,7 +16,7 @@ "@react-native-community/netinfo": "^12.0.0", "@react-navigation/material-top-tabs": "7.4.28", "@react-navigation/native": "^7.2.5", - "@shopify/flash-list": "2.0.2", + "@shopify/flash-list": "2.0.3", "@tanstack/query-sync-storage-persister": "^5.100.14", "@tanstack/react-pacer": "^0.19.1", "@tanstack/react-query": "5.100.14", @@ -536,7 +536,7 @@ "@react-navigation/routers": ["@react-navigation/routers@7.6.0", "", { "dependencies": { "nanoid": "^3.3.11" } }, "sha512-lblhDXfS75jLc7G2K7BZGM+7cjqQXk13X/MA4fq/12r62zM+fBhhreLzYflSitrDDXFRJpSvJXy0ziiGU04Xow=="], - "@shopify/flash-list": ["@shopify/flash-list@2.0.2", "", { "dependencies": { "tslib": "2.8.1" }, "peerDependencies": { "@babel/runtime": "*", "react": "*", "react-native": "*" } }, "sha512-zhlrhA9eiuEzja4wxVvotgXHtqd3qsYbXkQ3rsBfOgbFA9BVeErpDE/yEwtlIviRGEqpuFj/oU5owD6ByaNX+w=="], + "@shopify/flash-list": ["@shopify/flash-list@2.0.3", "", { "dependencies": { "tslib": "2.8.1" }, "peerDependencies": { "@babel/runtime": "*", "react": "*", "react-native": "*" } }, "sha512-jUlHuZFoPdqRCDvOqsb2YkTttRPyV8Tb/EjCx3gE2wjr4UTM+fE0Ltv9bwBg0K7yo/SxRNXaW7xu5utusRb0xA=="], "@sideway/address": ["@sideway/address@4.1.5", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q=="], diff --git a/package.json b/package.json index fbf33a84..2f5260cc 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@react-native-community/netinfo": "^12.0.0", "@react-navigation/material-top-tabs": "7.4.28", "@react-navigation/native": "^7.2.5", - "@shopify/flash-list": "2.0.2", + "@shopify/flash-list": "2.0.3", "@tanstack/query-sync-storage-persister": "^5.100.14", "@tanstack/react-pacer": "^0.19.1", "@tanstack/react-query": "5.100.14", From e660b9887182f47d29cac379b99f6e5f0304b1c6 Mon Sep 17 00:00:00 2001 From: Gauvain Date: Fri, 19 Jun 2026 00:12:40 +0200 Subject: [PATCH 19/26] fix(mpv): force software decoding on Android emulator (#1752) --- .../modules/mpvplayer/MPVLayerRenderer.kt | 49 +++++++++++++++---- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/modules/mpv-player/android/src/main/java/expo/modules/mpvplayer/MPVLayerRenderer.kt b/modules/mpv-player/android/src/main/java/expo/modules/mpvplayer/MPVLayerRenderer.kt index 8b6808fd..93776d10 100644 --- a/modules/mpv-player/android/src/main/java/expo/modules/mpvplayer/MPVLayerRenderer.kt +++ b/modules/mpv-player/android/src/main/java/expo/modules/mpvplayer/MPVLayerRenderer.kt @@ -4,6 +4,7 @@ import android.app.UiModeManager import android.content.Context import android.content.res.Configuration import android.content.res.AssetManager +import android.os.Build import android.os.Handler import android.os.Looper import android.util.Log @@ -35,6 +36,30 @@ class MPVLayerRenderer(private val context: Context) : MPVLib.EventObserver { return uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION } + /** + * True only on the Android emulator. Its goldfish/ranchu MediaCodec can't bind a + * decode output surface (decode opens with surface 0x0): HEVC then fails cleanly and + * mpv auto-falls-back to software, but H.264 "opens" deceptively and wedges the core + * (no fallback) โ€” black video, then any command (seek/pause) deadlocks the UI thread + * โ†’ ANR. We force software decoding here. + * + * Only QEMU/SDK-exclusive signals are checked so a real device can never match โ€” a + * false positive would needlessly drop shipping hardware to software decoding. The + * emulator reports ro.hardware=goldfish|ranchu, an sdk_* product, or a generic/ + * emulator build fingerprint, none of which appear on real devices. + */ + private fun isEmulator(): Boolean { + val hardware = Build.HARDWARE.lowercase() + if (hardware == "goldfish" || hardware == "ranchu") return true + + val product = Build.PRODUCT + if (product == "sdk" || product.startsWith("sdk_")) return true + + val fingerprint = Build.FINGERPRINT + return fingerprint.startsWith("generic") || + fingerprint.contains("emulator", ignoreCase = true) + } + interface Delegate { fun onPositionChanged(position: Double, duration: Double, cacheSeconds: Double) fun onPauseChanged(isPaused: Boolean) @@ -169,15 +194,21 @@ class MPVLayerRenderer(private val context: Context) : MPVLib.EventObserver { MPVLib.setOptionString("gpu-context", "android") MPVLib.setOptionString("opengl-es", "yes") - // Hardware video decoding - // TV: zero-copy (mediacodec) for better performance on low-power devices - // Mobile: copy mode (mediacodec-copy) for better compatibility - val isTV = isTvDevice() - if (isTV) { - MPVLib.setOptionString("hwdec", "mediacodec") - MPVLib.setOptionString("profile", "fast") - } else { - MPVLib.setOptionString("hwdec", "mediacodec-copy") + // Hardware decode path: + // - Real TV hardware: zero-copy `mediacodec` (fastest on low-power devices). + // - Real phone: `mediacodec-copy` (broadest compatibility). + // - Emulator: software decode. Its MediaCodec can't bind an output surface + // (surface 0x0); HEVC then fails cleanly and mpv auto-falls-back to software, + // but H.264 "opens" deceptively and wedges the core with no fallback (black + // video, then any command โ€” seek/pause โ€” deadlocks the UI thread โ†’ ANR). + // hwdec=no makes every codec render via the gpu-next VO. Real devices unaffected. + when { + isEmulator() -> MPVLib.setOptionString("hwdec", "no") + isTvDevice() -> { + MPVLib.setOptionString("hwdec", "mediacodec") + MPVLib.setOptionString("profile", "fast") + } + else -> MPVLib.setOptionString("hwdec", "mediacodec-copy") } MPVLib.setOptionString("hwdec-codecs", "h264,hevc,mpeg4,mpeg2video,vp8,vp9,av1") From b256e99fc8fc00babf5f029cce3fd487ba6b126e Mon Sep 17 00:00:00 2001 From: Niyazaki <34636175+niyazaki@users.noreply.github.com> Date: Tue, 23 Jun 2026 09:11:38 +0200 Subject: [PATCH 20/26] fix(search): set typed text color on Android search bar (#1756) --- app/(auth)/(tabs)/(search)/index.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/(auth)/(tabs)/(search)/index.tsx b/app/(auth)/(tabs)/(search)/index.tsx index 29461b49..759dae85 100644 --- a/app/(auth)/(tabs)/(search)/index.tsx +++ b/app/(auth)/(tabs)/(search)/index.tsx @@ -305,6 +305,8 @@ export default function SearchPage() { }, hideWhenScrolling: false, autoFocus: false, + // Android: color of the user-typed text (was dark and unreadable on the dark header) + textColor: "#fff", // Android: placeholder and icon color hintTextColor: "#fff", headerIconColor: "#fff", From 517bc7bbb5aa7a4b7cde13d8b55837b9ad2ab3d2 Mon Sep 17 00:00:00 2001 From: lance chant <13349722+lancechant@users.noreply.github.com> Date: Thu, 25 Jun 2026 09:08:12 +0200 Subject: [PATCH 21/26] feat: android tv menu (#1709) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Lance Chant <13349722+lancechant@users.noreply.github.com> --- app/(auth)/(tabs)/_layout.tsx | 109 +++++++++++++++++++- components/home/TVHeroCarousel.tsx | 2 +- components/tv/TVNavBar.tsx | 155 +++++++++++++++++++++++++++++ components/tv/index.ts | 2 + hooks/useTVBackHandler.ts | 65 ++++++++---- 5 files changed, 307 insertions(+), 26 deletions(-) create mode 100644 components/tv/TVNavBar.tsx diff --git a/app/(auth)/(tabs)/_layout.tsx b/app/(auth)/(tabs)/_layout.tsx index 53fbeb91..45f246a5 100644 --- a/app/(auth)/(tabs)/_layout.tsx +++ b/app/(auth)/(tabs)/_layout.tsx @@ -3,16 +3,24 @@ import { type NativeBottomTabNavigationEventMap, type NativeBottomTabNavigationOptions, } from "@bottom-tabs/react-navigation"; -import { withLayoutContext } from "expo-router"; +import { Stack, useSegments, withLayoutContext } from "expo-router"; import type { ParamListBase, TabNavigationState, } from "expo-router/react-navigation"; +import { useCallback, useEffect, useMemo } from "react"; import { useTranslation } from "react-i18next"; import { Platform, View } from "react-native"; import { SystemBars } from "react-native-edge-to-edge"; +import type { TVNavBarTab } from "@/components/tv/TVNavBar"; +import { TVNavBar } from "@/components/tv/TVNavBar"; import { Colors } from "@/constants/Colors"; -import { useTVHomeBackHandler } from "@/hooks/useTVBackHandler"; +import useRouter from "@/hooks/useAppRouter"; +import { + isTabRoute, + useTVHomeBackHandler, + useTVTabRootBackHandler, +} from "@/hooks/useTVBackHandler"; import { useSettings } from "@/utils/atoms/settings"; import { eventBus } from "@/utils/eventBus"; @@ -33,13 +41,108 @@ export const NativeTabs = withLayoutContext< NativeBottomTabNavigationEventMap >(Navigator); +const IS_ANDROID_TV = Platform.isTV && Platform.OS === "android"; + +function TVTabLayout() { + const { settings } = useSettings(); + const { t } = useTranslation(); + const segments = useSegments(); + const router = useRouter(); + + const currentTab = segments.find(isTabRoute); + const lastSegment = segments[segments.length - 1] ?? ""; + const atTabRoot = isTabRoute(lastSegment) || lastSegment === "index"; + + const tabs: TVNavBarTab[] = useMemo( + () => + [ + { key: "(home)", label: t("tabs.home") }, + { key: "(search)", label: t("tabs.search") }, + { key: "(favorites)", label: t("tabs.favorites") }, + !settings?.streamyStatsServerUrl || settings?.hideWatchlistsTab + ? null + : { key: "(watchlists)", label: t("watchlists.title") }, + { key: "(libraries)", label: t("tabs.library") }, + !settings?.showCustomMenuLinks + ? null + : { key: "(custom-links)", label: t("tabs.custom_links") }, + { key: "(settings)", label: t("tabs.settings") }, + ].filter((tab): tab is TVNavBarTab => tab !== null), + [ + settings?.streamyStatsServerUrl, + settings?.hideWatchlistsTab, + settings?.showCustomMenuLinks, + t, + ], + ); + + const activeTabKey = currentTab ?? "(home)"; + + const visibleKeys = useMemo( + () => new Set(tabs.map((tab) => tab.key)), + [tabs], + ); + + const handleTabChange = useCallback( + (key: string) => { + if (key === currentTab) return; + + if (key === "(home)") eventBus.emit("scrollToTop"); + if (key === "(search)") eventBus.emit("searchTabPressed"); + + router.replace(`/(auth)/(tabs)/${key}`); + }, + [currentTab, router], + ); + + const navigateHome = useCallback(() => { + router.replace("/(auth)/(tabs)/(home)"); + }, [router]); + useTVTabRootBackHandler(navigateHome, atTabRoot, currentTab); + + // If current tab is no longer visible (setting changed), navigate to home + useEffect(() => { + if (!visibleKeys.has(activeTabKey) && activeTabKey !== "(home)") { + router.replace("/(auth)/(tabs)/(home)"); + } + }, [visibleKeys, activeTabKey, router]); + + return ( + + + ); +} + export default function TabLayout() { const { settings } = useSettings(); const { t } = useTranslation(); - // Handle TV back button - prevent app exit when at root + // Must be called before any conditional return (rules of hooks) useTVHomeBackHandler(); + if (IS_ANDROID_TV) { + return ; + } + return (