diff --git a/.fleet/run.json b/.fleet/run.json new file mode 100644 index 0000000..105fffa --- /dev/null +++ b/.fleet/run.json @@ -0,0 +1,40 @@ +{ + "configurations": [ + { + "type": "command", + "name": "Run iOS", + "program": "pnpm", + "args": [ + "ios" + ], + "workingDir": "apps/expo/", + }, + { + "type": "command", + "name": "Run Android", + "program": "pnpm", + "args": [ + "android" + ], + "workingDir": "apps/expo/", + }, + { + "type": "command", + "name": "Build IPA", + "program": "pnpm", + "args": [ + "ipa" + ], + "workingDir": "apps/expo/", + }, + { + "type": "command", + "name": "Build APK", + "program": "pnpm", + "args": [ + "apk" + ], + "workingDir": "apps/expo/", + }, + ] +} \ No newline at end of file diff --git a/.fleet/settings.json b/.fleet/settings.json new file mode 100644 index 0000000..6b6f63b --- /dev/null +++ b/.fleet/settings.json @@ -0,0 +1,5 @@ +{ + "editor.formatOnSave": true, + "nodejs.editor.formatOnSave.prettier.mode": "Enabled", + "nodejs.editor.formatOnSave.eslint.mode": "Enabled" +} \ No newline at end of file diff --git a/.github/workflows/build-mobile-comment.yml b/.github/workflows/build-mobile-comment.yml new file mode 100644 index 0000000..b13cc2e --- /dev/null +++ b/.github/workflows/build-mobile-comment.yml @@ -0,0 +1,112 @@ +name: "build mobile app via /build" + +on: + issue_comment: + types: [created] + +permissions: + contents: write + pull-requests: write + +jobs: + build-android: + runs-on: ubuntu-latest + if: github.event.issue.pull_request && contains(github.event.comment.body, '/build') + steps: + - uses: xt0rted/pull-request-comment-branch@v2 + id: comment-branch + + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ steps.comment-branch.outputs.head_ref }} + + - uses: pnpm/action-setup@v3 + name: Install pnpm + with: + version: 9 + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 21 + cache: "pnpm" + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: "17" + distribution: "temurin" + + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + + - name: Cache Node Modules + uses: actions/cache@v4 + with: + path: "**/node_modules" + key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} + + - name: Install dependencies + run: pnpm install + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + + - name: Build Android app + run: cd apps/expo && pnpm apk + + - name: Upload movie-web.apk as artifact + uses: actions/upload-artifact@v4 + with: + name: apk + path: ./apps/expo/android/app/build/movie-web.apk + + build-ios: + runs-on: macos-14 + if: github.event.issue.pull_request && contains(github.event.comment.body, '/build') + steps: + - uses: xt0rted/pull-request-comment-branch@v2 + id: comment-branch + + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ steps.comment-branch.outputs.head_ref }} + + - uses: pnpm/action-setup@v3 + name: Install pnpm + with: + version: 9 + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 21 + cache: "pnpm" + + - name: Cache Node Modules + uses: actions/cache@v4 + with: + path: "**/node_modules" + key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} + + - name: Install dependencies + run: pnpm install + + - name: Cache Pods + uses: actions/cache@v4 + with: + path: apps/expo/ios + key: ${{ runner.os }}-pods-${{ hashFiles('**/pnpm-lock.yaml') }} + + - name: Build iOS app + run: cd apps/expo && pnpm ipa + + - name: Upload movie-web.ipa as artifact + uses: actions/upload-artifact@v4 + with: + name: ipa + path: ./apps/expo/ios/build/movie-web.ipa diff --git a/.github/workflows/build-mobile.yml b/.github/workflows/build-mobile.yml index 862a1e6..c2384ba 100644 --- a/.github/workflows/build-mobile.yml +++ b/.github/workflows/build-mobile.yml @@ -7,8 +7,9 @@ on: permissions: contents: write + pull-requests: write -jobs: +jobs: build-android: runs-on: ubuntu-latest @@ -16,40 +17,47 @@ jobs: - name: Checkout code uses: actions/checkout@v4 + - uses: pnpm/action-setup@v3 + name: Install pnpm + with: + version: 9 + run_install: false + - name: Install Node.js uses: actions/setup-node@v4 with: node-version: 21 - - - uses: pnpm/action-setup@v2 - name: Install pnpm - with: - version: 8 - run_install: false + cache: "pnpm" - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: - java-version: '17' - distribution: 'temurin' + java-version: "17" + distribution: "temurin" - name: Setup Android SDK uses: android-actions/setup-android@v3 + - name: Cache Node Modules + uses: actions/cache@v4 + with: + path: "**/node_modules" + key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: Install dependencies run: pnpm install - - name: Build Android app - run: cd apps/expo && pnpm run apk + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 - - name: Rename apk - run: cd apps/expo && mv android/app/build/outputs/apk/release/app-release.apk android/app/build/outputs/apk/release/movie-web.apk + - name: Build Android app + run: cd apps/expo && pnpm apk - name: Upload movie-web.apk as artifact uses: actions/upload-artifact@v4 with: name: apk - path: ./apps/expo/android/app/build/outputs/apk/release/movie-web.apk + path: ./apps/expo/android/app/build/movie-web.apk build-ios: runs-on: macos-14 @@ -58,35 +66,35 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Xcode Select Version - uses: maxim-lobanov/setup-xcode@v1 + - uses: pnpm/action-setup@v3 + name: Install pnpm with: - xcode-version: '15.1.0' + version: 9 + run_install: false - name: Install Node.js uses: actions/setup-node@v4 with: node-version: 21 - - - uses: pnpm/action-setup@v2 - name: Install pnpm + cache: "pnpm" + + - name: Cache Node Modules + uses: actions/cache@v4 with: - version: 8 - run_install: false + path: "**/node_modules" + key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install + - name: Cache Pods + uses: actions/cache@v4 + with: + path: apps/expo/ios + key: ${{ runner.os }}-pods-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: Build iOS app - run: cd apps/expo && pnpm run ipa - - - name: Export .ipa from .app - run: | - cd apps/expo - mkdir -p ios/build/Build/Products/Release-iphoneos/Payload - mv ios/build/Build/Products/Release-iphoneos/movieweb.app ios/build/Build/Products/Release-iphoneos/Payload/ - cd ios/build/Build/Products/Release-iphoneos - zip -r ../../../movie-web.ipa Payload + run: cd apps/expo && pnpm ipa - name: Upload movie-web.ipa as artifact uses: actions/upload-artifact@v4 diff --git a/.github/workflows/release-mobile.yml b/.github/workflows/release-mobile.yml index d3fd8d5..9f1f8f7 100644 --- a/.github/workflows/release-mobile.yml +++ b/.github/workflows/release-mobile.yml @@ -4,28 +4,30 @@ on: push: branches: - master + workflow_dispatch: permissions: contents: write jobs: bump-version: - runs-on: ubuntu-latest + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Automated Version Bump + uses: phips28/gh-action-bump-version@v11.0.0 + with: + skip-tag: "true" + commit-message: "chore: bump mobile version to {{version}} [skip ci]" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PACKAGEJSON_DIR: "apps/expo" - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Automated Version Bump - uses: phips28/gh-action-bump-version@v10.1.1 - with: - skip-tag: 'true' - commit-message: 'chore: bump mobile version to {{version}} [skip ci]' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - build-android: runs-on: ubuntu-latest needs: [bump-version] @@ -34,40 +36,50 @@ jobs: - name: Checkout code uses: actions/checkout@v4 + - name: Pull version bump + run: git pull --all + + - uses: pnpm/action-setup@v3 + name: Install pnpm + with: + version: 9 + run_install: false + - name: Install Node.js uses: actions/setup-node@v4 with: node-version: 21 - - - uses: pnpm/action-setup@v2 - name: Install pnpm - with: - version: 8 - run_install: false + cache: "pnpm" - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: - java-version: '17' - distribution: 'temurin' + java-version: "17" + distribution: "temurin" - name: Setup Android SDK uses: android-actions/setup-android@v3 + - name: Cache Node Modules + uses: actions/cache@v4 + with: + path: "**/node_modules" + key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: Install dependencies run: pnpm install - - name: Build Android app - run: cd apps/expo && pnpm run apk + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 - - name: Rename apk - run: cd apps/expo && mv android/app/build/outputs/apk/release/app-release.apk android/app/build/outputs/apk/release/movie-web.apk + - name: Build Android app + run: cd apps/expo && pnpm apk - name: Upload movie-web.apk as artifact uses: actions/upload-artifact@v4 with: name: apk - path: ./apps/expo/android/app/build/outputs/apk/release/movie-web.apk + path: ./apps/expo/android/app/build/movie-web.apk build-ios: runs-on: macos-14 @@ -77,35 +89,38 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Xcode Select Version - uses: maxim-lobanov/setup-xcode@v1 + - name: Pull version bump + run: git pull --all + + - uses: pnpm/action-setup@v3 + name: Install pnpm with: - xcode-version: '15.1.0' + version: 9 + run_install: false - name: Install Node.js uses: actions/setup-node@v4 with: node-version: 21 - - - uses: pnpm/action-setup@v2 - name: Install pnpm + cache: "pnpm" + + - name: Cache Node Modules + uses: actions/cache@v4 with: - version: 8 - run_install: false + path: "**/node_modules" + key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install + - name: Cache Pods + uses: actions/cache@v4 + with: + path: apps/expo/ios + key: ${{ runner.os }}-pods-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: Build iOS app - run: cd apps/expo && pnpm run ipa - - - name: Export .ipa from .app - run: | - cd apps/expo - mkdir -p ios/build/Build/Products/Release-iphoneos/Payload - mv ios/build/Build/Products/Release-iphoneos/movieweb.app ios/build/Build/Products/Release-iphoneos/Payload/ - cd ios/build/Build/Products/Release-iphoneos - zip -r ../../../movie-web.ipa Payload + run: cd apps/expo && pnpm ipa - name: Upload movie-web.ipa as artifact uses: actions/upload-artifact@v4 @@ -121,6 +136,9 @@ jobs: - name: Checkout code uses: actions/checkout@v4 + - name: Pull version bump + run: git pull --all + - name: Download build artifacts uses: actions/download-artifact@v4 with: @@ -129,15 +147,47 @@ jobs: - name: Get package version id: package-version uses: martinbeentjes/npm-get-version-action@v1.3.1 + with: + path: apps/expo - name: Create GitHub Release uses: softprops/action-gh-release@v1 with: - tag_name: v${{ steps.package-version.outputs.current-version }} + tag_name: v${{ steps.package-version.outputs.current-version }} files: | movie-web.apk movie-web.ipa + generate_release_notes: true fail_on_unmatched_files: true token: ${{ env.GITHUB_TOKEN }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + app-repo: + continue-on-error: true + runs-on: ubuntu-latest + needs: [build-ios, release-app] + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Pull version bump + run: git pull --all + + - name: Download IPA artifact + uses: actions/download-artifact@v4 + with: + name: ipa + + - name: Update app-repo.json + run: | + VERSION=$(jq -r '.version' apps/expo/package.json) + DATE=$(date -u +"%Y-%m-%d") + IPA_SIZE=$(ls -l movie-web.ipa | awk '{print $5}') + NEW_ENTRY=$(jq -n --arg version "$VERSION" --arg date "$DATE" --arg size "$IPA_SIZE" --arg downloadURL "https://github.com/movie-web/native-app/releases/download/v$VERSION/movie-web.ipa" '{version: $version, date: $date, size: ($size | tonumber), downloadURL: $downloadURL}') + jq --argjson newEntry "$NEW_ENTRY" '.apps[0].versions |= [$newEntry] + .' apps/expo/app-repo.json > temp.json && mv temp.json apps/expo/app-repo.json + + - uses: EndBug/add-and-commit@v9 + with: + default_author: github_actions + message: "chore: update app-repo.json" diff --git a/.gitignore b/.gitignore index 7774961..9e9a2e8 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,8 @@ expo-env.d.ts apps/expo/.gitignore ios/ android/ +!modules/*/ios/ +!modules/*/android/ # production build @@ -45,3 +47,6 @@ yarn-error.log* # turbo .turbo + +# tamagui +.tamagui \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..c4dfda6 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,60 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Run iOS", + "request": "launch", + "runtimeArgs": [ + "ios", + ], + "cwd": "${workspaceFolder}/apps/expo", + "runtimeExecutable": "pnpm", + "skipFiles": [ + "/**" + ], + "type": "node" + }, + { + "name": "Run Android", + "request": "launch", + "runtimeArgs": [ + "android", + ], + "cwd": "${workspaceFolder}/apps/expo", + "runtimeExecutable": "pnpm", + "skipFiles": [ + "/**" + ], + "type": "node" + }, + { + "name": "Build IPA", + "request": "launch", + "runtimeArgs": [ + "ipa", + ], + "cwd": "${workspaceFolder}/apps/expo", + "runtimeExecutable": "pnpm", + "skipFiles": [ + "/**" + ], + "type": "node" + }, + { + "name": "Build APK", + "request": "launch", + "runtimeArgs": [ + "apk", + ], + "cwd": "${workspaceFolder}/apps/expo", + "runtimeExecutable": "pnpm", + "skipFiles": [ + "/**" + ], + "type": "node" + }, + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 5c96c9e..5a9385c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,5 +21,11 @@ "typescript.preferences.autoImportFileExcludePatterns": [ // Should import Text from UI components instead "react-native/Libraries/Text/Text.d.ts" - ] +], +"[github-actions-workflow]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" +}, +"[jsonc]": { + "editor.defaultFormatter": "vscode.json-language-features" +} } diff --git a/README.md b/README.md index d512e09..d009331 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,32 @@ # movie-web native-app + + +| iOS | Android | +|:--------------------------------------------------------------------------------------------------:|:----------------------------------------------------------------------------------------------------------------------------------------------------:| +| | | + +## iOS Installation + +> [!IMPORTANT] +> Sideloading with a paid certificate breaks a few features, most notably: +> - Downloads +> - Alternate App Icons +> +> We reccomend you use a local development certificate if you care about any of these. + +- **AltStore:** + - Click the Add to AltStore badge to add the movie-web repository to AltStore. + +- **Other:** + - Employ [Sideloadly](https://sideloadly.io/) or a sideloading method of your preference to install + the [ipa](https://github.com/movie-web/native-app/releases/latest/download/movie-web.ipa) directly. + ## About -It uses [Turborepo](https://turborepo.org) and contains: +This repository uses [Turborepo](https://turborepo.org) and contains: ```text .github @@ -15,56 +39,37 @@ apps ├─ Expo SDK 50 ├─ React Native using React 18 ├─ Navigation using Expo Router - ├─ Tailwind using Nativewind - └─ Typesafe API calls using tRPC + └─ Styling with Tamagui packages + ├─ api + | └─ Typesafe API calls to the backend ├─ tmdb - └─ Typesafe API calls to The Movie Database + | └─ Typesafe API calls to The Movie Database + └─ provider-utils + └─ Typesafe API calls to the video providers tooling + ├─ color + | └─ shared color palette ├─ eslint | └─ shared, fine-grained, eslint presets ├─ prettier | └─ shared prettier configuration - ├─ tailwind - | └─ shared tailwind configuration └─ typescript └─ shared tsconfig you can extend from ``` -### Configure Expo `dev`-script +## Getting started -#### Use iOS Simulator +### When it's time to add a new package -1. Make sure you have XCode and XCommand Line Tools installed [as shown on expo docs](https://docs.expo.dev/workflow/ios-simulator). +To add a new package, simply run `pnpm turbo gen init` in the monorepo root. This will prompt you for a package name as +well as if you want to install any dependencies to the new package (of course you can also do this yourself later). - > **NOTE:** If you just installed XCode, or if you have updated it, you need to open the simulator manually once. Run `npx expo start` in the root dir, and then enter `I` to launch Expo Go. After the manual launch, you can run `pnpm dev` in the root directory. - - ```diff - + "dev": "expo start --ios", - ``` - -2. Run `pnpm dev` at the project root folder. - -#### Use Android Emulator - -1. Install Android Studio tools [as shown on expo docs](https://docs.expo.dev/workflow/android-studio-emulator). - -2. Change the `dev` script at `apps/expo/package.json` to open the Android emulator. - - ```diff - + "dev": "expo start --android", - ``` - -3. Run `pnpm dev` at the project root folder. - -> **TIP:** It might be easier to run each app in separate terminal windows so you get the logs from each app separately. This is also required if you want your terminals to be interactive, e.g. to access the Expo QR code. You can run `pnpm --filter expo dev` and `pnpm --filter nextjs dev` to run each app in a separate terminal window. - -### 3. When it's time to add a new package - -To add a new package, simply run `pnpm turbo gen init` in the monorepo root. This will prompt you for a package name as well as if you want to install any dependencies to the new package (of course you can also do this yourself later). - -The generator sets up the `package.json`, `tsconfig.json` and a `index.ts`, as well as configures all the necessary configurations for tooling around your package such as formatting, linting and typechecking. When the package is created, you're ready to go build out the package. +The generator sets up the `package.json`, `tsconfig.json` and a `index.ts`, as well as configures all the necessary +configurations for tooling around your package such as formatting, linting and typechecking. When the package is +created, you're ready to go build out the package. ### References -This app is based on [create-t3-turbo](https://github.com/t3-oss/create-t3-turbo) and [Turborepo](https://turborepo.org). +This app is based on [create-t3-turbo](https://github.com/t3-oss/create-t3-turbo) +and [Turborepo](https://turborepo.org). diff --git a/apps/expo/.prettierignore b/apps/expo/.prettierignore new file mode 100644 index 0000000..c6b24ca --- /dev/null +++ b/apps/expo/.prettierignore @@ -0,0 +1 @@ +tamagui-web.css diff --git a/apps/expo/app-repo.json b/apps/expo/app-repo.json new file mode 100644 index 0000000..25d4f94 --- /dev/null +++ b/apps/expo/app-repo.json @@ -0,0 +1,18 @@ +{ + "name": "movie-web", + "apps": [ + { + "name": "movie-web", + "bundleIdentifier": "dev.movieweb.app", + "category": "entertainment", + "developerName": "movie-web", + "iconURL": "https://github.com/movie-web/native-app/blob/master/apps/expo/assets/images/icon.png?raw=true", + "localizedDescription": "This service works by displaying video files from third-party providers inside an intuitive and aesthetic user interface.", + "subtitle": "A small app for watching movies and shows easily", + "tintColor": "a87fd1", + "versions": [], + "appPermissions": {} + } + ], + "news": [] +} diff --git a/apps/expo/app.config.ts b/apps/expo/app.config.ts index 223d040..7dbc050 100644 --- a/apps/expo/app.config.ts +++ b/apps/expo/app.config.ts @@ -1,17 +1,19 @@ import type { ExpoConfig } from "expo/config"; +import { version } from "./package.json"; +import withRemoveiOSNotificationEntitlement from "./src/plugins/withRemoveiOSNotificationEntitlement"; + const defineConfig = (): ExpoConfig => ({ name: "movie-web", slug: "mw-mobile", - scheme: "dev.movieweb.app", - version: "0.1.0", - orientation: "portrait", + scheme: "movieweb", + version, icon: "./assets/images/icon.png", userInterfaceStyle: "automatic", splash: { image: "./assets/images/splash.png", resizeMode: "contain", - backgroundColor: "#ffffff", + backgroundColor: "#000000", }, updates: { fallbackToCacheTimeout: 0, @@ -20,28 +22,79 @@ const defineConfig = (): ExpoConfig => ({ ios: { bundleIdentifier: "dev.movieweb.app", supportsTablet: true, + requireFullScreen: true, + infoPlist: { + CFBundleName: "movie-web", + NSPhotoLibraryUsageDescription: + "This app saves videos to the photo library.", + NSAppTransportSecurity: { + NSAllowsArbitraryLoads: true, + }, + }, }, android: { package: "dev.movieweb.app", - adaptiveIcon: { - foregroundImage: "./assets/images/adaptive-icon.png", - backgroundColor: "#FFFFFF", - }, + permissions: ["WRITE_SETTINGS"], }, web: { favicon: "./assets/images/favicon.png", bundler: "metro", }, - // extra: { - // eas: { - // projectId: "your-eas-project-id", - // }, - // }, experiments: { tsconfigPaths: true, typedRoutes: true, }, - plugins: ["expo-router"], + plugins: [ + "expo-router", + [withRemoveiOSNotificationEntitlement as unknown as string], + [ + "expo-screen-orientation", + { + initialOrientation: "PORTRAIT_UP", + }, + ], + [ + "expo-build-properties", + { + android: { + minSdkVersion: 24, + packagingOptions: { + pickFirst: [ + "lib/x86/libcrypto.so", + "lib/x86_64/libcrypto.so", + "lib/armeabi-v7a/libcrypto.so", + "lib/arm64-v8a/libcrypto.so", + ], + }, + }, + }, + ], + [ + "expo-alternate-app-icons", + [ + "./assets/images/main.png", + "./assets/images/blue.png", + "./assets/images/gray.png", + "./assets/images/red.png", + "./assets/images/teal.png", + ], + ], + [ + "expo-media-library", + { + photosPermission: "Allow $(PRODUCT_NAME) to access your photos.", + savePhotosPermission: "Allow $(PRODUCT_NAME) to save photos.", + isAccessMediaLocationEnabled: true, + }, + ], + [ + "expo-pod-pinner", + { + targetName: "movieweb", + pods: [{ "OpenSSL-Universal": "1.1.2200" }], + }, + ], + ], }); export default defineConfig; diff --git a/apps/expo/assets/images/adaptive-icon.png b/apps/expo/assets/images/adaptive-icon.png deleted file mode 100644 index 03d6f6b..0000000 Binary files a/apps/expo/assets/images/adaptive-icon.png and /dev/null differ diff --git a/apps/expo/assets/images/blue.png b/apps/expo/assets/images/blue.png new file mode 100644 index 0000000..5e9b640 Binary files /dev/null and b/apps/expo/assets/images/blue.png differ diff --git a/apps/expo/assets/images/favicon.png b/apps/expo/assets/images/favicon.png index e75f697..9050097 100644 Binary files a/apps/expo/assets/images/favicon.png and b/apps/expo/assets/images/favicon.png differ diff --git a/apps/expo/assets/images/gray.png b/apps/expo/assets/images/gray.png new file mode 100644 index 0000000..05b0ef6 Binary files /dev/null and b/apps/expo/assets/images/gray.png differ diff --git a/apps/expo/assets/images/icon.png b/apps/expo/assets/images/icon.png index a0b1526..d1c92b1 100644 Binary files a/apps/expo/assets/images/icon.png and b/apps/expo/assets/images/icon.png differ diff --git a/apps/expo/assets/images/main.png b/apps/expo/assets/images/main.png new file mode 100644 index 0000000..c805d70 Binary files /dev/null and b/apps/expo/assets/images/main.png differ diff --git a/apps/expo/assets/images/red.png b/apps/expo/assets/images/red.png new file mode 100644 index 0000000..250892e Binary files /dev/null and b/apps/expo/assets/images/red.png differ diff --git a/apps/expo/assets/images/splash.png b/apps/expo/assets/images/splash.png index 0e89705..1b25209 100644 Binary files a/apps/expo/assets/images/splash.png and b/apps/expo/assets/images/splash.png differ diff --git a/apps/expo/assets/images/teal.png b/apps/expo/assets/images/teal.png new file mode 100644 index 0000000..4191fb3 Binary files /dev/null and b/apps/expo/assets/images/teal.png differ diff --git a/apps/expo/babel.config.js b/apps/expo/babel.config.js index 582ef1a..1967743 100644 --- a/apps/expo/babel.config.js +++ b/apps/expo/babel.config.js @@ -2,10 +2,20 @@ module.exports = function (api) { api.cache(true); return { - presets: [ - ["babel-preset-expo", { jsxImportSource: "nativewind" }], - "nativewind/babel", + presets: ["babel-preset-expo"], + plugins: [ + "@babel/plugin-transform-class-static-block", + "react-native-reanimated/plugin", + [ + "module-resolver", + { + alias: { + crypto: "react-native-quick-crypto", + stream: "stream-browserify", + buffer: "@craftzdog/react-native-buffer", + }, + }, + ], ], - plugins: ["react-native-reanimated/plugin"], }; }; diff --git a/apps/expo/index.js b/apps/expo/index.js new file mode 100644 index 0000000..d1037fb --- /dev/null +++ b/apps/expo/index.js @@ -0,0 +1,7 @@ +import "expo-router/entry"; +import "react-native-gesture-handler"; +import "@react-native-anywhere/polyfill-base64"; +import "text-encoding-polyfill"; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import crypto from "react-native-quick-crypto"; diff --git a/apps/expo/metro.config.js b/apps/expo/metro.config.js index 3a7bc95..259061d 100644 --- a/apps/expo/metro.config.js +++ b/apps/expo/metro.config.js @@ -1,19 +1,19 @@ // Learn more: https://docs.expo.dev/guides/monorepos/ const { getDefaultConfig } = require("expo/metro-config"); const { FileStore } = require("metro-cache"); -const { withNativeWind } = require("nativewind/metro"); +const { withTamagui } = require("@tamagui/metro-plugin"); const path = require("path"); module.exports = withTurborepoManagedCache( withMonorepoPaths( - withNativeWind( + withTamagui( getDefaultConfig(__dirname, { isCSSEnabled: true, }), { - input: "./src/app/styles/global.css", - configPath: "./tailwind.config.ts", + components: ["tamagui"], + config: "./tamagui.config.ts", }, ), ), diff --git a/apps/expo/modules/check-ios-certificate/expo-module.config.json b/apps/expo/modules/check-ios-certificate/expo-module.config.json new file mode 100644 index 0000000..1622170 --- /dev/null +++ b/apps/expo/modules/check-ios-certificate/expo-module.config.json @@ -0,0 +1,6 @@ +{ + "platforms": ["ios"], + "ios": { + "modules": ["CheckIosCertificateModule"] + } +} diff --git a/apps/expo/modules/check-ios-certificate/index.ts b/apps/expo/modules/check-ios-certificate/index.ts new file mode 100644 index 0000000..3052365 --- /dev/null +++ b/apps/expo/modules/check-ios-certificate/index.ts @@ -0,0 +1,11 @@ +import CheckIosCertificateModule from "./src/CheckIosCertificateModule"; + +interface CheckIosCertificateModule { + isDevelopmentProvisioningProfile(): boolean; +} + +export function isDevelopmentProvisioningProfile(): boolean { + return ( + CheckIosCertificateModule as CheckIosCertificateModule + ).isDevelopmentProvisioningProfile(); +} diff --git a/apps/expo/modules/check-ios-certificate/ios/CheckIosCertificate.podspec b/apps/expo/modules/check-ios-certificate/ios/CheckIosCertificate.podspec new file mode 100644 index 0000000..597e515 --- /dev/null +++ b/apps/expo/modules/check-ios-certificate/ios/CheckIosCertificate.podspec @@ -0,0 +1,21 @@ +Pod::Spec.new do |s| + s.name = 'CheckIosCertificate' + s.version = '1.0.0' + s.summary = 'Check if iOS certificate is Development or Production.' + s.description = 'Check if iOS certificate is Development or Production.' + s.author = 'castdrian' + s.homepage = 'https://docs.expo.dev/modules/' + s.platforms = { :ios => '13.4', :tvos => '13.4' } + s.source = { git: '' } + s.static_framework = true + + s.dependency 'ExpoModulesCore' + + # Swift/Objective-C compatibility + s.pod_target_xcconfig = { + 'DEFINES_MODULE' => 'YES', + 'SWIFT_COMPILATION_MODE' => 'wholemodule' + } + + s.source_files = "**/*.{h,m,mm,swift,hpp,cpp}" +end diff --git a/apps/expo/modules/check-ios-certificate/ios/CheckIosCertificateModule.swift b/apps/expo/modules/check-ios-certificate/ios/CheckIosCertificateModule.swift new file mode 100644 index 0000000..e7d67cb --- /dev/null +++ b/apps/expo/modules/check-ios-certificate/ios/CheckIosCertificateModule.swift @@ -0,0 +1,37 @@ +import ExpoModulesCore + +public class CheckIosCertificateModule: Module { + // Each module class must implement the definition function. The definition consists of components + // that describes the module's functionality and behavior. + // See https://docs.expo.dev/modules/module-api for more details about available components. + public func definition() -> ModuleDefinition { + // Sets the name of the module that JavaScript code will use to refer to the module. Takes a string as an argument. + // Can be inferred from module's class name, but it's recommended to set it explicitly for clarity. + // The module will be accessible from `requireNativeModule('CheckIosCertificate')` in JavaScript. + Name("CheckIosCertificate") + + // Defines a JavaScript synchronous function that runs the native code on the JavaScript thread. + Function("isDevelopmentProvisioningProfile") { () -> Any in + #if targetEnvironment(simulator) + // Running on the Simulator + return true + #else + // Check for provisioning profile for non-Simulator execution + guard let filePath = Bundle.main.path(forResource: "embedded", ofType: "mobileprovision") else { + return false + } + + let fileURL = URL(fileURLWithPath: filePath) + do { + let data = try String(contentsOf: fileURL, encoding: .ascii) + let cleared = data.components(separatedBy: .whitespacesAndNewlines).joined() + return cleared.contains("get-task-allow") + } catch { + // Handling error if the file read fails + print("Error reading provisioning profile: \(error)") + return false + } + #endif + } + } +} diff --git a/apps/expo/modules/check-ios-certificate/src/CheckIosCertificateModule.android.ts b/apps/expo/modules/check-ios-certificate/src/CheckIosCertificateModule.android.ts new file mode 100644 index 0000000..fa041d2 --- /dev/null +++ b/apps/expo/modules/check-ios-certificate/src/CheckIosCertificateModule.android.ts @@ -0,0 +1,10 @@ +import { UnavailabilityError } from "expo-modules-core"; + +export default { + isDevelopmentProvisioningProfile: () => { + throw new UnavailabilityError( + "CheckIosCertificate", + "isDevelopmentProvisioningProfile", + ); + }, +}; diff --git a/apps/expo/modules/check-ios-certificate/src/CheckIosCertificateModule.ts b/apps/expo/modules/check-ios-certificate/src/CheckIosCertificateModule.ts new file mode 100644 index 0000000..4b82603 --- /dev/null +++ b/apps/expo/modules/check-ios-certificate/src/CheckIosCertificateModule.ts @@ -0,0 +1,5 @@ +import { requireNativeModule } from "expo-modules-core"; + +// It loads the native module object from the JSI or falls back to +// the bridge module (from NativeModulesProxy) if the remote debugger is on. +export default requireNativeModule("CheckIosCertificate"); diff --git a/apps/expo/package.json b/apps/expo/package.json index 215186c..8ea2d77 100644 --- a/apps/expo/package.json +++ b/apps/expo/package.json @@ -1,8 +1,8 @@ { "name": "@movie-web/mobile", - "version": "0.1.0", + "version": "0.0.1", "private": true, - "main": "expo-router/entry", + "main": "index.js", "scripts": { "clean": "git clean -xdf .expo .turbo node_modules", "dev": "expo start", @@ -10,36 +10,75 @@ "dev:ios": "expo start -c --ios", "android": "expo run:android", "ios": "expo run:ios", - "apk": "expo prebuild --platform=android && cd android && ./gradlew assembleRelease", - "ipa": "expo prebuild --platform=ios && cd ios && xcodebuild -workspace movieweb.xcworkspace -scheme movieweb -sdk iphoneos -configuration Release -derivedDataPath build -destination generic/platform=iOS CODE_SIGN_IDENTITY=\"\" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO", - "ipa:sim": "expo prebuild --platform=ios && cd ios && xcodebuild -workspace movieweb.xcworkspace -scheme movieweb -sdk iphonesimulator -configuration Release -derivedDataPath build -destination \"generic/platform=iOS Simulator\" CODE_SIGN_IDENTITY=\"\" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO", + "apk": "expo prebuild --platform=android && cd android && ./gradlew assembleRelease && mv app/build/outputs/apk/release/app-release.apk app/build/movie-web.apk", + "ipa": "expo prebuild --platform=ios && cd ios && xcodebuild clean archive -workspace movieweb.xcworkspace -scheme movieweb -configuration Release -destination generic/platform=iOS -archivePath build/movieweb.xcarchive CODE_SIGN_IDENTITY=\"\" CODE_SIGNING_ALLOWED=NO | xcbeautify && cd build/movieweb.xcarchive/Products && mv Applications Payload && zip -r movie-web.ipa Payload && mv movie-web.ipa ../..", + "ipa:sim": "expo prebuild --platform=ios && cd ios && xcodebuild clean archive -workspace movieweb.xcworkspace -scheme movieweb -configuration Release -destination \"generic/platform=iOS Simulator\" -archivePath build/movieweb.xcarchive CODE_SIGN_IDENTITY=\"\" CODE_SIGNING_ALLOWED=NO | xcbeautify && cd build/movieweb.xcarchive/Products && mv Applications Payload && zip -r movie-web.ipa Payload && mv movie-web.ipa ../..", "format": "prettier --check . --ignore-path ../../.gitignore", "lint": "eslint .", "typecheck": "tsc --noEmit" }, "dependencies": { "@expo/metro-config": "^0.17.3", + "@movie-web/api": "*", + "@movie-web/colors": "*", + "@movie-web/provider-utils": "*", "@movie-web/tmdb": "*", + "@octokit/rest": "^20.0.2", + "@react-native-anywhere/polyfill-base64": "0.0.1-alpha.0", + "@react-navigation/native": "^6.1.9", + "@salihgun/react-native-video-processor": "^0.3.1", + "@tamagui/animations-moti": "^1.94.0", + "@tamagui/babel-plugin": "^1.94.0", + "@tamagui/config": "^1.94.0", + "@tamagui/metro-plugin": "^1.94.0", + "@tamagui/toast": "1.94.0", + "@tanstack/react-query": "^5.22.2", + "burnt": "^0.12.2", "class-variance-authority": "^0.7.0", - "clsx": "^2.1.0", - "expo": "~50.0.5", + "expo": "~50.0.14", + "expo-alternate-app-icons": "^0.1.7", + "expo-application": "~5.8.3", + "expo-av": "~13.10.5", + "expo-brightness": "~11.8.0", + "expo-build-properties": "~0.11.1", + "expo-clipboard": "^5.0.1", "expo-constants": "~15.4.5", + "expo-file-system": "~16.0.8", + "expo-haptics": "~12.8.1", + "expo-linear-gradient": "^12.7.2", "expo-linking": "~6.2.2", - "expo-router": "~3.4.6", + "expo-media-library": "~15.9.1", + "expo-navigation-bar": "^2.8.1", + "expo-network": "~5.8.0", + "expo-pod-pinner": "^1.0.1", + "expo-router": "~3.4.8", + "expo-screen-orientation": "~6.4.1", "expo-splash-screen": "~0.26.4", "expo-status-bar": "~1.11.1", + "expo-system-ui": "^2.9.3", "expo-web-browser": "^12.8.2", - "nativewind": "~4.0.23", + "ffmpeg-kit-react-native": "^6.0.2", + "immer": "^10.0.3", + "iso-639-1": "^3.1.2", "react": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.73.2", - "react-native-css-interop": "~0.0.22", + "react-native": "0.73.6", + "react-native-context-menu-view": "^1.14.1", "react-native-gesture-handler": "~2.14.1", + "react-native-markdown-display": "^7.0.2", + "react-native-mmkv": "^2.12.2", + "react-native-modal": "^13.0.1", + "react-native-quick-base64": "^2.0.8", + "react-native-quick-crypto": "^0.6.1", "react-native-reanimated": "~3.6.2", "react-native-safe-area-context": "~4.8.2", "react-native-screens": "~3.29.0", + "react-native-svg": "14.1.0", "react-native-web": "^0.19.10", - "tailwind-merge": "^2.2.1" + "subsrt-ts": "^2.1.2", + "tamagui": "^1.94.0", + "text-encoding-polyfill": "^0.6.7", + "zustand": "^4.4.7" }, "devDependencies": { "@babel/core": "^7.23.9", @@ -47,14 +86,14 @@ "@babel/runtime": "^7.23.9", "@movie-web/eslint-config": "workspace:^0.2.0", "@movie-web/prettier-config": "workspace:^0.1.0", - "@movie-web/tailwind-config": "workspace:^0.1.0", "@movie-web/tsconfig": "workspace:^0.1.0", + "@tanstack/eslint-plugin-query": "^5.20.1", "@types/babel__core": "^7.20.5", "@types/react": "^18.2.48", + "babel-plugin-module-resolver": "^5.0.0", "eslint": "^8.56.0", "prettier": "^3.1.1", - "tailwindcss": "^3.4.0", - "typescript": "^5.3.3" + "typescript": "^5.4.3" }, "eslintConfig": { "root": true, diff --git a/apps/expo/src/app/(downloads)/[tmdbId].tsx b/apps/expo/src/app/(downloads)/[tmdbId].tsx new file mode 100644 index 0000000..acb4251 --- /dev/null +++ b/apps/expo/src/app/(downloads)/[tmdbId].tsx @@ -0,0 +1,65 @@ +import { useEffect, useMemo } from "react"; +import { Stack, useLocalSearchParams, useRouter } from "expo-router"; +import { YStack } from "tamagui"; + +import { DownloadItem } from "~/components/DownloadItem"; +import ScreenLayout from "~/components/layout/ScreenLayout"; +import { PlayerStatus } from "~/stores/player/slices/interface"; +import { usePlayerStore } from "~/stores/player/store"; +import { useDownloadHistoryStore } from "~/stores/settings"; + +export default function Page() { + const { tmdbId } = useLocalSearchParams(); + const allDownloads = useDownloadHistoryStore((state) => state.downloads); + const resetVideo = usePlayerStore((state) => state.resetVideo); + const setVideoSrc = usePlayerStore((state) => state.setVideoSrc); + const setIsLocalFile = usePlayerStore((state) => state.setIsLocalFile); + const setPlayerStatus = usePlayerStore((state) => state.setPlayerStatus); + const router = useRouter(); + + const download = useMemo(() => { + return allDownloads.find((download) => download.media.tmdbId === tmdbId); + }, [allDownloads, tmdbId]); + + useEffect(() => { + if (!download) router.back(); + }, [download, router]); + + const handlePress = (localPath?: string) => { + if (!localPath) return; + resetVideo(); + setIsLocalFile(true); + setPlayerStatus(PlayerStatus.READY); + setVideoSrc({ + uri: localPath, + }); + router.push({ + pathname: "/videoPlayer", + }); + }; + + return ( + + + + {download?.downloads.map((download) => { + return ( + handlePress(download.localPath)} + /> + ); + })} + + + ); +} diff --git a/apps/expo/src/app/(downloads)/_layout.tsx b/apps/expo/src/app/(downloads)/_layout.tsx new file mode 100644 index 0000000..a6a9e05 --- /dev/null +++ b/apps/expo/src/app/(downloads)/_layout.tsx @@ -0,0 +1,14 @@ +import { Stack } from "expo-router"; + +import { BrandPill } from "~/components/BrandPill"; + +export default function Layout() { + return ( + + ); +} diff --git a/apps/expo/src/app/(tabs)/_layout.tsx b/apps/expo/src/app/(tabs)/_layout.tsx index 48a098f..b866b3e 100644 --- a/apps/expo/src/app/(tabs)/_layout.tsx +++ b/apps/expo/src/app/(tabs)/_layout.tsx @@ -1,24 +1,39 @@ -import { View } from "react-native"; +import { Platform } from "react-native"; +import * as Haptics from "expo-haptics"; import { Tabs } from "expo-router"; +import * as ScreenOrientation from "expo-screen-orientation"; +import { useTheme, View } from "tamagui"; -import Colors from "@movie-web/tailwind-config/colors"; - +import { MovieWebSvg } from "~/components/Icon"; +import SvgTabBarIcon from "~/components/SvgTabBarIcon"; import TabBarIcon from "~/components/TabBarIcon"; export default function TabLayout() { + const theme = useTheme(); return ( ({ + tabPress: () => { + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + }, + focus: () => { + void ScreenOrientation.lockAsync( + ScreenOrientation.OrientationLock.PORTRAIT_UP, + ); + }, + })} screenOptions={{ headerShown: false, - tabBarActiveTintColor: Colors.primary[100], + tabBarActiveTintColor: theme.tabBarIconFocused.val, tabBarStyle: { - backgroundColor: Colors.secondary[700], + backgroundColor: theme.tabBarBackground.val, borderTopColor: "transparent", borderTopRightRadius: 20, borderTopLeftRadius: 20, + paddingBottom: Platform.select({ ios: 100 }), height: 80, }, tabBarItemStyle: { @@ -42,11 +57,11 @@ export default function TabLayout() { }} /> ( - + ), }} /> @@ -55,13 +70,35 @@ export default function TabLayout() { options={{ title: "Search", tabBarLabel: "", - tabBarIcon: () => ( - + tabBarIcon: ({ focused }) => ( + ), }} /> + ( + + + + ), + }} + /> - ( - - ), - }} - /> ); } diff --git a/apps/expo/src/app/(tabs)/about.tsx b/apps/expo/src/app/(tabs)/about.tsx deleted file mode 100644 index a4a13e9..0000000 --- a/apps/expo/src/app/(tabs)/about.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import ScreenLayout from "~/components/layout/ScreenLayout"; -import { Text } from "~/components/ui/Text"; - -export default function AboutScreen() { - return ( - - - No content is served from movie-web directly and movie web does not host - anything. - - - ); -} diff --git a/apps/expo/src/app/(tabs)/account.tsx b/apps/expo/src/app/(tabs)/account.tsx deleted file mode 100644 index 9fe4517..0000000 --- a/apps/expo/src/app/(tabs)/account.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import ScreenLayout from "~/components/layout/ScreenLayout"; -import { Text } from "~/components/ui/Text"; - -export default function AccountScreen() { - return ( - - Hey Bro! what are you up to? - - ); -} diff --git a/apps/expo/src/app/(tabs)/downloads.tsx b/apps/expo/src/app/(tabs)/downloads.tsx new file mode 100644 index 0000000..cc0997b --- /dev/null +++ b/apps/expo/src/app/(tabs)/downloads.tsx @@ -0,0 +1,165 @@ +import React from "react"; +import { Alert, Platform } from "react-native"; +import { useFocusEffect, useRouter } from "expo-router"; +import { MaterialCommunityIcons } from "@expo/vector-icons"; +import { isDevelopmentProvisioningProfile } from "modules/check-ios-certificate"; +import { ScrollView, useTheme, YStack } from "tamagui"; + +import type { ScrapeMedia } from "@movie-web/provider-utils"; + +import { DownloadItem, ShowDownloadItem } from "~/components/DownloadItem"; +import ScreenLayout from "~/components/layout/ScreenLayout"; +import { MWButton } from "~/components/ui/Button"; +import { useDownloadManager } from "~/hooks/useDownloadManager"; +import { PlayerStatus } from "~/stores/player/slices/interface"; +import { usePlayerStore } from "~/stores/player/store"; +import { useDownloadHistoryStore } from "~/stores/settings"; + +const exampleMovieMedia: ScrapeMedia = { + type: "movie", + title: "Avengers: Endgame", + releaseYear: 2019, + imdbId: "tt4154796", + tmdbId: "299534", +}; + +const getExampleShowMedia = (seasonNumber: number, episodeNumber: number) => + ({ + type: "show", + title: "Loki", + releaseYear: 2021, + imdbId: "tt9140554", + tmdbId: "84958", + season: { + number: seasonNumber, + tmdbId: seasonNumber.toString(), + }, + episode: { + number: episodeNumber, + tmdbId: episodeNumber.toString(), + }, + }) as const; + +const TestDownloadButton = (props: { + media: ScrapeMedia; + type: "hls" | "mp4"; + url: string; +}) => { + const { startDownload } = useDownloadManager(); + const theme = useTheme(); + return ( + + } + onPress={async () => { + await startDownload(props.url, props.type, props.media).catch( + console.error, + ); + }} + > + test download + {props.type === "hls" ? " (hls)" : "(mp4)"}{" "} + {props.media.type === "show" ? "show" : "movie"} + + ); +}; + +const DownloadsScreen: React.FC = () => { + const downloads = useDownloadHistoryStore((state) => state.downloads); + const resetVideo = usePlayerStore((state) => state.resetVideo); + const setVideoSrc = usePlayerStore((state) => state.setVideoSrc); + const setIsLocalFile = usePlayerStore((state) => state.setIsLocalFile); + const setPlayerStatus = usePlayerStore((state) => state.setPlayerStatus); + const router = useRouter(); + + useFocusEffect( + React.useCallback(() => { + if (Platform.OS === "ios" && !isDevelopmentProvisioningProfile()) { + Alert.alert( + "Production Certificate", + "Download functionality is not available when the application is signed with a distribution certificate.", + [ + { + text: "OK", + onPress: () => router.back(), + }, + ], + ); + } + }, [router]), + ); + + const handlePress = (localPath?: string) => { + if (!localPath) return; + resetVideo(); + setIsLocalFile(true); + setPlayerStatus(PlayerStatus.READY); + setVideoSrc({ + uri: localPath, + }); + router.push({ + pathname: "/videoPlayer", + }); + }; + + return ( + + + + + + + + + {downloads.map((download) => { + if (download.downloads.length === 0) return null; + if (download.media.type === "movie") { + return ( + handlePress(download.downloads[0]!.localPath)} + /> + ); + } else { + return ( + + ); + } + })} + + + ); +}; + +export default DownloadsScreen; diff --git a/apps/expo/src/app/(tabs)/index.tsx b/apps/expo/src/app/(tabs)/index.tsx index 0b86033..7e015db 100644 --- a/apps/expo/src/app/(tabs)/index.tsx +++ b/apps/expo/src/app/(tabs)/index.tsx @@ -1,10 +1,23 @@ +import React from "react"; +import { View } from "tamagui"; + +import { ItemListSection } from "~/components/item/ItemListSection"; import ScreenLayout from "~/components/layout/ScreenLayout"; -import { Text } from "~/components/ui/Text"; +import { useBookmarkStore, useWatchHistoryStore } from "~/stores/settings"; export default function HomeScreen() { + const { bookmarks } = useBookmarkStore(); + const { watchHistory } = useWatchHistoryStore(); + return ( - - Movies will be listed here - + + + + x.item)} + /> + + ); } diff --git a/apps/expo/src/app/(tabs)/movie-web.tsx b/apps/expo/src/app/(tabs)/movie-web.tsx new file mode 100644 index 0000000..a73a7c1 --- /dev/null +++ b/apps/expo/src/app/(tabs)/movie-web.tsx @@ -0,0 +1,10 @@ +import { AccountInformation } from "~/components/account/AccountInformation"; +import { AccountGetStarted } from "~/components/account/GetStarted"; +import { useAuthStore } from "~/stores/settings"; + +export default function MovieWebScreen() { + const account = useAuthStore((state) => state.account); + + if (account) return ; + return ; +} diff --git a/apps/expo/src/app/(tabs)/search.tsx b/apps/expo/src/app/(tabs)/search.tsx new file mode 100644 index 0000000..0f77f5f --- /dev/null +++ b/apps/expo/src/app/(tabs)/search.tsx @@ -0,0 +1,159 @@ +import React, { useEffect, useState } from "react"; +import { Keyboard } from "react-native"; +import Animated, { + Easing, + useAnimatedStyle, + useSharedValue, + withTiming, +} from "react-native-reanimated"; +import { useQuery } from "@tanstack/react-query"; +import { View, ZStack } from "tamagui"; + +import { getMediaPoster, searchTitle } from "@movie-web/tmdb"; + +import type { ItemData } from "~/components/item/item"; +import Item from "~/components/item/item"; +import ScreenLayout from "~/components/layout/ScreenLayout"; +import { SearchBar } from "~/components/ui/Searchbar"; + +export default function SearchScreen() { + const [query, setQuery] = useState(""); + const translateY = useSharedValue(0); + const fadeAnim = useSharedValue(1); + const searchResultsOpacity = useSharedValue(0); + const searchResultsScale = useSharedValue(0.95); + const [searchResultsLoaded, setSearchResultsLoaded] = useState(false); + + const { data } = useQuery({ + queryKey: ["searchResults", query], + queryFn: () => fetchSearchResults(query), + }); + + useEffect(() => { + if (data && data.length > 0 && query) { + searchResultsOpacity.value = withTiming(1, { duration: 500 }); + searchResultsScale.value = withTiming(1, { duration: 500 }); + setSearchResultsLoaded(true); + } else if (!query) { + searchResultsOpacity.value = withTiming(0, { duration: 500 }); + searchResultsScale.value = withTiming(0.95, { duration: 500 }); + setSearchResultsLoaded(false); + } + }, [data, query, searchResultsOpacity, searchResultsScale]); + + useEffect(() => { + const keyboardWillShowListener = Keyboard.addListener( + "keyboardWillShow", + (e) => { + translateY.value = withTiming( + -(e.endCoordinates.height - 100), // determines the height of the Searchbar above keyboard, use Platform.select to adjust value if needed + { + duration: e.duration ?? 250, // duration always returns 0 on Android, adjust value if needed + easing: Easing.out(Easing.ease), + }, + ); + }, + ); + + const keyboardWillHideListener = Keyboard.addListener( + "keyboardWillHide", + () => { + translateY.value = withTiming(0, { + duration: 250, + easing: Easing.out(Easing.ease), + }); + }, + ); + + return () => { + keyboardWillShowListener.remove(); + keyboardWillHideListener.remove(); + }; + }, [translateY]); + + const animatedStyle = useAnimatedStyle(() => { + return { + transform: [{ translateY: translateY.value }], + opacity: fadeAnim.value, + }; + }); + + const searchResultsStyle = useAnimatedStyle(() => { + return { + opacity: searchResultsOpacity.value, + transform: [{ scale: searchResultsScale.value }], + }; + }); + + const handleScrollBegin = () => { + fadeAnim.value = withTiming(0, { + duration: 100, + }); + }; + + const handleScrollEnd = () => { + fadeAnim.value = withTiming(1, { + duration: 100, + }); + }; + + return ( + + + + + + {data?.map((item, index) => ( + + + + ))} + + + + + + + + + ); +} + +async function fetchSearchResults(query: string): Promise { + const results = await searchTitle(query); + + return results.map((result) => ({ + id: result.id.toString(), + title: result.media_type === "tv" ? result.name : result.title, + posterUrl: getMediaPoster(result.poster_path), + release_date: new Date( + result.media_type === "tv" ? result.first_air_date : result.release_date, + ), + year: new Date( + result.media_type === "tv" ? result.first_air_date : result.release_date, + ).getFullYear(), + type: result.media_type, + })); +} diff --git a/apps/expo/src/app/(tabs)/search/Searchbar.tsx b/apps/expo/src/app/(tabs)/search/Searchbar.tsx deleted file mode 100644 index 5de78f4..0000000 --- a/apps/expo/src/app/(tabs)/search/Searchbar.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { useCallback, useRef, useState } from "react"; -import { TextInput, View } from "react-native"; -import { useFocusEffect } from "expo-router"; -import { FontAwesome5 } from "@expo/vector-icons"; - -import Colors from "@movie-web/tailwind-config/colors"; - -export default function Searchbar({ - onSearchChange, -}: { - onSearchChange: (text: string) => void; -}) { - const [keyword, setKeyword] = useState(""); - const inputRef = useRef(null); - - useFocusEffect( - useCallback(() => { - // When the screen is focused - const focus = () => { - setTimeout(() => { - inputRef?.current?.focus(); - }, 20); - }; - focus(); - return focus; // cleanup - }, []), - ); - - const handleChange = (text: string) => { - setKeyword(text); - onSearchChange(text); - }; - - return ( - - - - - - - ); -} diff --git a/apps/expo/src/app/(tabs)/search/_layout.tsx b/apps/expo/src/app/(tabs)/search/_layout.tsx deleted file mode 100644 index 63937ac..0000000 --- a/apps/expo/src/app/(tabs)/search/_layout.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import React, { useState } from "react"; -import { ScrollView, View } from "react-native"; - -import { getMediaPoster, searchTitle } from "@movie-web/tmdb"; - -import type { ItemData } from "~/components/item/item"; -import Item from "~/components/item/item"; -import ScreenLayout from "~/components/layout/ScreenLayout"; -import { Text } from "~/components/ui/Text"; -import Searchbar from "./Searchbar"; - -export default function SearchScreen() { - const [searchResults, setSearchResults] = useState([]); - - const handleSearchChange = async (query: string) => { - if (query.length > 0) { - const results = await fetchSearchResults(query).catch(() => []); - setSearchResults(results); - } else { - setSearchResults([]); - } - }; - - return ( - - - Search - - } - subtitle="Looking for something?" - > - - - {searchResults.map((item, index) => ( - - - - ))} - - - - ); -} - -async function fetchSearchResults(query: string): Promise { - const results = await searchTitle(query); - - return results.map((result) => ({ - id: result.id.toString(), - title: result.media_type === "tv" ? result.name : result.title, - posterUrl: getMediaPoster(result.poster_path), - year: new Date( - result.media_type === "tv" ? result.first_air_date : result.release_date, - ).getFullYear(), - type: result.media_type, - })); -} diff --git a/apps/expo/src/app/(tabs)/settings.tsx b/apps/expo/src/app/(tabs)/settings.tsx index bf4fbc8..810287c 100644 --- a/apps/expo/src/app/(tabs)/settings.tsx +++ b/apps/expo/src/app/(tabs)/settings.tsx @@ -1,10 +1,525 @@ +import type { SelectProps } from "tamagui"; +import React, { useState } from "react"; +import { Platform } from "react-native"; +import Markdown from "react-native-markdown-display"; +import * as Application from "expo-application"; +import * as Brightness from "expo-brightness"; +import * as FileSystem from "expo-file-system"; +import * as WebBrowser from "expo-web-browser"; +import { + FontAwesome, + MaterialCommunityIcons, + MaterialIcons, +} from "@expo/vector-icons"; +import { useMutation } from "@tanstack/react-query"; +import { + Adapt, + ScrollView, + Select, + Sheet, + Spinner, + Text, + useTheme, + View, + XStack, + YStack, +} from "tamagui"; + +import type { ThemeStoreOption } from "~/stores/theme"; import ScreenLayout from "~/components/layout/ScreenLayout"; -import { Text } from "~/components/ui/Text"; +import { MWButton } from "~/components/ui/Button"; +import { MWSelect } from "~/components/ui/Select"; +import { MWSeparator } from "~/components/ui/Separator"; +import { MWSwitch } from "~/components/ui/Switch"; +import { useToast } from "~/hooks/useToast"; +import { checkForUpdate } from "~/lib/update"; +import { + useNetworkSettingsStore, + usePlayerSettingsStore, +} from "~/stores/settings"; +import { useThemeStore } from "~/stores/theme"; + +const themeOptions: ThemeStoreOption[] = [ + "main", + "blue", + "gray", + "red", + "teal", +]; + +const defaultQualityOptions = ["Highest", "Lowest"]; export default function SettingsScreen() { + const theme = useTheme(); + const { gestureControls, setGestureControls, autoPlay, setAutoPlay } = + usePlayerSettingsStore(); + const { allowMobileData, setAllowMobileData } = useNetworkSettingsStore(); + const [showUpdateSheet, setShowUpdateSheet] = useState(false); + const [updateMarkdownContent, setUpdateMarkdownContent] = useState(""); + const [downloadUrl, setDownloadUrl] = useState(""); + const { showToast } = useToast(); + + const mutation = useMutation({ + mutationKey: ["checkForUpdate"], + mutationFn: checkForUpdate, + onSuccess: (res) => { + if (res) { + setUpdateMarkdownContent(res.data.body!); + setDownloadUrl( + res.data.assets.find( + (asset) => + asset.name === + `movie-web.${Platform.select({ ios: "ipa", android: "apk" })}`, + )?.browser_download_url ?? "", + ); + setShowUpdateSheet(true); + } else { + showToast("No updates available"); + } + }, + }); + + const handleGestureControlsToggle = async (isEnabled: boolean) => { + if (isEnabled) { + const { status } = await Brightness.requestPermissionsAsync(); + if (status === Brightness.PermissionStatus.GRANTED) { + setGestureControls(isEnabled); + } + } else { + setGestureControls(isEnabled); + } + }; + + const clearCacheDirectory = async () => { + const cacheDirectory = `${FileSystem.cacheDirectory}movie-web`; + if (!cacheDirectory) return; + + try { + await FileSystem.deleteAsync(cacheDirectory, { idempotent: true }); + showToast("Cache cleared", { + burntOptions: { preset: "done" }, + }); + } catch (error) { + console.error("Error clearing cache directory:", error); + showToast("Error clearing cache", { + burntOptions: { preset: "error" }, + }); + } + }; + return ( - - Settings would be listed in here. Coming soon + + + + + + Appearance + + + + + + Theme + + + + + + + + + Player + + + + + + Gesture controls + + + + + + + + Autoplay + + + + + + + + + + + Network + + + + + + Default quality (Wi-Fi) + + + + + + Default quality (Data) + + + + + + Allow downloads on mobile data + + + + + + + + + + + App + + + + + + Version {Application.nativeApplicationVersion} + + + } + iconAfter={ + <>{mutation.isPending && } + } + disabled={mutation.isPending} + onPress={() => mutation.mutate()} + > + Update + + + + + Storage + + + } + onPress={() => clearCacheDirectory()} + > + Clear Cache + + + + + + + ); } + +export function UpdateSheet({ + markdownContent, + open, + setShowUpdateSheet, + downloadUrl, +}: { + markdownContent: string; + open: boolean; + setShowUpdateSheet: (value: boolean) => void; + downloadUrl: string; +}) { + const theme = useTheme(); + + return ( + + + + + + {markdownContent} + + + + } + onPress={() => WebBrowser.openBrowserAsync(downloadUrl)} + > + Download + + + + + ); +} + +export function ThemeSelector(props: SelectProps) { + const theme = useTheme(); + const themeStore = useThemeStore((s) => s.theme); + const setTheme = useThemeStore((s) => s.setTheme); + + return ( + + + } + > + + + + + + + + + + + + + + + + {themeOptions.map((item, i) => ( + + + {item} + + + + + + ))} + + + + ); +} + +interface DefaultQualitySelectorProps extends SelectProps { + qualityType: "wifi" | "data"; +} + +export function DefaultQualitySelector(props: DefaultQualitySelectorProps) { + const theme = useTheme(); + const { + wifiDefaultQuality, + mobileDataDefaultQuality, + setWifiDefaultQuality, + setMobileDataDefaultQuality, + } = useNetworkSettingsStore(); + + return ( + + + } + > + + + + + + + + + + + + + + + + {defaultQualityOptions.map((item, i) => ( + + + {item} + + + + + + ))} + + + + ); +} diff --git a/apps/expo/src/app/[...missing].tsx b/apps/expo/src/app/[...missing].tsx index 1844311..032cc24 100644 --- a/apps/expo/src/app/[...missing].tsx +++ b/apps/expo/src/app/[...missing].tsx @@ -1,19 +1,23 @@ -import { View } from "react-native"; +import * as Linking from "expo-linking"; import { Link, Stack } from "expo-router"; - -import { Text } from "~/components/ui/Text"; +import { Text, View } from "tamagui"; export default function NotFoundScreen() { + if (Linking.useURL()) return null; return ( <> - - - This screen doesn't exist. - + + This screen doesn't exist. - - Go to home screen! + + Go to home screen! diff --git a/apps/expo/src/app/_layout.tsx b/apps/expo/src/app/_layout.tsx index 623f4b3..a8cd809 100644 --- a/apps/expo/src/app/_layout.tsx +++ b/apps/expo/src/app/_layout.tsx @@ -1,18 +1,18 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { useEffect } from "react"; -import { useColorScheme } from "react-native"; +import { GestureHandlerRootView } from "react-native-gesture-handler"; import { useFonts } from "expo-font"; import { SplashScreen, Stack } from "expo-router"; import FontAwesome from "@expo/vector-icons/FontAwesome"; -import { - DarkTheme, - DefaultTheme, - ThemeProvider, -} from "@react-navigation/native"; +import { DarkTheme, ThemeProvider } from "@react-navigation/native"; +import { ToastProvider, ToastViewport } from "@tamagui/toast"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { TamaguiProvider, Theme, useTheme } from "tamagui"; +import tamaguiConfig from "tamagui.config"; -import Colors from "@movie-web/tailwind-config/colors"; - -import "./styles/global.css"; +import { useThemeStore } from "~/stores/theme"; +// @ts-expect-error - Without named import it causes an infinite loop +import _styles from "../../tamagui-web.css"; export { // Catch any errors thrown by the Layout component. @@ -29,6 +29,8 @@ SplashScreen.preventAutoHideAsync().catch(() => { /* reloading the app might trigger this, so it's safe to ignore */ }); +const queryClient = new QueryClient(); + export default function RootLayout() { const [loaded, error] = useFonts({ OpenSansRegular: require("../../assets/fonts/OpenSans-Regular.ttf"), @@ -57,25 +59,60 @@ export default function RootLayout() { return null; } - return ; + return ( + + + + ); +} + +function ScreenStacks() { + const theme = useTheme(); + + return ( + + + + ); } function RootLayoutNav() { - const colorScheme = useColorScheme(); + const themeStore = useThemeStore((s) => s.theme); return ( - - - - - + + + + + + + + + + + + ); } diff --git a/apps/expo/src/app/components/item/item.tsx b/apps/expo/src/app/components/item/item.tsx deleted file mode 100644 index f146621..0000000 --- a/apps/expo/src/app/components/item/item.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Image, View } from "react-native"; - -import { Text } from "~/components/ui/Text"; - -export interface ItemData { - id: string; - title: string; - type: "movie" | "tv"; - year: number; - posterUrl: string; -} - -export default function Item({ data }: { data: ItemData }) { - const { title, type, year, posterUrl } = data; - - return ( - - - - - {title} - - - {type === "tv" ? "Show" : "Movie"} - - - {year} - - - ); -} diff --git a/apps/expo/src/app/components/layout/ScreenLayout.tsx b/apps/expo/src/app/components/layout/ScreenLayout.tsx deleted file mode 100644 index 339626d..0000000 --- a/apps/expo/src/app/components/layout/ScreenLayout.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { View } from "react-native"; - -import { Text } from "~/components/ui/Text"; - -interface Props { - title?: React.ReactNode | string; - subtitle?: string; - children?: React.ReactNode; -} - -export default function ScreenLayout({ title, subtitle, children }: Props) { - return ( - - {typeof title === "string" && ( - {title} - )} - {typeof title !== "string" && title} - {subtitle} - {children} - - ); -} diff --git a/apps/expo/src/app/components/ui/Text.tsx b/apps/expo/src/app/components/ui/Text.tsx deleted file mode 100644 index 5375b8f..0000000 --- a/apps/expo/src/app/components/ui/Text.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type { TextProps } from "react-native"; -import { Text as RNText } from "react-native"; -import { cva } from "class-variance-authority"; - -import { cn } from "~/app/lib/utils"; - -const textVariants = cva("text-white"); - -export function Text({ className, ...props }: TextProps) { - return ( - - ); -} diff --git a/apps/expo/src/app/constants/.gitkeep b/apps/expo/src/app/constants/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/apps/expo/src/app/lib/utils.ts b/apps/expo/src/app/lib/utils.ts deleted file mode 100644 index 88283f0..0000000 --- a/apps/expo/src/app/lib/utils.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { ClassValue } from "clsx"; -import { clsx } from "clsx"; -import { twMerge } from "tailwind-merge"; - -export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)); -} diff --git a/apps/expo/src/app/styles/global.css b/apps/expo/src/app/styles/global.css deleted file mode 100644 index b5c61c9..0000000 --- a/apps/expo/src/app/styles/global.css +++ /dev/null @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; diff --git a/apps/expo/src/app/sync/_layout.tsx b/apps/expo/src/app/sync/_layout.tsx new file mode 100644 index 0000000..a6a9e05 --- /dev/null +++ b/apps/expo/src/app/sync/_layout.tsx @@ -0,0 +1,14 @@ +import { Stack } from "expo-router"; + +import { BrandPill } from "~/components/BrandPill"; + +export default function Layout() { + return ( + + ); +} diff --git a/apps/expo/src/app/sync/login.tsx b/apps/expo/src/app/sync/login.tsx new file mode 100644 index 0000000..1c8847b --- /dev/null +++ b/apps/expo/src/app/sync/login.tsx @@ -0,0 +1,124 @@ +import { useState } from "react"; +import { Link, Stack, useRouter } from "expo-router"; +import { useMutation } from "@tanstack/react-query"; +import { H4, Label, Paragraph, Text, YStack } from "tamagui"; + +import ScreenLayout from "~/components/layout/ScreenLayout"; +import { MWButton } from "~/components/ui/Button"; +import { MWCard } from "~/components/ui/Card"; +import { MWInput } from "~/components/ui/Input"; +import { useAuth } from "~/hooks/useAuth"; +import { useAuthStore } from "~/stores/settings"; + +export default function Page() { + const backendUrl = useAuthStore((state) => state.backendUrl); + const router = useRouter(); + const { login } = useAuth(); + + const [passphrase, setPassphrase] = useState(""); + const [deviceName, setDeviceName] = useState(""); + + const mutation = useMutation({ + mutationKey: ["login", backendUrl, passphrase, deviceName], + mutationFn: () => + login({ + mnemonic: passphrase, + userData: { + device: deviceName, + }, + }), + onSuccess: (data) => { + if (data) { + return router.push("/(tabs)/movie-web"); + } + return null; + }, + }); + + return ( + + + + + +

+ Login to your account +

+ + + Please enter your passphrase to login to your account + +
+ + + + + + + + + + + + + + mutation.mutate()} + isLoading={mutation.isPending} + > + Login + + {mutation.isError && ( + + {mutation.error.message} + + )} + + + Don't have an account yet?{"\n"} + + + Create an account. + + + + +
+
+ ); +} diff --git a/apps/expo/src/app/sync/register/account.tsx b/apps/expo/src/app/sync/register/account.tsx new file mode 100644 index 0000000..f57287b --- /dev/null +++ b/apps/expo/src/app/sync/register/account.tsx @@ -0,0 +1,116 @@ +import { useState } from "react"; +import { Stack, useRouter } from "expo-router"; +import { H4, Label, Paragraph, View, YStack } from "tamagui"; + +import { Avatar } from "~/components/account/Avatar"; +import { ColorPicker, colors } from "~/components/account/ColorPicker"; +import { + expoIcons, + getDbIconFromExpoIcon, + UserIconPicker, +} from "~/components/account/UserIconPicker"; +import ScreenLayout from "~/components/layout/ScreenLayout"; +import { MWButton } from "~/components/ui/Button"; +import { MWCard } from "~/components/ui/Card"; +import { MWInput } from "~/components/ui/Input"; + +export default function Page() { + const router = useRouter(); + + const [deviceName, setDeviceName] = useState(""); + const [errorMessage, setErrorMessage] = useState(null); + const [colorA, setColorA] = useState(colors[0]); + const [colorB, setColorB] = useState(colors[0]); + const [icon, setIcon] = useState(expoIcons[0]); + + const handleNext = () => { + if (!deviceName) { + setErrorMessage("Please enter a device name"); + return; + } + return router.push({ + pathname: "/sync/register/confirm", + params: { + deviceName, + colorA, + colorB, + icon: getDbIconFromExpoIcon(icon), + }, + }); + }; + + return ( + + + + + + + + + +

+ Account information +

+ + + Enter a name for your device and pick colours and a user icon of + your choosing + +
+ + + + + + + + + setColorA(color)} /> + + + + setColorB(color)} /> + + + + setIcon(icon)} /> + + + + + {errorMessage && ( + + {errorMessage} + + )} + + Next + + +
+
+ ); +} diff --git a/apps/expo/src/app/sync/register/confirm.tsx b/apps/expo/src/app/sync/register/confirm.tsx new file mode 100644 index 0000000..a589129 --- /dev/null +++ b/apps/expo/src/app/sync/register/confirm.tsx @@ -0,0 +1,109 @@ +import { useState } from "react"; +import { Stack, useLocalSearchParams, useRouter } from "expo-router"; +import { useMutation } from "@tanstack/react-query"; +import { H4, Label, Paragraph, YStack } from "tamagui"; + +import ScreenLayout from "~/components/layout/ScreenLayout"; +import { MWButton } from "~/components/ui/Button"; +import { MWCard } from "~/components/ui/Card"; +import { MWInput } from "~/components/ui/Input"; +import { useAuth } from "~/hooks/useAuth"; + +export default function Page() { + const router = useRouter(); + // Requires type casting, typecheck fails for type-safe params + const { deviceName, colorA, colorB, icon } = + useLocalSearchParams() as unknown as { + deviceName: string; + colorA: string; + colorB: string; + icon: string; + }; + const { register } = useAuth(); + + const [passphrase, setPassphrase] = useState(""); + + const mutation = useMutation({ + mutationKey: ["register", deviceName, colorA, colorB, icon], + mutationFn: () => + register({ + // TODO: "Add recaptchaToken", + mnemonic: passphrase, + userData: { + device: deviceName, + profile: { colorA, colorB, icon }, + }, + }), + onSuccess: (data) => { + if (data) { + return router.push("/(tabs)/movie-web"); + } + return null; + }, + }); + + return ( + + + + + +

+ Confirm your passphrase +

+ + + Please enter your passphrase from earlier to confirm you have saved + it and to create your account + +
+ + + + + + + + + + {mutation.isError && ( + + {mutation.error.message} + + )} + + mutation.mutate()} + isLoading={mutation.isPending} + > + Create account + + +
+
+ ); +} diff --git a/apps/expo/src/app/sync/register/index.tsx b/apps/expo/src/app/sync/register/index.tsx new file mode 100644 index 0000000..d1ceb0a --- /dev/null +++ b/apps/expo/src/app/sync/register/index.tsx @@ -0,0 +1,138 @@ +import { TouchableOpacity } from "react-native-gesture-handler"; +import * as Clipboard from "expo-clipboard"; +import { Link, Stack } from "expo-router"; +import { Feather } from "@expo/vector-icons"; +import { H4, Paragraph, Text, useTheme, View, XStack, YStack } from "tamagui"; + +import { genMnemonic } from "@movie-web/api"; + +import ScreenLayout from "~/components/layout/ScreenLayout"; +import { MWButton } from "~/components/ui/Button"; +import { MWCard } from "~/components/ui/Card"; + +function PassphraseWord({ word }: { word: string }) { + return ( + + {word} + + ); +} + +export default function Page() { + const theme = useTheme(); + const words = genMnemonic(); + + return ( + + + + + +

+ Your passphrase +

+ + + Your passphrase acts as your username and password. Make sure to + keep it safe as you will need to enter it to login to your account + +
+ + + + + Passphrase + + { + await Clipboard.setStringAsync(words); + }} + > + + + Copy + + + + + {words.split(" ").map((word, index) => ( + + ))} + + + + + + I have saved my passphrase + + + + Already have an account?{"\n"} + + + Login here + + + + +
+
+ ); +} diff --git a/apps/expo/src/app/sync/trust/[backendUrl].tsx b/apps/expo/src/app/sync/trust/[backendUrl].tsx new file mode 100644 index 0000000..35fcda8 --- /dev/null +++ b/apps/expo/src/app/sync/trust/[backendUrl].tsx @@ -0,0 +1,122 @@ +import { Link, Stack, useLocalSearchParams } from "expo-router"; +import { useQuery } from "@tanstack/react-query"; +import { H4, Paragraph, Text, View } from "tamagui"; + +import { getBackendMeta } from "@movie-web/api"; + +import ScreenLayout from "~/components/layout/ScreenLayout"; +import { MWButton } from "~/components/ui/Button"; +import { MWCard } from "~/components/ui/Card"; +import { useAuthStore } from "~/stores/settings"; + +export default function Page() { + const { backendUrl } = useLocalSearchParams<{ backendUrl: string }>(); + + const setBackendUrl = useAuthStore((state) => state.setBackendUrl); + + const meta = useQuery({ + queryKey: ["backendMeta", backendUrl], + queryFn: () => getBackendMeta(backendUrl as unknown as string), + }); + + return ( + + + + +

+ Do you trust this server? +

+ + + {meta.isLoading && "Loading..."} + {meta.isError && "Error loading metadata"} + {meta.isSuccess && ( + <> + You are connecting to{" "} + + {backendUrl} + + . Please confirm you trust it before making an account. + + )} + +
+ + {meta.isSuccess && ( + + + {meta.data.name} + + + + {meta.data.description} + + + )} + + { + setBackendUrl(backendUrl as unknown as string); + }} + > + + I trust this server + + + + Go back + + +
+
+ ); +} diff --git a/apps/expo/src/app/videoPlayer.tsx b/apps/expo/src/app/videoPlayer.tsx new file mode 100644 index 0000000..e574b0e --- /dev/null +++ b/apps/expo/src/app/videoPlayer.tsx @@ -0,0 +1,45 @@ +import { useLocalSearchParams } from "expo-router"; + +import type { ScrapeMedia } from "@movie-web/provider-utils"; + +import type { ItemData } from "~/components/item/item"; +import { ScraperProcess } from "~/components/player/ScraperProcess"; +import { VideoPlayer } from "~/components/player/VideoPlayer"; +import { usePlayer } from "~/hooks/player/usePlayer"; +import { PlayerStatus } from "~/stores/player/slices/interface"; +import { usePlayerStore } from "~/stores/player/store"; + +export default function VideoPlayerWrapper() { + const playerStatus = usePlayerStore((state) => state.interface.playerStatus); + const { presentFullscreenPlayer } = usePlayer(); + + const params = useLocalSearchParams(); + let data; + if ("data" in params) { + if (typeof params.data === "string") { + data = JSON.parse(params.data) as Partial; + } else { + data = undefined; + } + } else { + data = params as Partial; + } + const media = params.media + ? (JSON.parse(params.media as string) as ScrapeMedia) + : undefined; + const download = params.download === "true"; + + void presentFullscreenPlayer(); + + if (download) { + return ; + } + + if (playerStatus === PlayerStatus.SCRAPING) { + return ; + } + + if (playerStatus === PlayerStatus.READY) { + return ; + } +} diff --git a/apps/expo/src/components/BrandPill.tsx b/apps/expo/src/components/BrandPill.tsx new file mode 100644 index 0000000..83829ff --- /dev/null +++ b/apps/expo/src/components/BrandPill.tsx @@ -0,0 +1,35 @@ +import * as Haptics from "expo-haptics"; +import { Text, useTheme, View } from "tamagui"; + +import { MovieWebSvg } from "./Icon"; + +export function BrandPill() { + const theme = useTheme(); + return ( + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Heavy)} + > + + + movie-web + + + ); +} diff --git a/apps/expo/src/components/DownloadItem.tsx b/apps/expo/src/components/DownloadItem.tsx new file mode 100644 index 0000000..b6e3006 --- /dev/null +++ b/apps/expo/src/components/DownloadItem.tsx @@ -0,0 +1,201 @@ +import type { NativeSyntheticEvent } from "react-native"; +import type { ContextMenuOnPressNativeEvent } from "react-native-context-menu-view"; +import React from "react"; +import ContextMenu from "react-native-context-menu-view"; +import { TouchableOpacity } from "react-native-gesture-handler"; +import { useRouter } from "expo-router"; +import { Image, Text, View, XStack, YStack } from "tamagui"; + +import type { Download, DownloadContent } from "~/hooks/useDownloadManager"; +import { useDownloadManager } from "~/hooks/useDownloadManager"; +import { mapSeasonAndEpisodeNumberToText } from "./player/utils"; +import { MWProgress } from "./ui/Progress"; +import { FlashingText } from "./ui/Text"; + +export interface DownloadItemProps { + item: Download; + onPress: (localPath?: string) => void; +} + +enum ContextMenuActions { + Cancel = "Cancel", + Remove = "Remove", +} + +const statusToTextMap: Record = { + downloading: "Downloading", + finished: "Finished", + error: "Error", + merging: "Merging", + cancelled: "Cancelled", + importing: "Importing", +}; + +const formatBytes = (bytes: number, decimals = 2) => { + if (bytes === 0) return "0 Bytes"; + const k = 1024; + const dm = decimals < 0 ? 0 : decimals; + const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`; +}; + +export function DownloadItem(props: DownloadItemProps) { + const percentage = props.item.progress * 100; + const formattedFileSize = formatBytes(props.item.fileSize); + const formattedDownloaded = formatBytes(props.item.downloaded); + const { removeDownload, cancelDownload } = useDownloadManager(); + + const contextMenuActions = [ + { + title: ContextMenuActions.Remove, + }, + ...(props.item.status !== "finished" + ? [{ title: ContextMenuActions.Cancel }] + : []), + ]; + + const onContextMenuPress = ( + e: NativeSyntheticEvent, + ) => { + if (e.nativeEvent.name === ContextMenuActions.Cancel) { + void cancelDownload(props.item); + } else if (e.nativeEvent.name === ContextMenuActions.Remove) { + removeDownload(props.item); + } + }; + + const isInProgress = !( + props.item.status === "finished" || + props.item.status === "error" || + props.item.status === "cancelled" + ); + + return ( + + props.onPress(props.item.localPath)} + onLongPress={() => { + return; + }} + activeOpacity={0.7} + > + + + + + + + + {props.item.media.type === "show" && + `${mapSeasonAndEpisodeNumberToText( + props.item.media.season.number, + props.item.media.episode.number, + )} `} + {props.item.media.title} + + {props.item.type !== "hls" && ( + + {props.item.speed.toFixed(2)} MB/s + + )} + + + + + + + {props.item.type === "hls" + ? `${percentage.toFixed()}% - ${props.item.downloaded} of ${props.item.fileSize} segments` + : `${percentage.toFixed()}% - ${formattedDownloaded} of ${formattedFileSize}`} + + + + {statusToTextMap[props.item.status]} + + + + + + + + ); +} + +export function ShowDownloadItem({ download }: { download: DownloadContent }) { + const router = useRouter(); + + return ( + + router.push({ + pathname: "/(downloads)/[tmdbId]", + params: { tmdbId: download.media.tmdbId }, + }) + } + activeOpacity={0.7} + > + + + + + + + + {download.media.title} + + + {download.downloads.length} Episode + {download.downloads.length > 1 ? "s" : ""} |{" "} + {formatBytes( + download.downloads.reduce( + (acc, curr) => acc + curr.fileSize, + 0, + ), + )} + + + + + + ); +} diff --git a/apps/expo/src/components/FlagIcon.tsx b/apps/expo/src/components/FlagIcon.tsx new file mode 100644 index 0000000..466685c --- /dev/null +++ b/apps/expo/src/components/FlagIcon.tsx @@ -0,0 +1,15 @@ +import { Image } from "tamagui"; + +// TODO: Improve flag icons. This is incomplete. +export function FlagIcon({ languageCode }: { languageCode: string }) { + return ( + + ); +} diff --git a/apps/expo/src/components/Icon.tsx b/apps/expo/src/components/Icon.tsx new file mode 100644 index 0000000..885985c --- /dev/null +++ b/apps/expo/src/components/Icon.tsx @@ -0,0 +1,28 @@ +import React from "react"; +import Svg, { G, Path } from "react-native-svg"; + +export const MovieWebSvg = ({ + fillColor, + height = 24, + width = 24, +}: { + fillColor?: string; + height?: number; + width?: number; +}) => { + const svgPath = + "M18.186,4.5V6.241H16.445V4.5H9.482V6.241H7.741V4.5H6V20.168H7.741V18.427H9.482v1.741h6.964V18.427h1.741v1.741h1.741V4.5Zm-8.7,12.186H7.741V14.945H9.482Zm0-3.482H7.741V11.464H9.482Zm0-3.482H7.741V7.982H9.482Zm8.7,6.964H16.445V14.945h1.741Zm0-3.482H16.445V11.464h1.741Zm0-3.482H16.445V7.982h1.741Z"; + + return ( + + + + + + ); +}; diff --git a/apps/expo/src/components/SvgTabBarIcon.tsx b/apps/expo/src/components/SvgTabBarIcon.tsx new file mode 100644 index 0000000..9f76b5e --- /dev/null +++ b/apps/expo/src/components/SvgTabBarIcon.tsx @@ -0,0 +1,23 @@ +import React from "react"; +import { useTheme } from "tamagui"; + +interface SvgTabBarIconProps { + focused?: boolean; + children: React.ReactElement; +} + +export default function SvgTabBarIcon({ + focused, + children, +}: SvgTabBarIconProps) { + const theme = useTheme(); + const fillColor = focused + ? theme.tabBarIconFocused.val + : theme.tabBarIcon.val; + + if (React.isValidElement(children)) { + return React.cloneElement(children, { fillColor } as React.Attributes); + } + + return null; +} diff --git a/apps/expo/src/app/components/TabBarIcon.tsx b/apps/expo/src/components/TabBarIcon.tsx similarity index 50% rename from apps/expo/src/app/components/TabBarIcon.tsx rename to apps/expo/src/components/TabBarIcon.tsx index c0602cf..818750f 100644 --- a/apps/expo/src/app/components/TabBarIcon.tsx +++ b/apps/expo/src/components/TabBarIcon.tsx @@ -1,17 +1,12 @@ import { FontAwesome } from "@expo/vector-icons"; - -import Colors from "@movie-web/tailwind-config/colors"; +import { useTheme } from "tamagui"; type Props = { focused?: boolean; } & React.ComponentProps; export default function TabBarIcon({ focused, ...rest }: Props) { - return ( - - ); + const theme = useTheme(); + const color = focused ? theme.tabBarIconFocused.val : theme.tabBarIcon.val; + return ; } diff --git a/apps/expo/src/components/account/AccountInformation.tsx b/apps/expo/src/components/account/AccountInformation.tsx new file mode 100644 index 0000000..8708314 --- /dev/null +++ b/apps/expo/src/components/account/AccountInformation.tsx @@ -0,0 +1,306 @@ +import { useCallback, useMemo, useState } from "react"; +import { MaterialIcons } from "@expo/vector-icons"; +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { H5, Spinner, Text, View, XStack, YStack } from "tamagui"; + +import { + base64ToBuffer, + decryptData, + editUser, + encryptData, + getSessions, + removeSession, + updateSession, + updateSettings, +} from "@movie-web/api"; + +import { useAuth } from "~/hooks/useAuth"; +import { useSettingsState } from "~/hooks/useSettingsState"; +import { useAuthStore } from "~/stores/settings"; +import ScreenLayout from "../layout/ScreenLayout"; +import { MWButton } from "../ui/Button"; +import { MWCard } from "../ui/Card"; +import { MWInput } from "../ui/Input"; +import { MWSeparator } from "../ui/Separator"; +import { Avatar } from "./Avatar"; +import { ChangeProfileModal } from "./ChangeProfileModal"; +import { DeleteAccountAlert } from "./DeleteAccountAlert"; +import { getDbIconFromExpoIcon, getExpoIconFromDbIcon } from "./UserIconPicker"; + +export function AccountInformation() { + const account = useAuthStore((state) => state.account); + const backendUrl = useAuthStore((state) => state.backendUrl); + const proxySet = useAuthStore((s) => s.proxySet); + const setProxySet = useAuthStore((s) => s.setProxySet); + const updateProfile = useAuthStore((s) => s.setAccountProfile); + const updateDeviceName = useAuthStore((s) => s.updateDeviceName); + + const [open, setOpen] = useState(false); + + const queryClient = useQueryClient(); + + const { decryptedName, logout } = useAuth(); + + const logoutMutation = useMutation({ + mutationKey: ["logout"], + mutationFn: logout, + }); + + const removeSessionMutation = useMutation({ + mutationKey: ["removeSession"], + mutationFn: (sessionId: string) => + removeSession(backendUrl, account!.token, sessionId), + onSuccess: async () => { + await queryClient.invalidateQueries({ + queryKey: ["sessions", backendUrl, account], + }); + }, + }); + + const sessions = useQuery({ + queryKey: ["sessions", backendUrl, account], + queryFn: () => getSessions(backendUrl, account!), + enabled: !!account, + }); + + const deviceListSorted = useMemo(() => { + if (!sessions.data || !account) return []; + let list = + sessions.data?.map((session) => { + const decryptedName = decryptData( + session.device, + base64ToBuffer(account.seed), + ); + return { + current: session.id === account.sessionId, + id: session.id, + name: decryptedName, + }; + }) ?? []; + list = list.sort((a, b) => { + if (a.current) return -1; + if (b.current) return 1; + return a.name.localeCompare(b.name); + }); + return list; + }, [sessions.data, account]); + + const state = useSettingsState(decryptedName, proxySet, account?.profile); + + const saveChanges = useCallback(async () => { + if (account && backendUrl) { + if (state.proxyUrls.changed) { + await updateSettings(backendUrl, account, { + proxyUrls: state.proxyUrls.state?.filter((v) => v !== "") ?? null, + }); + } + if (state.deviceName.changed) { + const newDeviceName = await encryptData( + state.deviceName.state, + base64ToBuffer(account.seed), + ); + await updateSession(backendUrl, account, { + deviceName: newDeviceName, + }); + updateDeviceName(newDeviceName); + } + if (state.profile.changed) { + await editUser(backendUrl, account, { + profile: state.profile.state, + }); + } + } + + setProxySet(state.proxyUrls.state?.filter((v) => v !== "") ?? null); + + if (state.profile.state) { + updateProfile(state.profile.state); + } + }, [ + account, + backendUrl, + setProxySet, + state.deviceName.changed, + state.deviceName.state, + state.profile.changed, + state.profile.state, + state.proxyUrls.changed, + state.proxyUrls.state, + updateDeviceName, + updateProfile, + ]); + + const saveChangesMutation = useMutation({ + mutationKey: ["saveChanges"], + mutationFn: saveChanges, + }); + + if (!account) return null; + + return ( + <> + + + + + Account + + + + {state.profile.state && ( + + + { + state.profile.set((s) => + s ? { ...s, colorA: v } : undefined, + ); + }} + colorB={state.profile.state.colorB} + setColorB={(v) => + state.profile.set((s) => + s ? { ...s, colorB: v } : undefined, + ) + } + icon={state.profile.state.icon} + setUserIcon={(v) => + state.profile.set((s) => + s + ? { ...s, icon: getDbIconFromExpoIcon(v) } + : undefined, + ) + } + open={open} + setOpen={setOpen} + /> + setOpen(true)} + > + + Edit + + } + onPress={() => setOpen(true)} + /> + + Device name + + + logoutMutation.mutate()} + alignSelf="flex-start" + isLoading={logoutMutation.isPending} + > + Logout + + + + + )} + + + + + Devices + + + {sessions.isLoading && } + {sessions.isError && ( + + Error loading sessions + + )} + {deviceListSorted.map((device) => ( + + + + + Device name + + {device.name} + + {!device.current && ( + removeSessionMutation.mutate(device.id)} + > + Remove + + )} + + + ))} + + + + + Actions + + + + +
Delete account
+ + This action is irreversible. All data will be deleted and + nothing can be recovered. + + +
+
+
+
+
+ + {state.changed && ( + + + + Reset + + saveChangesMutation.mutate()} + isLoading={saveChangesMutation.isPending} + > + Save changes + + + + )} + + ); +} diff --git a/apps/expo/src/components/account/Avatar.tsx b/apps/expo/src/components/account/Avatar.tsx new file mode 100644 index 0000000..10edcc0 --- /dev/null +++ b/apps/expo/src/components/account/Avatar.tsx @@ -0,0 +1,40 @@ +import type { CircleProps } from "tamagui"; +import { FontAwesome6 } from "@expo/vector-icons"; +import { Circle, View } from "tamagui"; +import { LinearGradient } from "tamagui/linear-gradient"; + +export interface AvatarProps { + colorA: string; + colorB: string; + icon: string; + bottomItem?: React.ReactNode; +} + +export function Avatar(props: AvatarProps & CircleProps) { + return ( + + + + + + {props.bottomItem} + + + ); +} diff --git a/apps/expo/src/components/account/ChangeProfileModal.tsx b/apps/expo/src/components/account/ChangeProfileModal.tsx new file mode 100644 index 0000000..9b07ee9 --- /dev/null +++ b/apps/expo/src/components/account/ChangeProfileModal.tsx @@ -0,0 +1,81 @@ +import { H3, Sheet, Text, XStack, YStack } from "tamagui"; + +import { MWButton } from "../ui/Button"; +import { Avatar } from "./Avatar"; +import { ColorPicker } from "./ColorPicker"; +import { UserIconPicker } from "./UserIconPicker"; + +export function ChangeProfileModal(props: { + colorA: string; + setColorA: (s: string) => void; + colorB: string; + setColorB: (s: string) => void; + icon: string; + setUserIcon: (s: string) => void; + + open: boolean; + setOpen: (b: boolean) => void; +}) { + return ( + + + + + +

+ Edit profile picture +

+ +
+ + + Profile color one + + + + + Profile color two + + + + + User icon + + +
+ + props.setOpen(false)} + > + Finish editing + +
+ +
+ ); +} diff --git a/apps/expo/src/components/account/ColorPicker.tsx b/apps/expo/src/components/account/ColorPicker.tsx new file mode 100644 index 0000000..0d1e3c9 --- /dev/null +++ b/apps/expo/src/components/account/ColorPicker.tsx @@ -0,0 +1,39 @@ +import React from "react"; +import { Ionicons } from "@expo/vector-icons"; +import { View, XStack } from "tamagui"; + +export const colors = [ + "#0A54FF", + "#CF2E68", + "#F9DD7F", + "#7652DD", + "#2ECFA8", +] as const; + +export function ColorPicker(props: { + value: string; + onInput: (v: string) => void; +}) { + return ( + + {colors.map((color) => { + return ( + props.onInput(color)} + flexGrow={1} + height="$4" + borderRadius="$4" + justifyContent="center" + alignItems="center" + backgroundColor={color} + key={color} + > + {props.value === color ? ( + + ) : null} + + ); + })} + + ); +} diff --git a/apps/expo/src/components/account/DeleteAccountAlert.tsx b/apps/expo/src/components/account/DeleteAccountAlert.tsx new file mode 100644 index 0000000..a7d2fb3 --- /dev/null +++ b/apps/expo/src/components/account/DeleteAccountAlert.tsx @@ -0,0 +1,91 @@ +import { useMutation } from "@tanstack/react-query"; +import { AlertDialog, XStack, YStack } from "tamagui"; + +import { deleteUser } from "@movie-web/api"; + +import { useAuth } from "~/hooks/useAuth"; +import { useAuthStore } from "~/stores/settings"; +import { MWButton } from "../ui/Button"; + +export function DeleteAccountAlert() { + const account = useAuthStore((state) => state.account); + const backendUrl = useAuthStore((state) => state.backendUrl); + const { logout } = useAuth(); + + const logoutMutation = useMutation({ + mutationKey: ["logout"], + mutationFn: logout, + }); + + const deleteAccountMutation = useMutation({ + mutationKey: ["deleteAccount"], + mutationFn: () => deleteUser(backendUrl, account!), + onSuccess: () => { + logoutMutation.mutate(); + }, + }); + + return ( + + + + Delete account + + + + + + + + Are you sure? + + This action is irreversible. All data will be deleted and nothing + can be recovered. + + + + + Cancel + + deleteAccountMutation.mutate()} + > + + I am sure + + + + + + + + ); +} diff --git a/apps/expo/src/components/account/GetStarted.tsx b/apps/expo/src/components/account/GetStarted.tsx new file mode 100644 index 0000000..eacacaf --- /dev/null +++ b/apps/expo/src/components/account/GetStarted.tsx @@ -0,0 +1,60 @@ +import { Link } from "expo-router"; +import { H3, H5, Paragraph, View } from "tamagui"; + +import { useAuthStore } from "~/stores/settings"; +import ScreenLayout from "../layout/ScreenLayout"; +import { MWButton } from "../ui/Button"; +import { MWCard } from "../ui/Card"; +import { MWInput } from "../ui/Input"; + +export function AccountGetStarted() { + const { backendUrl, setBackendUrl } = useAuthStore(); + + return ( + + + +

+ Sync to the cloud +

+
+ Share your watch progress between devices and keep them synced. +
+ + First choose the backend you want to use. If you do not know what + this does, use the default and click on 'Get started'. + +
+ + + + + + + + + Get started + + + +
+
+ ); +} diff --git a/apps/expo/src/components/account/UserIconPicker.tsx b/apps/expo/src/components/account/UserIconPicker.tsx new file mode 100644 index 0000000..ce50538 --- /dev/null +++ b/apps/expo/src/components/account/UserIconPicker.tsx @@ -0,0 +1,57 @@ +import React from "react"; +import { FontAwesome6 } from "@expo/vector-icons"; +import { View, XStack } from "tamagui"; + +export const expoIcons = [ + "user-group", + "couch", + "mobile-screen", + "ticket", + "handcuffs", +] as const; + +export const expoIconsToDbIcons: Record<(typeof expoIcons)[number], string> = { + "user-group": "userGroup", + couch: "couch", + "mobile-screen": "mobile", + ticket: "ticket", + handcuffs: "handcuffs", +}; + +export const getExpoIconFromDbIcon = (icon: string) => { + return Object.keys(expoIconsToDbIcons).find( + (key) => expoIconsToDbIcons[key as (typeof expoIcons)[number]] === icon, + ) as (typeof expoIcons)[number]; +}; + +export const getDbIconFromExpoIcon = (icon: string) => { + return expoIconsToDbIcons[icon as (typeof expoIcons)[number]]; +}; + +export function UserIconPicker(props: { + value: string; + onInput: (v: string) => void; +}) { + return ( + + {expoIcons.map((icon) => { + return ( + props.onInput(icon)} + > + + + ); + })} + + ); +} diff --git a/apps/expo/src/components/item/ItemListSection.tsx b/apps/expo/src/components/item/ItemListSection.tsx new file mode 100644 index 0000000..5e15392 --- /dev/null +++ b/apps/expo/src/components/item/ItemListSection.tsx @@ -0,0 +1,33 @@ +import React from "react"; +import { Dimensions } from "react-native"; +import { ScrollView, Text, View } from "tamagui"; + +import type { ItemData } from "~/components/item/item"; +import Item from "~/components/item/item"; + +const padding = 20; +const screenWidth = Dimensions.get("window").width; +const itemWidth = screenWidth / 2.3 - padding; + +export const ItemListSection = ({ + title, + items, +}: { + title: string; + items: ItemData[]; +}) => { + return ( + + + {title} + + + {items.map((item, index) => ( + + + + ))} + + + ); +}; diff --git a/apps/expo/src/components/item/item.tsx b/apps/expo/src/components/item/item.tsx new file mode 100644 index 0000000..badd332 --- /dev/null +++ b/apps/expo/src/components/item/item.tsx @@ -0,0 +1,152 @@ +import type { NativeSyntheticEvent } from "react-native"; +import type { ContextMenuOnPressNativeEvent } from "react-native-context-menu-view"; +import { useCallback } from "react"; +import { Keyboard, TouchableOpacity } from "react-native"; +import ContextMenu from "react-native-context-menu-view"; +import { useRouter } from "expo-router"; +import { Image, Text, View } from "tamagui"; + +import { useToast } from "~/hooks/useToast"; +import { usePlayerStore } from "~/stores/player/store"; +import { useBookmarkStore, useWatchHistoryStore } from "~/stores/settings"; + +export interface ItemData { + id: string; + title: string; + type: "movie" | "tv"; + season?: number; + episode?: number; + year: number; + release_date?: Date; + posterUrl: string; +} + +enum ContextMenuActions { + Bookmark = "Bookmark", + RemoveBookmark = "Remove Bookmark", + Download = "Download", + RemoveWatchHistoryItem = "Remove from Continue Watching", +} + +function checkReleased(media: ItemData): boolean { + const isReleasedYear = Boolean( + media.year && media.year <= new Date().getFullYear(), + ); + const isReleasedDate = Boolean( + media.release_date && media.release_date <= new Date(), + ); + + // If the media has a release date, use that, otherwise use the year + const isReleased = media.release_date ? isReleasedDate : isReleasedYear; + + return isReleased; +} + +export default function Item({ data }: { data: ItemData }) { + const resetVideo = usePlayerStore((state) => state.resetVideo); + const router = useRouter(); + const { isBookmarked, addBookmark, removeBookmark } = useBookmarkStore(); + const { hasWatchHistoryItem, removeFromWatchHistory } = + useWatchHistoryStore(); + const { showToast } = useToast(); + + const { title, type, year, posterUrl } = data; + + const isReleased = useCallback(() => checkReleased(data), [data]); + + const handlePress = () => { + if (!isReleased()) { + showToast("This media is not released yet", { + burntOptions: { preset: "error" }, + }); + return; + } + resetVideo(); + Keyboard.dismiss(); + router.push({ + pathname: "/videoPlayer", + params: { data: JSON.stringify(data) }, + }); + }; + + const contextMenuActions = [ + { + title: isBookmarked(data) + ? ContextMenuActions.RemoveBookmark + : ContextMenuActions.Bookmark, + }, + ...(type === "movie" ? [{ title: ContextMenuActions.Download }] : []), + ...(hasWatchHistoryItem(data) + ? [{ title: ContextMenuActions.RemoveWatchHistoryItem }] + : []), + ]; + + const onContextMenuPress = ( + e: NativeSyntheticEvent, + ) => { + if (e.nativeEvent.name === ContextMenuActions.Bookmark) { + addBookmark(data); + showToast("Added to bookmarks", { + burntOptions: { preset: "done" }, + }); + } else if (e.nativeEvent.name === ContextMenuActions.RemoveBookmark) { + removeBookmark(data); + showToast("Removed from bookmarks", { + burntOptions: { preset: "done" }, + }); + } else if (e.nativeEvent.name === ContextMenuActions.Download) { + router.push({ + pathname: "/videoPlayer", + params: { data: JSON.stringify(data), download: "true" }, + }); + } else if ( + e.nativeEvent.name === ContextMenuActions.RemoveWatchHistoryItem + ) { + removeFromWatchHistory(data); + showToast("Removed from Continue Watching", { + burntOptions: { preset: "done" }, + }); + } + }; + + return ( + {}} + style={{ width: "100%" }} + > + + + + + + + + {title} + + + + {type === "tv" ? "Show" : "Movie"} + + + + {isReleased() ? year : "Unreleased"} + + + + + ); +} diff --git a/apps/expo/src/components/layout/Header.tsx b/apps/expo/src/components/layout/Header.tsx new file mode 100644 index 0000000..07b6efc --- /dev/null +++ b/apps/expo/src/components/layout/Header.tsx @@ -0,0 +1,48 @@ +import { Linking } from "react-native"; +import * as Haptics from "expo-haptics"; +import { FontAwesome6, MaterialIcons } from "@expo/vector-icons"; +import { Circle, View } from "tamagui"; + +import { DISCORD_LINK, GITHUB_LINK } from "~/constants/core"; +import { BrandPill } from "../BrandPill"; + +export function Header() { + return ( + + + + { + await Linking.openURL(DISCORD_LINK); + }} + onLongPress={() => + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Heavy) + } + > + + + { + await Linking.openURL(GITHUB_LINK); + }} + onLongPress={() => + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Heavy) + } + > + + + + ); +} diff --git a/apps/expo/src/components/layout/ScreenLayout.tsx b/apps/expo/src/components/layout/ScreenLayout.tsx new file mode 100644 index 0000000..9990e6e --- /dev/null +++ b/apps/expo/src/components/layout/ScreenLayout.tsx @@ -0,0 +1,48 @@ +import type { ScrollViewProps } from "tamagui"; +import { useSafeAreaInsets } from "react-native-safe-area-context"; +import { ScrollView } from "tamagui"; +import { LinearGradient } from "tamagui/linear-gradient"; + +import { Header } from "./Header"; + +interface Props { + showHeader?: boolean; +} + +export default function ScreenLayout({ + children, + showHeader = true, + ...props +}: ScrollViewProps & Props) { + const insets = useSafeAreaInsets(); + + return ( + + {showHeader &&
} + + {children} + + + ); +} diff --git a/apps/expo/src/components/player/AudioTrackSelector.tsx b/apps/expo/src/components/player/AudioTrackSelector.tsx new file mode 100644 index 0000000..d05dcbd --- /dev/null +++ b/apps/expo/src/components/player/AudioTrackSelector.tsx @@ -0,0 +1,116 @@ +import { useEffect, useState } from "react"; +import { MaterialCommunityIcons } from "@expo/vector-icons"; +import { useTheme } from "tamagui"; + +import { useAudioTrack } from "~/hooks/player/useAudioTrack"; +import { useAudioTrackStore } from "~/stores/audio"; +import { usePlayerStore } from "~/stores/player/store"; +import { MWButton } from "../ui/Button"; +import { Controls } from "./Controls"; +import { Settings } from "./settings/Sheet"; + +export interface AudioTrack { + uri: string; + name: string; + language: string; + active?: boolean; +} + +export const AudioTrackSelector = () => { + const theme = useTheme(); + const [open, setOpen] = useState(false); + + const tracks = usePlayerStore((state) => state.interface.audioTracks); + const setAudioTracks = usePlayerStore((state) => state.setAudioTracks); + const stream = usePlayerStore((state) => state.interface.currentStream); + const selectedTrack = useAudioTrackStore((state) => state.selectedTrack); + + const setSelectedAudioTrack = useAudioTrackStore( + (state) => state.setSelectedAudioTrack, + ); + + const { synchronizePlayback } = useAudioTrack(); + + useEffect(() => { + if (tracks && selectedTrack) { + const needsUpdate = tracks.some( + (t) => t.active !== (t.uri === selectedTrack.uri), + ); + + if (needsUpdate) { + const updatedTracks = tracks.map((t) => ({ + ...t, + active: t.uri === selectedTrack.uri, + })); + setAudioTracks(updatedTracks); + } + } + }, [selectedTrack, setAudioTracks, tracks]); + + if (!tracks?.length) return null; + + return ( + <> + + + } + onPress={() => setOpen(true)} + > + Audio + + + + + + + + setOpen(false)} + /> + } + title="Audio" + /> + + {tracks?.map((track) => ( + + ) + } + onPress={() => { + setSelectedAudioTrack(track); + if (stream) { + void synchronizePlayback(track, stream); + } + }} + /> + ))} + + + + + ); +}; diff --git a/apps/expo/src/components/player/BackButton.tsx b/apps/expo/src/components/player/BackButton.tsx new file mode 100644 index 0000000..26e3bfd --- /dev/null +++ b/apps/expo/src/components/player/BackButton.tsx @@ -0,0 +1,44 @@ +import { Keyboard } from "react-native"; +import { useRouter } from "expo-router"; +import { Ionicons } from "@expo/vector-icons"; + +import { usePlayer } from "~/hooks/player/usePlayer"; + +export const BackButton = () => { + const { dismissFullscreenPlayer } = usePlayer(); + const router = useRouter(); + + return ( + { + dismissFullscreenPlayer() + .then(() => { + if (router.canGoBack()) { + router.back(); + } else { + router.replace("/"); + } + return setTimeout(() => { + Keyboard.dismiss(); + }, 100); + }) + .catch(() => { + if (router.canGoBack()) { + router.back(); + } else { + router.replace("/"); + } + return setTimeout(() => { + Keyboard.dismiss(); + }, 100); + }); + }} + size={36} + color="white" + style={{ + width: 100, + }} + /> + ); +}; diff --git a/apps/expo/src/components/player/BottomControls.tsx b/apps/expo/src/components/player/BottomControls.tsx new file mode 100644 index 0000000..4cf534f --- /dev/null +++ b/apps/expo/src/components/player/BottomControls.tsx @@ -0,0 +1,95 @@ +import { useCallback, useMemo, useState } from "react"; +import { Platform, TouchableOpacity } from "react-native"; +import { isDevelopmentProvisioningProfile } from "modules/check-ios-certificate"; +import { Text, View } from "tamagui"; + +import { usePlayerStore } from "~/stores/player/store"; +import { AudioTrackSelector } from "./AudioTrackSelector"; +import { CaptionsSelector } from "./CaptionsSelector"; +import { Controls } from "./Controls"; +import { DownloadButton } from "./DownloadButton"; +import { ProgressBar } from "./ProgressBar"; +import { SeasonSelector } from "./SeasonEpisodeSelector"; +import { SettingsSelector } from "./SettingsSelector"; +import { SourceSelector } from "./SourceSelector"; +import { mapMillisecondsToTime } from "./utils"; + +export const BottomControls = () => { + const status = usePlayerStore((state) => state.status); + const setIsIdle = usePlayerStore((state) => state.setIsIdle); + const isLocalFile = usePlayerStore((state) => state.isLocalFile); + const [showRemaining, setShowRemaining] = useState(false); + + const toggleTimeDisplay = useCallback(() => { + setIsIdle(false); + setShowRemaining(!showRemaining); + }, [showRemaining, setIsIdle]); + + const { currentTime, remainingTime } = useMemo(() => { + if (status?.isLoaded) { + const current = mapMillisecondsToTime(status.positionMillis ?? 0); + const remaining = `-${mapMillisecondsToTime( + (status.durationMillis ?? 0) - (status.positionMillis ?? 0), + )}`; + return { currentTime: current, remainingTime: remaining }; + } else { + return { currentTime: "", remainingTime: "" }; + } + }, [status]); + + const durationTime = useMemo(() => { + if (status?.isLoaded) { + return mapMillisecondsToTime(status.durationMillis ?? 0); + } + }, [status]); + + if (status?.isLoaded) { + return ( + + + + {currentTime} + + / + + + + {showRemaining ? remainingTime : durationTime} + + + + + + + + {!isLocalFile && ( + <> + + + + + + {Platform.OS === "android" || + (Platform.OS === "ios" && isDevelopmentProvisioningProfile()) ? ( + + ) : null} + + )} + + + ); + } +}; diff --git a/apps/expo/src/components/player/CaptionRenderer.tsx b/apps/expo/src/components/player/CaptionRenderer.tsx new file mode 100644 index 0000000..f41b94c --- /dev/null +++ b/apps/expo/src/components/player/CaptionRenderer.tsx @@ -0,0 +1,95 @@ +import { useMemo } from "react"; +import Animated, { + useAnimatedReaction, + useAnimatedStyle, + useDerivedValue, + useSharedValue, + withSpring, +} from "react-native-reanimated"; +import { Text, View } from "tamagui"; + +import { convertMilliSecondsToSeconds } from "~/lib/number"; +import { useCaptionsStore } from "~/stores/captions"; +import { usePlayerStore } from "~/stores/player/store"; + +export const captionIsVisible = ( + start: number, + end: number, + delay: number, + currentTime: number, +) => { + const delayedStart = start / 1000 + delay; + const delayedEnd = end / 1000 + delay; + return ( + Math.max(0, delayedStart) <= currentTime && + Math.max(0, delayedEnd) >= currentTime + ); +}; + +export const CaptionRenderer = () => { + const isIdle = usePlayerStore((state) => state.interface.isIdle); + const selectedCaption = useCaptionsStore((state) => state.selectedCaption); + const delay = useCaptionsStore((state) => state.delay); + const status = usePlayerStore((state) => state.status); + + const translateY = useSharedValue(0); + + const animatedStyles = useAnimatedStyle(() => { + return { + transform: [{ translateY: translateY.value }], + }; + }); + + const transitionValue = useDerivedValue(() => { + return isIdle ? 50 : 0; + }, [isIdle]); + + useAnimatedReaction( + () => { + return transitionValue.value; + }, + (newValue) => { + translateY.value = withSpring(newValue); + }, + ); + + const visibleCaptions = useMemo( + () => + selectedCaption?.data.filter(({ start, end }) => + captionIsVisible( + start, + end, + delay, + status?.isLoaded + ? convertMilliSecondsToSeconds(status.positionMillis) + : 0, + ), + ), + [selectedCaption, delay, status], + ); + + if (!status?.isLoaded || !selectedCaption || !visibleCaptions?.length) + return null; + + return ( + + {visibleCaptions?.map((caption) => ( + + {caption.text} + + ))} + + ); +}; diff --git a/apps/expo/src/components/player/CaptionsSelector.tsx b/apps/expo/src/components/player/CaptionsSelector.tsx new file mode 100644 index 0000000..e82ac89 --- /dev/null +++ b/apps/expo/src/components/player/CaptionsSelector.tsx @@ -0,0 +1,174 @@ +import type { LanguageCode } from "iso-639-1"; +import type { ContentCaption } from "subsrt-ts/dist/types/handler"; +import { useState } from "react"; +import { MaterialCommunityIcons, MaterialIcons } from "@expo/vector-icons"; +import { useMutation } from "@tanstack/react-query"; +import { parse } from "subsrt-ts"; +import { Spinner, useTheme, View } from "tamagui"; + +import type { Stream } from "@movie-web/provider-utils"; + +import type { CaptionWithData } from "~/stores/captions"; +import { useToast } from "~/hooks/useToast"; +import { + getCountryCodeFromLanguage, + getPrettyLanguageNameFromLocale, +} from "~/lib/language"; +import { useCaptionsStore } from "~/stores/captions"; +import { usePlayerStore } from "~/stores/player/store"; +import { FlagIcon } from "../FlagIcon"; +import { MWButton } from "../ui/Button"; +import { Controls } from "./Controls"; +import { Settings } from "./settings/Sheet"; + +const parseCaption = async ( + caption: Stream["captions"][0], +): Promise => { + const response = await fetch(caption.url); + const data = await response.text(); + return { + ...caption, + data: parse(data).filter( + (cue) => cue.type === "caption", + ) as ContentCaption[], + }; +}; + +export const CaptionsSelector = () => { + const { showToast } = useToast(); + const theme = useTheme(); + const [open, setOpen] = useState(false); + const captions = usePlayerStore( + (state) => state.interface.currentStream?.captions, + ); + const selectedCaption = useCaptionsStore((state) => state.selectedCaption); + const setSelectedCaption = useCaptionsStore( + (state) => state.setSelectedCaption, + ); + + const downloadCaption = useMutation({ + mutationKey: ["captions", selectedCaption?.id], + mutationFn: parseCaption, + onSuccess: (data) => { + setSelectedCaption(data); + }, + }); + + if (!captions?.length) return null; + + return ( + <> + + + } + onPress={() => setOpen(true)} + > + Subtitles + + + + + + + setOpen(false)} + /> + } + title="Subtitles" + rightButton={ + { + showToast("Work in progress"); + }} + > + Customize + + } + /> + + + } + title={"Off"} + iconRight={ + <> + {!selectedCaption?.id && ( + + )} + + } + onPress={() => setSelectedCaption(null)} + /> + + {captions?.map((caption) => ( + + + + } + title={getPrettyLanguageNameFromLocale(caption.language) ?? ""} + iconRight={ + <> + {selectedCaption?.id === caption.id && ( + + )} + {downloadCaption.isPending && + downloadCaption.variables.id === caption.id && ( + + )} + + } + onPress={() => downloadCaption.mutate(caption)} + key={caption.id} + /> + ))} + + + + + ); +}; diff --git a/apps/expo/src/components/player/Controls.tsx b/apps/expo/src/components/player/Controls.tsx new file mode 100644 index 0000000..5f6b8ab --- /dev/null +++ b/apps/expo/src/components/player/Controls.tsx @@ -0,0 +1,14 @@ +import type { ViewProps } from "tamagui"; +import React from "react"; +import { View } from "tamagui"; + +import { usePlayerStore } from "~/stores/player/store"; + +interface ControlsProps extends ViewProps { + children: React.ReactNode; +} + +export const Controls = ({ children, ...props }: ControlsProps) => { + const idle = usePlayerStore((state) => state.interface.isIdle); + return {!idle && children}; +}; diff --git a/apps/expo/src/components/player/ControlsOverlay.tsx b/apps/expo/src/components/player/ControlsOverlay.tsx new file mode 100644 index 0000000..981f47b --- /dev/null +++ b/apps/expo/src/components/player/ControlsOverlay.tsx @@ -0,0 +1,20 @@ +import { View } from "tamagui"; + +import { BottomControls } from "./BottomControls"; +import { Header } from "./Header"; +import { MiddleControls } from "./MiddleControls"; + +export const ControlsOverlay = ({ isLoading }: { isLoading: boolean }) => { + return ( + +
+ {!isLoading && } + + + ); +}; diff --git a/apps/expo/src/components/player/DownloadButton.tsx b/apps/expo/src/components/player/DownloadButton.tsx new file mode 100644 index 0000000..a755a38 --- /dev/null +++ b/apps/expo/src/components/player/DownloadButton.tsx @@ -0,0 +1,58 @@ +import { MaterialCommunityIcons } from "@expo/vector-icons"; +import { useTheme } from "tamagui"; + +import { findQuality } from "@movie-web/provider-utils"; + +import { useDownloadManager } from "~/hooks/useDownloadManager"; +import { convertMetaToScrapeMedia } from "~/lib/meta"; +import { usePlayerStore } from "~/stores/player/store"; +import { MWButton } from "../ui/Button"; +import { Controls } from "./Controls"; + +export const DownloadButton = () => { + const theme = useTheme(); + const { startDownload } = useDownloadManager(); + const stream = usePlayerStore((state) => state.interface.currentStream); + const meta = usePlayerStore((state) => state.meta); + + if (!meta) return null; + + const scrapeMedia = convertMetaToScrapeMedia(meta); + let url: string | undefined | null = null; + + if (stream?.type === "file") { + const highestQuality = findQuality(stream); + url = highestQuality ? stream.qualities[highestQuality]?.url : null; + } else if (stream?.type === "hls") { + url = stream.playlist; + } + + if (!url) return null; + + return ( + <> + + + } + onPress={() => + url && + startDownload( + url, + stream?.type === "hls" ? "hls" : "mp4", + scrapeMedia, + ).catch(console.error) + } + > + Download + + + + ); +}; diff --git a/apps/expo/src/components/player/Header.tsx b/apps/expo/src/components/player/Header.tsx new file mode 100644 index 0000000..b1c4074 --- /dev/null +++ b/apps/expo/src/components/player/Header.tsx @@ -0,0 +1,45 @@ +import { Text, View } from "tamagui"; + +import { usePlayerStore } from "~/stores/player/store"; +import { BrandPill } from "../BrandPill"; +import { BackButton } from "./BackButton"; +import { Controls } from "./Controls"; +import { mapSeasonAndEpisodeNumberToText } from "./utils"; + +export const Header = () => { + const isIdle = usePlayerStore((state) => state.interface.isIdle); + const meta = usePlayerStore((state) => state.meta); + + if (!isIdle) { + return ( + + + + + + + {meta && ( + + {meta.title} ({meta.releaseYear}){" "} + {meta.season !== undefined && meta.episode !== undefined + ? mapSeasonAndEpisodeNumberToText( + meta.season.number, + meta.episode.number, + ) + : ""} + + )} + + + + + ); + } +}; diff --git a/apps/expo/src/components/player/MiddleControls.tsx b/apps/expo/src/components/player/MiddleControls.tsx new file mode 100644 index 0000000..01e8452 --- /dev/null +++ b/apps/expo/src/components/player/MiddleControls.tsx @@ -0,0 +1,41 @@ +import { TouchableWithoutFeedback } from "react-native"; +import { View } from "tamagui"; + +import { usePlayerStore } from "~/stores/player/store"; +import { Controls } from "./Controls"; +import { PlayButton } from "./PlayButton"; +import { SeekButton } from "./SeekButton"; + +export const MiddleControls = () => { + const idle = usePlayerStore((state) => state.interface.isIdle); + const setIsIdle = usePlayerStore((state) => state.setIsIdle); + + const handleTouch = () => { + setIsIdle(!idle); + }; + + return ( + + + + + + + + + + + + + + ); +}; diff --git a/apps/expo/src/components/player/PlayButton.tsx b/apps/expo/src/components/player/PlayButton.tsx new file mode 100644 index 0000000..8aa8c46 --- /dev/null +++ b/apps/expo/src/components/player/PlayButton.tsx @@ -0,0 +1,33 @@ +import { FontAwesome } from "@expo/vector-icons"; + +import { usePlayerStore } from "~/stores/player/store"; + +export const PlayButton = () => { + const videoRef = usePlayerStore((state) => state.videoRef); + const status = usePlayerStore((state) => state.status); + const playAudio = usePlayerStore((state) => state.playAudio); + const pauseAudio = usePlayerStore((state) => state.pauseAudio); + + return ( + { + if (status?.isLoaded) { + if (status.isPlaying) { + videoRef?.pauseAsync().catch(() => { + console.log("Error pausing video"); + }); + void pauseAudio(); + } else { + videoRef?.playAsync().catch(() => { + console.log("Error playing video"); + }); + void playAudio(); + } + } + }} + /> + ); +}; diff --git a/apps/expo/src/components/player/PlaybackSpeedSelector.tsx b/apps/expo/src/components/player/PlaybackSpeedSelector.tsx new file mode 100644 index 0000000..955b608 --- /dev/null +++ b/apps/expo/src/components/player/PlaybackSpeedSelector.tsx @@ -0,0 +1,59 @@ +import type { SheetProps } from "tamagui"; +import { MaterialCommunityIcons } from "@expo/vector-icons"; +import { useTheme } from "tamagui"; + +import { usePlaybackSpeed } from "~/hooks/player/usePlaybackSpeed"; +import { Settings } from "./settings/Sheet"; + +export const PlaybackSpeedSelector = (props: SheetProps) => { + const theme = useTheme(); + const { speeds, currentSpeed, changePlaybackSpeed } = usePlaybackSpeed(); + + return ( + + + + + props.onOpenChange?.(false)} + /> + } + title="Playback settings" + /> + + {speeds.map((speed) => ( + + ) + } + onPress={() => { + changePlaybackSpeed(speed) + .then(() => props.onOpenChange?.(false)) + .catch((err) => { + console.log("error", err); + }); + }} + /> + ))} + + + + ); +}; diff --git a/apps/expo/src/components/player/ProgressBar.tsx b/apps/expo/src/components/player/ProgressBar.tsx new file mode 100644 index 0000000..373861b --- /dev/null +++ b/apps/expo/src/components/player/ProgressBar.tsx @@ -0,0 +1,37 @@ +import { useCallback } from "react"; +import { TouchableOpacity } from "react-native"; + +import { usePlayerStore } from "~/stores/player/store"; +import VideoSlider from "./VideoSlider"; + +export const ProgressBar = () => { + const status = usePlayerStore((state) => state.status); + const videoRef = usePlayerStore((state) => state.videoRef); + const setIsIdle = usePlayerStore((state) => state.setIsIdle); + + const updateProgress = useCallback( + (newProgress: number) => { + videoRef?.setStatusAsync({ positionMillis: newProgress }).catch(() => { + console.error("Error updating progress"); + }); + }, + [videoRef], + ); + + if (status?.isLoaded) { + return ( + setIsIdle(false)} + > + + + ); + } +}; diff --git a/apps/expo/src/components/player/QualitySelector.tsx b/apps/expo/src/components/player/QualitySelector.tsx new file mode 100644 index 0000000..5f766a9 --- /dev/null +++ b/apps/expo/src/components/player/QualitySelector.tsx @@ -0,0 +1,93 @@ +import type { SheetProps } from "tamagui"; +import { MaterialCommunityIcons } from "@expo/vector-icons"; +import { useTheme } from "tamagui"; + +import { constructFullUrl } from "@movie-web/provider-utils"; + +import { usePlayerStore } from "~/stores/player/store"; +import { Settings } from "./settings/Sheet"; + +export const QualitySelector = (props: SheetProps) => { + const theme = useTheme(); + const videoRef = usePlayerStore((state) => state.videoRef); + const videoSrc = usePlayerStore((state) => state.videoSrc); + const stream = usePlayerStore((state) => state.interface.currentStream); + const hlsTracks = usePlayerStore((state) => state.interface.hlsTracks); + + if (!videoRef || !videoSrc || !stream) return null; + let qualityMap: { quality: string; url: string }[]; + let currentQuality: string | undefined; + + if (stream.type === "file") { + const { qualities } = stream; + + currentQuality = Object.keys(qualities).find( + (key) => qualities[key as keyof typeof qualities]!.url === videoSrc.uri, + ); + + qualityMap = Object.keys(qualities).map((key) => ({ + quality: key, + url: qualities[key as keyof typeof qualities]!.url, + })); + } else if (stream.type === "hls") { + if (!hlsTracks?.video) return null; + + qualityMap = hlsTracks.video.map((video) => ({ + quality: + (video.properties[0]?.attributes.resolution as string) ?? "unknown", + url: constructFullUrl(stream.playlist, video.uri), + })); + } else { + return null; + } + + return ( + <> + + + + + props.onOpenChange?.(false)} + /> + } + title="Quality settings" + /> + + {qualityMap?.map((quality) => ( + + ) + } + onPress={() => { + void videoRef.unloadAsync(); + void videoRef.loadAsync( + { uri: quality.url, headers: stream.headers }, + { shouldPlay: true }, + ); + }} + /> + ))} + + + + + ); +}; diff --git a/apps/expo/src/components/player/ScrapeCard.tsx b/apps/expo/src/components/player/ScrapeCard.tsx new file mode 100644 index 0000000..e11a602 --- /dev/null +++ b/apps/expo/src/components/player/ScrapeCard.tsx @@ -0,0 +1,115 @@ +import type { ReactNode } from "react"; +import React from "react"; +import { MaterialCommunityIcons, MaterialIcons } from "@expo/vector-icons"; +import { Text, useTheme, View } from "tamagui"; + +export interface ScrapeItemProps { + status: "failure" | "pending" | "notfound" | "success" | "waiting"; + name: string; + id?: string; + percentage?: number; + children?: ReactNode; +} + +export interface ScrapeCardProps extends ScrapeItemProps { + hasChildren?: boolean; +} + +const statusTextMap: Partial> = { + notfound: "Doesn't have the video", + failure: "Failed to scrape", + pending: "Checking for videos...", +}; + +const mapPercentageToIcon = (percentage: number) => { + const slice = Math.floor(percentage / 12.5); + return `circle-slice-${slice === 0 ? 1 : slice}`; +}; + +export function StatusCircle({ + type, + percentage, +}: { + type: ScrapeItemProps["status"]; + percentage: number; +}) { + const theme = useTheme(); + return ( + <> + {type === "waiting" && ( + + )} + {type === "pending" && ( + + )} + {type === "failure" && ( + + )} + {type === "notfound" && ( + + )} + {type === "success" && ( + + )} + + ); +} + +export function ScrapeItem(props: ScrapeItemProps) { + const text = statusTextMap[props.status]; + + return ( + + + + + {props.name} + + + + + {text && {text}} + + {props.children} + + ); +} + +export function ScrapeCard(props: ScrapeCardProps) { + return ( + + + + + + ); +} diff --git a/apps/expo/src/components/player/ScraperProcess.tsx b/apps/expo/src/components/player/ScraperProcess.tsx new file mode 100644 index 0000000..2a4bf81 --- /dev/null +++ b/apps/expo/src/components/player/ScraperProcess.tsx @@ -0,0 +1,214 @@ +import { useEffect, useRef } from "react"; +import { SafeAreaView } from "react-native"; +import { ScrollView } from "react-native-gesture-handler"; +import { useRouter } from "expo-router"; +import { View } from "tamagui"; + +import type { RunOutput, ScrapeMedia } from "@movie-web/provider-utils"; +import { + extractTracksFromHLS, + filterAudioTracks, + findQuality, +} from "@movie-web/provider-utils"; + +import type { ItemData } from "../item/item"; +import type { PlayerMeta } from "~/stores/player/slices/video"; +import { useMeta } from "~/hooks/player/useMeta"; +import { useScrape } from "~/hooks/player/useSourceScrape"; +import { useDownloadManager } from "~/hooks/useDownloadManager"; +import { convertMetaToScrapeMedia } from "~/lib/meta"; +import { PlayerStatus } from "~/stores/player/slices/interface"; +import { usePlayerStore } from "~/stores/player/store"; +import { BackButton } from "./BackButton"; +import { ScrapeCard, ScrapeItem } from "./ScrapeCard"; + +interface ScraperProcessProps { + data?: Partial; + media?: ScrapeMedia; + download?: boolean; +} + +export const ScraperProcess = ({ + data, + media, + download, +}: ScraperProcessProps) => { + const router = useRouter(); + const { startDownload } = useDownloadManager(); + + const scrollViewRef = useRef(null); + + const { convertIdToMeta } = useMeta(); + const { startScraping, sourceOrder, sources, currentSource } = useScrape(); + + const setStream = usePlayerStore((state) => state.setCurrentStream); + const setHlsTracks = usePlayerStore((state) => state.setHlsTracks); + const setAudioTracks = usePlayerStore((state) => state.setAudioTracks); + const setPlayerStatus = usePlayerStore((state) => state.setPlayerStatus); + const setSourceId = usePlayerStore((state) => state.setSourceId); + + useEffect(() => { + const fetchData = async () => { + if (!data?.id && !media) return router.back(); + + let streamResult: RunOutput | null = null; + let meta: PlayerMeta | undefined = undefined; + + if (!media && data?.id && data.type) { + meta = await convertIdToMeta( + data.id, + data.type, + data.season, + data.episode, + ); + if (!meta) return router.back(); + } + + const scrapeMedia = media ?? (meta && convertMetaToScrapeMedia(meta)); + if (!scrapeMedia) return router.back(); + streamResult = await startScraping(scrapeMedia); + + if (!streamResult) return router.back(); + if (download) { + if (streamResult.stream.type === "file") { + const quality = findQuality(streamResult.stream); + const url = quality + ? streamResult.stream.qualities[quality]?.url + : null; + if (!url) return; + startDownload(url, "mp4", scrapeMedia).catch(console.error); + } else if (streamResult.stream.type === "hls") { + startDownload(streamResult.stream.playlist, "hls", scrapeMedia).catch( + console.error, + ); + } + return router.back(); + } + + setStream(streamResult.stream); + + if (streamResult.stream.type === "hls") { + const tracks = await extractTracksFromHLS( + streamResult.stream.playlist, + { + ...streamResult.stream.preferredHeaders, + ...streamResult.stream.headers, + }, + ); + + if (tracks) setHlsTracks(tracks); + + if (tracks?.audio.length) { + setAudioTracks( + filterAudioTracks(tracks, streamResult.stream.playlist), + ); + } + } + setPlayerStatus(PlayerStatus.READY); + setSourceId(streamResult.sourceId); + }; + void fetchData(); + }, [ + convertIdToMeta, + data, + download, + media, + router, + setAudioTracks, + setHlsTracks, + setPlayerStatus, + setSourceId, + setStream, + startDownload, + startScraping, + ]); + + let currentProviderIndex = sourceOrder.findIndex( + (s) => s.id === currentSource || s.children.includes(currentSource ?? ""), + ); + if (currentProviderIndex === -1) { + currentProviderIndex = sourceOrder.length - 1; + } + + useEffect(() => { + scrollViewRef.current?.scrollTo({ + y: currentProviderIndex * 110, + animated: true, + }); + }, [currentProviderIndex]); + + return ( + + + + + + + {sourceOrder.map((order) => { + const source = sources[order.id]; + if (!source) return null; + const distance = Math.abs( + sourceOrder.findIndex((o) => o.id === order.id) - + currentProviderIndex, + ); + return ( + + 0} + percentage={source.percentage} + > + 0 ? 8 : 0} + flexDirection="column" + gap={16} + > + {order.children.map((embedId) => { + const embed = sources[embedId]; + if (!embed) return null; + return ( + + ); + })} + + + + ); + })} + + + + ); +}; diff --git a/apps/expo/src/components/player/SeasonEpisodeSelector.tsx b/apps/expo/src/components/player/SeasonEpisodeSelector.tsx new file mode 100644 index 0000000..d0aef38 --- /dev/null +++ b/apps/expo/src/components/player/SeasonEpisodeSelector.tsx @@ -0,0 +1,184 @@ +import type { SheetProps } from "tamagui"; +import { useState } from "react"; +import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons"; +import { useQuery } from "@tanstack/react-query"; +import { useTheme, View } from "tamagui"; + +import { fetchMediaDetails, fetchSeasonDetails } from "@movie-web/tmdb"; + +import { usePlayerStore } from "~/stores/player/store"; +import { MWButton } from "../ui/Button"; +import { Controls } from "./Controls"; +import { Settings } from "./settings/Sheet"; + +const EpisodeSelector = ({ + seasonNumber, + setSelectedSeason, + ...props +}: SheetProps & { + seasonNumber: number; + setSelectedSeason: (season: number | null) => void; +}) => { + const theme = useTheme(); + const meta = usePlayerStore((state) => state.meta); + const setMeta = usePlayerStore((state) => state.setMeta); + + const { data, isLoading } = useQuery({ + queryKey: ["seasonEpisodes", meta!.tmdbId, seasonNumber], + queryFn: async () => { + return fetchSeasonDetails(meta!.tmdbId, seasonNumber); + }, + enabled: meta !== null, + }); + + if (!meta) return null; + + return ( + + + + + { + setSelectedSeason(null); + props.onOpenChange?.(false); + }} + /> + } + title={`Season ${data?.season_number}`} + /> + + {data?.episodes.map((episode) => ( + + + E{episode.episode_number} + + + } + title={episode.name} + onPress={() => { + setMeta({ + ...meta, + episode: { + number: episode.episode_number, + tmdbId: episode.id.toString(), + }, + }); + }} + /> + ))} + + + + ); +}; + +export const SeasonSelector = () => { + const theme = useTheme(); + const [open, setOpen] = useState(false); + const [episodeOpen, setEpisodeOpen] = useState(false); + + const [selectedSeason, setSelectedSeason] = useState(null); + const meta = usePlayerStore((state) => state.meta); + + const { data, isLoading } = useQuery({ + queryKey: ["seasons", meta!.tmdbId], + queryFn: async () => { + return fetchMediaDetails(meta!.tmdbId, "tv"); + }, + enabled: meta !== null, + }); + + if (meta?.type !== "show") return null; + + return ( + <> + + + } + onPress={() => setOpen(true)} + > + Episodes + + + + + + + + {episodeOpen && selectedSeason ? ( + + ) : ( + <> + setOpen(false)} + /> + } + title={data?.result.name ?? ""} + /> + + {data?.result.seasons.map((season) => ( + + } + onPress={() => { + setSelectedSeason(season.season_number); + setEpisodeOpen(true); + }} + /> + ))} + + + )} + + + + ); +}; diff --git a/apps/expo/src/components/player/SeekButton.tsx b/apps/expo/src/components/player/SeekButton.tsx new file mode 100644 index 0000000..54be900 --- /dev/null +++ b/apps/expo/src/components/player/SeekButton.tsx @@ -0,0 +1,36 @@ +import { MaterialIcons } from "@expo/vector-icons"; + +import { usePlayerStore } from "~/stores/player/store"; + +interface SeekProps { + type: "forward" | "backward"; +} + +export const SeekButton = ({ type }: SeekProps) => { + const videoRef = usePlayerStore((state) => state.videoRef); + const status = usePlayerStore((state) => state.status); + const setAudioPositionAsync = usePlayerStore( + (state) => state.setAudioPositionAsync, + ); + + return ( + { + if (status?.isLoaded) { + const position = + type === "forward" + ? status.positionMillis + 10000 + : status.positionMillis - 10000; + + videoRef?.setPositionAsync(position).catch(() => { + console.log("Error seeking backwards"); + }); + void setAudioPositionAsync(position); + } + }} + /> + ); +}; diff --git a/apps/expo/src/components/player/SettingsSelector.tsx b/apps/expo/src/components/player/SettingsSelector.tsx new file mode 100644 index 0000000..348d2a3 --- /dev/null +++ b/apps/expo/src/components/player/SettingsSelector.tsx @@ -0,0 +1,101 @@ +import { useState } from "react"; +import { MaterialCommunityIcons, MaterialIcons } from "@expo/vector-icons"; +import { useTheme } from "tamagui"; + +import { MWButton } from "../ui/Button"; +import { Controls } from "./Controls"; +import { PlaybackSpeedSelector } from "./PlaybackSpeedSelector"; +import { QualitySelector } from "./QualitySelector"; +import { Settings } from "./settings/Sheet"; + +export const SettingsSelector = () => { + const theme = useTheme(); + const [open, setOpen] = useState(false); + const [qualityOpen, setQualityOpen] = useState(false); + const [playbackOpen, setPlaybackOpen] = useState(false); + + return ( + <> + + + } + onPress={() => setOpen(true)} + > + Settings + + + + + + + + + + setOpen(false)} + /> + } + title="Settings" + /> + + + } + iconRight={ + + } + onPress={() => setQualityOpen(true)} + /> + + } + iconRight={ + + } + onPress={() => setPlaybackOpen(true)} + /> + + + + + ); +}; diff --git a/apps/expo/src/components/player/SourceSelector.tsx b/apps/expo/src/components/player/SourceSelector.tsx new file mode 100644 index 0000000..62339ba --- /dev/null +++ b/apps/expo/src/components/player/SourceSelector.tsx @@ -0,0 +1,222 @@ +import type { SheetProps } from "tamagui"; +import { useCallback, useEffect, useState } from "react"; +import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons"; +import { Spinner, Text, useTheme, View } from "tamagui"; + +import { getBuiltinSources, providers } from "@movie-web/provider-utils"; + +import { + useEmbedScrape, + useSourceScrape, +} from "~/hooks/player/useSourceScrape"; +import { usePlayerStore } from "~/stores/player/store"; +import { MWButton } from "../ui/Button"; +import { Controls } from "./Controls"; +import { Settings } from "./settings/Sheet"; + +const SourceItem = ({ + name, + id, + active, + embed, + onPress, +}: { + name: string; + id: string; + active?: boolean; + embed?: { url: string; embedId: string }; + onPress?: (id: string) => void; +}) => { + const theme = useTheme(); + const { mutate, isPending, isError } = useEmbedScrape(); + + return ( + + {active && ( + + )} + {isError && ( + + )} + + {isPending && } + + } + onPress={() => { + if (onPress) { + onPress(id); + return; + } + if (embed) { + mutate({ + url: embed.url, + embedId: embed.embedId, + sourceId: id, + }); + } + }} + /> + ); +}; + +const EmbedsPart = ({ + sourceId, + closeParent, + ...props +}: SheetProps & { + sourceId: string; + closeParent?: (open: boolean) => void; +}) => { + const theme = useTheme(); + const { data, isPending, isError, error, status } = useSourceScrape(sourceId); + + useEffect(() => { + if (status === "success" && !isError && data && data?.length <= 1) { + props.onOpenChange?.(false); + closeParent?.(false); + } + }, [status, data, isError, props, closeParent]); + + return ( + + + + + { + props.onOpenChange?.(false); + }} + /> + } + title={providers.getMetadata(sourceId)?.name ?? "Embeds"} + /> + + + {isPending && } + {error && Something went wrong!} + + {data && data?.length > 1 && ( + + {data.map((embed) => { + const metaData = providers.getMetadata(embed.embedId)!; + return ( + + ); + })} + + )} + + + + ); +}; + +export const SourceSelector = () => { + const theme = useTheme(); + const [open, setOpen] = useState(false); + const [embedOpen, setEmbedOpen] = useState(false); + + const sourceId = usePlayerStore((state) => state.interface.sourceId); + const setSourceId = usePlayerStore((state) => state.setSourceId); + + const isActive = useCallback( + (id: string) => { + return sourceId === id; + }, + [sourceId], + ); + + return ( + <> + + + } + onPress={() => setOpen(true)} + > + Source + + + + + + + + {embedOpen && sourceId ? ( + + ) : ( + <> + setOpen(false)} + /> + } + title="Sources" + /> + + {getBuiltinSources() + .sort((a, b) => b.rank - a.rank) + .map((source) => ( + { + setSourceId(id); + setEmbedOpen(true); + }} + /> + ))} + + + )} + + + + ); +}; diff --git a/apps/expo/src/components/player/StatusCircle.tsx b/apps/expo/src/components/player/StatusCircle.tsx new file mode 100644 index 0000000..3c1163e --- /dev/null +++ b/apps/expo/src/components/player/StatusCircle.tsx @@ -0,0 +1,72 @@ +import React from "react"; +import Animated, { + Easing, + useAnimatedProps, + useSharedValue, + withTiming, +} from "react-native-reanimated"; +import { Circle, Svg } from "react-native-svg"; +import { AntDesign } from "@expo/vector-icons"; +import { View } from "tamagui"; + +const AnimatedCircle = Animated.createAnimatedComponent(Circle); + +export const StatusCircle = ({ + type, + percentage = 0, +}: { + type: string; + percentage: number; +}) => { + const radius = 25; + const strokeWidth = 5; + const circleCircumference = 2 * Math.PI * radius; + + const strokeDashoffset = useSharedValue(circleCircumference); + + React.useEffect(() => { + strokeDashoffset.value = withTiming( + circleCircumference - (circleCircumference * percentage) / 100, + { + duration: 500, + easing: Easing.linear, + }, + ); + }, [circleCircumference, percentage, strokeDashoffset]); + + const animatedProps = useAnimatedProps(() => ({ + strokeDashoffset: strokeDashoffset.value, + })); + + const renderIcon = () => { + switch (type) { + case "success": + return ; + case "error": + return ; + default: + return null; + } + }; + + return ( + + + {type === "loading" && ( + + )} + + {renderIcon()} + + ); +}; diff --git a/apps/expo/src/components/player/VideoPlayer.tsx b/apps/expo/src/components/player/VideoPlayer.tsx new file mode 100644 index 0000000..5d7ef26 --- /dev/null +++ b/apps/expo/src/components/player/VideoPlayer.tsx @@ -0,0 +1,397 @@ +import type { AVPlaybackStatus } from "expo-av"; +import type { SharedValue } from "react-native-reanimated"; +import { useEffect, useState } from "react"; +import { Dimensions, Platform } from "react-native"; +import { Gesture, GestureDetector } from "react-native-gesture-handler"; +import Animated, { + runOnJS, + useAnimatedStyle, + useSharedValue, +} from "react-native-reanimated"; +import { useSafeAreaInsets } from "react-native-safe-area-context"; +import { ResizeMode, Video } from "expo-av"; +import * as Haptics from "expo-haptics"; +import * as NavigationBar from "expo-navigation-bar"; +import * as Network from "expo-network"; +import { useRouter } from "expo-router"; +import * as StatusBar from "expo-status-bar"; +import { Feather } from "@expo/vector-icons"; +import { Spinner, useTheme, View } from "tamagui"; + +import { findHLSQuality, findQuality } from "@movie-web/provider-utils"; + +import { useAudioTrack } from "~/hooks/player/useAudioTrack"; +import { useBrightness } from "~/hooks/player/useBrightness"; +import { usePlaybackSpeed } from "~/hooks/player/usePlaybackSpeed"; +import { usePlayer } from "~/hooks/player/usePlayer"; +import { useVolume } from "~/hooks/player/useVolume"; +import { + convertMetaToItemData, + convertMetaToScrapeMedia, + getNextEpisode, +} from "~/lib/meta"; +import { useAudioTrackStore } from "~/stores/audio"; +import { usePlayerStore } from "~/stores/player/store"; +import { + DefaultQuality, + useNetworkSettingsStore, + usePlayerSettingsStore, + useWatchHistoryStore, +} from "~/stores/settings"; +import { CaptionRenderer } from "./CaptionRenderer"; +import { ControlsOverlay } from "./ControlsOverlay"; + +export const VideoPlayer = () => { + const { + brightness, + showBrightnessOverlay, + setShowBrightnessOverlay, + handleBrightnessChange, + } = useBrightness(); + const { volume, showVolumeOverlay, setShowVolumeOverlay } = useVolume(); + + const { currentSpeed } = usePlaybackSpeed(); + const { synchronizePlayback } = useAudioTrack(); + const { dismissFullscreenPlayer } = usePlayer(); + const [isLoading, setIsLoading] = useState(true); + const [resizeMode, setResizeMode] = useState(ResizeMode.CONTAIN); + const [hasStartedPlaying, setHasStartedPlaying] = useState(false); + const router = useRouter(); + + const scale = useSharedValue(1); + + const state = usePlayerStore((state) => state.interface.state); + const isIdle = usePlayerStore((state) => state.interface.isIdle); + const stream = usePlayerStore((state) => state.interface.currentStream); + const selectedAudioTrack = useAudioTrackStore((state) => state.selectedTrack); + const videoRef = usePlayerStore((state) => state.videoRef); + const setVideoRef = usePlayerStore((state) => state.setVideoRef); + const videoSrc = usePlayerStore((state) => state.videoSrc) ?? undefined; + const setVideoSrc = usePlayerStore((state) => state.setVideoSrc); + const setStatus = usePlayerStore((state) => state.setStatus); + const setIsIdle = usePlayerStore((state) => state.setIsIdle); + const toggleAudio = usePlayerStore((state) => state.toggleAudio); + const toggleState = usePlayerStore((state) => state.toggleState); + const meta = usePlayerStore((state) => state.meta); + const setMeta = usePlayerStore((state) => state.setMeta); + const isLocalFile = usePlayerStore((state) => state.isLocalFile); + + const { gestureControls, autoPlay } = usePlayerSettingsStore(); + const { updateWatchHistory, removeFromWatchHistory, getWatchHistoryItem } = + useWatchHistoryStore(); + const { wifiDefaultQuality, mobileDataDefaultQuality } = + useNetworkSettingsStore(); + + const updateResizeMode = (newMode: ResizeMode) => { + setResizeMode(newMode); + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + }; + + const pinchGesture = Gesture.Pinch().onUpdate((e) => { + scale.value = e.scale; + if (scale.value > 1 && resizeMode !== ResizeMode.COVER) { + runOnJS(updateResizeMode)(ResizeMode.COVER); + } else if (scale.value <= 1 && resizeMode !== ResizeMode.CONTAIN) { + runOnJS(updateResizeMode)(ResizeMode.CONTAIN); + } + }); + + const doubleTapGesture = Gesture.Tap() + .enabled(gestureControls && isIdle) + .numberOfTaps(2) + .onEnd(() => { + runOnJS(toggleAudio)(); + runOnJS(toggleState)(); + }); + + const screenHalfWidth = Dimensions.get("window").width / 2; + + const panGesture = Gesture.Pan() + .enabled(gestureControls && isIdle) + .onStart((event) => { + if (event.x > screenHalfWidth) { + runOnJS(setShowVolumeOverlay)(true); + } else { + runOnJS(setShowBrightnessOverlay)(true); + } + }) + .onUpdate((event) => { + const divisor = 5000; + const directionMultiplier = event.velocityY < 0 ? 1 : -1; + + const change = directionMultiplier * Math.abs(event.velocityY / divisor); + + if (event.x > screenHalfWidth) { + const newVolume = Math.max(0, Math.min(1, volume.value + change)); + volume.value = newVolume; + } else { + const newBrightness = Math.max( + 0, + Math.min(1, brightness.value + change), + ); + brightness.value = newBrightness; + runOnJS(handleBrightnessChange)(newBrightness); + } + }) + .onEnd((event) => { + if (event.x > screenHalfWidth) { + runOnJS(setShowVolumeOverlay)(false); + } else { + runOnJS(setShowBrightnessOverlay)(false); + } + }); + + const composedGesture = Gesture.Race( + panGesture, + pinchGesture, + doubleTapGesture, + ); + + StatusBar.setStatusBarHidden(true); + + if (Platform.OS === "android") { + void NavigationBar.setVisibilityAsync("hidden"); + } + + useEffect(() => { + const initializePlayer = async () => { + if (videoSrc?.uri && isLocalFile) return; + + if (!stream) { + await dismissFullscreenPlayer(); + return router.back(); + } + setIsLoading(true); + + const { type: networkType } = await Network.getNetworkStateAsync(); + const defaultQuality = + networkType === Network.NetworkStateType.WIFI + ? wifiDefaultQuality + : mobileDataDefaultQuality; + const highest = defaultQuality === DefaultQuality.Highest; + + let url = null; + + if (stream.type === "hls") { + url = await findHLSQuality(stream.playlist, stream.headers, highest); + } + + if (stream.type === "file") { + const chosenQuality = findQuality(stream, highest); + url = chosenQuality ? stream.qualities[chosenQuality]?.url : null; + } + + if (!url) { + await dismissFullscreenPlayer(); + return router.back(); + } + + setVideoSrc({ + uri: url, + headers: { + ...stream.preferredHeaders, + ...stream.headers, + }, + }); + + setIsLoading(false); + }; + + void initializePlayer(); + + const timeout = setTimeout(() => { + if (!hasStartedPlaying) { + router.back(); + } + }, 60000); + + return () => { + if (meta) { + const item = convertMetaToItemData(meta); + const scrapeMedia = convertMetaToScrapeMedia(meta); + updateWatchHistory( + item, + scrapeMedia, + videoRef?.props.positionMillis ?? 0, + ); + } + clearTimeout(timeout); + void synchronizePlayback(); + }; + }, [ + isLocalFile, + dismissFullscreenPlayer, + hasStartedPlaying, + meta, + router, + selectedAudioTrack, + setVideoSrc, + stream, + synchronizePlayback, + updateWatchHistory, + videoRef?.props.positionMillis, + videoSrc?.uri, + wifiDefaultQuality, + mobileDataDefaultQuality, + ]); + + const onVideoLoadStart = () => { + setIsLoading(true); + }; + + const onReadyForDisplay = () => { + setIsLoading(false); + setHasStartedPlaying(true); + if (videoRef) { + void videoRef.setRateAsync(currentSpeed, true); + + if (meta) { + const media = convertMetaToScrapeMedia(meta); + const watchHistoryItem = getWatchHistoryItem(media); + + if (watchHistoryItem) { + void videoRef.setPositionAsync(watchHistoryItem.positionMillis); + } + } + } + }; + + const onPlaybackStatusUpdate = async (status: AVPlaybackStatus) => { + setStatus(status); + if (meta && status.isLoaded && status.didJustFinish) { + const item = convertMetaToItemData(meta); + removeFromWatchHistory(item); + } + if ( + status.isLoaded && + status.didJustFinish && + !status.isLooping && + autoPlay + ) { + if (meta?.type !== "show") return; + const nextEpisodeMeta = await getNextEpisode(meta); + if (!nextEpisodeMeta) return; + setMeta(nextEpisodeMeta); + const media = convertMetaToScrapeMedia(nextEpisodeMeta); + + router.replace({ + pathname: "/videoPlayer", + params: { media: JSON.stringify(media) }, + }); + } + }; + + return ( + + + + + ); +}; + +function GestureOverlay(props: { + value: SharedValue; + type: "brightness" | "volume"; +}) { + const theme = useTheme(); + const insets = useSafeAreaInsets(); + + const animatedStyle = useAnimatedStyle(() => { + return { + height: `${props.value.value * 100}%`, + borderTopLeftRadius: props.value.value >= 0.98 ? 44 : 0, + borderTopRightRadius: props.value.value >= 0.98 ? 44 : 0, + }; + }); + + return ( + + + + + + + ); +} diff --git a/apps/expo/src/components/player/VideoSlider.tsx b/apps/expo/src/components/player/VideoSlider.tsx new file mode 100644 index 0000000..0127f85 --- /dev/null +++ b/apps/expo/src/components/player/VideoSlider.tsx @@ -0,0 +1,176 @@ +import type { + HandlerStateChangeEvent, + PanGestureHandlerGestureEvent, + TapGestureHandlerEventPayload, +} from "react-native-gesture-handler"; +import React, { useEffect, useRef } from "react"; +import { Dimensions } from "react-native"; +import { + PanGestureHandler, + State, + TapGestureHandler, +} from "react-native-gesture-handler"; +import Animated, { + runOnJS, + useAnimatedGestureHandler, + useAnimatedStyle, + useSharedValue, +} from "react-native-reanimated"; +import { useTheme, View } from "tamagui"; + +import { usePlayerStore } from "~/stores/player/store"; + +const clamp = (value: number, lowerBound: number, upperBound: number) => { + "worklet"; + return Math.min(Math.max(lowerBound, value), upperBound); +}; + +interface VideoSliderProps { + onSlidingComplete?: (value: number) => void; +} + +const VideoSlider = ({ onSlidingComplete }: VideoSliderProps) => { + const theme = useTheme(); + const tapRef = useRef(null); + const panRef = useRef(null); + const status = usePlayerStore((state) => state.status); + const setIsIdle = usePlayerStore((state) => state.setIsIdle); + + const width = Dimensions.get("screen").width - 120; + const knobSize_ = 20; + const trackSize_ = 8; + const minimumValue = 0; + const maximumValue = status?.isLoaded ? status.durationMillis! : 0; + const value = status?.isLoaded ? status.positionMillis : 0; + + const valueToX = (v: number) => { + if (maximumValue === minimumValue) return 0; + return (width * (v - minimumValue)) / (maximumValue - minimumValue); + }; + const xToValue = (x: number) => { + "worklet"; + if (maximumValue === minimumValue) return minimumValue; + return (x / width) * (maximumValue - minimumValue) + minimumValue; + }; + const valueX = valueToX(value); + const translateX = useSharedValue(valueToX(value)); + const isDragging = useSharedValue(false); + + useEffect(() => { + if (!isDragging.value) { + translateX.value = clamp(valueX, 0, width - knobSize_); + } + }, [valueX, isDragging.value, translateX, width]); + + const _onSlidingComplete = (xValue: number) => { + "worklet"; + if (onSlidingComplete) runOnJS(onSlidingComplete)(xToValue(xValue)); + }; + + const _onActive = (value: number) => { + "worklet"; + isDragging.value = true; + translateX.value = clamp(value, 0, width - knobSize_); + runOnJS(setIsIdle)(false); + }; + + const _onEnd = () => { + "worklet"; + isDragging.value = false; + _onSlidingComplete(translateX.value); + }; + + const onGestureEvent = useAnimatedGestureHandler< + PanGestureHandlerGestureEvent, + { offsetX: number } + >({ + onStart: (_, ctx) => (ctx.offsetX = translateX.value), + onActive: (event, ctx) => _onActive(event.translationX + ctx.offsetX), + onEnd: _onEnd, + onCancel: _onEnd, + onFinish: _onEnd, + }); + + const onTapEvent = ( + event: HandlerStateChangeEvent, + ) => { + if (event.nativeEvent.state === State.ACTIVE) { + _onActive(event.nativeEvent.x); + _onSlidingComplete(event.nativeEvent.x); + } + }; + + const scrollTranslationStyle = useAnimatedStyle(() => { + return { transform: [{ translateX: translateX.value }] }; + }); + + const progressStyle = useAnimatedStyle(() => { + return { + width: translateX.value + knobSize_, + }; + }); + + return ( + + + + + + + + + + + ); +}; + +export default VideoSlider; diff --git a/apps/expo/src/components/player/settings/Sheet.tsx b/apps/expo/src/components/player/settings/Sheet.tsx new file mode 100644 index 0000000..d1ae13c --- /dev/null +++ b/apps/expo/src/components/player/settings/Sheet.tsx @@ -0,0 +1,157 @@ +import type { SheetProps, ViewProps } from "tamagui"; +import { useSafeAreaInsets } from "react-native-safe-area-context"; +import { + ScrollView, + Separator, + Sheet, + Spinner, + styled, + Text, + View, +} from "tamagui"; + +const PlayerText = styled(Text, { + color: "$playerSettingsUnactiveText", + fontWeight: "bold", + fontSize: 18, +}); + +function SettingsSheet(props: SheetProps) { + return ( + + {props.children} + + ); +} + +function SettingsSheetOverlay() { + return ( + + ); +} + +function SettingsSheetHandle() { + return ; +} + +function SettingsSheetFrame({ + children, + isLoading, +}: { + children: React.ReactNode; + isLoading?: boolean; +}) { + return ( + + + {isLoading && ( + + )} + {!isLoading && children} + + + ); +} + +function SettingsHeader({ + icon, + title, + rightButton, +}: { + icon: React.ReactNode; + title: string; + rightButton?: React.ReactNode; +}) { + const insets = useSafeAreaInsets(); + + return ( + <> + + {icon} + {title} + {rightButton} + + + + ); +} + +function SettingsContent({ + isScroll = true, + children, +}: { + isScroll?: boolean; + children: React.ReactNode; +}) { + const ViewDisplay = isScroll ? ScrollView : View; + const insets = useSafeAreaInsets(); + + return ( + + {children} + + ); +} + +function SettingsItem({ + iconLeft, + iconRight, + title, + ...props +}: ViewProps & { + iconLeft?: React.ReactNode; + iconRight?: React.ReactNode; + title: string; +}) { + return ( + + {iconLeft} + + {title} + + {iconRight} + + ); +} + +export const Settings = { + Sheet: SettingsSheet, + SheetOverlay: SettingsSheetOverlay, + SheetHandle: SettingsSheetHandle, + SheetFrame: SettingsSheetFrame, + Header: SettingsHeader, + Content: SettingsContent, + Text: PlayerText, + Item: SettingsItem, +}; diff --git a/apps/expo/src/components/player/utils.ts b/apps/expo/src/components/player/utils.ts new file mode 100644 index 0000000..2a192d5 --- /dev/null +++ b/apps/expo/src/components/player/utils.ts @@ -0,0 +1,25 @@ +export const mapMillisecondsToTime = (milliseconds: number): string => { + const hours = Math.floor(milliseconds / (1000 * 60 * 60)); + const minutes = Math.floor((milliseconds % (1000 * 60 * 60)) / (1000 * 60)); + const seconds = Math.floor((milliseconds % (1000 * 60)) / 1000); + + const components: string[] = []; + + if (hours > 0) { + components.push(hours.toString().padStart(2, "0")); + } + + components.push(minutes.toString().padStart(2, "0")); + components.push(seconds.toString().padStart(2, "0")); + + const formattedTime = components.join(":"); + + return formattedTime; +}; + +export const mapSeasonAndEpisodeNumberToText = ( + season: number, + episode: number, +) => { + return `S${season.toString().padStart(2, "0")}E${episode.toString().padStart(2, "0")}`; +}; diff --git a/apps/expo/src/components/ui/Button.tsx b/apps/expo/src/components/ui/Button.tsx new file mode 100644 index 0000000..7dda293 --- /dev/null +++ b/apps/expo/src/components/ui/Button.tsx @@ -0,0 +1,92 @@ +import { Button, Spinner, styled, withStaticProperties } from "tamagui"; + +const MWButtonFrame = styled(Button, { + variants: { + type: { + primary: { + backgroundColor: "white", + color: "black", + fontWeight: "bold", + pressStyle: { + backgroundColor: "$silver100", + }, + disabledStyle: { + backgroundColor: "$ash500", + color: "$ash200", + pointerEvents: "none", + }, + }, + secondary: { + backgroundColor: "$ash700", + color: "$silver300", + fontWeight: "bold", + pressStyle: { + backgroundColor: "$ash500", + }, + disabledStyle: { + backgroundColor: "$ash900", + color: "$ash200", + pointerEvents: "none", + }, + }, + purple: { + backgroundColor: "$purple500", + color: "white", + fontWeight: "bold", + pressStyle: { + backgroundColor: "$purple400", + }, + disabledStyle: { + backgroundColor: "$purple700", + color: "$ash200", + pointerEvents: "none", + }, + }, + cancel: { + backgroundColor: "$ash500", + color: "white", + fontWeight: "bold", + pressStyle: { + backgroundColor: "$ash300", + }, + disabledStyle: { + backgroundColor: "$ash700", + color: "$ash200", + pointerEvents: "none", + }, + }, + danger: { + backgroundColor: "$rose300", + color: "white", + fontWeight: "bold", + pressStyle: { + backgroundColor: "$rose200", + }, + disabledStyle: { + backgroundColor: "$rose500", + color: "$ash200", + pointerEvents: "none", + }, + }, + }, + } as const, +}); + +const ButtonComponent = MWButtonFrame.styleable<{ + isLoading?: boolean; +}>(function Button(props, ref) { + const spinnerColor = + // @ts-expect-error this is a hack to get the color from the variant + MWButtonFrame.staticConfig.variants?.type?.[props.type!]?.color as string; + return ( + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + + {props.isLoading && ( + + )} + {props.children} + + ); +}); + +export const MWButton = withStaticProperties(ButtonComponent, {}); diff --git a/apps/expo/src/components/ui/Card.tsx b/apps/expo/src/components/ui/Card.tsx new file mode 100644 index 0000000..529e85a --- /dev/null +++ b/apps/expo/src/components/ui/Card.tsx @@ -0,0 +1,21 @@ +import { Card, styled, withStaticProperties } from "tamagui"; + +export const MWCardFrame = styled(Card, { + backgroundColor: "$shade600", + borderColor: "$shade400", + + variants: { + bordered: { + true: { + borderWidth: 1, + borderColor: "$shade500", + }, + }, + }, +}); + +export const MWCard = withStaticProperties(MWCardFrame, { + Header: Card.Header, + Footer: Card.Footer, + Background: Card.Background, +}); diff --git a/apps/expo/src/components/ui/Input.tsx b/apps/expo/src/components/ui/Input.tsx new file mode 100644 index 0000000..0d0b8cd --- /dev/null +++ b/apps/expo/src/components/ui/Input.tsx @@ -0,0 +1,42 @@ +import { Input, styled } from "tamagui"; + +export const MWInput = styled(Input, { + fontWeight: "$semibold", + + variants: { + type: { + default: { + backgroundColor: "$ash600", + color: "$ash100", + placeholderTextColor: "$ash200", + borderColor: "$ash500", + outlineStyle: "none", + focusStyle: { + borderColor: "$ash300", + }, + }, + search: { + backgroundColor: "$shade500", + color: "$shade100", + borderColor: "$colorTransparent", + placeholderTextColor: "$shade100", + outlineStyle: "none", + focusStyle: { + borderColor: "$colorTransparent", + }, + }, + authentication: { + backgroundColor: "$shade500", + color: "$shade100", + placeholderTextColor: "$shade400", + outlineStyle: "none", + focusStyle: { + borderColor: "$shade300", + }, + pressStyle: { + backgroundColor: "$shade500", + }, + }, + }, + }, +}); diff --git a/apps/expo/src/components/ui/Progress.tsx b/apps/expo/src/components/ui/Progress.tsx new file mode 100644 index 0000000..bad6cee --- /dev/null +++ b/apps/expo/src/components/ui/Progress.tsx @@ -0,0 +1,14 @@ +import { Progress, styled, withStaticProperties } from "tamagui"; + +const MWProgressFrame = styled(Progress, { + backgroundColor: "$progressBackground", +}); + +const MWProgressIndicator = styled(Progress.Indicator, { + backgroundColor: "$progressFilled", + animation: "bounce", +}); + +export const MWProgress = withStaticProperties(MWProgressFrame, { + Indicator: MWProgressIndicator, +}); diff --git a/apps/expo/src/components/ui/Searchbar.tsx b/apps/expo/src/components/ui/Searchbar.tsx new file mode 100644 index 0000000..f7ac186 --- /dev/null +++ b/apps/expo/src/components/ui/Searchbar.tsx @@ -0,0 +1,52 @@ +import type { Input } from "tamagui"; +import { useEffect, useRef, useState } from "react"; +import { FontAwesome5 } from "@expo/vector-icons"; +import { useIsFocused } from "@react-navigation/native"; +import { useTheme, View } from "tamagui"; + +import { MWInput } from "./Input"; + +export function SearchBar({ + onSearchChange, +}: { + onSearchChange: (text: string) => void; +}) { + const theme = useTheme(); + const pageIsFocused = useIsFocused(); + const [keyword, setKeyword] = useState(""); + const inputRef = useRef(null); + + useEffect(() => { + if (pageIsFocused) { + inputRef.current?.focus(); + } + }, [pageIsFocused]); + + const handleChange = (text: string) => { + setKeyword(text); + onSearchChange(text); + }; + + return ( + + + + + + + ); +} diff --git a/apps/expo/src/components/ui/Select.tsx b/apps/expo/src/components/ui/Select.tsx new file mode 100644 index 0000000..06c8388 --- /dev/null +++ b/apps/expo/src/components/ui/Select.tsx @@ -0,0 +1,38 @@ +import { Select, styled, withStaticProperties } from "tamagui"; + +const MWSelectFrame = styled(Select, { + variants: { + type: { + default: { + backgroundColor: "$inputBackground", + color: "$inputText", + borderColor: "$inputBorder", + }, + }, + }, + defaultVariants: { + type: "default", + }, +}); + +const MWSelectTrigger = styled(Select.Trigger, { + variants: { + type: { + default: { + backgroundColor: "$inputBackground", + color: "$inputText", + placeholderTextColor: "$inputPlaceholderText", + borderColor: "$inputBorder", + }, + }, + }, + defaultVariants: { + type: "default", + }, +}); + +const MWSelect = withStaticProperties(MWSelectFrame, { + Trigger: MWSelectTrigger, +}); + +export { MWSelect }; diff --git a/apps/expo/src/components/ui/Separator.tsx b/apps/expo/src/components/ui/Separator.tsx new file mode 100644 index 0000000..fb04ab7 --- /dev/null +++ b/apps/expo/src/components/ui/Separator.tsx @@ -0,0 +1,14 @@ +import { Separator, styled } from "tamagui"; + +export const MWSeparator = styled(Separator, { + variants: { + type: { + settings: { + borderColor: "$shade300", + }, + }, + }, + defaultVariants: { + type: "settings", + }, +}); diff --git a/apps/expo/src/components/ui/Switch.tsx b/apps/expo/src/components/ui/Switch.tsx new file mode 100644 index 0000000..721969e --- /dev/null +++ b/apps/expo/src/components/ui/Switch.tsx @@ -0,0 +1,27 @@ +import type { SwitchProps, SwitchThumbProps } from "tamagui"; +import { Switch, useTheme } from "tamagui"; + +const MWSwitch = (props: SwitchProps) => { + const theme = useTheme(); + return ( + + ); +}; + +const MWSwitchThumb = (props: SwitchThumbProps) => { + return ; +}; + +MWSwitch.Thumb = MWSwitchThumb; + +export { MWSwitch }; diff --git a/apps/expo/src/components/ui/Text.tsx b/apps/expo/src/components/ui/Text.tsx new file mode 100644 index 0000000..470395c --- /dev/null +++ b/apps/expo/src/components/ui/Text.tsx @@ -0,0 +1,36 @@ +import type { TextProps } from "react-native"; +import type { AnimatedProps } from "react-native-reanimated"; +import { useEffect } from "react"; +import Animated, { + Easing, + useAnimatedStyle, + useSharedValue, + withRepeat, + withTiming, +} from "react-native-reanimated"; + +export const FlashingText = ( + props: AnimatedProps & { + isInProgress: boolean; + }, +) => { + const opacity = useSharedValue(0); + + useEffect(() => { + if (props.isInProgress) { + opacity.value = withRepeat( + withTiming(1, { duration: 1000, easing: Easing.ease }), + -1, + true, + ); + } else { + opacity.value = 1; + } + }, [props.isInProgress, opacity]); + + const style = useAnimatedStyle(() => ({ + opacity: opacity.value, + })); + + return ; +}; diff --git a/apps/expo/src/constants/core.ts b/apps/expo/src/constants/core.ts new file mode 100644 index 0000000..798ea67 --- /dev/null +++ b/apps/expo/src/constants/core.ts @@ -0,0 +1,2 @@ +export const DISCORD_LINK = "https://movie-web.github.io/links/discord"; +export const GITHUB_LINK = "https://github.com/movie-web"; diff --git a/apps/expo/src/hooks/player/useAudioTrack.ts b/apps/expo/src/hooks/player/useAudioTrack.ts new file mode 100644 index 0000000..625b2b1 --- /dev/null +++ b/apps/expo/src/hooks/player/useAudioTrack.ts @@ -0,0 +1,88 @@ +import type { Video } from "expo-av"; +import { useCallback, useEffect } from "react"; +import { Audio } from "expo-av"; + +import type { Stream } from "@movie-web/provider-utils"; + +import type { AudioTrack } from "~/components/player/AudioTrackSelector"; +import { usePlayerStore } from "~/stores/player/store"; + +export const useAudioTrack = () => { + const videoRef = usePlayerStore((state) => state.videoRef); + const audioObject = usePlayerStore((state) => state.audioObject); + const currentAudioTrack = usePlayerStore((state) => state.currentAudioTrack); + const setAudioObject = usePlayerStore((state) => state.setAudioObject); + const setCurrentAudioTrack = usePlayerStore( + (state) => state.setCurrentAudioTrack, + ); + + const synchronizePlayback = useCallback( + async (selectedAudioTrack?: AudioTrack, stream?: Stream) => { + if (selectedAudioTrack && stream) { + if (audioObject) { + await audioObject.unloadAsync(); + } + + const createAudioAsyncWithTimeout = (uri: string, timeout = 5000) => { + return new Promise((resolve, reject) => { + Audio.Sound.createAsync({ + uri, + headers: { + ...stream.headers, + ...stream.preferredHeaders, + }, + }) + .then((value) => resolve(value.sound)) + .catch(reject); + + setTimeout(() => { + reject(new Error("Timeout: Audio loading took too long")); + }, timeout); + }); + }; + try { + const sound = await createAudioAsyncWithTimeout( + selectedAudioTrack.uri, + ); + if (!sound) return; + setAudioObject(sound); + setCurrentAudioTrack(selectedAudioTrack); + } catch (error) { + console.error("Error loading audio track:", error); + } + } else { + if (audioObject) { + await audioObject.unloadAsync(); + setAudioObject(null); + } + } + }, + [audioObject, setAudioObject, setCurrentAudioTrack], + ); + + const synchronizeAudioWithVideo = async ( + videoRef: Video | null, + audioObject: Audio.Sound | null, + selectedAudioTrack?: AudioTrack, + ): Promise => { + if (videoRef && audioObject) { + const videoStatus = await videoRef.getStatusAsync(); + + if (selectedAudioTrack && videoStatus.isLoaded) { + await videoRef.setIsMutedAsync(true); + await audioObject.playAsync(); + await audioObject.setPositionAsync(videoStatus.positionMillis + 2000); + } else { + await videoRef.setIsMutedAsync(false); + } + } + }; + + useEffect(() => { + if (audioObject && currentAudioTrack) { + void synchronizeAudioWithVideo(videoRef, audioObject, currentAudioTrack); + } + }, [audioObject, videoRef, currentAudioTrack]); + + return { synchronizePlayback }; +}; diff --git a/apps/expo/src/hooks/player/useBrightness.ts b/apps/expo/src/hooks/player/useBrightness.ts new file mode 100644 index 0000000..82f7eeb --- /dev/null +++ b/apps/expo/src/hooks/player/useBrightness.ts @@ -0,0 +1,24 @@ +import { useCallback, useState } from "react"; +import { useSharedValue } from "react-native-reanimated"; +import * as Brightness from "expo-brightness"; + +export const useBrightness = () => { + const [showBrightnessOverlay, setShowBrightnessOverlay] = useState(false); + + const brightness = useSharedValue(0.5); + + const handleBrightnessChange = useCallback(async (newValue: number) => { + try { + await Brightness.setBrightnessAsync(newValue); + } catch (error) { + console.error("Failed to set brightness:", error); + } + }, []); + + return { + showBrightnessOverlay, + setShowBrightnessOverlay, + brightness, + handleBrightnessChange, + } as const; +}; diff --git a/apps/expo/src/hooks/player/useMeta.ts b/apps/expo/src/hooks/player/useMeta.ts new file mode 100644 index 0000000..475ff21 --- /dev/null +++ b/apps/expo/src/hooks/player/useMeta.ts @@ -0,0 +1,63 @@ +import { useCallback } from "react"; + +import { transformSearchResultToScrapeMedia } from "@movie-web/provider-utils"; +import { fetchMediaDetails, fetchSeasonDetails } from "@movie-web/tmdb"; + +import { usePlayerStore } from "~/stores/player/store"; + +export const useMeta = () => { + const meta = usePlayerStore((state) => state.meta); + const setMeta = usePlayerStore((state) => state.setMeta); + + const convertIdToMeta = useCallback( + async ( + id: string, + type: "movie" | "tv", + season?: number, + episode?: number, + ) => { + const media = await fetchMediaDetails(id, type); + if (!media) return; + const scrapeMedia = transformSearchResultToScrapeMedia( + media.type, + media.result, + season ?? meta?.season?.number, + episode ?? meta?.episode?.number, + ); + let seasonData = null; + if (scrapeMedia.type === "show") { + seasonData = await fetchSeasonDetails( + scrapeMedia.tmdbId, + scrapeMedia.season.number, + ); + } + const m = { + ...scrapeMedia, + poster: media.result.poster_path, + ...("season" in scrapeMedia + ? { + season: { + number: scrapeMedia.season.number, + tmdbId: scrapeMedia.tmdbId, + }, + episode: { + number: scrapeMedia.episode.number, + tmdbId: scrapeMedia.episode.tmdbId, + }, + episodes: + seasonData?.episodes.map((e) => ({ + tmdbId: e.id.toString(), + number: e.episode_number, + name: e.name, + })) ?? [], + } + : {}), + }; + setMeta(m); + return m; + }, + [meta?.episode?.number, meta?.season?.number, setMeta], + ); + + return { convertIdToMeta }; +}; diff --git a/apps/expo/src/hooks/player/usePlaybackSpeed.ts b/apps/expo/src/hooks/player/usePlaybackSpeed.ts new file mode 100644 index 0000000..d37789a --- /dev/null +++ b/apps/expo/src/hooks/player/usePlaybackSpeed.ts @@ -0,0 +1,24 @@ +import { useCallback } from "react"; + +import { usePlayerStore } from "~/stores/player/store"; + +const speeds = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]; + +export const usePlaybackSpeed = () => { + const videoRef = usePlayerStore((state) => state.videoRef); + + const changePlaybackSpeed = useCallback( + async (newValue: number) => { + if (videoRef) { + await videoRef.setRateAsync(newValue, true); + } + }, + [videoRef], + ); + + return { + speeds, + currentSpeed: videoRef?.props.rate ?? 1, + changePlaybackSpeed, + } as const; +}; diff --git a/apps/expo/src/hooks/player/usePlayer.ts b/apps/expo/src/hooks/player/usePlayer.ts new file mode 100644 index 0000000..b9c8113 --- /dev/null +++ b/apps/expo/src/hooks/player/usePlayer.ts @@ -0,0 +1,21 @@ +import { useCallback } from "react"; +import * as ScreenOrientation from "expo-screen-orientation"; + +export const usePlayer = () => { + const presentFullscreenPlayer = useCallback(async () => { + await ScreenOrientation.lockAsync( + ScreenOrientation.OrientationLock.LANDSCAPE, + ); + }, []); + + const dismissFullscreenPlayer = useCallback(async () => { + await ScreenOrientation.lockAsync( + ScreenOrientation.OrientationLock.PORTRAIT_UP, + ); + }, []); + + return { + presentFullscreenPlayer, + dismissFullscreenPlayer, + } as const; +}; diff --git a/apps/expo/src/hooks/player/useSourceScrape.ts b/apps/expo/src/hooks/player/useSourceScrape.ts new file mode 100644 index 0000000..6935068 --- /dev/null +++ b/apps/expo/src/hooks/player/useSourceScrape.ts @@ -0,0 +1,260 @@ +import { useCallback, useRef, useState } from "react"; +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; + +import type { + FullScraperEvents, + RunOutput, + ScrapeMedia, +} from "@movie-web/provider-utils"; +import { + getMetaData, + getVideoStreamFromEmbed, + getVideoStreamFromSource, + providers, +} from "@movie-web/provider-utils"; + +import { convertMetaToScrapeMedia } from "~/lib/meta"; +import { usePlayerStore } from "~/stores/player/store"; + +export interface ScrapingItems { + id: string; + children: string[]; +} + +export interface ScrapingSegment { + name: string; + id: string; + embedId?: string; + status: "failure" | "pending" | "notfound" | "success" | "waiting"; + reason?: string; + error?: any; + percentage: number; +} + +type ScraperEvent = Parameters< + NonNullable +>[0]; + +export const useBaseScrape = () => { + const [sources, setSources] = useState>({}); + const [sourceOrder, setSourceOrder] = useState([]); + const [currentSource, setCurrentSource] = useState(); + const lastId = useRef(null); + + const initEvent = useCallback((evt: ScraperEvent<"init">) => { + setSources( + evt.sourceIds + .map((v) => { + const source = getMetaData().find((s) => s.id === v); + if (!source) throw new Error("invalid source id"); + const out: ScrapingSegment = { + name: source.name, + id: source.id, + status: "waiting", + percentage: 0, + }; + return out; + }) + .reduce>((a, v) => { + a[v.id] = v; + return a; + }, {}), + ); + setSourceOrder(evt.sourceIds.map((v) => ({ id: v, children: [] }))); + }, []); + + const startEvent = useCallback((id: ScraperEvent<"start">) => { + const lastIdTmp = lastId.current; + setSources((s) => { + if (s[id]) s[id]!.status = "pending"; + if (lastIdTmp && s[lastIdTmp] && s[lastIdTmp]!.status === "pending") + s[lastIdTmp]!.status = "success"; + return { ...s }; + }); + setCurrentSource(id); + lastId.current = id; + }, []); + + const updateEvent = useCallback((evt: ScraperEvent<"update">) => { + setSources((s) => { + if (s[evt.id]) { + s[evt.id]!.status = evt.status; + s[evt.id]!.reason = evt.reason; + s[evt.id]!.error = evt.error; + s[evt.id]!.percentage = evt.percentage; + } + return { ...s }; + }); + }, []); + + const discoverEmbedsEvent = useCallback( + (evt: ScraperEvent<"discoverEmbeds">) => { + setSources((s) => { + evt.embeds.forEach((v) => { + const source = getMetaData().find( + (src) => src.id === v.embedScraperId, + ); + if (!source) throw new Error("invalid source id"); + const out: ScrapingSegment = { + embedId: v.embedScraperId, + name: source.name, + id: v.id, + status: "waiting", + percentage: 0, + }; + s[v.id] = out; + }); + return { ...s }; + }); + setSourceOrder((s) => { + const source = s.find((v) => v.id === evt.sourceId); + if (!source) throw new Error("invalid source id"); + source.children = evt.embeds.map((v) => v.id); + return [...s]; + }); + }, + [], + ); + + const startScrape = useCallback(() => { + lastId.current = null; + }, []); + + const getResult = useCallback((output: RunOutput | null) => { + if (output && lastId.current) { + setSources((s) => { + if (!lastId.current) return s; + if (s[lastId.current]) s[lastId.current]!.status = "success"; + return { ...s }; + }); + } + return output; + }, []); + + return { + initEvent, + startEvent, + updateEvent, + discoverEmbedsEvent, + startScrape, + getResult, + sources, + sourceOrder, + currentSource, + }; +}; + +export function useScrape() { + const { + sources, + sourceOrder, + currentSource, + updateEvent, + discoverEmbedsEvent, + initEvent, + getResult, + startEvent, + startScrape, + } = useBaseScrape(); + + const startScraping = useCallback( + async (media: ScrapeMedia) => { + startScrape(); + const output = await providers.runAll({ + media, + events: { + init: initEvent, + start: startEvent, + update: updateEvent, + discoverEmbeds: discoverEmbedsEvent, + }, + }); + return getResult(output); + }, + [ + initEvent, + startEvent, + updateEvent, + discoverEmbedsEvent, + getResult, + startScrape, + ], + ); + + return { + startScraping, + sourceOrder, + sources, + currentSource, + }; +} + +export const useEmbedScrape = () => { + const setCurrentStream = usePlayerStore((state) => state.setCurrentStream); + + const queryClient = useQueryClient(); + + const mutate = useMutation({ + mutationKey: ["embedScrape"], + mutationFn: async ({ + url, + embedId, + }: { + url: string; + embedId: string; + sourceId: string; + }) => { + const result = await getVideoStreamFromEmbed({ + url, + embedId, + }); + if (!result) throw new Error("no result"); + if (result?.stream) { + setCurrentStream(result.stream[0]!); + return result.stream; + } + return result?.stream; + }, + onSuccess: async () => { + await queryClient.resetQueries({ + queryKey: ["sourceScrape"], + }); + }, + }); + return mutate; +}; + +export const useSourceScrape = (sourceId: string | null) => { + const meta = usePlayerStore((state) => state.meta); + const setCurrentStream = usePlayerStore((state) => state.setCurrentStream); + const setSourceId = usePlayerStore((state) => state.setSourceId); + + const query = useQuery({ + queryKey: ["sourceScrape", meta, sourceId], + queryFn: async () => { + if (!meta || !sourceId) return; + const scrapeMedia = convertMetaToScrapeMedia(meta); + const result = await getVideoStreamFromSource({ + sourceId, + media: scrapeMedia, + }); + + if (result?.stream) { + setCurrentStream(result.stream[0]!); + setSourceId(sourceId); + return []; + } + if (result?.embeds.length === 1) { + const embedResult = await getVideoStreamFromEmbed(result.embeds[0]!); + if (embedResult?.stream) { + setCurrentStream(embedResult.stream[0]!); + setSourceId(sourceId); + return []; + } + } + return result?.embeds; + }, + }); + + return query; +}; diff --git a/apps/expo/src/hooks/player/useVolume.ts b/apps/expo/src/hooks/player/useVolume.ts new file mode 100644 index 0000000..d522e4e --- /dev/null +++ b/apps/expo/src/hooks/player/useVolume.ts @@ -0,0 +1,14 @@ +import { useState } from "react"; +import { useSharedValue } from "react-native-reanimated"; + +export const useVolume = () => { + const [showVolumeOverlay, setShowVolumeOverlay] = useState(false); + + const volume = useSharedValue(1); + + return { + showVolumeOverlay, + setShowVolumeOverlay, + volume, + } as const; +}; diff --git a/apps/expo/src/hooks/useAuth.ts b/apps/expo/src/hooks/useAuth.ts new file mode 100644 index 0000000..099ad5a --- /dev/null +++ b/apps/expo/src/hooks/useAuth.ts @@ -0,0 +1,215 @@ +import { useCallback, useMemo } from "react"; + +import type { + AccountWithToken, + BookmarkMediaItem, + ProgressMediaItem, + SessionResponse, + UserResponse, +} from "@movie-web/api"; +import { + base64ToBuffer, + bookmarkMediaToInput, + bytesToBase64, + bytesToBase64Url, + decryptData, + encryptData, + getBookmarks, + getLoginChallengeToken, + getProgress, + getRegisterChallengeToken, + getSettings, + getUser, + importBookmarks, + importProgress, + keysFromMnemonic, + loginAccount, + progressMediaItemToInputs, + registerAccount, + removeSession, + signChallenge, +} from "@movie-web/api"; + +import { useAuthStore } from "~/stores/settings"; +import { useAuthData } from "./useAuthData"; + +export interface RegistrationData { + recaptchaToken?: string; + mnemonic: string; + userData: { + device: string; + profile: { + colorA: string; + colorB: string; + icon: string; + }; + }; +} + +export interface LoginData { + mnemonic: string; + userData: { + device: string; + }; +} + +export function useAuth() { + const currentAccount = useAuthStore((s) => s.account); + const profile = useAuthStore((s) => s.account?.profile); + const loggedIn = !!useAuthStore((s) => s.account); + const backendUrl = useAuthStore((s) => s.backendUrl); + const { + logout: userDataLogout, + login: userDataLogin, + syncData, + } = useAuthData(); + + const login = useCallback( + async (loginData: LoginData) => { + if (!backendUrl) return; + const keys = await keysFromMnemonic(loginData.mnemonic); + const publicKeyBase64Url = bytesToBase64Url(keys.publicKey); + const { challenge } = await getLoginChallengeToken( + backendUrl, + publicKeyBase64Url, + ); + const signature = signChallenge(keys, challenge); + const loginResult = await loginAccount(backendUrl, { + challenge: { + code: challenge, + signature, + }, + publicKey: publicKeyBase64Url, + device: await encryptData(loginData.userData.device, keys.seed), + }); + + const user = await getUser(backendUrl, loginResult.token); + const seedBase64 = bytesToBase64(keys.seed); + return userDataLogin(loginResult, user.user, user.session, seedBase64); + }, + [userDataLogin, backendUrl], + ); + + const logout = useCallback(async () => { + if (!currentAccount || !backendUrl) return; + try { + await removeSession( + backendUrl, + currentAccount.token, + currentAccount.sessionId, + ); + } catch { + // we dont care about failing to delete session + } + userDataLogout(); + }, [userDataLogout, backendUrl, currentAccount]); + + const register = useCallback( + async (registerData: RegistrationData) => { + if (!backendUrl) return; + const { challenge } = await getRegisterChallengeToken( + backendUrl, + registerData.recaptchaToken, + ); + const keys = await keysFromMnemonic(registerData.mnemonic); + const signature = signChallenge(keys, challenge); + const registerResult = await registerAccount(backendUrl, { + challenge: { + code: challenge, + signature, + }, + publicKey: bytesToBase64Url(keys.publicKey), + device: await encryptData(registerData.userData.device, keys.seed), + profile: registerData.userData.profile, + }); + + return userDataLogin( + registerResult, + registerResult.user, + registerResult.session, + bytesToBase64(keys.seed), + ); + }, + [backendUrl, userDataLogin], + ); + + const importData = useCallback( + async ( + account: AccountWithToken, + progressItems: Record, + bookmarks: Record, + ) => { + if (!backendUrl) return; + if ( + Object.keys(progressItems).length === 0 && + Object.keys(bookmarks).length === 0 + ) { + return; + } + + const progressInputs = Object.entries(progressItems).flatMap( + ([tmdbId, item]) => progressMediaItemToInputs(tmdbId, item), + ); + + const bookmarkInputs = Object.entries(bookmarks).map(([tmdbId, item]) => + bookmarkMediaToInput(tmdbId, item), + ); + + await Promise.all([ + importProgress(backendUrl, account, progressInputs), + importBookmarks(backendUrl, account, bookmarkInputs), + ]); + }, + [backendUrl], + ); + + const restore = useCallback( + async (account: AccountWithToken) => { + if (!backendUrl) return; + let user: { user: UserResponse; session: SessionResponse }; + try { + user = await getUser(backendUrl, account.token); + } catch (err) { + const anyError = err as { response?: { status: number } }; + if ( + anyError?.response?.status === 401 || + anyError?.response?.status === 403 || + anyError?.response?.status === 400 + ) { + await logout(); + return; + } + console.error(err); + throw err; + } + + const [bookmarks, progress, settings] = await Promise.all([ + getBookmarks(backendUrl, account), + getProgress(backendUrl, account), + getSettings(backendUrl, account), + ]); + + syncData(user.user, user.session, progress, bookmarks, settings); + }, + [backendUrl, syncData, logout], + ); + + const decryptedName = useMemo(() => { + if (!currentAccount) return ""; + return decryptData( + currentAccount.deviceName, + base64ToBuffer(currentAccount.seed), + ); + }, [currentAccount]); + + return { + loggedIn, + profile, + decryptedName, + login, + logout, + register, + restore, + importData, + }; +} diff --git a/apps/expo/src/hooks/useAuthData.ts b/apps/expo/src/hooks/useAuthData.ts new file mode 100644 index 0000000..640f594 --- /dev/null +++ b/apps/expo/src/hooks/useAuthData.ts @@ -0,0 +1,170 @@ +import { useCallback } from "react"; + +import type { + BookmarkResponse, + LoginResponse, + ProgressResponse, + SessionResponse, + SettingsResponse, + UserResponse, +} from "@movie-web/api"; +import type { ScrapeMedia } from "@movie-web/provider-utils"; + +import type { ItemData } from "~/components/item/item"; +import type { WatchHistoryItem } from "~/stores/settings"; +import type { ThemeStoreOption } from "~/stores/theme"; +import { + useAuthStore, + useBookmarkStore, + useWatchHistoryStore, +} from "~/stores/settings"; +import { useThemeStore } from "~/stores/theme"; + +export function useAuthData() { + const loggedIn = !!useAuthStore((s) => s.account); + const setAccount = useAuthStore((s) => s.setAccount); + const removeAccount = useAuthStore((s) => s.removeAccount); + const setBookmarks = useBookmarkStore((s) => s.setBookmarks); + const setProxySet = useAuthStore((s) => s.setProxySet); + const setWatchHistory = useWatchHistoryStore((s) => s.setWatchHistory); + const clearBookmarks = useCallback(() => setBookmarks([]), [setBookmarks]); + const clearProgress = useCallback( + () => setWatchHistory([]), + [setWatchHistory], + ); + const replaceBookmarks = useCallback( + (bookmarks: ItemData[]) => setBookmarks(bookmarks), + [setBookmarks], + ); + const replaceItems = useCallback( + (items: WatchHistoryItem[]) => setWatchHistory(items), + [setWatchHistory], + ); + const setTheme = useThemeStore((s) => s.setTheme); + + // const setAppLanguage = useLanguageStore((s) => s.setLanguage); + // const importSubtitleLanguage = useSubtitleStore( + // (s) => s.importSubtitleLanguage, + // ); + + const login = useCallback( + ( + loginResponse: LoginResponse, + user: UserResponse, + session: SessionResponse, + seed: string, + ) => { + const account = { + token: loginResponse.token, + userId: user.id, + sessionId: loginResponse.session.id, + deviceName: session.device, + profile: user.profile, + seed, + }; + setAccount(account); + return account; + }, + [setAccount], + ); + + const logout = useCallback(() => { + removeAccount(); + clearBookmarks(); + clearProgress(); + }, [removeAccount, clearBookmarks, clearProgress]); + + const syncData = useCallback( + ( + _user: UserResponse, + _session: SessionResponse, + progress: ProgressResponse[], + bookmarks: BookmarkResponse[], + settings: SettingsResponse, + ) => { + const bookmarkResponseToItemData = ( + bookmarks: BookmarkResponse[], + ): ItemData[] => { + return bookmarks.map((bookmark) => ({ + id: bookmark.tmdbId, + title: bookmark.meta.title, + type: bookmark.meta.type === "show" ? "tv" : "movie", + year: bookmark.meta.year, + posterUrl: bookmark.meta.poster ?? "", + })); + }; + + const progressResponseToWatchHistoryItem = ( + progress: ProgressResponse[], + ): WatchHistoryItem[] => { + return progress.map((entry) => { + const isShow = entry.meta.type === "show"; + const commonMedia = { + title: entry.meta.title, + releaseYear: entry.meta.year, + tmdbId: entry.tmdbId, + }; + + const media: ScrapeMedia = isShow + ? { + ...commonMedia, + type: "show", + season: { + number: entry.season.number ?? 0, + tmdbId: entry.season.id ?? "", + }, + episode: { + number: entry.episode.number ?? 0, + tmdbId: entry.episode.id ?? "", + }, + } + : { + ...commonMedia, + type: "movie", + }; + + return { + item: { + id: entry.tmdbId, + title: entry.meta.title, + type: entry.meta.type === "show" ? "tv" : "movie", + season: entry.season.number, + episode: entry.episode.number, + year: entry.meta.year, + posterUrl: entry.meta.poster ?? "", + }, + media: media, + positionMillis: parseInt(entry.watched, 10), + }; + }); + }; + + replaceBookmarks(bookmarkResponseToItemData(bookmarks)); + replaceItems(progressResponseToWatchHistoryItem(progress)); + + // if (settings.applicationLanguage) { + // setAppLanguage(settings.applicationLanguage); + // } + + // if (settings.defaultSubtitleLanguage) { + // importSubtitleLanguage(settings.defaultSubtitleLanguage); + // } + + if (settings.applicationTheme) { + setTheme(settings.applicationTheme as unknown as ThemeStoreOption); + } + + if (settings.proxyUrls) { + setProxySet(settings.proxyUrls); + } + }, + [replaceBookmarks, replaceItems, setTheme, setProxySet], + ); + + return { + loggedIn, + login, + logout, + syncData, + }; +} diff --git a/apps/expo/src/hooks/useBoolean.ts b/apps/expo/src/hooks/useBoolean.ts new file mode 100644 index 0000000..1f451bd --- /dev/null +++ b/apps/expo/src/hooks/useBoolean.ts @@ -0,0 +1,19 @@ +import { useMemo, useState } from "react"; + +type InitialState = boolean | (() => boolean); + +export const useBoolean = (initialState: InitialState = false) => { + const [value, setValue] = useState(initialState); + const callbacks = useMemo( + () => ({ + on: () => setValue(true), + off: () => setValue(false), + toggle: () => setValue((prev) => !prev), + }), + [], + ); + return { + isTrue: value, + ...callbacks, + }; +}; diff --git a/apps/expo/src/hooks/useDebounce.ts b/apps/expo/src/hooks/useDebounce.ts new file mode 100644 index 0000000..5b11976 --- /dev/null +++ b/apps/expo/src/hooks/useDebounce.ts @@ -0,0 +1,17 @@ +import { useEffect, useState } from "react"; + +export const useDebounce = (value: T, delay?: number): T => { + const [debouncedValue, setDebouncedValue] = useState(value); + + useEffect(() => { + const timer = setTimeout(() => { + setDebouncedValue(value); + }, delay ?? 500); + + return () => { + clearTimeout(timer); + }; + }, [value, delay]); + + return debouncedValue; +}; diff --git a/apps/expo/src/hooks/useDownloadManager.tsx b/apps/expo/src/hooks/useDownloadManager.tsx new file mode 100644 index 0000000..cddd521 --- /dev/null +++ b/apps/expo/src/hooks/useDownloadManager.tsx @@ -0,0 +1,441 @@ +import type { DownloadProgressData } from "expo-file-system"; +import type { Asset } from "expo-media-library"; +import { useCallback, useState } from "react"; +import { Platform } from "react-native"; +import * as FileSystem from "expo-file-system"; +import * as MediaLibrary from "expo-media-library"; +import * as Network from "expo-network"; +import { NetworkStateType } from "expo-network"; +import VideoManager from "@salihgun/react-native-video-processor"; + +import type { ScrapeMedia } from "@movie-web/provider-utils"; +import { extractSegmentsFromHLS } from "@movie-web/provider-utils"; + +import { useToast } from "~/hooks/useToast"; +import { + useDownloadHistoryStore, + useNetworkSettingsStore, +} from "~/stores/settings"; + +export interface Download { + id: string; + progress: number; + speed: number; + fileSize: number; + downloaded: number; + url: string; + type: "mp4" | "hls"; + status: + | "downloading" + | "finished" + | "error" + | "merging" + | "cancelled" + | "importing"; + localPath?: string; + media: ScrapeMedia; + downloadTask?: FileSystem.DownloadResumable; +} + +export interface DownloadContent { + media: Pick; + downloads: Download[]; +} + +export const useDownloadManager = () => { + const cancellationFlags = useState>({})[0]; + + const downloads = useDownloadHistoryStore((state) => state.downloads); + const setDownloads = useDownloadHistoryStore((state) => state.setDownloads); + const { showToast } = useToast(); + + const setCancellationFlag = (downloadId: string, flag: boolean): void => { + cancellationFlags[downloadId] = flag; + }; + + const getCancellationFlag = useCallback( + (downloadId: string): boolean => { + return cancellationFlags[downloadId] ?? false; + }, + [cancellationFlags], + ); + + const cancelDownload = async (download: Download) => { + setCancellationFlag(download.id, true); + if (download?.downloadTask) { + await download.downloadTask.cancelAsync(); + } + showToast("Download cancelled", { + burntOptions: { preset: "done" }, + }); + }; + + const updateDownloadItem = useCallback( + (downloadId: string, download: Partial) => { + setDownloads((prev) => { + const updatedDownloads = prev.map((content) => { + const updatedDownloadsArray = content.downloads.map((d) => + d.id === downloadId + ? { + ...d, + ...download, + } + : d, + ); + + return { + ...content, + downloads: updatedDownloadsArray, + }; + }); + + return updatedDownloads; + }); + }, + [setDownloads], + ); + + const removeDownload = useCallback( + (download: Download) => { + if (download.media.type === "movie") { + setDownloads((prev) => + prev.filter((d) => d.media.tmdbId !== download.media.tmdbId), + ); + return; + } else if (download.media.type === "show") { + setDownloads((prev) => { + const existingDownload = prev.find( + (d) => d.media.tmdbId === download.media.tmdbId, + ); + if (existingDownload?.downloads.length === 1) { + return prev.filter((d) => d.media.tmdbId !== download.media.tmdbId); + } else { + return prev.map((content) => { + return { + ...content, + downloads: content.downloads.filter( + (d) => d.id !== download.id, + ), + }; + }); + } + }); + } + }, + [setDownloads], + ); + + const saveFileToMediaLibraryAndDeleteOriginal = useCallback( + async (fileUri: string, download: Download): Promise => { + console.log( + "Saving file to media library and deleting original", + fileUri, + ); + try { + updateDownloadItem(download.id, { status: "importing" }); + const asset = await MediaLibrary.createAssetAsync(fileUri); + const { localUri } = await MediaLibrary.getAssetInfoAsync(asset); + await FileSystem.deleteAsync(fileUri); + + updateDownloadItem(download.id, { + status: "finished", + localPath: Platform.select({ + ios: localUri, + android: asset.uri, + }), + }); + console.log("File saved to media library and original deleted"); + showToast("Download finished", { + burntOptions: { preset: "done" }, + }); + return asset; + } catch (error) { + console.error("Error saving file to media library:", error); + showToast("Download failed", { + burntOptions: { preset: "error" }, + }); + } + }, + [updateDownloadItem, showToast], + ); + + const downloadMP4 = useCallback( + async ( + url: string, + downloadItem: Download, + headers: Record, + ): Promise => { + let lastBytesWritten = 0; + let lastTimestamp = Date.now(); + + const updateProgress = (downloadProgress: DownloadProgressData) => { + const currentTime = Date.now(); + const timeElapsed = (currentTime - lastTimestamp) / 1000; + + if (timeElapsed === 0) return; + + const newBytes = downloadProgress.totalBytesWritten - lastBytesWritten; + const speed = newBytes / timeElapsed / 1024 / 1024; + const progress = + downloadProgress.totalBytesWritten / + downloadProgress.totalBytesExpectedToWrite; + + updateDownloadItem(downloadItem.id, { + progress, + speed, + fileSize: downloadProgress.totalBytesExpectedToWrite, + downloaded: downloadProgress.totalBytesWritten, + }); + + lastBytesWritten = downloadProgress.totalBytesWritten; + lastTimestamp = currentTime; + }; + + const fileUri = `${FileSystem.cacheDirectory}movie-web/${url.split("/").pop()}`; + if ( + !( + await FileSystem.getInfoAsync(`${FileSystem.cacheDirectory}movie-web`) + ).exists + ) { + await ensureDirExists(`${FileSystem.cacheDirectory}movie-web`); + } + + const downloadResumable = FileSystem.createDownloadResumable( + url, + fileUri, + { + headers, + }, + updateProgress, + ); + + try { + const result = await downloadResumable.downloadAsync(); + if (result) { + console.log("Finished downloading to ", result.uri); + return saveFileToMediaLibraryAndDeleteOriginal( + result.uri, + downloadItem, + ); + } + } catch (e) { + console.error(e); + } + }, + [updateDownloadItem, saveFileToMediaLibraryAndDeleteOriginal], + ); + + const cleanupDownload = useCallback( + async (segmentDir: string, download: Download) => { + await FileSystem.deleteAsync(segmentDir, { idempotent: true }); + removeDownload(download); + }, + [removeDownload], + ); + + const downloadHLS = useCallback( + async ( + url: string, + download: Download, + headers: Record, + ) => { + const segments = await extractSegmentsFromHLS(url, headers); + + if (!segments || segments.length === 0) { + return removeDownload(download); + } + + const totalSegments = segments.length; + let segmentsDownloaded = 0; + + const segmentDir = `${FileSystem.cacheDirectory}movie-web/segments/`; + await ensureDirExists(segmentDir); + + const updateProgress = () => { + const progress = segmentsDownloaded / totalSegments; + updateDownloadItem(download.id, { + progress, + downloaded: segmentsDownloaded, + fileSize: totalSegments, + }); + }; + + const localSegmentPaths = []; + + for (const [index, segment] of segments.entries()) { + if (getCancellationFlag(download.id)) { + await cleanupDownload(segmentDir, download); + return; + } + + const segmentFile = `${segmentDir}${index}.ts`; + localSegmentPaths.push(segmentFile); + + try { + await downloadSegment(segment, segmentFile, headers); + + if (getCancellationFlag(download.id)) { + await cleanupDownload(segmentDir, download); + return; + } + + segmentsDownloaded++; + updateProgress(); + } catch (e) { + console.error(e); + if (getCancellationFlag(download.id)) { + await cleanupDownload(segmentDir, download); + return; + } + } + } + + if (getCancellationFlag(download.id)) { + return removeDownload(download); + } + + updateDownloadItem(download.id, { status: "merging" }); + const uri = await VideoManager.mergeVideos( + localSegmentPaths, + `${FileSystem.cacheDirectory}movie-web/output.mp4`, + ); + const asset = await saveFileToMediaLibraryAndDeleteOriginal( + uri, + download, + ); + return asset; + }, + [ + getCancellationFlag, + updateDownloadItem, + saveFileToMediaLibraryAndDeleteOriginal, + removeDownload, + cleanupDownload, + ], + ); + + const startDownload = useCallback( + async ( + url: string, + type: "mp4" | "hls", + media: ScrapeMedia, + headers?: Record, + ): Promise => { + const { allowMobileData } = useNetworkSettingsStore.getState(); + + const { type: networkType } = await Network.getNetworkStateAsync(); + + if (networkType === NetworkStateType.CELLULAR && !allowMobileData) { + showToast("Mobile data downloads are disabled", { + burntOptions: { preset: "error" }, + }); + return; + } + + const { status } = await MediaLibrary.requestPermissionsAsync(); + if (status !== MediaLibrary.PermissionStatus.GRANTED) { + showToast("Permission denied", { + burntOptions: { preset: "error" }, + }); + return; + } + + const existingDownload = downloads.find( + (d) => d.media.tmdbId === media.tmdbId, + ); + + if (existingDownload && media.type === "movie") { + showToast("Download already exists", { + burntOptions: { preset: "error" }, + }); + return; + } + + if (existingDownload && media.type === "show") { + const existingEpisode = existingDownload.downloads.find( + (d) => + d.media.type === "show" && + d.media.episode.tmdbId === media.episode.tmdbId, + ); + + if (existingEpisode) { + showToast("Download already exists", { + burntOptions: { preset: "error" }, + }); + return; + } + } + showToast("Download started", { + burntOptions: { preset: "none" }, + }); + + const newDownload: Download = { + id: `download-${Date.now()}-${Math.random().toString(16).slice(2)}`, + progress: 0, + speed: 0, + fileSize: 0, + downloaded: 0, + type, + url, + status: "downloading", + media, + }; + + if (existingDownload) { + existingDownload.downloads.push(newDownload); + setDownloads((prev) => { + return prev.map((d) => + d.media.tmdbId === media.tmdbId ? existingDownload : d, + ); + }); + } else { + setDownloads((prev) => { + return [...prev, { media, downloads: [newDownload] }]; + }); + } + + if (type === "mp4") { + const asset = await downloadMP4(url, newDownload, headers ?? {}); + return asset; + } else if (type === "hls") { + const asset = await downloadHLS(url, newDownload, headers ?? {}); + return asset; + } + }, + [downloads, showToast, setDownloads, downloadMP4, downloadHLS], + ); + + const downloadSegment = async ( + segmentUrl: string, + segmentFile: string, + headers: Record, + ) => { + const downloadResumable = FileSystem.createDownloadResumable( + segmentUrl, + segmentFile, + { + headers, + }, + ); + + try { + const result = await downloadResumable.downloadAsync(); + if (result) { + console.log("Finished downloading to ", result.uri); + } + } catch (e) { + console.error(e); + } + }; + + async function ensureDirExists(dir: string) { + await FileSystem.deleteAsync(dir, { idempotent: true }); + await FileSystem.makeDirectoryAsync(dir, { intermediates: true }); + } + + return { + startDownload, + removeDownload, + cancelDownload, + }; +}; diff --git a/apps/expo/src/hooks/useSettingsState.ts b/apps/expo/src/hooks/useSettingsState.ts new file mode 100644 index 0000000..59079a1 --- /dev/null +++ b/apps/expo/src/hooks/useSettingsState.ts @@ -0,0 +1,91 @@ +import type { Dispatch, SetStateAction } from "react"; +import { useCallback, useEffect, useMemo, useState } from "react"; + +function isEqual(x: unknown, y: unknown): boolean { + const ok = Object.keys, + tx = typeof x, + ty = typeof y; + return x && y && tx === "object" && tx === ty + ? ok(x).length === ok(y).length && + ok(x).every((key) => + isEqual(x[key as keyof typeof x], y[key as keyof typeof y]), + ) + : x === y; +} + +export function useDerived( + initial: T, +): [T, Dispatch>, () => void, boolean] { + const [overwrite, setOverwrite] = useState(undefined); + useEffect(() => { + setOverwrite(undefined); + }, [initial]); + const changed = useMemo( + () => !isEqual(overwrite, initial) && overwrite !== undefined, + [overwrite, initial], + ); + const setter = useCallback>>( + (inp) => { + if (!(inp instanceof Function)) setOverwrite(inp); + else setOverwrite((s) => inp(s ?? initial)); + }, + [initial, setOverwrite], + ); + const data = overwrite ?? initial; + + const reset = useCallback(() => setOverwrite(undefined), [setOverwrite]); + + return [data, setter, reset, changed]; +} + +export function useSettingsState( + deviceName: string, + proxyUrls: string[] | null, + profile: + | { + colorA: string; + colorB: string; + icon: string; + } + | undefined, +) { + const [proxyUrlsState, setProxyUrls, resetProxyUrls, proxyUrlsChanged] = + useDerived(proxyUrls); + + const [ + deviceNameState, + setDeviceNameState, + resetDeviceName, + deviceNameChanged, + ] = useDerived(deviceName); + const [profileState, setProfileState, resetProfile, profileChanged] = + useDerived(profile); + + function reset() { + resetProxyUrls(); + resetDeviceName(); + resetProfile(); + } + + const changed = deviceNameChanged || proxyUrlsChanged || profileChanged; + + return { + reset, + changed, + deviceName: { + state: deviceNameState, + set: setDeviceNameState, + changed: deviceNameChanged, + }, + proxyUrls: { + state: proxyUrlsState, + set: setProxyUrls, + changed: proxyUrlsChanged, + }, + profile: { + state: profileState, + set: setProfileState, + changed: profileChanged, + }, + }; +} diff --git a/apps/expo/src/hooks/useToast.ts b/apps/expo/src/hooks/useToast.ts new file mode 100644 index 0000000..c6c6547 --- /dev/null +++ b/apps/expo/src/hooks/useToast.ts @@ -0,0 +1,22 @@ +import { useCallback } from "react"; +import { useToastController } from "@tamagui/toast"; + +type ShowOptions = Parameters["show"]>[1]; + +export const useToast = () => { + const toastController = useToastController(); + + const showToast = useCallback( + (title: string, options?: ShowOptions) => { + toastController.show(title, { + burntOptions: { preset: "none" }, + native: true, + duration: 500, + ...options, + }); + }, + [toastController], + ); + + return { showToast }; +}; diff --git a/apps/expo/src/lib/language.ts b/apps/expo/src/lib/language.ts new file mode 100644 index 0000000..745ba19 --- /dev/null +++ b/apps/expo/src/lib/language.ts @@ -0,0 +1,198 @@ +import type { LanguageCode } from "iso-639-1"; +import iso from "iso-639-1"; + +export function getPrettyLanguageNameFromLocale(locale: string): string | null { + return iso.getName(locale); +} + +export const getCountryCodeFromLanguage = ( + languageCode: LanguageCode, +): string => { + return languageToCountryMap[languageCode] || ""; +}; + +const languageToCountryMap: Record = { + en: "US", // English - United States + es: "ES", // Spanish - Spain + fr: "FR", // French - France + zh: "CN", // Mandarin - China + ar: "SA", // Arabic - Saudi Arabia + de: "DE", // German - Germany + ru: "RU", // Russian - Russia + pt: "PT", // Portuguese - Portugal + it: "IT", // Italian - Italy + ja: "JP", // Japanese - Japan + ko: "KR", // Korean - South Korea + hi: "IN", // Hindi - India + sv: "SE", // Swedish - Sweden + nl: "NL", // Dutch - Netherlands + pl: "PL", // Polish - Poland + tr: "TR", // Turkish - Turkey + el: "GR", // Greek - Greece + he: "IL", // Hebrew - Israel + vi: "VN", // Vietnamese - Vietnam + th: "TH", // Thai - Thailand + cs: "CZ", // Czech - Czech Republic + da: "DK", // Danish - Denmark + fi: "FI", // Finnish - Finland + hu: "HU", // Hungarian - Hungary + no: "NO", // Norwegian - Norway + ro: "RO", // Romanian - Romania + sk: "SK", // Slovak - Slovakia + sl: "SI", // Slovenian - Slovenia + uk: "UA", // Ukrainian - Ukraine + bg: "BG", // Bulgarian - Bulgaria + hr: "HR", // Croatian - Croatia + lt: "LT", // Lithuanian - Lithuania + lv: "LV", // Latvian - Latvia + et: "EE", // Estonian - Estonia + sr: "RS", // Serbian - Serbia + bs: "BA", // Bosnian - Bosnia and Herzegovina + mk: "MK", // Macedonian - North Macedonia + sq: "AL", // Albanian - Albania + mt: "MT", // Maltese - Malta + is: "IS", // Icelandic - Iceland + ga: "IE", // Irish - Ireland + cy: "GB", // Welsh - United Kingdom + eu: "ES", // Basque - Spain + ca: "ES", // Catalan - Spain + gl: "ES", // Galician - Spain + af: "ZA", // Afrikaans - South Africa + sw: "TZ", // Swahili - Tanzania + am: "ET", // Amharic - Ethiopia + so: "SO", // Somali - Somalia + ha: "NG", // Hausa - Nigeria + ig: "NG", // Igbo - Nigeria + yo: "NG", // Yoruba - Nigeria + rw: "RW", // Kinyarwanda - Rwanda + ny: "MW", // Chichewa - Malawi + mg: "MG", // Malagasy - Madagascar + ln: "CD", // Lingala - Democratic Republic of the Congo + tg: "TJ", // Tajik - Tajikistan + uz: "UZ", // Uzbek - Uzbekistan + tk: "TM", // Turkmen - Turkmenistan + ky: "KG", // Kyrgyz - Kyrgyzstan + mn: "MN", // Mongolian - Mongolia + ps: "AF", // Pashto - Afghanistan + ur: "PK", // Urdu - Pakistan + fa: "IR", // Persian (Farsi) - Iran + ku: "IQ", // Kurdish - Iraq + sd: "PK", // Sindhi - Pakistan + ne: "NP", // Nepali - Nepal + si: "LK", // Sinhala - Sri Lanka + km: "KH", // Khmer - Cambodia + lo: "LA", // Lao - Laos + my: "MM", // Burmese - Myanmar + ka: "GE", // Georgian - Georgia + hy: "AM", // Armenian - Armenia + az: "AZ", // Azerbaijani - Azerbaijan + bm: "ML", // Bambara - Mali + ff: "SN", // Fulfulde - Senegal + ti: "ER", // Tigrinya - Eritrea + xh: "ZA", // Xhosa - South Africa + zu: "ZA", // Zulu - South Africa + ms: "MY", // Malay - Malaysia + id: "ID", // Indonesian - Indonesia + jv: "ID", // Javanese - Indonesia + su: "ID", // Sundanese - Indonesia + tl: "PH", // Tagalog - Philippines + ml: "IN", // Malayalam - India + te: "IN", // Telugu - India + ta: "IN", // Tamil - India + mr: "IN", // Marathi - India + bn: "BD", // Bengali - Bangladesh + gu: "IN", // Gujarati - India + kn: "IN", // Kannada - India + or: "IN", // Oriya - India + pa: "IN", // Punjabi - India + aa: "ET", // Afar - Ethiopia + ab: "GE", // Abkhazian - Georgia + ae: "IR", // Avestan - Iran + ak: "GH", // Akan - Ghana + an: "ES", // Aragonese - Spain + as: "IN", // Assamese - India + av: "RU", // Avaric - Russia + ay: "BO", // Aymara - Bolivia + ba: "RU", // Bashkir - Russia + be: "BY", // Belarusian - Belarus + bi: "VU", // Bislama - Vanuatu + bo: "CN", // Tibetan - China + br: "FR", // Breton - France + ce: "RU", // Chechen - Russia + ch: "GU", // Chamorro - Guam + co: "FR", // Corsican - France + cr: "CA", // Cree - Canada + cu: "RU", // Church Slavic - Russia + cv: "RU", // Chuvash - Russia + dv: "MV", // Dhivehi - Maldives + dz: "BT", // Dzongkha - Bhutan + ee: "GH", // Ewe - Ghana + eo: "—", // Esperanto - International (Constructed Language) + fj: "FJ", // Fijian - Fiji + fo: "FO", // Faroese - Faroe Islands + fy: "NL", // Western Frisian - Netherlands + gd: "GB", // Scottish Gaelic - United Kingdom + gn: "PY", // Guarani - Paraguay + gv: "IM", // Manx - Isle of Man + ho: "PG", // Hiri Motu - Papua New Guinea + ht: "HT", // Haitian Creole - Haiti + hz: "NA", // Herero - Namibia + ia: "—", // Interlingua - International (Constructed Language) + ie: "—", // Interlingue - International (Constructed Language) + ii: "CN", // Sichuan Yi - China + ik: "US", // Inupiaq - United States + io: "—", // Ido - International (Constructed Language) + iu: "CA", // Inuktitut - Canada + kg: "CG", // Kongo - Congo + ki: "KE", // Kikuyu - Kenya + kj: "AO", // Kuanyama - Angola + kk: "KZ", // Kazakh - Kazakhstan + kl: "GL", // Kalaallisut - Greenland + kr: "NE", // Kanuri - Niger + ks: "IN", // Kashmiri - India + kv: "RU", // Komi - Russia + kw: "GB", // Cornish - United Kingdom + la: "VA", // Latin - Vatican City + lb: "LU", // Luxembourgish - Luxembourg + lg: "UG", // Ganda - Uganda + li: "NL", // Limburgish - Netherlands + lu: "CD", // Luba-Katanga - Democratic Republic of the Congo + mh: "MH", // Marshallese - Marshall Islands + mi: "NZ", // Maori - New Zealand + na: "NR", // Nauru - Nauru + nb: "NO", // Norwegian Bokmål - Norway + nd: "ZW", // North Ndebele - Zimbabwe + ng: "NA", // Ndonga - Namibia + nn: "NO", // Norwegian Nynorsk - Norway + nr: "ZA", // South Ndebele - South Africa + nv: "US", // Navajo - United States + oc: "FR", // Occitan - France + oj: "CA", // Ojibwe - Canada + om: "ET", // Oromo - Ethiopia + os: "GE", // Ossetian - Georgia + pi: "IN", // Pali - India + qu: "PE", // Quechua - Peru + rm: "CH", // Romansh - Switzerland + rn: "BI", // Rundi - Burundi + sa: "IN", // Sanskrit - India + sc: "IT", // Sardinian - Italy + se: "NO", // Northern Sami - Norway + sg: "CF", // Sango - Central African Republic + sm: "WS", // Samoan - Samoa + sn: "ZW", // Shona - Zimbabwe + ss: "SZ", // Swati - Eswatini + st: "LS", // Southern Sotho - Lesotho + tn: "BW", // Tswana - Botswana + to: "TO", // Tonga - Tonga + ts: "ZA", // Tsonga - South Africa + tt: "RU", // Tatar - Russia + tw: "GH", // Twi - Ghana + ty: "PF", // Tahitian - French Polynesia + ug: "CN", // Uyghur - China + ve: "ZA", // Venda - South Africa + vo: "—", // Volapük - International (Constructed Language) + wa: "BE", // Walloon - Belgium + wo: "SN", // Wolof - Senegal + yi: "—", // Yiddish - International (Primarily spoken among Jewish communities) + za: "CN", // Zhuang - China +}; diff --git a/apps/expo/src/lib/meta.ts b/apps/expo/src/lib/meta.ts new file mode 100644 index 0000000..0cb0457 --- /dev/null +++ b/apps/expo/src/lib/meta.ts @@ -0,0 +1,97 @@ +import type { ScrapeMedia } from "@movie-web/provider-utils"; +import { + fetchMediaDetails, + fetchSeasonDetails, + getMediaPoster, +} from "@movie-web/tmdb"; + +import type { ItemData } from "~/components/item/item"; +import type { PlayerMeta } from "~/stores/player/slices/video"; + +export const convertMetaToScrapeMedia = (meta: PlayerMeta): ScrapeMedia => { + if (meta.type === "movie") { + return { + title: meta.title, + releaseYear: meta.releaseYear, + type: "movie", + tmdbId: meta.tmdbId, + imdbId: meta.imdbId, + }; + } + if (meta.type === "show") { + return { + title: meta.title, + releaseYear: meta.releaseYear, + type: "show", + tmdbId: meta.tmdbId, + season: meta.season!, + episode: meta.episode!, + imdbId: meta.imdbId, + }; + } + throw new Error("Invalid meta type"); +}; + +export const convertMetaToItemData = (meta: PlayerMeta): ItemData => { + if (meta.type === "movie") { + return { + id: meta.tmdbId, + title: meta.title, + year: meta.releaseYear, + type: meta.type, + posterUrl: getMediaPoster(meta.poster ?? ""), + }; + } + if (meta.type === "show") { + return { + id: meta.tmdbId, + title: meta.title, + year: meta.releaseYear, + type: "tv", + posterUrl: getMediaPoster(meta.poster ?? ""), + }; + } + throw new Error("Invalid media type"); +}; + +export const getNextEpisode = async ( + meta: PlayerMeta, +): Promise => { + if (meta.type === "show") { + const currentEpisode = meta.episode!; + const nextEpisode = meta.episodes!.find( + (episode) => episode.number === currentEpisode.number + 1, + ); + if (!nextEpisode) { + const media = await fetchMediaDetails(meta.tmdbId, "tv"); + if (!media) return; + + const nextSeason = media.result.seasons.find( + (season) => season.season_number === meta.season!.number + 1, + ); + if (!nextSeason) return; + const seasonDetails = await fetchSeasonDetails( + meta.tmdbId, + nextSeason.season_number, + ); + if (!seasonDetails) return; + return { + ...meta, + season: { + number: nextSeason.season_number, + tmdbId: meta.season!.tmdbId, + }, + episode: { + number: seasonDetails.episodes[0]?.episode_number ?? 1, + tmdbId: seasonDetails.episodes[0]?.id.toString() ?? "", + title: seasonDetails.episodes[0]?.name, + }, + }; + } + return { + ...meta, + episode: nextEpisode, + }; + } + throw new Error("Invalid meta type"); +}; diff --git a/apps/expo/src/lib/number.ts b/apps/expo/src/lib/number.ts new file mode 100644 index 0000000..3d944b7 --- /dev/null +++ b/apps/expo/src/lib/number.ts @@ -0,0 +1,3 @@ +export const convertMilliSecondsToSeconds = (milliSeconds: number) => { + return milliSeconds / 1000; +}; diff --git a/apps/expo/src/lib/update.ts b/apps/expo/src/lib/update.ts new file mode 100644 index 0000000..3a6539d --- /dev/null +++ b/apps/expo/src/lib/update.ts @@ -0,0 +1,45 @@ +import * as Application from "expo-application"; +import { Octokit } from "@octokit/rest"; + +function isVersionHigher(newVersion: string, currentVersion: string): boolean { + const parseVersion = (version: string) => + version + .replace(/^v/, "") + .split(".") + .map((part) => parseInt(part, 10)); + + const newParts = parseVersion(newVersion); + const currentParts = parseVersion(currentVersion); + const maxLength = Math.max(newParts.length, currentParts.length); + + for (let i = 0; i < maxLength; i++) { + const newPart = newParts[i] ?? 0; + const currentPart = currentParts[i] ?? 0; + + if (newPart !== currentPart) { + return newPart > currentPart; + } + } + + return false; +} + +export async function checkForUpdate() { + const octokit = new Octokit(); + + const res = await octokit.repos + .getLatestRelease({ + owner: "movie-web", + repo: "native-app", + }) + .catch(() => undefined); + + if (!res) return; + + const latestVersion = res.data.tag_name; + const currentVersion = Application.nativeApplicationVersion ?? "0.0.0"; + + if (isVersionHigher(latestVersion, currentVersion)) { + return res; + } +} diff --git a/apps/expo/src/plugins/withRemoveiOSNotificationEntitlement.js b/apps/expo/src/plugins/withRemoveiOSNotificationEntitlement.js new file mode 100644 index 0000000..ce5068f --- /dev/null +++ b/apps/expo/src/plugins/withRemoveiOSNotificationEntitlement.js @@ -0,0 +1,11 @@ +const withEntitlementsPlist = + require("@expo/config-plugins").withEntitlementsPlist; + +const withRemoveiOSNotificationEntitlement = (config) => { + return withEntitlementsPlist(config, (mod) => { + delete mod.modResults["aps-environment"]; + return mod; + }); +}; + +module.exports = withRemoveiOSNotificationEntitlement; diff --git a/apps/expo/src/stores/audio/index.ts b/apps/expo/src/stores/audio/index.ts new file mode 100644 index 0000000..595aa97 --- /dev/null +++ b/apps/expo/src/stores/audio/index.ts @@ -0,0 +1,20 @@ +import { create } from "zustand"; +import { immer } from "zustand/middleware/immer"; + +import type { AudioTrack } from "~/components/player/AudioTrackSelector"; + +export interface AudioTrackStore { + selectedTrack: AudioTrack | null; + setSelectedAudioTrack(track: AudioTrack | null): void; +} + +export const useAudioTrackStore = create( + immer((set) => ({ + selectedTrack: null, + setSelectedAudioTrack: (track) => { + set((state) => { + state.selectedTrack = track; + }); + }, + })), +); diff --git a/apps/expo/src/stores/captions/index.ts b/apps/expo/src/stores/captions/index.ts new file mode 100644 index 0000000..418797e --- /dev/null +++ b/apps/expo/src/stores/captions/index.ts @@ -0,0 +1,33 @@ +import type { ContentCaption } from "subsrt-ts/dist/types/handler"; +import { create } from "zustand"; +import { immer } from "zustand/middleware/immer"; + +import type { Stream } from "@movie-web/provider-utils"; + +export type CaptionWithData = Stream["captions"][0] & { + data: ContentCaption[]; +}; + +export interface CaptionsStore { + selectedCaption: CaptionWithData | null; + delay: number; + setSelectedCaption(caption: CaptionWithData | null): void; + setDelay(delay: number): void; +} + +export const useCaptionsStore = create( + immer((set) => ({ + selectedCaption: null, + delay: 0, + setSelectedCaption: (caption) => { + set((s) => { + s.selectedCaption = caption; + }); + }, + setDelay: (delay) => { + set((s) => { + s.delay = delay; + }); + }, + })), +); diff --git a/apps/expo/src/stores/index.ts b/apps/expo/src/stores/index.ts new file mode 100644 index 0000000..82cef18 --- /dev/null +++ b/apps/expo/src/stores/index.ts @@ -0,0 +1 @@ +export type ReactStyleStateSetter = T | ((prev: T) => T); diff --git a/apps/expo/src/stores/player/slices/audio.ts b/apps/expo/src/stores/player/slices/audio.ts new file mode 100644 index 0000000..c3d74cc --- /dev/null +++ b/apps/expo/src/stores/player/slices/audio.ts @@ -0,0 +1,58 @@ +import type { Audio } from "expo-av"; + +import type { MakeSlice } from "./types"; +import type { AudioTrack } from "~/components/player/AudioTrackSelector"; + +export interface AudioSlice { + audioObject: Audio.Sound | null; + currentAudioTrack: AudioTrack | null; + + setAudioObject(audioObject: Audio.Sound | null): void; + setCurrentAudioTrack(track: AudioTrack | null): void; + playAudio(): Promise; + pauseAudio(): Promise; + toggleAudio(): Promise; + setAudioPositionAsync(positionMillis: number): Promise; +} + +export const createAudioSlice: MakeSlice = (set, get) => ({ + audioObject: null, + currentAudioTrack: null, + + setAudioObject: (audioObject) => { + set({ audioObject }); + }, + setCurrentAudioTrack: (track) => { + set({ currentAudioTrack: track }); + }, + playAudio: async () => { + const { audioObject } = get(); + if (audioObject) { + await audioObject.playAsync(); + } + }, + pauseAudio: async () => { + const { audioObject } = get(); + if (audioObject) { + await audioObject.pauseAsync(); + } + }, + toggleAudio: async () => { + const { audioObject } = get(); + if (audioObject) { + const status = await audioObject.getStatusAsync(); + if (!status.isLoaded) return; + if (status.isPlaying) { + await audioObject.pauseAsync(); + } else { + await audioObject.playAsync(); + } + } + }, + setAudioPositionAsync: async (positionMillis) => { + const { audioObject } = get(); + if (audioObject) { + await audioObject.setPositionAsync(positionMillis); + } + }, +}); diff --git a/apps/expo/src/stores/player/slices/interface.ts b/apps/expo/src/stores/player/slices/interface.ts new file mode 100644 index 0000000..cfb18a2 --- /dev/null +++ b/apps/expo/src/stores/player/slices/interface.ts @@ -0,0 +1,137 @@ +import type { HLSTracks, Stream } from "@movie-web/provider-utils"; +import type { SeasonDetails } from "@movie-web/tmdb"; + +import type { MakeSlice } from "./types"; +import type { ItemData } from "~/components/item/item"; +import type { AudioTrack } from "~/components/player/AudioTrackSelector"; + +export enum PlayerStatus { + SCRAPING, + READY, +} + +type PlayerState = "playing" | "paused"; + +export interface InterfaceSlice { + interface: { + state: PlayerState; + isIdle: boolean; + idleTimeout: NodeJS.Timeout | null; + currentStream: Stream | null; + availableStreams: Stream[] | null; + sourceId: string | null; + data: ItemData | null; + seasonData: SeasonDetails | null; + selectedCaption: Stream["captions"][0] | null; + hlsTracks: HLSTracks | null; + audioTracks: AudioTrack[] | null; + playerStatus: PlayerStatus; + }; + toggleState(): void; + setIsIdle(state: boolean): void; + setCurrentStream(stream: Stream): void; + setAvailableStreams(streams: Stream[]): void; + setSourceId(sourceId: string): void; + setData(data: ItemData): void; + setSeasonData(data: SeasonDetails): void; + setHlsTracks(tracks: HLSTracks): void; + setAudioTracks(tracks: AudioTrack[]): void; + setPlayerStatus(status: PlayerStatus): void; + reset: () => void; +} + +export const createInterfaceSlice: MakeSlice = (set, get) => ({ + interface: { + state: "playing", + isIdle: true, + idleTimeout: null, + currentStream: null, + availableStreams: null, + sourceId: null, + data: null, + seasonData: null, + selectedCaption: null, + hlsTracks: null, + audioTracks: null, + playerStatus: PlayerStatus.SCRAPING, + }, + toggleState: () => { + set((s) => { + s.interface.state = + s.interface.state === "playing" ? "paused" : "playing"; + }); + }, + setIsIdle: (state) => { + set((s) => { + if (s.interface.idleTimeout) clearTimeout(s.interface.idleTimeout); + + s.interface.idleTimeout = setTimeout(() => { + if (get().interface.isIdle === false) { + set((s) => { + s.interface.isIdle = true; + }); + } + }, 6000); + + s.interface.isIdle = state; + }); + }, + setCurrentStream: (stream) => { + set((s) => { + s.interface.currentStream = stream; + }); + }, + setAvailableStreams: (streams) => { + set((s) => { + s.interface.availableStreams = streams; + }); + }, + setSourceId: (sourceId: string) => { + set((s) => { + s.interface.sourceId = sourceId; + }); + }, + setData: (data: ItemData) => { + set((s) => { + s.interface.data = data; + }); + }, + setSeasonData: (data: SeasonDetails) => { + set((s) => { + s.interface.seasonData = data; + }); + }, + setHlsTracks: (tracks) => { + set((s) => { + s.interface.hlsTracks = tracks; + }); + }, + setAudioTracks: (tracks) => { + set((s) => { + s.interface.audioTracks = tracks; + }); + }, + setPlayerStatus: (status) => { + set((s) => { + s.interface.playerStatus = status; + }); + }, + reset: () => { + set(() => ({ + interface: { + state: "playing", + isIdle: true, + idleTimeout: null, + currentStream: null, + availableStreams: null, + sourceId: null, + data: null, + seasonData: null, + selectedCaption: null, + hlsTracks: null, + audioTracks: null, + playerStatus: PlayerStatus.SCRAPING, + }, + })); + }, +}); diff --git a/apps/expo/src/stores/player/slices/types.ts b/apps/expo/src/stores/player/slices/types.ts new file mode 100644 index 0000000..3f626ee --- /dev/null +++ b/apps/expo/src/stores/player/slices/types.ts @@ -0,0 +1,14 @@ +import type { StateCreator } from "zustand"; + +import type { AudioSlice } from "./audio"; +import type { InterfaceSlice } from "./interface"; +import type { VideoSlice } from "./video"; + +export type AllSlices = InterfaceSlice & VideoSlice & AudioSlice; + +export type MakeSlice = StateCreator< + AllSlices, + [["zustand/immer", never]], + [], + Slice +>; diff --git a/apps/expo/src/stores/player/slices/video.ts b/apps/expo/src/stores/player/slices/video.ts new file mode 100644 index 0000000..c0404ad --- /dev/null +++ b/apps/expo/src/stores/player/slices/video.ts @@ -0,0 +1,78 @@ +import type { AVPlaybackSourceObject, AVPlaybackStatus, Video } from "expo-av"; + +import type { MakeSlice } from "./types"; +import { PlayerStatus } from "./interface"; + +export interface PlayerMetaEpisode { + number: number; + tmdbId: string; + title?: string; +} + +export interface PlayerMeta { + type: "movie" | "show"; + title: string; + tmdbId: string; + imdbId?: string; + releaseYear: number; + poster?: string; + episodes?: PlayerMetaEpisode[]; + episode?: PlayerMetaEpisode; + season?: { + number: number; + tmdbId: string; + title?: string; + }; +} + +export interface VideoSlice { + videoRef: Video | null; + videoSrc: AVPlaybackSourceObject | null; + status: AVPlaybackStatus | null; + meta: PlayerMeta | null; + isLocalFile: boolean; + + setVideoRef(ref: Video | null): void; + setVideoSrc(src: AVPlaybackSourceObject | null): void; + setStatus(status: AVPlaybackStatus | null): void; + setMeta(meta: PlayerMeta | null): void; + setIsLocalFile(isLocalFile: boolean): void; + resetVideo(): void; +} + +export const createVideoSlice: MakeSlice = (set) => ({ + videoRef: null, + videoSrc: null, + status: null, + meta: null, + isLocalFile: false, + + setVideoRef: (ref) => { + set({ videoRef: ref }); + }, + setVideoSrc: (src) => { + set((s) => { + s.videoSrc = src; + }); + }, + setStatus: (status) => { + set((s) => { + s.status = status; + }); + }, + setMeta: (meta) => { + set((s) => { + s.interface.playerStatus = PlayerStatus.SCRAPING; + s.meta = meta; + }); + }, + setIsLocalFile: (isLocalFile) => { + set({ isLocalFile }); + }, + resetVideo() { + set({ videoRef: null, status: null, meta: null, isLocalFile: false }); + set((s) => { + s.interface.playerStatus = PlayerStatus.SCRAPING; + }); + }, +}); diff --git a/apps/expo/src/stores/player/store.ts b/apps/expo/src/stores/player/store.ts new file mode 100644 index 0000000..5017c76 --- /dev/null +++ b/apps/expo/src/stores/player/store.ts @@ -0,0 +1,15 @@ +import { create } from "zustand"; +import { immer } from "zustand/middleware/immer"; + +import type { AllSlices } from "./slices/types"; +import { createAudioSlice } from "./slices/audio"; +import { createInterfaceSlice } from "./slices/interface"; +import { createVideoSlice } from "./slices/video"; + +export const usePlayerStore = create( + immer((...a) => ({ + ...createInterfaceSlice(...a), + ...createVideoSlice(...a), + ...createAudioSlice(...a), + })), +); diff --git a/apps/expo/src/stores/settings/index.ts b/apps/expo/src/stores/settings/index.ts new file mode 100644 index 0000000..f9ab623 --- /dev/null +++ b/apps/expo/src/stores/settings/index.ts @@ -0,0 +1,322 @@ +import type { StateStorage } from "zustand/middleware"; +import { Platform } from "react-native"; +import { MMKV } from "react-native-mmkv"; +import { create } from "zustand"; +import { createJSONStorage, persist } from "zustand/middleware"; + +import type { ScrapeMedia } from "@movie-web/provider-utils"; + +import type { ReactStyleStateSetter } from ".."; +import type { ItemData } from "~/components/item/item"; +import type { DownloadContent } from "~/hooks/useDownloadManager"; +import type { ThemeStoreOption } from "~/stores/theme"; + +const storage = new MMKV(); + +const zustandStorage: StateStorage = { + getItem: (name: string): string | null => { + const value = storage.getString(name); + return value ?? null; + }, + setItem: (name: string, value: string): void => { + storage.set(name, value); + }, + removeItem: (name: string): void => { + storage.delete(name); + }, +}; + +interface ThemeStoreState { + theme: ThemeStoreOption; + setTheme: (theme: ThemeStoreOption) => void; +} + +export const useThemeSettingsStore = create< + ThemeStoreState, + [["zustand/persist", ThemeStoreState]] +>( + persist( + (set) => ({ + theme: "main", + setTheme: (theme) => set({ theme }), + }), + { + name: "theme-settings", + storage: createJSONStorage(() => zustandStorage), + }, + ), +); + +interface PlayerStoreState { + gestureControls: boolean; + setGestureControls: (enabled: boolean) => void; + autoPlay: boolean; + setAutoPlay: (enabled: boolean) => void; +} + +export const usePlayerSettingsStore = create< + PlayerStoreState, + [["zustand/persist", PlayerStoreState]] +>( + persist( + (set) => ({ + gestureControls: Platform.select({ + ios: true, + android: false, + default: true, + }), + setGestureControls: (enabled) => set({ gestureControls: enabled }), + autoPlay: true, + setAutoPlay: (enabled) => set({ autoPlay: enabled }), + }), + { + name: "player-settings", + storage: createJSONStorage(() => zustandStorage), + }, + ), +); + +interface DownloadHistoryStoreState { + downloads: DownloadContent[]; + setDownloads: (downloads: ReactStyleStateSetter) => void; +} + +export const useDownloadHistoryStore = create< + DownloadHistoryStoreState, + [["zustand/persist", DownloadHistoryStoreState]] +>( + persist( + (set) => ({ + downloads: [], + setDownloads: (newDownloadsOrSetterFn) => { + set(({ downloads }) => { + if (Array.isArray(newDownloadsOrSetterFn)) { + const newArr = newDownloadsOrSetterFn; + return { downloads: newArr }; + } + const setterFn = newDownloadsOrSetterFn; + return { + downloads: setterFn(downloads), + }; + }); + }, + }), + { + name: "download-history", + storage: createJSONStorage(() => zustandStorage), + }, + ), +); + +interface BookmarkStoreState { + bookmarks: ItemData[]; + setBookmarks: (bookmarks: ItemData[]) => void; + addBookmark: (item: ItemData) => void; + removeBookmark: (item: ItemData) => void; + isBookmarked: (item: ItemData) => boolean; +} + +export const useBookmarkStore = create< + BookmarkStoreState, + [["zustand/persist", BookmarkStoreState]] +>( + persist( + (set, get) => ({ + bookmarks: [], + setBookmarks: (bookmarks) => set({ bookmarks }), + addBookmark: (item) => + set((state) => ({ + bookmarks: [...state.bookmarks, item], + })), + removeBookmark: (item: ItemData) => + set((state) => ({ + bookmarks: state.bookmarks.filter( + (bookmark) => bookmark.id !== item.id, + ), + })), + isBookmarked: (item) => + Boolean(get().bookmarks.find((bookmark) => bookmark.id === item.id)), + }), + { + name: "bookmarks", + storage: createJSONStorage(() => zustandStorage), + }, + ), +); + +export interface WatchHistoryItem { + item: ItemData; + media: ScrapeMedia; + positionMillis: number; +} + +interface WatchHistoryStoreState { + watchHistory: WatchHistoryItem[]; + hasWatchHistoryItem: (item: ItemData) => boolean; + getWatchHistoryItem: (media: ScrapeMedia) => WatchHistoryItem | undefined; + setWatchHistory: (watchHistory: WatchHistoryItem[]) => void; + updateWatchHistory: ( + item: ItemData, + media: ScrapeMedia, + positionMillis: number, + ) => void; + removeFromWatchHistory: (item: ItemData) => void; +} + +export const useWatchHistoryStore = create< + WatchHistoryStoreState, + [["zustand/persist", WatchHistoryStoreState]] +>( + persist( + (set, get) => ({ + watchHistory: [], + hasWatchHistoryItem: (item) => + Boolean( + get().watchHistory.find( + (historyItem) => historyItem.item.id === item.id, + ), + ), + getWatchHistoryItem: (media) => + get().watchHistory.find((historyItem) => { + if (historyItem.media.type === "movie" && media.type === "movie") { + return historyItem.media.tmdbId === media.tmdbId; + } else if ( + historyItem.media.type === "show" && + media.type === "show" + ) { + return ( + historyItem.media.tmdbId === media.tmdbId && + historyItem.media.season === media.season && + historyItem.media.episode === media.episode + ); + } + }), + setWatchHistory: (watchHistory) => set({ watchHistory }), + updateWatchHistory: ( + item: ItemData, + media: ScrapeMedia, + positionMillis: number, + ) => + set((state) => ({ + watchHistory: [ + ...state.watchHistory.filter( + (historyItem) => historyItem.item.id !== item.id, + ), + { + item, + media, + positionMillis, + }, + ], + })), + removeFromWatchHistory: (item) => + set((state) => ({ + watchHistory: state.watchHistory.filter( + (historyItem) => historyItem.item.id !== item.id, + ), + })), + }), + { + name: "watch-history", + storage: createJSONStorage(() => zustandStorage), + }, + ), +); + +export enum DefaultQuality { + Lowest = "Lowest", + Highest = "Highest", +} + +interface NetworkSettingsStoreState { + allowMobileData: boolean; + setAllowMobileData: (enabled: boolean) => void; + wifiDefaultQuality: DefaultQuality; + setWifiDefaultQuality: (quality: DefaultQuality) => void; + mobileDataDefaultQuality: DefaultQuality; + setMobileDataDefaultQuality: (quality: DefaultQuality) => void; +} + +export const useNetworkSettingsStore = create< + NetworkSettingsStoreState, + [["zustand/persist", NetworkSettingsStoreState]] +>( + persist( + (set) => ({ + allowMobileData: false, + setAllowMobileData: (enabled) => set({ allowMobileData: enabled }), + wifiDefaultQuality: DefaultQuality.Highest, + setWifiDefaultQuality: (quality) => set({ wifiDefaultQuality: quality }), + mobileDataDefaultQuality: DefaultQuality.Lowest, + setMobileDataDefaultQuality: (quality) => + set({ mobileDataDefaultQuality: quality }), + }), + { + name: "network-settings", + storage: createJSONStorage(() => zustandStorage), + }, + ), +); + +export interface Account { + profile: { + colorA: string; + colorB: string; + icon: string; + }; +} + +export type AccountWithToken = Account & { + sessionId: string; + userId: string; + token: string; + seed: string; + deviceName: string; +}; + +interface AuthStoreState { + account: null | AccountWithToken; + backendUrl: string; + proxySet: null | string[]; + removeAccount(): void; + setAccount(acc: AccountWithToken): void; + updateDeviceName(deviceName: string): void; + updateAccount(acc: Account): void; + setAccountProfile(acc: Account["profile"]): void; + setBackendUrl(url: string): void; + setProxySet(urls: null | string[]): void; +} + +export const useAuthStore = create< + AuthStoreState, + [["zustand/persist", AuthStoreState]] +>( + persist( + (set) => ({ + account: null, + backendUrl: "https://mw-backend.lonelil.ru", + proxySet: null, + setAccount: (acc) => set((s) => ({ ...s, account: acc })), + removeAccount: () => set((s) => ({ ...s, account: null })), + setBackendUrl: (v) => set((s) => ({ ...s, backendUrl: v })), + setProxySet: (urls) => set((s) => ({ ...s, proxySet: urls })), + setAccountProfile: (profile) => + set((s) => ({ + ...s, + account: s.account ? { ...s.account, profile } : s.account, + })), + updateAccount: (acc) => + set((s) => + s.account ? { ...s, account: { ...s.account, ...acc } } : s, + ), + updateDeviceName: (deviceName) => + set((s) => + s.account ? { ...s, account: { ...s.account, deviceName } } : s, + ), + }), + { + name: "account-settings", + storage: createJSONStorage(() => zustandStorage), + }, + ), +); diff --git a/apps/expo/src/stores/theme/index.ts b/apps/expo/src/stores/theme/index.ts new file mode 100644 index 0000000..87c0b2e --- /dev/null +++ b/apps/expo/src/stores/theme/index.ts @@ -0,0 +1,31 @@ +import { setAlternateAppIcon } from "expo-alternate-app-icons"; +import { create } from "zustand"; +import { immer } from "zustand/middleware/immer"; + +import { useThemeSettingsStore } from "~/stores/settings"; + +export type ThemeStoreOption = "main" | "blue" | "gray" | "red" | "teal"; + +export interface ThemeStore { + theme: ThemeStoreOption; + setTheme(v: ThemeStoreOption): void; +} + +export const useThemeStore = create( + immer((set) => { + const { theme, setTheme: updateTheme } = useThemeSettingsStore.getState(); + + return { + theme, + setTheme: (newTheme) => { + updateTheme(newTheme); + set((state) => { + state.theme = newTheme; + setAlternateAppIcon(newTheme).catch(() => { + console.log("Failed to set alternate app icon"); + }); + }); + }, + }; + }), +); diff --git a/apps/expo/src/types/country-language.d.ts b/apps/expo/src/types/country-language.d.ts new file mode 100644 index 0000000..bf5d3dd --- /dev/null +++ b/apps/expo/src/types/country-language.d.ts @@ -0,0 +1,21 @@ +declare module "@ladjs/country-language" { + export interface LanguageObj { + countries: { + code_2: string; + code_3: string; + numCode: string; + }[]; + direction: "RTL" | "LTR"; + name: string[]; + nativeName: string[]; + iso639_1: string; + } + + type Callback = (err: null | string, result: null | T) => void; + + declare namespace lib { + function getLanguage(locale: string, cb: Callback): void; + } + + export = lib; +} diff --git a/apps/expo/src/types/globals.d.ts b/apps/expo/src/types/globals.d.ts new file mode 100644 index 0000000..5b5b91a --- /dev/null +++ b/apps/expo/src/types/globals.d.ts @@ -0,0 +1,11 @@ +declare module "*.svg" { + import type { ImageSourcePropType } from "react-native"; + const content: ImageSourcePropType; + export default content; +} + +declare module "*.png" { + import type { ImageSourcePropType } from "react-native"; + const content: ImageSourcePropType; + export default content; +} diff --git a/apps/expo/src/types/nativewind-env.d.ts b/apps/expo/src/types/nativewind-env.d.ts deleted file mode 100644 index a13e313..0000000 --- a/apps/expo/src/types/nativewind-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/apps/expo/tailwind.config.ts b/apps/expo/tailwind.config.ts deleted file mode 100644 index 88e92ba..0000000 --- a/apps/expo/tailwind.config.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { Config } from "tailwindcss"; -// @ts-expect-error - no types -import nativewind from "nativewind/preset"; - -import baseConfig from "@movie-web/tailwind-config/native"; - -export default { - content: ["./src/**/*.{ts,tsx}"], - presets: [ - baseConfig, - nativewind, - { - theme: { - extend: { - fontFamily: { - sans: ["OpenSansRegular"], - thin: ["OpenSansLight"], - normal: ["OpenSansRegular"], - medium: ["OpenSansMedium"], - semibold: ["OpenSansSemiBold"], - bold: ["OpenSansBold"], - extrabold: ["OpenSansExtra"], - }, - }, - }, - }, - ], -} satisfies Config; diff --git a/apps/expo/tamagui-web.css b/apps/expo/tamagui-web.css new file mode 100644 index 0000000..70cf895 --- /dev/null +++ b/apps/expo/tamagui-web.css @@ -0,0 +1,12795 @@ +._ovs-contain { + overscroll-behavior: contain; +} +.is_Text .is_Text { + display: inline-flex; +} +._dsp_contents { + display: contents; +} +:root { + --color-1: rgba(255, 255, 255, 0); + --color-2: rgba(255, 255, 255, 0.75); + --color-3: rgba(255, 255, 255, 0.5); + --color-4: rgba(255, 255, 255, 0.25); + --color-5: rgba(10, 10, 10, 0); + --color-6: rgba(10, 10, 10, 0.75); + --color-7: rgba(10, 10, 10, 0.5); + --color-8: rgba(10, 10, 10, 0.25); + --color-9: #fff; + --color-10: #f8f8f8; + --color-11: hsl(0, 0%, 96.3%); + --color-12: hsl(0, 0%, 94.1%); + --color-13: hsl(0, 0%, 92%); + --color-14: hsl(0, 0%, 90%); + --color-15: hsl(0, 0%, 88.5%); + --color-16: hsl(0, 0%, 81%); + --color-17: hsl(0, 0%, 56.1%); + --color-18: hsl(0, 0%, 50.3%); + --color-19: hsl(0, 0%, 42.5%); + --color-20: hsl(0, 0%, 9%); + --color-21: #050505; + --color-22: #151515; + --color-23: #191919; + --color-24: #232323; + --color-25: #282828; + --color-26: #323232; + --color-27: #424242; + --color-28: #494949; + --color-29: #545454; + --color-30: #626262; + --color-31: #a5a5a5; + --color-32: #fff; + --color-33: hsl(206, 100%, 99.2%); + --color-34: hsl(210, 100%, 98%); + --color-35: hsl(209, 100%, 96.5%); + --color-36: hsl(210, 98.8%, 94%); + --color-37: hsl(209, 95%, 90.1%); + --color-38: hsl(209, 81.2%, 84.5%); + --color-39: hsl(208, 77.5%, 76.9%); + --color-40: hsl(206, 81.9%, 65.3%); + --color-41: hsl(206, 100%, 50%); + --color-42: hsl(208, 100%, 47.3%); + --color-43: hsl(211, 100%, 43.2%); + --color-44: hsl(211, 100%, 15%); + --color-45: hsl(0, 0%, 99%); + --color-46: hsl(0, 0%, 97.3%); + --color-47: hsl(0, 0%, 95.1%); + --color-48: hsl(0, 0%, 93%); + --color-49: hsl(0, 0%, 90.9%); + --color-50: hsl(0, 0%, 88.7%); + --color-51: hsl(0, 0%, 85.8%); + --color-52: hsl(0, 0%, 78%); + --color-53: hsl(0, 0%, 56.1%); + --color-54: hsl(0, 0%, 52.3%); + --color-55: hsl(0, 0%, 43.5%); + --color-56: hsl(0, 0%, 9%); + --color-57: hsl(136, 50%, 98.9%); + --color-58: hsl(138, 62.5%, 96.9%); + --color-59: hsl(139, 55.2%, 94.5%); + --color-60: hsl(140, 48.7%, 91%); + --color-61: hsl(141, 43.7%, 86%); + --color-62: hsl(143, 40.3%, 79%); + --color-63: hsl(146, 38.5%, 69%); + --color-64: hsl(151, 40.2%, 54.1%); + --color-65: hsl(151, 55%, 41.5%); + --color-66: hsl(152, 57.5%, 37.6%); + --color-67: hsl(153, 67%, 28.5%); + --color-68: hsl(155, 40%, 14%); + --color-69: hsl(24, 70%, 99%); + --color-70: hsl(24, 83.3%, 97.6%); + --color-71: hsl(24, 100%, 95.3%); + --color-72: hsl(25, 100%, 92.2%); + --color-73: hsl(25, 100%, 88.2%); + --color-74: hsl(25, 100%, 82.8%); + --color-75: hsl(24, 100%, 75.3%); + --color-76: hsl(24, 94.5%, 64.3%); + --color-77: hsl(24, 94%, 50%); + --color-78: hsl(24, 100%, 46.5%); + --color-79: hsl(24, 100%, 37%); + --color-80: hsl(15, 60%, 17%); + --color-81: hsl(322, 100%, 99.4%); + --color-82: hsl(323, 100%, 98.4%); + --color-83: hsl(323, 86.3%, 96.5%); + --color-84: hsl(323, 78.7%, 94.2%); + --color-85: hsl(323, 72.2%, 91.1%); + --color-86: hsl(323, 66.3%, 86.6%); + --color-87: hsl(323, 62%, 80.1%); + --color-88: hsl(323, 60.3%, 72.4%); + --color-89: hsl(322, 65%, 54.5%); + --color-90: hsl(322, 63.9%, 50.7%); + --color-91: hsl(322, 75%, 46%); + --color-92: hsl(320, 70%, 13.5%); + --color-93: hsl(280, 65%, 99.4%); + --color-94: hsl(276, 100%, 99%); + --color-95: hsl(276, 83.1%, 97%); + --color-96: hsl(275, 76.4%, 94.7%); + --color-97: hsl(275, 70.8%, 91.8%); + --color-98: hsl(274, 65.4%, 87.8%); + --color-99: hsl(273, 61%, 81.7%); + --color-100: hsl(272, 60%, 73.5%); + --color-101: hsl(272, 51%, 54%); + --color-102: hsl(272, 46.8%, 50.3%); + --color-103: hsl(272, 50%, 45.8%); + --color-104: hsl(272, 66%, 16%); + --color-105: hsl(359, 100%, 99.4%); + --color-106: hsl(359, 100%, 98.6%); + --color-107: hsl(360, 100%, 96.8%); + --color-108: hsl(360, 97.9%, 94.8%); + --color-109: hsl(360, 90.2%, 91.9%); + --color-110: hsl(360, 81.7%, 87.8%); + --color-111: hsl(359, 74.2%, 81.7%); + --color-112: hsl(359, 69.5%, 74.3%); + --color-113: hsl(358, 75%, 59%); + --color-114: hsl(358, 69.4%, 55.2%); + --color-115: hsl(358, 65%, 48.7%); + --color-116: hsl(354, 50%, 14.6%); + --color-117: hsl(60, 54%, 98.5%); + --color-118: hsl(52, 100%, 95.5%); + --color-119: hsl(55, 100%, 90.9%); + --color-120: hsl(54, 100%, 86.6%); + --color-121: hsl(52, 97.9%, 82%); + --color-122: hsl(50, 89.4%, 76.1%); + --color-123: hsl(47, 80.4%, 68%); + --color-124: hsl(48, 100%, 46.1%); + --color-125: hsl(53, 92%, 50%); + --color-126: hsl(50, 100%, 48.5%); + --color-127: hsl(42, 100%, 29%); + --color-128: hsl(40, 55%, 13.5%); + --color-129: hsl(212, 35%, 9.2%); + --color-130: hsl(216, 50%, 11.8%); + --color-131: hsl(214, 59.4%, 15.3%); + --color-132: hsl(214, 65.8%, 17.9%); + --color-133: hsl(213, 71.2%, 20.2%); + --color-134: hsl(212, 77.4%, 23.1%); + --color-135: hsl(211, 85.1%, 27.4%); + --color-136: hsl(211, 89.7%, 34.1%); + --color-137: hsl(206, 100%, 50%); + --color-138: hsl(209, 100%, 60.6%); + --color-139: hsl(210, 100%, 66.1%); + --color-140: hsl(206, 98%, 95.8%); + --color-141: hsl(0, 0%, 8.5%); + --color-142: hsl(0, 0%, 11%); + --color-143: hsl(0, 0%, 13.6%); + --color-144: hsl(0, 0%, 15.8%); + --color-145: hsl(0, 0%, 17.9%); + --color-146: hsl(0, 0%, 20.5%); + --color-147: hsl(0, 0%, 24.3%); + --color-148: hsl(0, 0%, 31.2%); + --color-149: hsl(0, 0%, 43.9%); + --color-150: hsl(0, 0%, 49.4%); + --color-151: hsl(0, 0%, 62.8%); + --color-152: hsl(0, 0%, 93%); + --color-153: hsl(146, 30%, 7.4%); + --color-154: hsl(155, 44.2%, 8.4%); + --color-155: hsl(155, 46.7%, 10.9%); + --color-156: hsl(154, 48.4%, 12.9%); + --color-157: hsl(154, 49.7%, 14.9%); + --color-158: hsl(154, 50.9%, 17.6%); + --color-159: hsl(153, 51.8%, 21.8%); + --color-160: hsl(151, 51.7%, 28.4%); + --color-161: hsl(151, 55%, 41.5%); + --color-162: hsl(151, 49.3%, 46.5%); + --color-163: hsl(151, 50%, 53.2%); + --color-164: hsl(137, 72%, 94%); + --color-165: hsl(30, 70%, 7.2%); + --color-166: hsl(28, 100%, 8.4%); + --color-167: hsl(26, 91.1%, 11.6%); + --color-168: hsl(25, 88.3%, 14.1%); + --color-169: hsl(24, 87.6%, 16.6%); + --color-170: hsl(24, 88.6%, 19.8%); + --color-171: hsl(24, 92.4%, 24%); + --color-172: hsl(25, 100%, 29%); + --color-173: hsl(24, 94%, 50%); + --color-174: hsl(24, 100%, 58.5%); + --color-175: hsl(24, 100%, 62.2%); + --color-176: hsl(24, 97%, 93.2%); + --color-177: hsl(318, 25%, 9.6%); + --color-178: hsl(319, 32.2%, 11.6%); + --color-179: hsl(319, 41%, 16%); + --color-180: hsl(320, 45.4%, 18.7%); + --color-181: hsl(320, 49%, 21.1%); + --color-182: hsl(321, 53.6%, 24.4%); + --color-183: hsl(321, 61.1%, 29.7%); + --color-184: hsl(322, 74.9%, 37.5%); + --color-185: hsl(322, 65%, 54.5%); + --color-186: hsl(323, 72.8%, 59.2%); + --color-187: hsl(325, 90%, 66.4%); + --color-188: hsl(322, 90%, 95.8%); + --color-189: hsl(284, 20%, 9.6%); + --color-190: hsl(283, 30%, 11.8%); + --color-191: hsl(281, 37.5%, 16.5%); + --color-192: hsl(280, 41.2%, 20%); + --color-193: hsl(279, 43.8%, 23.3%); + --color-194: hsl(277, 46.4%, 27.5%); + --color-195: hsl(275, 49.3%, 34.6%); + --color-196: hsl(272, 52.1%, 45.9%); + --color-197: hsl(272, 51%, 54%); + --color-198: hsl(273, 57.3%, 59.1%); + --color-199: hsl(275, 80%, 71%); + --color-200: hsl(279, 75%, 95.7%); + --color-201: hsl(353, 23%, 9.8%); + --color-202: hsl(357, 34.4%, 12%); + --color-203: hsl(356, 43.4%, 16.4%); + --color-204: hsl(356, 47.6%, 19.2%); + --color-205: hsl(356, 51.1%, 21.9%); + --color-206: hsl(356, 55.2%, 25.9%); + --color-207: hsl(357, 60.2%, 31.8%); + --color-208: hsl(358, 65%, 40.4%); + --color-209: hsl(358, 75%, 59%); + --color-210: hsl(358, 85.3%, 64%); + --color-211: hsl(358, 100%, 69.5%); + --color-212: hsl(351, 89%, 96%); + --color-213: hsl(45, 100%, 5.5%); + --color-214: hsl(46, 100%, 6.7%); + --color-215: hsl(45, 100%, 8.7%); + --color-216: hsl(45, 100%, 10.4%); + --color-217: hsl(47, 100%, 12.1%); + --color-218: hsl(49, 100%, 14.3%); + --color-219: hsl(49, 90.3%, 18.4%); + --color-220: hsl(50, 100%, 22%); + --color-221: hsl(53, 92%, 50%); + --color-222: hsl(54, 100%, 68%); + --color-223: hsl(48, 100%, 47%); + --color-224: hsl(53, 100%, 91%); + --radius-1: 0px; + --radius-2: 3px; + --radius-3: 5px; + --radius-4: 7px; + --radius-5: 9px; + --radius-6: 10px; + --radius-7: 16px; + --radius-8: 19px; + --radius-9: 22px; + --radius-10: 26px; + --radius-11: 34px; + --radius-12: 42px; + --radius-13: 50px; + --radius-14: 9px; + --zIndex-1: 0; + --zIndex-2: 100; + --zIndex-3: 200; + --zIndex-4: 300; + --zIndex-5: 400; + --zIndex-6: 500; + --space-1: 0px; + --space-5: 2px; + --space-7: 7px; + --space-9: 13px; + --space-11: 18px; + --space-14: 24px; + --space-15: 32px; + --space-16: 39px; + --space-17: 46px; + --space-18: 53px; + --space-19: 60px; + --space-20: 74px; + --space-21: 88px; + --space-22: 102px; + --space-23: 116px; + --space-24: 130px; + --space-25: 144px; + --space-26: 144px; + --space-27: 158px; + --space-28: 172px; + --space-29: 186px; + --space-2: 0.5px; + --space-3: 1px; + --space-4: 1.5px; + --space-6: 4px; + --space-8: 10px; + --space-10: 16px; + --space-12: 18px; + --space-13: 21px; + --space-30: -0.5px; + --space-31: -1px; + --space-32: -1.5px; + --space-33: -2px; + --space-34: -4px; + --space-35: -7px; + --space-36: -10px; + --space-37: -13px; + --space-38: -16px; + --space-39: -18px; + --space-40: -18px; + --space-41: -21px; + --space-42: -24px; + --space-43: -32px; + --space-44: -39px; + --space-45: -46px; + --space-46: -53px; + --space-47: -60px; + --space-48: -74px; + --space-49: -88px; + --space-50: -102px; + --space-51: -116px; + --space-52: -130px; + --space-53: -144px; + --space-54: -144px; + --space-55: -158px; + --space-56: -172px; + --space-57: -186px; + --size-1: 0px; + --size-5: 20px; + --size-7: 28px; + --size-9: 36px; + --size-11: 44px; + --size-14: 52px; + --size-15: 64px; + --size-16: 74px; + --size-17: 84px; + --size-18: 94px; + --size-19: 104px; + --size-20: 124px; + --size-21: 144px; + --size-22: 164px; + --size-23: 184px; + --size-24: 204px; + --size-25: 224px; + --size-26: 224px; + --size-27: 244px; + --size-28: 264px; + --size-29: 284px; + --size-2: 2px; + --size-3: 4px; + --size-4: 8px; + --size-6: 24px; + --size-8: 32px; + --size-10: 40px; + --size-12: 44px; + --size-13: 48px; +} +:root .font_heading, +:root .t_lang-heading-default .font_heading { + --f-fa: Inter, -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", + Roboto, Helvetica, Arial, sans-serif; + --f-li-1: 22px; + --f-li-2: 23px; + --f-li-3: 24px; + --f-li-4: 25px; + --f-li-5: 24px; + --f-li-6: 27px; + --f-li-7: 32px; + --f-li-8: 35px; + --f-li-9: 40px; + --f-li-10: 53px; + --f-li-11: 66px; + --f-li-12: 73px; + --f-li-13: 84px; + --f-li-14: 106px; + --f-li-15: 130px; + --f-li-16: 152px; + --f-li-17: 25px; + --f-we-1: 400; + --f-we-2: 400; + --f-we-3: 400; + --f-we-4: 400; + --f-we-5: 400; + --f-we-6: 400; + --f-we-7: 700; + --f-we-8: 700; + --f-we-9: 700; + --f-we-10: 700; + --f-we-11: 700; + --f-we-12: 700; + --f-we-13: 700; + --f-we-14: 700; + --f-we-15: 700; + --f-we-16: 700; + --f-we-17: 700; + --f-21-1: 2px; + --f-21-2: 2px; + --f-21-3: 2px; + --f-21-4: 2px; + --f-21-5: 2px; + --f-21-6: 1px; + --f-21-7: 0px; + --f-21-8: 0px; + --f-21-9: -1px; + --f-21-10: -1.5px; + --f-21-11: -1.5px; + --f-21-12: -2px; + --f-21-13: -2px; + --f-21-14: -3px; + --f-21-15: -4px; + --f-21-16: -4px; + --f-21-17: -4px; + --f-si-1: 11px; + --f-si-2: 12px; + --f-si-3: 13px; + --f-si-4: 14px; + --f-si-5: 13px; + --f-si-6: 15px; + --f-si-7: 20px; + --f-si-8: 23px; + --f-si-9: 32px; + --f-si-10: 44px; + --f-si-11: 55px; + --f-si-12: 62px; + --f-si-13: 72px; + --f-si-14: 92px; + --f-si-15: 114px; + --f-si-16: 134px; + --f-si-17: 14px; + --f-tr-1: uppercase; + --f-tr-2: uppercase; + --f-tr-3: uppercase; + --f-tr-4: uppercase; + --f-tr-5: uppercase; + --f-tr-6: uppercase; + --f-tr-7: none; + --f-tr-8: none; + --f-tr-9: none; + --f-tr-10: none; + --f-tr-11: none; + --f-tr-12: none; + --f-tr-13: none; + --f-tr-14: none; + --f-tr-15: none; + --f-tr-16: none; + --f-tr-17: none; +} +:root .font_body, +:root .t_lang-body-default .font_body { + --f-fa: Inter, -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", + Roboto, Helvetica, Arial, sans-serif; + --f-li-1: 16px; + --f-li-2: 21px; + --f-li-3: 22px; + --f-li-4: 23px; + --f-li-5: 26px; + --f-li-6: 28px; + --f-li-7: 30px; + --f-li-8: 33px; + --f-li-9: 41px; + --f-li-10: 59px; + --f-li-11: 69px; + --f-li-12: 76px; + --f-li-13: 87px; + --f-li-14: 109px; + --f-li-15: 133px; + --f-li-16: 155px; + --f-li-17: 23px; + --f-we-1: 400; + --f-we-2: 400; + --f-we-3: 400; + --f-we-4: 400; + --f-we-5: 400; + --f-we-6: 400; + --f-we-7: 600; + --f-we-8: 600; + --f-we-9: 600; + --f-we-10: 600; + --f-we-11: 600; + --f-we-12: 600; + --f-we-13: 600; + --f-we-14: 600; + --f-we-15: 600; + --f-we-16: 600; + --f-we-17: 600; + --f-21-1: 0px; + --f-21-2: 0px; + --f-21-3: 0px; + --f-21-4: 0px; + --f-21-5: 0px; + --f-21-6: 0px; + --f-21-7: 0px; + --f-21-8: 0px; + --f-21-9: 0px; + --f-21-10: 0px; + --f-21-11: 0px; + --f-21-12: 0px; + --f-21-13: 0px; + --f-21-14: 0px; + --f-21-15: 0px; + --f-21-16: 0px; + --f-21-17: 0px; + --f-si-1: 11px; + --f-si-2: 12px; + --f-si-3: 13px; + --f-si-4: 14px; + --f-si-5: 16px; + --f-si-6: 18px; + --f-si-7: 20px; + --f-si-8: 23px; + --f-si-9: 30px; + --f-si-10: 46px; + --f-si-11: 55px; + --f-si-12: 62px; + --f-si-13: 72px; + --f-si-14: 92px; + --f-si-15: 114px; + --f-si-16: 134px; + --f-si-17: 14px; +} +:root .font_mono, +:root .t_lang-mono-default .font_mono { + --f-fa: "ui-monospace", "SFMono-Regular", "SF Mono", Menlo, Consolas, + "Liberation Mono", monospace; + --f-si-1: 11px; + --f-si-2: 12px; + --f-si-3: 13px; + --f-si-4: 14px; + --f-si-5: 16px; + --f-si-6: 18px; + --f-si-7: 20px; + --f-si-8: 22px; + --f-si-9: 30px; + --f-si-10: 42px; + --f-si-11: 52px; + --f-si-12: 62px; + --f-si-13: 72px; + --f-si-14: 92px; + --f-si-15: 114px; + --f-si-16: 124px; + --f-li-1: 16.5px; + --f-li-2: 18px; + --f-li-3: 19.5px; + --f-li-4: 21px; + --f-li-5: 24px; + --f-li-6: 27px; + --f-li-7: 30px; + --f-li-8: 33px; + --f-li-9: 45px; + --f-li-10: 63px; + --f-li-11: 78px; + --f-li-12: 93px; + --f-li-13: 108px; + --f-li-14: 138px; + --f-li-15: 171px; + --f-li-16: 186px; + --f-we-1: 500; + --f-we-2: 500; + --f-we-3: 500; + --f-we-4: 500; + --f-we-5: 500; + --f-we-6: 500; + --f-we-7: 500; + --f-we-8: 500; + --f-we-9: 500; + --f-we-10: 500; + --f-we-11: 500; + --f-we-12: 500; + --f-we-13: 500; + --f-we-14: 500; + --f-we-15: 500; + --f-we-16: 500; + --f-21-1: 0px; + --f-21-2: 0px; + --f-21-3: 0px; + --f-21-4: 0px; + --f-21-5: 0px; + --f-21-6: 0px; + --f-21-7: 0px; + --f-21-8: 0px; + --f-21-9: 0px; + --f-21-10: 0px; + --f-21-11: 0px; + --f-21-12: 0px; + --f-21-13: 0px; + --f-21-14: 0px; + --f-21-15: 0px; + --f-21-16: 0px; +} +:root .font_silkscreen, +:root .t_lang-silkscreen-default .font_silkscreen { + --f-fa: Silkscreen, Fira Code, Monaco, Consolas, Ubuntu Mono, monospace; + --f-si-1: 11px; + --f-si-2: 12px; + --f-si-3: 13px; + --f-si-4: 14px; + --f-si-5: 15px; + --f-si-6: 16px; + --f-si-7: 18px; + --f-si-8: 21px; + --f-si-9: 28px; + --f-si-10: 42px; + --f-si-11: 52px; + --f-si-12: 62px; + --f-si-13: 72px; + --f-si-14: 92px; + --f-si-15: 114px; + --f-si-16: 124px; + --f-li-1: 19px; + --f-li-2: 20px; + --f-li-3: 22px; + --f-li-4: 23px; + --f-li-5: 24px; + --f-li-6: 25px; + --f-li-7: 28px; + --f-li-8: 31px; + --f-li-9: 40px; + --f-li-10: 56px; + --f-li-11: 68px; + --f-li-12: 80px; + --f-li-13: 92px; + --f-li-14: 116px; + --f-li-15: 143px; + --f-li-16: 155px; + --f-we-1: 300; + --f-we-2: 300; + --f-we-3: 300; + --f-we-4: 300; + --f-we-5: 300; + --f-we-6: 300; + --f-we-7: 300; + --f-we-8: 300; + --f-we-9: 300; + --f-we-10: 300; + --f-we-11: 300; + --f-we-12: 300; + --f-we-13: 300; + --f-we-14: 300; + --f-we-15: 300; + --f-we-16: 300; + --f-21-1: 1px; + --f-21-2: 1px; + --f-21-3: 1px; + --f-21-4: 1px; + --f-21-5: 3px; + --f-21-6: 3px; + --f-21-7: 3px; + --f-21-8: 3px; + --f-21-9: -2px; + --f-21-10: -3px; + --f-21-11: -3px; + --f-21-12: -4px; + --f-21-13: -4px; + --f-21-14: -4px; + --f-21-15: -4px; + --f-21-16: -4px; +} +:root.t_dark .t_light, +:root.t_dark .t_light .t_dark .t_light, +:root.t_light, +:root.t_light .t_dark .t_light { + --accentBackground: var(--color-36); + --accentColor: var(--color-132); + --background0: var(--color-1); + --background025: var(--color-4); + --background05: var(--color-3); + --background075: var(--color-2); + --color1: var(--color-32); + --color2: var(--color-10); + --color3: var(--color-11); + --color4: var(--color-12); + --color5: var(--color-13); + --color6: var(--color-14); + --color7: var(--color-15); + --color8: var(--color-16); + --color9: var(--color-53); + --color10: var(--color-18); + --color11: var(--color-19); + --color12: var(--color-56); + --color0: var(--color-5); + --color025: var(--color-8); + --color05: var(--color-7); + --color075: var(--color-6); + --background: var(--color-32); + --backgroundHover: var(--color-2); + --backgroundPress: var(--color-10); + --backgroundFocus: var(--color-10); + --borderColor: var(--color-12); + --borderColorHover: var(--color-11); + --borderColorPress: var(--color-13); + --borderColorFocus: var(--color-12); + --color: var(--color-56); + --colorHover: var(--color-19); + --colorPress: var(--color-56); + --colorFocus: var(--color-19); + --colorTransparent: var(--color-5); + --placeholderColor: var(--color-53); + --outlineColor: var(--color-8); + --blue1: var(--color-33); + --blue2: var(--color-34); + --blue3: var(--color-35); + --blue4: var(--color-36); + --blue5: var(--color-37); + --blue6: var(--color-38); + --blue7: var(--color-39); + --blue8: var(--color-40); + --blue9: var(--color-137); + --blue10: var(--color-42); + --blue11: var(--color-43); + --blue12: var(--color-44); + --gray1: var(--color-45); + --gray2: var(--color-46); + --gray3: var(--color-47); + --gray4: var(--color-152); + --gray5: var(--color-49); + --gray6: var(--color-50); + --gray7: var(--color-51); + --gray8: var(--color-52); + --gray9: var(--color-53); + --gray10: var(--color-54); + --gray11: var(--color-55); + --gray12: var(--color-56); + --green1: var(--color-57); + --green2: var(--color-58); + --green3: var(--color-59); + --green4: var(--color-60); + --green5: var(--color-61); + --green6: var(--color-62); + --green7: var(--color-63); + --green8: var(--color-64); + --green9: var(--color-161); + --green10: var(--color-66); + --green11: var(--color-67); + --green12: var(--color-68); + --orange1: var(--color-69); + --orange2: var(--color-70); + --orange3: var(--color-71); + --orange4: var(--color-72); + --orange5: var(--color-73); + --orange6: var(--color-74); + --orange7: var(--color-75); + --orange8: var(--color-76); + --orange9: var(--color-173); + --orange10: var(--color-78); + --orange11: var(--color-79); + --orange12: var(--color-80); + --pink1: var(--color-81); + --pink2: var(--color-82); + --pink3: var(--color-83); + --pink4: var(--color-84); + --pink5: var(--color-85); + --pink6: var(--color-86); + --pink7: var(--color-87); + --pink8: var(--color-88); + --pink9: var(--color-185); + --pink10: var(--color-90); + --pink11: var(--color-91); + --pink12: var(--color-92); + --purple1: var(--color-93); + --purple2: var(--color-94); + --purple3: var(--color-95); + --purple4: var(--color-96); + --purple5: var(--color-97); + --purple6: var(--color-98); + --purple7: var(--color-99); + --purple8: var(--color-100); + --purple9: var(--color-197); + --purple10: var(--color-102); + --purple11: var(--color-103); + --purple12: var(--color-104); + --red1: var(--color-105); + --red2: var(--color-106); + --red3: var(--color-107); + --red4: var(--color-108); + --red5: var(--color-109); + --red6: var(--color-110); + --red7: var(--color-111); + --red8: var(--color-112); + --red9: var(--color-209); + --red10: var(--color-114); + --red11: var(--color-115); + --red12: var(--color-116); + --yellow1: var(--color-117); + --yellow2: var(--color-118); + --yellow3: var(--color-119); + --yellow4: var(--color-120); + --yellow5: var(--color-121); + --yellow6: var(--color-122); + --yellow7: var(--color-123); + --yellow8: var(--color-124); + --yellow9: var(--color-221); + --yellow10: var(--color-126); + --yellow11: var(--color-127); + --yellow12: var(--color-128); + --shadowColor: rgba(0, 0, 0, 0.085); + --shadowColorHover: rgba(0, 0, 0, 0.085); + --shadowColorPress: rgba(0, 0, 0, 0.04); + --shadowColorFocus: rgba(0, 0, 0, 0.04); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + :root, + .t_dark .t_light { + --accentBackground: var(--color-36); + --accentColor: var(--color-132); + --background0: var(--color-1); + --background025: var(--color-4); + --background05: var(--color-3); + --background075: var(--color-2); + --color1: var(--color-32); + --color2: var(--color-10); + --color3: var(--color-11); + --color4: var(--color-12); + --color5: var(--color-13); + --color6: var(--color-14); + --color7: var(--color-15); + --color8: var(--color-16); + --color9: var(--color-53); + --color10: var(--color-18); + --color11: var(--color-19); + --color12: var(--color-56); + --color0: var(--color-5); + --color025: var(--color-8); + --color05: var(--color-7); + --color075: var(--color-6); + --background: var(--color-32); + --backgroundHover: var(--color-2); + --backgroundPress: var(--color-10); + --backgroundFocus: var(--color-10); + --borderColor: var(--color-12); + --borderColorHover: var(--color-11); + --borderColorPress: var(--color-13); + --borderColorFocus: var(--color-12); + --color: var(--color-56); + --colorHover: var(--color-19); + --colorPress: var(--color-56); + --colorFocus: var(--color-19); + --colorTransparent: var(--color-5); + --placeholderColor: var(--color-53); + --outlineColor: var(--color-8); + --blue1: var(--color-33); + --blue2: var(--color-34); + --blue3: var(--color-35); + --blue4: var(--color-36); + --blue5: var(--color-37); + --blue6: var(--color-38); + --blue7: var(--color-39); + --blue8: var(--color-40); + --blue9: var(--color-137); + --blue10: var(--color-42); + --blue11: var(--color-43); + --blue12: var(--color-44); + --gray1: var(--color-45); + --gray2: var(--color-46); + --gray3: var(--color-47); + --gray4: var(--color-152); + --gray5: var(--color-49); + --gray6: var(--color-50); + --gray7: var(--color-51); + --gray8: var(--color-52); + --gray9: var(--color-53); + --gray10: var(--color-54); + --gray11: var(--color-55); + --gray12: var(--color-56); + --green1: var(--color-57); + --green2: var(--color-58); + --green3: var(--color-59); + --green4: var(--color-60); + --green5: var(--color-61); + --green6: var(--color-62); + --green7: var(--color-63); + --green8: var(--color-64); + --green9: var(--color-161); + --green10: var(--color-66); + --green11: var(--color-67); + --green12: var(--color-68); + --orange1: var(--color-69); + --orange2: var(--color-70); + --orange3: var(--color-71); + --orange4: var(--color-72); + --orange5: var(--color-73); + --orange6: var(--color-74); + --orange7: var(--color-75); + --orange8: var(--color-76); + --orange9: var(--color-173); + --orange10: var(--color-78); + --orange11: var(--color-79); + --orange12: var(--color-80); + --pink1: var(--color-81); + --pink2: var(--color-82); + --pink3: var(--color-83); + --pink4: var(--color-84); + --pink5: var(--color-85); + --pink6: var(--color-86); + --pink7: var(--color-87); + --pink8: var(--color-88); + --pink9: var(--color-185); + --pink10: var(--color-90); + --pink11: var(--color-91); + --pink12: var(--color-92); + --purple1: var(--color-93); + --purple2: var(--color-94); + --purple3: var(--color-95); + --purple4: var(--color-96); + --purple5: var(--color-97); + --purple6: var(--color-98); + --purple7: var(--color-99); + --purple8: var(--color-100); + --purple9: var(--color-197); + --purple10: var(--color-102); + --purple11: var(--color-103); + --purple12: var(--color-104); + --red1: var(--color-105); + --red2: var(--color-106); + --red3: var(--color-107); + --red4: var(--color-108); + --red5: var(--color-109); + --red6: var(--color-110); + --red7: var(--color-111); + --red8: var(--color-112); + --red9: var(--color-209); + --red10: var(--color-114); + --red11: var(--color-115); + --red12: var(--color-116); + --yellow1: var(--color-117); + --yellow2: var(--color-118); + --yellow3: var(--color-119); + --yellow4: var(--color-120); + --yellow5: var(--color-121); + --yellow6: var(--color-122); + --yellow7: var(--color-123); + --yellow8: var(--color-124); + --yellow9: var(--color-221); + --yellow10: var(--color-126); + --yellow11: var(--color-127); + --yellow12: var(--color-128); + --shadowColor: rgba(0, 0, 0, 0.085); + --shadowColorHover: rgba(0, 0, 0, 0.085); + --shadowColorPress: rgba(0, 0, 0, 0.04); + --shadowColorFocus: rgba(0, 0, 0, 0.04); + } +} +.t_light ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark, +:root.t_dark .t_light .t_dark, +:root.t_light .t_dark, +:root.t_light .t_dark .t_light .t_dark { + --accentBackground: var(--color-132); + --accentColor: var(--color-36); + --background0: var(--color-5); + --background025: var(--color-8); + --background05: var(--color-7); + --background075: var(--color-6); + --color1: var(--color-21); + --color2: var(--color-22); + --color3: var(--color-23); + --color4: var(--color-24); + --color5: var(--color-25); + --color6: var(--color-26); + --color7: var(--color-27); + --color8: var(--color-28); + --color9: var(--color-29); + --color10: var(--color-30); + --color11: var(--color-31); + --color12: var(--color-32); + --color0: var(--color-1); + --color025: var(--color-4); + --color05: var(--color-3); + --color075: var(--color-2); + --background: var(--color-21); + --backgroundHover: var(--color-22); + --backgroundPress: var(--color-6); + --backgroundFocus: var(--color-6); + --borderColor: var(--color-24); + --borderColorHover: var(--color-25); + --borderColorPress: var(--color-23); + --borderColorFocus: var(--color-24); + --color: var(--color-32); + --colorHover: var(--color-31); + --colorPress: var(--color-32); + --colorFocus: var(--color-31); + --colorTransparent: var(--color-1); + --placeholderColor: var(--color-29); + --outlineColor: var(--color-4); + --blue1: var(--color-129); + --blue2: var(--color-130); + --blue3: var(--color-131); + --blue4: var(--color-132); + --blue5: var(--color-133); + --blue6: var(--color-134); + --blue7: var(--color-135); + --blue8: var(--color-136); + --blue9: var(--color-137); + --blue10: var(--color-138); + --blue11: var(--color-139); + --blue12: var(--color-140); + --gray1: var(--color-141); + --gray2: var(--color-142); + --gray3: var(--color-143); + --gray4: var(--color-144); + --gray5: var(--color-145); + --gray6: var(--color-146); + --gray7: var(--color-147); + --gray8: var(--color-148); + --gray9: var(--color-149); + --gray10: var(--color-150); + --gray11: var(--color-151); + --gray12: var(--color-152); + --green1: var(--color-153); + --green2: var(--color-154); + --green3: var(--color-155); + --green4: var(--color-156); + --green5: var(--color-157); + --green6: var(--color-158); + --green7: var(--color-159); + --green8: var(--color-160); + --green9: var(--color-161); + --green10: var(--color-162); + --green11: var(--color-163); + --green12: var(--color-164); + --orange1: var(--color-165); + --orange2: var(--color-166); + --orange3: var(--color-167); + --orange4: var(--color-168); + --orange5: var(--color-169); + --orange6: var(--color-170); + --orange7: var(--color-171); + --orange8: var(--color-172); + --orange9: var(--color-173); + --orange10: var(--color-174); + --orange11: var(--color-175); + --orange12: var(--color-176); + --pink1: var(--color-177); + --pink2: var(--color-178); + --pink3: var(--color-179); + --pink4: var(--color-180); + --pink5: var(--color-181); + --pink6: var(--color-182); + --pink7: var(--color-183); + --pink8: var(--color-184); + --pink9: var(--color-185); + --pink10: var(--color-186); + --pink11: var(--color-187); + --pink12: var(--color-188); + --purple1: var(--color-189); + --purple2: var(--color-190); + --purple3: var(--color-191); + --purple4: var(--color-192); + --purple5: var(--color-193); + --purple6: var(--color-194); + --purple7: var(--color-195); + --purple8: var(--color-196); + --purple9: var(--color-197); + --purple10: var(--color-198); + --purple11: var(--color-199); + --purple12: var(--color-200); + --red1: var(--color-201); + --red2: var(--color-202); + --red3: var(--color-203); + --red4: var(--color-204); + --red5: var(--color-205); + --red6: var(--color-206); + --red7: var(--color-207); + --red8: var(--color-208); + --red9: var(--color-209); + --red10: var(--color-210); + --red11: var(--color-211); + --red12: var(--color-212); + --yellow1: var(--color-213); + --yellow2: var(--color-214); + --yellow3: var(--color-215); + --yellow4: var(--color-216); + --yellow5: var(--color-217); + --yellow6: var(--color-218); + --yellow7: var(--color-219); + --yellow8: var(--color-220); + --yellow9: var(--color-221); + --yellow10: var(--color-222); + --yellow11: var(--color-223); + --yellow12: var(--color-224); + --shadowColor: rgba(0, 0, 0, 0.3); + --shadowColorHover: rgba(0, 0, 0, 0.3); + --shadowColorPress: rgba(0, 0, 0, 0.2); + --shadowColorFocus: rgba(0, 0, 0, 0.2); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + :root, + .t_light .t_dark { + --accentBackground: var(--color-132); + --accentColor: var(--color-36); + --background0: var(--color-5); + --background025: var(--color-8); + --background05: var(--color-7); + --background075: var(--color-6); + --color1: var(--color-21); + --color2: var(--color-22); + --color3: var(--color-23); + --color4: var(--color-24); + --color5: var(--color-25); + --color6: var(--color-26); + --color7: var(--color-27); + --color8: var(--color-28); + --color9: var(--color-29); + --color10: var(--color-30); + --color11: var(--color-31); + --color12: var(--color-32); + --color0: var(--color-1); + --color025: var(--color-4); + --color05: var(--color-3); + --color075: var(--color-2); + --background: var(--color-21); + --backgroundHover: var(--color-22); + --backgroundPress: var(--color-6); + --backgroundFocus: var(--color-6); + --borderColor: var(--color-24); + --borderColorHover: var(--color-25); + --borderColorPress: var(--color-23); + --borderColorFocus: var(--color-24); + --color: var(--color-32); + --colorHover: var(--color-31); + --colorPress: var(--color-32); + --colorFocus: var(--color-31); + --colorTransparent: var(--color-1); + --placeholderColor: var(--color-29); + --outlineColor: var(--color-4); + --blue1: var(--color-129); + --blue2: var(--color-130); + --blue3: var(--color-131); + --blue4: var(--color-132); + --blue5: var(--color-133); + --blue6: var(--color-134); + --blue7: var(--color-135); + --blue8: var(--color-136); + --blue9: var(--color-137); + --blue10: var(--color-138); + --blue11: var(--color-139); + --blue12: var(--color-140); + --gray1: var(--color-141); + --gray2: var(--color-142); + --gray3: var(--color-143); + --gray4: var(--color-144); + --gray5: var(--color-145); + --gray6: var(--color-146); + --gray7: var(--color-147); + --gray8: var(--color-148); + --gray9: var(--color-149); + --gray10: var(--color-150); + --gray11: var(--color-151); + --gray12: var(--color-152); + --green1: var(--color-153); + --green2: var(--color-154); + --green3: var(--color-155); + --green4: var(--color-156); + --green5: var(--color-157); + --green6: var(--color-158); + --green7: var(--color-159); + --green8: var(--color-160); + --green9: var(--color-161); + --green10: var(--color-162); + --green11: var(--color-163); + --green12: var(--color-164); + --orange1: var(--color-165); + --orange2: var(--color-166); + --orange3: var(--color-167); + --orange4: var(--color-168); + --orange5: var(--color-169); + --orange6: var(--color-170); + --orange7: var(--color-171); + --orange8: var(--color-172); + --orange9: var(--color-173); + --orange10: var(--color-174); + --orange11: var(--color-175); + --orange12: var(--color-176); + --pink1: var(--color-177); + --pink2: var(--color-178); + --pink3: var(--color-179); + --pink4: var(--color-180); + --pink5: var(--color-181); + --pink6: var(--color-182); + --pink7: var(--color-183); + --pink8: var(--color-184); + --pink9: var(--color-185); + --pink10: var(--color-186); + --pink11: var(--color-187); + --pink12: var(--color-188); + --purple1: var(--color-189); + --purple2: var(--color-190); + --purple3: var(--color-191); + --purple4: var(--color-192); + --purple5: var(--color-193); + --purple6: var(--color-194); + --purple7: var(--color-195); + --purple8: var(--color-196); + --purple9: var(--color-197); + --purple10: var(--color-198); + --purple11: var(--color-199); + --purple12: var(--color-200); + --red1: var(--color-201); + --red2: var(--color-202); + --red3: var(--color-203); + --red4: var(--color-204); + --red5: var(--color-205); + --red6: var(--color-206); + --red7: var(--color-207); + --red8: var(--color-208); + --red9: var(--color-209); + --red10: var(--color-210); + --red11: var(--color-211); + --red12: var(--color-212); + --yellow1: var(--color-213); + --yellow2: var(--color-214); + --yellow3: var(--color-215); + --yellow4: var(--color-216); + --yellow5: var(--color-217); + --yellow6: var(--color-218); + --yellow7: var(--color-219); + --yellow8: var(--color-220); + --yellow9: var(--color-221); + --yellow10: var(--color-222); + --yellow11: var(--color-223); + --yellow12: var(--color-224); + --shadowColor: rgba(0, 0, 0, 0.3); + --shadowColorHover: rgba(0, 0, 0, 0.3); + --shadowColorPress: rgba(0, 0, 0, 0.2); + --shadowColorFocus: rgba(0, 0, 0, 0.2); + } +} +.t_dark ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_dark .t_light .t_orange, +:root.t_dark .t_light .t_orange, +:root.t_light .t_dark .t_light .t_orange, +:root.t_light .t_orange { + --accentBackground: var(--color-81); + --accentColor: var(--color-92); + --background0: hsla(24, 70%, 99%, 0); + --background025: hsla(24, 70%, 99%, 0.25); + --background05: hsla(24, 70%, 99%, 0.5); + --background075: hsla(24, 70%, 99%, 0.75); + --color1: var(--color-69); + --color2: var(--color-70); + --color3: var(--color-71); + --color4: var(--color-72); + --color5: var(--color-73); + --color6: var(--color-74); + --color7: var(--color-75); + --color8: var(--color-76); + --color9: var(--color-173); + --color10: var(--color-78); + --color11: var(--color-79); + --color12: var(--color-80); + --color0: hsla(24, 94%, 50%, 0); + --color025: hsla(24, 94%, 50%, 0.25); + --color05: hsla(24, 94%, 50%, 0.5); + --color075: hsla(24, 94%, 50%, 0.75); + --background: var(--color-69); + --backgroundHover: hsla(24, 70%, 99%, 0.75); + --backgroundPress: var(--color-70); + --backgroundFocus: var(--color-70); + --borderColor: var(--color-72); + --borderColorHover: var(--color-71); + --borderColorPress: var(--color-73); + --borderColorFocus: var(--color-72); + --color: var(--color-80); + --colorHover: var(--color-79); + --colorPress: var(--color-80); + --colorFocus: var(--color-79); + --colorTransparent: hsla(24, 94%, 50%, 0); + --placeholderColor: var(--color-173); + --outlineColor: hsla(24, 94%, 50%, 0.25); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_orange, + .t_orange { + --accentBackground: var(--color-81); + --accentColor: var(--color-92); + --background0: hsla(24, 70%, 99%, 0); + --background025: hsla(24, 70%, 99%, 0.25); + --background05: hsla(24, 70%, 99%, 0.5); + --background075: hsla(24, 70%, 99%, 0.75); + --color1: var(--color-69); + --color2: var(--color-70); + --color3: var(--color-71); + --color4: var(--color-72); + --color5: var(--color-73); + --color6: var(--color-74); + --color7: var(--color-75); + --color8: var(--color-76); + --color9: var(--color-173); + --color10: var(--color-78); + --color11: var(--color-79); + --color12: var(--color-80); + --color0: hsla(24, 94%, 50%, 0); + --color025: hsla(24, 94%, 50%, 0.25); + --color05: hsla(24, 94%, 50%, 0.5); + --color075: hsla(24, 94%, 50%, 0.75); + --background: var(--color-69); + --backgroundHover: hsla(24, 70%, 99%, 0.75); + --backgroundPress: var(--color-70); + --backgroundFocus: var(--color-70); + --borderColor: var(--color-72); + --borderColorHover: var(--color-71); + --borderColorPress: var(--color-73); + --borderColorFocus: var(--color-72); + --color: var(--color-80); + --colorHover: var(--color-79); + --colorPress: var(--color-80); + --colorFocus: var(--color-79); + --colorTransparent: hsla(24, 94%, 50%, 0); + --placeholderColor: var(--color-173); + --outlineColor: hsla(24, 94%, 50%, 0.25); + } +} +.t_light_orange ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_dark .t_light .t_yellow, +:root.t_dark .t_light .t_yellow, +:root.t_light .t_dark .t_light .t_yellow, +:root.t_light .t_yellow { + --accentBackground: var(--color-33); + --accentColor: var(--color-44); + --background0: hsla(60, 54%, 98.5%, 0); + --background025: hsla(60, 54%, 98.5%, 0.25); + --background05: hsla(60, 54%, 98.5%, 0.5); + --background075: hsla(60, 54%, 98.5%, 0.75); + --color1: var(--color-117); + --color2: var(--color-118); + --color3: var(--color-119); + --color4: var(--color-120); + --color5: var(--color-121); + --color6: var(--color-122); + --color7: var(--color-123); + --color8: var(--color-124); + --color9: var(--color-221); + --color10: var(--color-126); + --color11: var(--color-127); + --color12: var(--color-128); + --color0: hsla(53, 92%, 50%, 0); + --color025: hsla(53, 92%, 50%, 0.25); + --color05: hsla(53, 92%, 50%, 0.5); + --color075: hsla(53, 92%, 50%, 0.75); + --background: var(--color-117); + --backgroundHover: hsla(60, 54%, 98.5%, 0.75); + --backgroundPress: var(--color-118); + --backgroundFocus: var(--color-118); + --borderColor: var(--color-120); + --borderColorHover: var(--color-119); + --borderColorPress: var(--color-121); + --borderColorFocus: var(--color-120); + --color: var(--color-128); + --colorHover: var(--color-127); + --colorPress: var(--color-128); + --colorFocus: var(--color-127); + --colorTransparent: hsla(53, 92%, 50%, 0); + --placeholderColor: var(--color-221); + --outlineColor: hsla(53, 92%, 50%, 0.25); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_yellow, + .t_yellow { + --accentBackground: var(--color-33); + --accentColor: var(--color-44); + --background0: hsla(60, 54%, 98.5%, 0); + --background025: hsla(60, 54%, 98.5%, 0.25); + --background05: hsla(60, 54%, 98.5%, 0.5); + --background075: hsla(60, 54%, 98.5%, 0.75); + --color1: var(--color-117); + --color2: var(--color-118); + --color3: var(--color-119); + --color4: var(--color-120); + --color5: var(--color-121); + --color6: var(--color-122); + --color7: var(--color-123); + --color8: var(--color-124); + --color9: var(--color-221); + --color10: var(--color-126); + --color11: var(--color-127); + --color12: var(--color-128); + --color0: hsla(53, 92%, 50%, 0); + --color025: hsla(53, 92%, 50%, 0.25); + --color05: hsla(53, 92%, 50%, 0.5); + --color075: hsla(53, 92%, 50%, 0.75); + --background: var(--color-117); + --backgroundHover: hsla(60, 54%, 98.5%, 0.75); + --backgroundPress: var(--color-118); + --backgroundFocus: var(--color-118); + --borderColor: var(--color-120); + --borderColorHover: var(--color-119); + --borderColorPress: var(--color-121); + --borderColorFocus: var(--color-120); + --color: var(--color-128); + --colorHover: var(--color-127); + --colorPress: var(--color-128); + --colorFocus: var(--color-127); + --colorTransparent: hsla(53, 92%, 50%, 0); + --placeholderColor: var(--color-221); + --outlineColor: hsla(53, 92%, 50%, 0.25); + } +} +.t_light_yellow ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_dark .t_light .t_green, +:root.t_dark .t_light .t_green, +:root.t_light .t_dark .t_light .t_green, +:root.t_light .t_green { + --accentBackground: var(--color-69); + --accentColor: var(--color-80); + --background0: hsla(136, 50%, 98.9%, 0); + --background025: hsla(136, 50%, 98.9%, 0.25); + --background05: hsla(136, 50%, 98.9%, 0.5); + --background075: hsla(136, 50%, 98.9%, 0.75); + --color1: var(--color-57); + --color2: var(--color-58); + --color3: var(--color-59); + --color4: var(--color-60); + --color5: var(--color-61); + --color6: var(--color-62); + --color7: var(--color-63); + --color8: var(--color-64); + --color9: var(--color-161); + --color10: var(--color-66); + --color11: var(--color-67); + --color12: var(--color-68); + --color0: hsla(151, 55%, 41.5%, 0); + --color025: hsla(151, 55%, 41.5%, 0.25); + --color05: hsla(151, 55%, 41.5%, 0.5); + --color075: hsla(151, 55%, 41.5%, 0.75); + --background: var(--color-57); + --backgroundHover: hsla(136, 50%, 98.9%, 0.75); + --backgroundPress: var(--color-58); + --backgroundFocus: var(--color-58); + --borderColor: var(--color-60); + --borderColorHover: var(--color-59); + --borderColorPress: var(--color-61); + --borderColorFocus: var(--color-60); + --color: var(--color-68); + --colorHover: var(--color-67); + --colorPress: var(--color-68); + --colorFocus: var(--color-67); + --colorTransparent: hsla(151, 55%, 41.5%, 0); + --placeholderColor: var(--color-161); + --outlineColor: hsla(151, 55%, 41.5%, 0.25); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_green, + .t_green { + --accentBackground: var(--color-69); + --accentColor: var(--color-80); + --background0: hsla(136, 50%, 98.9%, 0); + --background025: hsla(136, 50%, 98.9%, 0.25); + --background05: hsla(136, 50%, 98.9%, 0.5); + --background075: hsla(136, 50%, 98.9%, 0.75); + --color1: var(--color-57); + --color2: var(--color-58); + --color3: var(--color-59); + --color4: var(--color-60); + --color5: var(--color-61); + --color6: var(--color-62); + --color7: var(--color-63); + --color8: var(--color-64); + --color9: var(--color-161); + --color10: var(--color-66); + --color11: var(--color-67); + --color12: var(--color-68); + --color0: hsla(151, 55%, 41.5%, 0); + --color025: hsla(151, 55%, 41.5%, 0.25); + --color05: hsla(151, 55%, 41.5%, 0.5); + --color075: hsla(151, 55%, 41.5%, 0.75); + --background: var(--color-57); + --backgroundHover: hsla(136, 50%, 98.9%, 0.75); + --backgroundPress: var(--color-58); + --backgroundFocus: var(--color-58); + --borderColor: var(--color-60); + --borderColorHover: var(--color-59); + --borderColorPress: var(--color-61); + --borderColorFocus: var(--color-60); + --color: var(--color-68); + --colorHover: var(--color-67); + --colorPress: var(--color-68); + --colorFocus: var(--color-67); + --colorTransparent: hsla(151, 55%, 41.5%, 0); + --placeholderColor: var(--color-161); + --outlineColor: hsla(151, 55%, 41.5%, 0.25); + } +} +.t_light_green ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_blue, +:root.t_dark .t_light .t_dark .t_light .t_blue, +:root.t_light .t_blue, +:root.t_light .t_dark .t_light .t_blue { + --accentBackground: var(--color-45); + --accentColor: var(--color-56); + --background0: hsla(206, 100%, 99.2%, 0); + --background025: hsla(206, 100%, 99.2%, 0.25); + --background05: hsla(206, 100%, 99.2%, 0.5); + --background075: hsla(206, 100%, 99.2%, 0.75); + --color1: var(--color-33); + --color2: var(--color-34); + --color3: var(--color-35); + --color4: var(--color-36); + --color5: var(--color-37); + --color6: var(--color-38); + --color7: var(--color-39); + --color8: var(--color-40); + --color9: var(--color-137); + --color10: var(--color-42); + --color11: var(--color-43); + --color12: var(--color-44); + --color0: hsla(206, 100%, 50%, 0); + --color025: hsla(206, 100%, 50%, 0.25); + --color05: hsla(206, 100%, 50%, 0.5); + --color075: hsla(206, 100%, 50%, 0.75); + --background: var(--color-33); + --backgroundHover: hsla(206, 100%, 99.2%, 0.75); + --backgroundPress: var(--color-34); + --backgroundFocus: var(--color-34); + --borderColor: var(--color-36); + --borderColorHover: var(--color-35); + --borderColorPress: var(--color-37); + --borderColorFocus: var(--color-36); + --color: var(--color-44); + --colorHover: var(--color-43); + --colorPress: var(--color-44); + --colorFocus: var(--color-43); + --colorTransparent: hsla(206, 100%, 50%, 0); + --placeholderColor: var(--color-137); + --outlineColor: hsla(206, 100%, 50%, 0.25); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_blue, + .t_dark .t_light .t_blue { + --accentBackground: var(--color-45); + --accentColor: var(--color-56); + --background0: hsla(206, 100%, 99.2%, 0); + --background025: hsla(206, 100%, 99.2%, 0.25); + --background05: hsla(206, 100%, 99.2%, 0.5); + --background075: hsla(206, 100%, 99.2%, 0.75); + --color1: var(--color-33); + --color2: var(--color-34); + --color3: var(--color-35); + --color4: var(--color-36); + --color5: var(--color-37); + --color6: var(--color-38); + --color7: var(--color-39); + --color8: var(--color-40); + --color9: var(--color-137); + --color10: var(--color-42); + --color11: var(--color-43); + --color12: var(--color-44); + --color0: hsla(206, 100%, 50%, 0); + --color025: hsla(206, 100%, 50%, 0.25); + --color05: hsla(206, 100%, 50%, 0.5); + --color075: hsla(206, 100%, 50%, 0.75); + --background: var(--color-33); + --backgroundHover: hsla(206, 100%, 99.2%, 0.75); + --backgroundPress: var(--color-34); + --backgroundFocus: var(--color-34); + --borderColor: var(--color-36); + --borderColorHover: var(--color-35); + --borderColorPress: var(--color-37); + --borderColorFocus: var(--color-36); + --color: var(--color-44); + --colorHover: var(--color-43); + --colorPress: var(--color-44); + --colorFocus: var(--color-43); + --colorTransparent: hsla(206, 100%, 50%, 0); + --placeholderColor: var(--color-137); + --outlineColor: hsla(206, 100%, 50%, 0.25); + } +} +.t_light_blue ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_dark .t_light .t_purple, +:root.t_dark .t_light .t_purple, +:root.t_light .t_dark .t_light .t_purple, +:root.t_light .t_purple { + --accentBackground: var(--color-105); + --accentColor: var(--color-116); + --background0: hsla(280, 65%, 99.4%, 0); + --background025: hsla(280, 65%, 99.4%, 0.25); + --background05: hsla(280, 65%, 99.4%, 0.5); + --background075: hsla(280, 65%, 99.4%, 0.75); + --color1: var(--color-93); + --color2: var(--color-94); + --color3: var(--color-95); + --color4: var(--color-96); + --color5: var(--color-97); + --color6: var(--color-98); + --color7: var(--color-99); + --color8: var(--color-100); + --color9: var(--color-197); + --color10: var(--color-102); + --color11: var(--color-103); + --color12: var(--color-104); + --color0: hsla(272, 51%, 54%, 0); + --color025: hsla(272, 51%, 54%, 0.25); + --color05: hsla(272, 51%, 54%, 0.5); + --color075: hsla(272, 51%, 54%, 0.75); + --background: var(--color-93); + --backgroundHover: hsla(280, 65%, 99.4%, 0.75); + --backgroundPress: var(--color-94); + --backgroundFocus: var(--color-94); + --borderColor: var(--color-96); + --borderColorHover: var(--color-95); + --borderColorPress: var(--color-97); + --borderColorFocus: var(--color-96); + --color: var(--color-104); + --colorHover: var(--color-103); + --colorPress: var(--color-104); + --colorFocus: var(--color-103); + --colorTransparent: hsla(272, 51%, 54%, 0); + --placeholderColor: var(--color-197); + --outlineColor: hsla(272, 51%, 54%, 0.25); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_purple, + .t_purple { + --accentBackground: var(--color-105); + --accentColor: var(--color-116); + --background0: hsla(280, 65%, 99.4%, 0); + --background025: hsla(280, 65%, 99.4%, 0.25); + --background05: hsla(280, 65%, 99.4%, 0.5); + --background075: hsla(280, 65%, 99.4%, 0.75); + --color1: var(--color-93); + --color2: var(--color-94); + --color3: var(--color-95); + --color4: var(--color-96); + --color5: var(--color-97); + --color6: var(--color-98); + --color7: var(--color-99); + --color8: var(--color-100); + --color9: var(--color-197); + --color10: var(--color-102); + --color11: var(--color-103); + --color12: var(--color-104); + --color0: hsla(272, 51%, 54%, 0); + --color025: hsla(272, 51%, 54%, 0.25); + --color05: hsla(272, 51%, 54%, 0.5); + --color075: hsla(272, 51%, 54%, 0.75); + --background: var(--color-93); + --backgroundHover: hsla(280, 65%, 99.4%, 0.75); + --backgroundPress: var(--color-94); + --backgroundFocus: var(--color-94); + --borderColor: var(--color-96); + --borderColorHover: var(--color-95); + --borderColorPress: var(--color-97); + --borderColorFocus: var(--color-96); + --color: var(--color-104); + --colorHover: var(--color-103); + --colorPress: var(--color-104); + --colorFocus: var(--color-103); + --colorTransparent: hsla(272, 51%, 54%, 0); + --placeholderColor: var(--color-197); + --outlineColor: hsla(272, 51%, 54%, 0.25); + } +} +.t_light_purple ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_dark .t_light .t_pink, +:root.t_dark .t_light .t_pink, +:root.t_light .t_dark .t_light .t_pink, +:root.t_light .t_pink { + --accentBackground: var(--color-93); + --accentColor: var(--color-104); + --background0: hsla(322, 100%, 99.4%, 0); + --background025: hsla(322, 100%, 99.4%, 0.25); + --background05: hsla(322, 100%, 99.4%, 0.5); + --background075: hsla(322, 100%, 99.4%, 0.75); + --color1: var(--color-81); + --color2: var(--color-82); + --color3: var(--color-83); + --color4: var(--color-84); + --color5: var(--color-85); + --color6: var(--color-86); + --color7: var(--color-87); + --color8: var(--color-88); + --color9: var(--color-185); + --color10: var(--color-90); + --color11: var(--color-91); + --color12: var(--color-92); + --color0: hsla(322, 65%, 54.5%, 0); + --color025: hsla(322, 65%, 54.5%, 0.25); + --color05: hsla(322, 65%, 54.5%, 0.5); + --color075: hsla(322, 65%, 54.5%, 0.75); + --background: var(--color-81); + --backgroundHover: hsla(322, 100%, 99.4%, 0.75); + --backgroundPress: var(--color-82); + --backgroundFocus: var(--color-82); + --borderColor: var(--color-84); + --borderColorHover: var(--color-83); + --borderColorPress: var(--color-85); + --borderColorFocus: var(--color-84); + --color: var(--color-92); + --colorHover: var(--color-91); + --colorPress: var(--color-92); + --colorFocus: var(--color-91); + --colorTransparent: hsla(322, 65%, 54.5%, 0); + --placeholderColor: var(--color-185); + --outlineColor: hsla(322, 65%, 54.5%, 0.25); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_pink, + .t_pink { + --accentBackground: var(--color-93); + --accentColor: var(--color-104); + --background0: hsla(322, 100%, 99.4%, 0); + --background025: hsla(322, 100%, 99.4%, 0.25); + --background05: hsla(322, 100%, 99.4%, 0.5); + --background075: hsla(322, 100%, 99.4%, 0.75); + --color1: var(--color-81); + --color2: var(--color-82); + --color3: var(--color-83); + --color4: var(--color-84); + --color5: var(--color-85); + --color6: var(--color-86); + --color7: var(--color-87); + --color8: var(--color-88); + --color9: var(--color-185); + --color10: var(--color-90); + --color11: var(--color-91); + --color12: var(--color-92); + --color0: hsla(322, 65%, 54.5%, 0); + --color025: hsla(322, 65%, 54.5%, 0.25); + --color05: hsla(322, 65%, 54.5%, 0.5); + --color075: hsla(322, 65%, 54.5%, 0.75); + --background: var(--color-81); + --backgroundHover: hsla(322, 100%, 99.4%, 0.75); + --backgroundPress: var(--color-82); + --backgroundFocus: var(--color-82); + --borderColor: var(--color-84); + --borderColorHover: var(--color-83); + --borderColorPress: var(--color-85); + --borderColorFocus: var(--color-84); + --color: var(--color-92); + --colorHover: var(--color-91); + --colorPress: var(--color-92); + --colorFocus: var(--color-91); + --colorTransparent: hsla(322, 65%, 54.5%, 0); + --placeholderColor: var(--color-185); + --outlineColor: hsla(322, 65%, 54.5%, 0.25); + } +} +.t_light_pink ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_dark .t_light .t_red, +:root.t_dark .t_light .t_red, +:root.t_light .t_dark .t_light .t_red, +:root.t_light .t_red { + --accentBackground: var(--color-117); + --accentColor: var(--color-128); + --background0: hsla(359, 100%, 99.4%, 0); + --background025: hsla(359, 100%, 99.4%, 0.25); + --background05: hsla(359, 100%, 99.4%, 0.5); + --background075: hsla(359, 100%, 99.4%, 0.75); + --color1: var(--color-105); + --color2: var(--color-106); + --color3: var(--color-107); + --color4: var(--color-108); + --color5: var(--color-109); + --color6: var(--color-110); + --color7: var(--color-111); + --color8: var(--color-112); + --color9: var(--color-209); + --color10: var(--color-114); + --color11: var(--color-115); + --color12: var(--color-116); + --color0: hsla(358, 75%, 59%, 0); + --color025: hsla(358, 75%, 59%, 0.25); + --color05: hsla(358, 75%, 59%, 0.5); + --color075: hsla(358, 75%, 59%, 0.75); + --background: var(--color-105); + --backgroundHover: hsla(359, 100%, 99.4%, 0.75); + --backgroundPress: var(--color-106); + --backgroundFocus: var(--color-106); + --borderColor: var(--color-108); + --borderColorHover: var(--color-107); + --borderColorPress: var(--color-109); + --borderColorFocus: var(--color-108); + --color: var(--color-116); + --colorHover: var(--color-115); + --colorPress: var(--color-116); + --colorFocus: var(--color-115); + --colorTransparent: hsla(358, 75%, 59%, 0); + --placeholderColor: var(--color-209); + --outlineColor: hsla(358, 75%, 59%, 0.25); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_red, + .t_red { + --accentBackground: var(--color-117); + --accentColor: var(--color-128); + --background0: hsla(359, 100%, 99.4%, 0); + --background025: hsla(359, 100%, 99.4%, 0.25); + --background05: hsla(359, 100%, 99.4%, 0.5); + --background075: hsla(359, 100%, 99.4%, 0.75); + --color1: var(--color-105); + --color2: var(--color-106); + --color3: var(--color-107); + --color4: var(--color-108); + --color5: var(--color-109); + --color6: var(--color-110); + --color7: var(--color-111); + --color8: var(--color-112); + --color9: var(--color-209); + --color10: var(--color-114); + --color11: var(--color-115); + --color12: var(--color-116); + --color0: hsla(358, 75%, 59%, 0); + --color025: hsla(358, 75%, 59%, 0.25); + --color05: hsla(358, 75%, 59%, 0.5); + --color075: hsla(358, 75%, 59%, 0.75); + --background: var(--color-105); + --backgroundHover: hsla(359, 100%, 99.4%, 0.75); + --backgroundPress: var(--color-106); + --backgroundFocus: var(--color-106); + --borderColor: var(--color-108); + --borderColorHover: var(--color-107); + --borderColorPress: var(--color-109); + --borderColorFocus: var(--color-108); + --color: var(--color-116); + --colorHover: var(--color-115); + --colorPress: var(--color-116); + --colorFocus: var(--color-115); + --colorTransparent: hsla(358, 75%, 59%, 0); + --placeholderColor: var(--color-209); + --outlineColor: hsla(358, 75%, 59%, 0.25); + } +} +.t_light_red ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_dark .t_light .t_gray, +:root.t_dark .t_light .t_gray, +:root.t_light .t_dark .t_light .t_gray, +:root.t_light .t_gray { + --accentBackground: var(--color-57); + --accentColor: var(--color-68); + --background0: hsla(0, 0%, 99%, 0); + --background025: hsla(0, 0%, 99%, 0.25); + --background05: hsla(0, 0%, 99%, 0.5); + --background075: hsla(0, 0%, 99%, 0.75); + --color1: var(--color-45); + --color2: var(--color-46); + --color3: var(--color-47); + --color4: var(--color-152); + --color5: var(--color-49); + --color6: var(--color-50); + --color7: var(--color-51); + --color8: var(--color-52); + --color9: var(--color-53); + --color10: var(--color-54); + --color11: var(--color-55); + --color12: var(--color-56); + --color0: hsla(0, 0%, 56.1%, 0); + --color025: hsla(0, 0%, 56.1%, 0.25); + --color05: hsla(0, 0%, 56.1%, 0.5); + --color075: hsla(0, 0%, 56.1%, 0.75); + --background: var(--color-45); + --backgroundHover: hsla(0, 0%, 99%, 0.75); + --backgroundPress: var(--color-46); + --backgroundFocus: var(--color-46); + --borderColor: var(--color-152); + --borderColorHover: var(--color-47); + --borderColorPress: var(--color-49); + --borderColorFocus: var(--color-152); + --color: var(--color-56); + --colorHover: var(--color-55); + --colorPress: var(--color-56); + --colorFocus: var(--color-55); + --colorTransparent: hsla(0, 0%, 56.1%, 0); + --placeholderColor: var(--color-53); + --outlineColor: hsla(0, 0%, 56.1%, 0.25); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_gray, + .t_gray { + --accentBackground: var(--color-57); + --accentColor: var(--color-68); + --background0: hsla(0, 0%, 99%, 0); + --background025: hsla(0, 0%, 99%, 0.25); + --background05: hsla(0, 0%, 99%, 0.5); + --background075: hsla(0, 0%, 99%, 0.75); + --color1: var(--color-45); + --color2: var(--color-46); + --color3: var(--color-47); + --color4: var(--color-152); + --color5: var(--color-49); + --color6: var(--color-50); + --color7: var(--color-51); + --color8: var(--color-52); + --color9: var(--color-53); + --color10: var(--color-54); + --color11: var(--color-55); + --color12: var(--color-56); + --color0: hsla(0, 0%, 56.1%, 0); + --color025: hsla(0, 0%, 56.1%, 0.25); + --color05: hsla(0, 0%, 56.1%, 0.5); + --color075: hsla(0, 0%, 56.1%, 0.75); + --background: var(--color-45); + --backgroundHover: hsla(0, 0%, 99%, 0.75); + --backgroundPress: var(--color-46); + --backgroundFocus: var(--color-46); + --borderColor: var(--color-152); + --borderColorHover: var(--color-47); + --borderColorPress: var(--color-49); + --borderColorFocus: var(--color-152); + --color: var(--color-56); + --colorHover: var(--color-55); + --colorPress: var(--color-56); + --colorFocus: var(--color-55); + --colorTransparent: hsla(0, 0%, 56.1%, 0); + --placeholderColor: var(--color-53); + --outlineColor: hsla(0, 0%, 56.1%, 0.25); + } +} +.t_light_gray ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_dark .t_orange, +:root.t_dark .t_orange, +:root.t_light .t_dark .t_light .t_dark .t_orange, +:root.t_light .t_dark .t_orange { + --accentBackground: var(--color-81); + --accentColor: var(--color-92); + --background0: hsla(30, 70%, 7.2%, 0); + --background025: hsla(30, 70%, 7.2%, 0.25); + --background05: hsla(30, 70%, 7.2%, 0.5); + --background075: hsla(30, 70%, 7.2%, 0.75); + --color1: var(--color-165); + --color2: var(--color-166); + --color3: var(--color-167); + --color4: var(--color-168); + --color5: var(--color-169); + --color6: var(--color-170); + --color7: var(--color-171); + --color8: var(--color-172); + --color9: var(--color-173); + --color10: var(--color-174); + --color11: var(--color-175); + --color12: var(--color-176); + --color0: hsla(24, 94%, 50%, 0); + --color025: hsla(24, 94%, 50%, 0.25); + --color05: hsla(24, 94%, 50%, 0.5); + --color075: hsla(24, 94%, 50%, 0.75); + --background: var(--color-165); + --backgroundHover: var(--color-166); + --backgroundPress: hsla(30, 70%, 7.2%, 0.75); + --backgroundFocus: hsla(30, 70%, 7.2%, 0.75); + --borderColor: var(--color-168); + --borderColorHover: var(--color-169); + --borderColorPress: var(--color-167); + --borderColorFocus: var(--color-168); + --color: var(--color-176); + --colorHover: var(--color-175); + --colorPress: var(--color-176); + --colorFocus: var(--color-175); + --colorTransparent: hsla(24, 94%, 50%, 0); + --placeholderColor: var(--color-173); + --outlineColor: hsla(24, 94%, 50%, 0.25); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_orange, + .t_orange { + --accentBackground: var(--color-81); + --accentColor: var(--color-92); + --background0: hsla(30, 70%, 7.2%, 0); + --background025: hsla(30, 70%, 7.2%, 0.25); + --background05: hsla(30, 70%, 7.2%, 0.5); + --background075: hsla(30, 70%, 7.2%, 0.75); + --color1: var(--color-165); + --color2: var(--color-166); + --color3: var(--color-167); + --color4: var(--color-168); + --color5: var(--color-169); + --color6: var(--color-170); + --color7: var(--color-171); + --color8: var(--color-172); + --color9: var(--color-173); + --color10: var(--color-174); + --color11: var(--color-175); + --color12: var(--color-176); + --color0: hsla(24, 94%, 50%, 0); + --color025: hsla(24, 94%, 50%, 0.25); + --color05: hsla(24, 94%, 50%, 0.5); + --color075: hsla(24, 94%, 50%, 0.75); + --background: var(--color-165); + --backgroundHover: var(--color-166); + --backgroundPress: hsla(30, 70%, 7.2%, 0.75); + --backgroundFocus: hsla(30, 70%, 7.2%, 0.75); + --borderColor: var(--color-168); + --borderColorHover: var(--color-169); + --borderColorPress: var(--color-167); + --borderColorFocus: var(--color-168); + --color: var(--color-176); + --colorHover: var(--color-175); + --colorPress: var(--color-176); + --colorFocus: var(--color-175); + --colorTransparent: hsla(24, 94%, 50%, 0); + --placeholderColor: var(--color-173); + --outlineColor: hsla(24, 94%, 50%, 0.25); + } +} +.t_dark_orange ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_dark .t_yellow, +:root.t_dark .t_yellow, +:root.t_light .t_dark .t_light .t_dark .t_yellow, +:root.t_light .t_dark .t_yellow { + --accentBackground: var(--color-33); + --accentColor: var(--color-44); + --background0: hsla(45, 100%, 5.5%, 0); + --background025: hsla(45, 100%, 5.5%, 0.25); + --background05: hsla(45, 100%, 5.5%, 0.5); + --background075: hsla(45, 100%, 5.5%, 0.75); + --color1: var(--color-213); + --color2: var(--color-214); + --color3: var(--color-215); + --color4: var(--color-216); + --color5: var(--color-217); + --color6: var(--color-218); + --color7: var(--color-219); + --color8: var(--color-220); + --color9: var(--color-221); + --color10: var(--color-222); + --color11: var(--color-223); + --color12: var(--color-224); + --color0: hsla(53, 92%, 50%, 0); + --color025: hsla(53, 92%, 50%, 0.25); + --color05: hsla(53, 92%, 50%, 0.5); + --color075: hsla(53, 92%, 50%, 0.75); + --background: var(--color-213); + --backgroundHover: var(--color-214); + --backgroundPress: hsla(45, 100%, 5.5%, 0.75); + --backgroundFocus: hsla(45, 100%, 5.5%, 0.75); + --borderColor: var(--color-216); + --borderColorHover: var(--color-217); + --borderColorPress: var(--color-215); + --borderColorFocus: var(--color-216); + --color: var(--color-224); + --colorHover: var(--color-223); + --colorPress: var(--color-224); + --colorFocus: var(--color-223); + --colorTransparent: hsla(53, 92%, 50%, 0); + --placeholderColor: var(--color-221); + --outlineColor: hsla(53, 92%, 50%, 0.25); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_yellow, + .t_yellow { + --accentBackground: var(--color-33); + --accentColor: var(--color-44); + --background0: hsla(45, 100%, 5.5%, 0); + --background025: hsla(45, 100%, 5.5%, 0.25); + --background05: hsla(45, 100%, 5.5%, 0.5); + --background075: hsla(45, 100%, 5.5%, 0.75); + --color1: var(--color-213); + --color2: var(--color-214); + --color3: var(--color-215); + --color4: var(--color-216); + --color5: var(--color-217); + --color6: var(--color-218); + --color7: var(--color-219); + --color8: var(--color-220); + --color9: var(--color-221); + --color10: var(--color-222); + --color11: var(--color-223); + --color12: var(--color-224); + --color0: hsla(53, 92%, 50%, 0); + --color025: hsla(53, 92%, 50%, 0.25); + --color05: hsla(53, 92%, 50%, 0.5); + --color075: hsla(53, 92%, 50%, 0.75); + --background: var(--color-213); + --backgroundHover: var(--color-214); + --backgroundPress: hsla(45, 100%, 5.5%, 0.75); + --backgroundFocus: hsla(45, 100%, 5.5%, 0.75); + --borderColor: var(--color-216); + --borderColorHover: var(--color-217); + --borderColorPress: var(--color-215); + --borderColorFocus: var(--color-216); + --color: var(--color-224); + --colorHover: var(--color-223); + --colorPress: var(--color-224); + --colorFocus: var(--color-223); + --colorTransparent: hsla(53, 92%, 50%, 0); + --placeholderColor: var(--color-221); + --outlineColor: hsla(53, 92%, 50%, 0.25); + } +} +.t_dark_yellow ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_green, +:root.t_dark .t_light .t_dark .t_green, +:root.t_light .t_dark .t_green, +:root.t_light .t_dark .t_light .t_dark .t_green { + --accentBackground: var(--color-69); + --accentColor: var(--color-80); + --background0: hsla(146, 30%, 7.4%, 0); + --background025: hsla(146, 30%, 7.4%, 0.25); + --background05: hsla(146, 30%, 7.4%, 0.5); + --background075: hsla(146, 30%, 7.4%, 0.75); + --color1: var(--color-153); + --color2: var(--color-154); + --color3: var(--color-155); + --color4: var(--color-156); + --color5: var(--color-157); + --color6: var(--color-158); + --color7: var(--color-159); + --color8: var(--color-160); + --color9: var(--color-161); + --color10: var(--color-162); + --color11: var(--color-163); + --color12: var(--color-164); + --color0: hsla(151, 55%, 41.5%, 0); + --color025: hsla(151, 55%, 41.5%, 0.25); + --color05: hsla(151, 55%, 41.5%, 0.5); + --color075: hsla(151, 55%, 41.5%, 0.75); + --background: var(--color-153); + --backgroundHover: var(--color-154); + --backgroundPress: hsla(146, 30%, 7.4%, 0.75); + --backgroundFocus: hsla(146, 30%, 7.4%, 0.75); + --borderColor: var(--color-156); + --borderColorHover: var(--color-157); + --borderColorPress: var(--color-155); + --borderColorFocus: var(--color-156); + --color: var(--color-164); + --colorHover: var(--color-163); + --colorPress: var(--color-164); + --colorFocus: var(--color-163); + --colorTransparent: hsla(151, 55%, 41.5%, 0); + --placeholderColor: var(--color-161); + --outlineColor: hsla(151, 55%, 41.5%, 0.25); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_green, + .t_light .t_dark .t_green { + --accentBackground: var(--color-69); + --accentColor: var(--color-80); + --background0: hsla(146, 30%, 7.4%, 0); + --background025: hsla(146, 30%, 7.4%, 0.25); + --background05: hsla(146, 30%, 7.4%, 0.5); + --background075: hsla(146, 30%, 7.4%, 0.75); + --color1: var(--color-153); + --color2: var(--color-154); + --color3: var(--color-155); + --color4: var(--color-156); + --color5: var(--color-157); + --color6: var(--color-158); + --color7: var(--color-159); + --color8: var(--color-160); + --color9: var(--color-161); + --color10: var(--color-162); + --color11: var(--color-163); + --color12: var(--color-164); + --color0: hsla(151, 55%, 41.5%, 0); + --color025: hsla(151, 55%, 41.5%, 0.25); + --color05: hsla(151, 55%, 41.5%, 0.5); + --color075: hsla(151, 55%, 41.5%, 0.75); + --background: var(--color-153); + --backgroundHover: var(--color-154); + --backgroundPress: hsla(146, 30%, 7.4%, 0.75); + --backgroundFocus: hsla(146, 30%, 7.4%, 0.75); + --borderColor: var(--color-156); + --borderColorHover: var(--color-157); + --borderColorPress: var(--color-155); + --borderColorFocus: var(--color-156); + --color: var(--color-164); + --colorHover: var(--color-163); + --colorPress: var(--color-164); + --colorFocus: var(--color-163); + --colorTransparent: hsla(151, 55%, 41.5%, 0); + --placeholderColor: var(--color-161); + --outlineColor: hsla(151, 55%, 41.5%, 0.25); + } +} +.t_dark_green ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_blue, +:root.t_dark .t_light .t_dark .t_blue, +:root.t_light .t_dark .t_blue, +:root.t_light .t_dark .t_light .t_dark .t_blue { + --accentBackground: var(--color-45); + --accentColor: var(--color-56); + --background0: hsla(212, 35%, 9.2%, 0); + --background025: hsla(212, 35%, 9.2%, 0.25); + --background05: hsla(212, 35%, 9.2%, 0.5); + --background075: hsla(212, 35%, 9.2%, 0.75); + --color1: var(--color-129); + --color2: var(--color-130); + --color3: var(--color-131); + --color4: var(--color-132); + --color5: var(--color-133); + --color6: var(--color-134); + --color7: var(--color-135); + --color8: var(--color-136); + --color9: var(--color-137); + --color10: var(--color-138); + --color11: var(--color-139); + --color12: var(--color-140); + --color0: hsla(206, 100%, 50%, 0); + --color025: hsla(206, 100%, 50%, 0.25); + --color05: hsla(206, 100%, 50%, 0.5); + --color075: hsla(206, 100%, 50%, 0.75); + --background: var(--color-129); + --backgroundHover: var(--color-130); + --backgroundPress: hsla(212, 35%, 9.2%, 0.75); + --backgroundFocus: hsla(212, 35%, 9.2%, 0.75); + --borderColor: var(--color-132); + --borderColorHover: var(--color-133); + --borderColorPress: var(--color-131); + --borderColorFocus: var(--color-132); + --color: var(--color-140); + --colorHover: var(--color-139); + --colorPress: var(--color-140); + --colorFocus: var(--color-139); + --colorTransparent: hsla(206, 100%, 50%, 0); + --placeholderColor: var(--color-137); + --outlineColor: hsla(206, 100%, 50%, 0.25); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_blue, + .t_light .t_dark .t_blue { + --accentBackground: var(--color-45); + --accentColor: var(--color-56); + --background0: hsla(212, 35%, 9.2%, 0); + --background025: hsla(212, 35%, 9.2%, 0.25); + --background05: hsla(212, 35%, 9.2%, 0.5); + --background075: hsla(212, 35%, 9.2%, 0.75); + --color1: var(--color-129); + --color2: var(--color-130); + --color3: var(--color-131); + --color4: var(--color-132); + --color5: var(--color-133); + --color6: var(--color-134); + --color7: var(--color-135); + --color8: var(--color-136); + --color9: var(--color-137); + --color10: var(--color-138); + --color11: var(--color-139); + --color12: var(--color-140); + --color0: hsla(206, 100%, 50%, 0); + --color025: hsla(206, 100%, 50%, 0.25); + --color05: hsla(206, 100%, 50%, 0.5); + --color075: hsla(206, 100%, 50%, 0.75); + --background: var(--color-129); + --backgroundHover: var(--color-130); + --backgroundPress: hsla(212, 35%, 9.2%, 0.75); + --backgroundFocus: hsla(212, 35%, 9.2%, 0.75); + --borderColor: var(--color-132); + --borderColorHover: var(--color-133); + --borderColorPress: var(--color-131); + --borderColorFocus: var(--color-132); + --color: var(--color-140); + --colorHover: var(--color-139); + --colorPress: var(--color-140); + --colorFocus: var(--color-139); + --colorTransparent: hsla(206, 100%, 50%, 0); + --placeholderColor: var(--color-137); + --outlineColor: hsla(206, 100%, 50%, 0.25); + } +} +.t_dark_blue ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_dark .t_purple, +:root.t_dark .t_purple, +:root.t_light .t_dark .t_light .t_dark .t_purple, +:root.t_light .t_dark .t_purple { + --accentBackground: var(--color-105); + --accentColor: var(--color-116); + --background0: hsla(284, 20%, 9.6%, 0); + --background025: hsla(284, 20%, 9.6%, 0.25); + --background05: hsla(284, 20%, 9.6%, 0.5); + --background075: hsla(284, 20%, 9.6%, 0.75); + --color1: var(--color-189); + --color2: var(--color-190); + --color3: var(--color-191); + --color4: var(--color-192); + --color5: var(--color-193); + --color6: var(--color-194); + --color7: var(--color-195); + --color8: var(--color-196); + --color9: var(--color-197); + --color10: var(--color-198); + --color11: var(--color-199); + --color12: var(--color-200); + --color0: hsla(272, 51%, 54%, 0); + --color025: hsla(272, 51%, 54%, 0.25); + --color05: hsla(272, 51%, 54%, 0.5); + --color075: hsla(272, 51%, 54%, 0.75); + --background: var(--color-189); + --backgroundHover: var(--color-190); + --backgroundPress: hsla(284, 20%, 9.6%, 0.75); + --backgroundFocus: hsla(284, 20%, 9.6%, 0.75); + --borderColor: var(--color-192); + --borderColorHover: var(--color-193); + --borderColorPress: var(--color-191); + --borderColorFocus: var(--color-192); + --color: var(--color-200); + --colorHover: var(--color-199); + --colorPress: var(--color-200); + --colorFocus: var(--color-199); + --colorTransparent: hsla(272, 51%, 54%, 0); + --placeholderColor: var(--color-197); + --outlineColor: hsla(272, 51%, 54%, 0.25); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_purple, + .t_purple { + --accentBackground: var(--color-105); + --accentColor: var(--color-116); + --background0: hsla(284, 20%, 9.6%, 0); + --background025: hsla(284, 20%, 9.6%, 0.25); + --background05: hsla(284, 20%, 9.6%, 0.5); + --background075: hsla(284, 20%, 9.6%, 0.75); + --color1: var(--color-189); + --color2: var(--color-190); + --color3: var(--color-191); + --color4: var(--color-192); + --color5: var(--color-193); + --color6: var(--color-194); + --color7: var(--color-195); + --color8: var(--color-196); + --color9: var(--color-197); + --color10: var(--color-198); + --color11: var(--color-199); + --color12: var(--color-200); + --color0: hsla(272, 51%, 54%, 0); + --color025: hsla(272, 51%, 54%, 0.25); + --color05: hsla(272, 51%, 54%, 0.5); + --color075: hsla(272, 51%, 54%, 0.75); + --background: var(--color-189); + --backgroundHover: var(--color-190); + --backgroundPress: hsla(284, 20%, 9.6%, 0.75); + --backgroundFocus: hsla(284, 20%, 9.6%, 0.75); + --borderColor: var(--color-192); + --borderColorHover: var(--color-193); + --borderColorPress: var(--color-191); + --borderColorFocus: var(--color-192); + --color: var(--color-200); + --colorHover: var(--color-199); + --colorPress: var(--color-200); + --colorFocus: var(--color-199); + --colorTransparent: hsla(272, 51%, 54%, 0); + --placeholderColor: var(--color-197); + --outlineColor: hsla(272, 51%, 54%, 0.25); + } +} +.t_dark_purple ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_dark .t_pink, +:root.t_dark .t_pink, +:root.t_light .t_dark .t_light .t_dark .t_pink, +:root.t_light .t_dark .t_pink { + --accentBackground: var(--color-93); + --accentColor: var(--color-104); + --background0: hsla(318, 25%, 9.6%, 0); + --background025: hsla(318, 25%, 9.6%, 0.25); + --background05: hsla(318, 25%, 9.6%, 0.5); + --background075: hsla(318, 25%, 9.6%, 0.75); + --color1: var(--color-177); + --color2: var(--color-178); + --color3: var(--color-179); + --color4: var(--color-180); + --color5: var(--color-181); + --color6: var(--color-182); + --color7: var(--color-183); + --color8: var(--color-184); + --color9: var(--color-185); + --color10: var(--color-186); + --color11: var(--color-187); + --color12: var(--color-188); + --color0: hsla(322, 65%, 54.5%, 0); + --color025: hsla(322, 65%, 54.5%, 0.25); + --color05: hsla(322, 65%, 54.5%, 0.5); + --color075: hsla(322, 65%, 54.5%, 0.75); + --background: var(--color-177); + --backgroundHover: var(--color-178); + --backgroundPress: hsla(318, 25%, 9.6%, 0.75); + --backgroundFocus: hsla(318, 25%, 9.6%, 0.75); + --borderColor: var(--color-180); + --borderColorHover: var(--color-181); + --borderColorPress: var(--color-179); + --borderColorFocus: var(--color-180); + --color: var(--color-188); + --colorHover: var(--color-187); + --colorPress: var(--color-188); + --colorFocus: var(--color-187); + --colorTransparent: hsla(322, 65%, 54.5%, 0); + --placeholderColor: var(--color-185); + --outlineColor: hsla(322, 65%, 54.5%, 0.25); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_pink, + .t_pink { + --accentBackground: var(--color-93); + --accentColor: var(--color-104); + --background0: hsla(318, 25%, 9.6%, 0); + --background025: hsla(318, 25%, 9.6%, 0.25); + --background05: hsla(318, 25%, 9.6%, 0.5); + --background075: hsla(318, 25%, 9.6%, 0.75); + --color1: var(--color-177); + --color2: var(--color-178); + --color3: var(--color-179); + --color4: var(--color-180); + --color5: var(--color-181); + --color6: var(--color-182); + --color7: var(--color-183); + --color8: var(--color-184); + --color9: var(--color-185); + --color10: var(--color-186); + --color11: var(--color-187); + --color12: var(--color-188); + --color0: hsla(322, 65%, 54.5%, 0); + --color025: hsla(322, 65%, 54.5%, 0.25); + --color05: hsla(322, 65%, 54.5%, 0.5); + --color075: hsla(322, 65%, 54.5%, 0.75); + --background: var(--color-177); + --backgroundHover: var(--color-178); + --backgroundPress: hsla(318, 25%, 9.6%, 0.75); + --backgroundFocus: hsla(318, 25%, 9.6%, 0.75); + --borderColor: var(--color-180); + --borderColorHover: var(--color-181); + --borderColorPress: var(--color-179); + --borderColorFocus: var(--color-180); + --color: var(--color-188); + --colorHover: var(--color-187); + --colorPress: var(--color-188); + --colorFocus: var(--color-187); + --colorTransparent: hsla(322, 65%, 54.5%, 0); + --placeholderColor: var(--color-185); + --outlineColor: hsla(322, 65%, 54.5%, 0.25); + } +} +.t_dark_pink ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_dark .t_red, +:root.t_dark .t_red, +:root.t_light .t_dark .t_light .t_dark .t_red, +:root.t_light .t_dark .t_red { + --accentBackground: var(--color-117); + --accentColor: var(--color-128); + --background0: hsla(353, 23%, 9.8%, 0); + --background025: hsla(353, 23%, 9.8%, 0.25); + --background05: hsla(353, 23%, 9.8%, 0.5); + --background075: hsla(353, 23%, 9.8%, 0.75); + --color1: var(--color-201); + --color2: var(--color-202); + --color3: var(--color-203); + --color4: var(--color-204); + --color5: var(--color-205); + --color6: var(--color-206); + --color7: var(--color-207); + --color8: var(--color-208); + --color9: var(--color-209); + --color10: var(--color-210); + --color11: var(--color-211); + --color12: var(--color-212); + --color0: hsla(358, 75%, 59%, 0); + --color025: hsla(358, 75%, 59%, 0.25); + --color05: hsla(358, 75%, 59%, 0.5); + --color075: hsla(358, 75%, 59%, 0.75); + --background: var(--color-201); + --backgroundHover: var(--color-202); + --backgroundPress: hsla(353, 23%, 9.8%, 0.75); + --backgroundFocus: hsla(353, 23%, 9.8%, 0.75); + --borderColor: var(--color-204); + --borderColorHover: var(--color-205); + --borderColorPress: var(--color-203); + --borderColorFocus: var(--color-204); + --color: var(--color-212); + --colorHover: var(--color-211); + --colorPress: var(--color-212); + --colorFocus: var(--color-211); + --colorTransparent: hsla(358, 75%, 59%, 0); + --placeholderColor: var(--color-209); + --outlineColor: hsla(358, 75%, 59%, 0.25); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_red, + .t_red { + --accentBackground: var(--color-117); + --accentColor: var(--color-128); + --background0: hsla(353, 23%, 9.8%, 0); + --background025: hsla(353, 23%, 9.8%, 0.25); + --background05: hsla(353, 23%, 9.8%, 0.5); + --background075: hsla(353, 23%, 9.8%, 0.75); + --color1: var(--color-201); + --color2: var(--color-202); + --color3: var(--color-203); + --color4: var(--color-204); + --color5: var(--color-205); + --color6: var(--color-206); + --color7: var(--color-207); + --color8: var(--color-208); + --color9: var(--color-209); + --color10: var(--color-210); + --color11: var(--color-211); + --color12: var(--color-212); + --color0: hsla(358, 75%, 59%, 0); + --color025: hsla(358, 75%, 59%, 0.25); + --color05: hsla(358, 75%, 59%, 0.5); + --color075: hsla(358, 75%, 59%, 0.75); + --background: var(--color-201); + --backgroundHover: var(--color-202); + --backgroundPress: hsla(353, 23%, 9.8%, 0.75); + --backgroundFocus: hsla(353, 23%, 9.8%, 0.75); + --borderColor: var(--color-204); + --borderColorHover: var(--color-205); + --borderColorPress: var(--color-203); + --borderColorFocus: var(--color-204); + --color: var(--color-212); + --colorHover: var(--color-211); + --colorPress: var(--color-212); + --colorFocus: var(--color-211); + --colorTransparent: hsla(358, 75%, 59%, 0); + --placeholderColor: var(--color-209); + --outlineColor: hsla(358, 75%, 59%, 0.25); + } +} +.t_dark_red ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_gray, +:root.t_dark .t_light .t_dark .t_gray, +:root.t_light .t_dark .t_gray, +:root.t_light .t_dark .t_light .t_dark .t_gray { + --accentBackground: var(--color-57); + --accentColor: var(--color-68); + --background0: hsla(0, 0%, 8.5%, 0); + --background025: hsla(0, 0%, 8.5%, 0.25); + --background05: hsla(0, 0%, 8.5%, 0.5); + --background075: hsla(0, 0%, 8.5%, 0.75); + --color1: var(--color-141); + --color2: var(--color-142); + --color3: var(--color-143); + --color4: var(--color-144); + --color5: var(--color-145); + --color6: var(--color-146); + --color7: var(--color-147); + --color8: var(--color-148); + --color9: var(--color-149); + --color10: var(--color-150); + --color11: var(--color-151); + --color12: var(--color-152); + --color0: hsla(0, 0%, 43.9%, 0); + --color025: hsla(0, 0%, 43.9%, 0.25); + --color05: hsla(0, 0%, 43.9%, 0.5); + --color075: hsla(0, 0%, 43.9%, 0.75); + --background: var(--color-141); + --backgroundHover: var(--color-142); + --backgroundPress: hsla(0, 0%, 8.5%, 0.75); + --backgroundFocus: hsla(0, 0%, 8.5%, 0.75); + --borderColor: var(--color-144); + --borderColorHover: var(--color-145); + --borderColorPress: var(--color-143); + --borderColorFocus: var(--color-144); + --color: var(--color-152); + --colorHover: var(--color-151); + --colorPress: var(--color-152); + --colorFocus: var(--color-151); + --colorTransparent: hsla(0, 0%, 43.9%, 0); + --placeholderColor: var(--color-149); + --outlineColor: hsla(0, 0%, 43.9%, 0.25); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_gray, + .t_light .t_dark .t_gray { + --accentBackground: var(--color-57); + --accentColor: var(--color-68); + --background0: hsla(0, 0%, 8.5%, 0); + --background025: hsla(0, 0%, 8.5%, 0.25); + --background05: hsla(0, 0%, 8.5%, 0.5); + --background075: hsla(0, 0%, 8.5%, 0.75); + --color1: var(--color-141); + --color2: var(--color-142); + --color3: var(--color-143); + --color4: var(--color-144); + --color5: var(--color-145); + --color6: var(--color-146); + --color7: var(--color-147); + --color8: var(--color-148); + --color9: var(--color-149); + --color10: var(--color-150); + --color11: var(--color-151); + --color12: var(--color-152); + --color0: hsla(0, 0%, 43.9%, 0); + --color025: hsla(0, 0%, 43.9%, 0.25); + --color05: hsla(0, 0%, 43.9%, 0.5); + --color075: hsla(0, 0%, 43.9%, 0.75); + --background: var(--color-141); + --backgroundHover: var(--color-142); + --backgroundPress: hsla(0, 0%, 8.5%, 0.75); + --backgroundFocus: hsla(0, 0%, 8.5%, 0.75); + --borderColor: var(--color-144); + --borderColorHover: var(--color-145); + --borderColorPress: var(--color-143); + --borderColorFocus: var(--color-144); + --color: var(--color-152); + --colorHover: var(--color-151); + --colorPress: var(--color-152); + --colorFocus: var(--color-151); + --colorTransparent: hsla(0, 0%, 43.9%, 0); + --placeholderColor: var(--color-149); + --outlineColor: hsla(0, 0%, 43.9%, 0.25); + } +} +.t_dark_gray ::selection { + background: var(--color5); + color: var(--color11); +} +:root.t_dark .t_light .t_alt1, +:root.t_dark .t_light .t_dark .t_light .t_alt1, +:root.t_light .t_alt1, +:root.t_light .t_dark .t_light .t_alt1 { + --color: var(--color-19); + --colorHover: var(--color-18); + --colorPress: var(--color-19); + --colorFocus: var(--color-18); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_alt1, + .t_dark .t_light .t_alt1 { + --color: var(--color-19); + --colorHover: var(--color-18); + --colorPress: var(--color-19); + --colorFocus: var(--color-18); + } +} +:root.t_dark .t_light .t_alt2, +:root.t_dark .t_light .t_dark .t_light .t_alt2, +:root.t_light .t_alt2, +:root.t_light .t_dark .t_light .t_alt2 { + --color: var(--color-18); + --colorHover: var(--color-53); + --colorPress: var(--color-18); + --colorFocus: var(--color-53); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_alt2, + .t_dark .t_light .t_alt2 { + --color: var(--color-18); + --colorHover: var(--color-53); + --colorPress: var(--color-18); + --colorFocus: var(--color-53); + } +} +:root.t_dark .t_light .t_active, +:root.t_dark .t_light .t_active_SliderTrackActive, +:root.t_dark .t_light .t_Button, +:root.t_dark .t_light .t_dark .t_light .t_active, +:root.t_dark .t_light .t_dark .t_light .t_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_Button, +:root.t_dark .t_light .t_dark .t_light .t_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_surface3, +:root.t_dark .t_light .t_SliderTrackActive, +:root.t_dark .t_light .t_surface3, +:root.t_light .t_active, +:root.t_light .t_active_SliderTrackActive, +:root.t_light .t_Button, +:root.t_light .t_dark .t_light .t_active, +:root.t_light .t_dark .t_light .t_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_Button, +:root.t_light .t_dark .t_light .t_SliderTrackActive, +:root.t_light .t_dark .t_light .t_surface3, +:root.t_light .t_SliderTrackActive, +:root.t_light .t_surface3 { + --background: var(--color-12); + --backgroundHover: var(--color-11); + --backgroundPress: var(--color-13); + --backgroundFocus: var(--color-13); + --borderColor: var(--color-15); + --borderColorHover: var(--color-14); + --borderColorFocus: var(--color-15); + --borderColorPress: var(--color-16); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_active, + .t_active_SliderTrackActive, + .t_Button, + .t_dark .t_light .t_active, + .t_dark .t_light .t_active_SliderTrackActive, + .t_dark .t_light .t_Button, + .t_dark .t_light .t_SliderTrackActive, + .t_dark .t_light .t_surface3, + .t_SliderTrackActive, + .t_surface3 { + --background: var(--color-12); + --backgroundHover: var(--color-11); + --backgroundPress: var(--color-13); + --backgroundFocus: var(--color-13); + --borderColor: var(--color-15); + --borderColorHover: var(--color-14); + --borderColorFocus: var(--color-15); + --borderColorPress: var(--color-16); + } +} +:root.t_dark .t_light .t_active_ListItem, +:root.t_dark .t_light .t_active_Progress, +:root.t_dark .t_light .t_active_SliderTrack, +:root.t_dark .t_light .t_active_TooltipArrow, +:root.t_dark .t_light .t_Card, +:root.t_dark .t_light .t_dark .t_light .t_active_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_active_Progress, +:root.t_dark .t_light .t_dark .t_light .t_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_light .t_Card, +:root.t_dark .t_light .t_dark .t_light .t_Input, +:root.t_dark .t_light .t_dark .t_light .t_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_Progress, +:root.t_dark .t_light .t_dark .t_light .t_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_surface1, +:root.t_dark .t_light .t_dark .t_light .t_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_TooltipArrow, +:root.t_dark .t_light .t_Input, +:root.t_dark .t_light .t_ListItem, +:root.t_dark .t_light .t_Progress, +:root.t_dark .t_light .t_SelectTrigger, +:root.t_dark .t_light .t_SliderTrack, +:root.t_dark .t_light .t_surface1, +:root.t_dark .t_light .t_TextArea, +:root.t_dark .t_light .t_TooltipArrow, +:root.t_light .t_active_ListItem, +:root.t_light .t_active_Progress, +:root.t_light .t_active_SliderTrack, +:root.t_light .t_active_TooltipArrow, +:root.t_light .t_Card, +:root.t_light .t_dark .t_light .t_active_ListItem, +:root.t_light .t_dark .t_light .t_active_Progress, +:root.t_light .t_dark .t_light .t_active_SliderTrack, +:root.t_light .t_dark .t_light .t_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_Card, +:root.t_light .t_dark .t_light .t_Input, +:root.t_light .t_dark .t_light .t_ListItem, +:root.t_light .t_dark .t_light .t_Progress, +:root.t_light .t_dark .t_light .t_SelectTrigger, +:root.t_light .t_dark .t_light .t_SliderTrack, +:root.t_light .t_dark .t_light .t_surface1, +:root.t_light .t_dark .t_light .t_TextArea, +:root.t_light .t_dark .t_light .t_TooltipArrow, +:root.t_light .t_Input, +:root.t_light .t_ListItem, +:root.t_light .t_Progress, +:root.t_light .t_SelectTrigger, +:root.t_light .t_SliderTrack, +:root.t_light .t_surface1, +:root.t_light .t_TextArea, +:root.t_light .t_TooltipArrow { + --background: var(--color-10); + --backgroundHover: var(--color-32); + --backgroundPress: var(--color-11); + --backgroundFocus: var(--color-11); + --borderColor: var(--color-13); + --borderColorHover: var(--color-12); + --borderColorFocus: var(--color-13); + --borderColorPress: var(--color-14); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_active_ListItem, + .t_active_Progress, + .t_active_SliderTrack, + .t_active_TooltipArrow, + .t_Card, + .t_dark .t_light .t_active_ListItem, + .t_dark .t_light .t_active_Progress, + .t_dark .t_light .t_active_SliderTrack, + .t_dark .t_light .t_active_TooltipArrow, + .t_dark .t_light .t_Card, + .t_dark .t_light .t_Input, + .t_dark .t_light .t_ListItem, + .t_dark .t_light .t_Progress, + .t_dark .t_light .t_SelectTrigger, + .t_dark .t_light .t_SliderTrack, + .t_dark .t_light .t_surface1, + .t_dark .t_light .t_TextArea, + .t_dark .t_light .t_TooltipArrow, + .t_Input, + .t_ListItem, + .t_Progress, + .t_SelectTrigger, + .t_SliderTrack, + .t_surface1, + .t_TextArea, + .t_TooltipArrow { + --background: var(--color-10); + --backgroundHover: var(--color-32); + --backgroundPress: var(--color-11); + --backgroundFocus: var(--color-11); + --borderColor: var(--color-13); + --borderColorHover: var(--color-12); + --borderColorFocus: var(--color-13); + --borderColorPress: var(--color-14); + } +} +:root.t_dark .t_light .t_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_surface2, +:root.t_dark .t_light .t_dark .t_light .t_Switch, +:root.t_dark .t_light .t_dark .t_light .t_TooltipContent, +:root.t_dark .t_light .t_RadioGroupItem, +:root.t_dark .t_light .t_surface2, +:root.t_dark .t_light .t_Switch, +:root.t_dark .t_light .t_TooltipContent, +:root.t_light .t_Checkbox, +:root.t_light .t_dark .t_light .t_Checkbox, +:root.t_light .t_dark .t_light .t_RadioGroupItem, +:root.t_light .t_dark .t_light .t_surface2, +:root.t_light .t_dark .t_light .t_Switch, +:root.t_light .t_dark .t_light .t_TooltipContent, +:root.t_light .t_RadioGroupItem, +:root.t_light .t_surface2, +:root.t_light .t_Switch, +:root.t_light .t_TooltipContent { + --background: var(--color-11); + --backgroundHover: var(--color-10); + --backgroundPress: var(--color-12); + --backgroundFocus: var(--color-12); + --borderColor: var(--color-14); + --borderColorHover: var(--color-13); + --borderColorFocus: var(--color-14); + --borderColorPress: var(--color-15); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_Checkbox, + .t_dark .t_light .t_Checkbox, + .t_dark .t_light .t_RadioGroupItem, + .t_dark .t_light .t_surface2, + .t_dark .t_light .t_Switch, + .t_dark .t_light .t_TooltipContent, + .t_RadioGroupItem, + .t_surface2, + .t_Switch, + .t_TooltipContent { + --background: var(--color-11); + --backgroundHover: var(--color-10); + --backgroundPress: var(--color-12); + --backgroundFocus: var(--color-12); + --borderColor: var(--color-14); + --borderColorHover: var(--color-13); + --borderColorFocus: var(--color-14); + --borderColorPress: var(--color-15); + } +} +:root.t_dark .t_light .t_active_Button, +:root.t_dark .t_light .t_active_Card, +:root.t_dark .t_light .t_active_Checkbox, +:root.t_dark .t_light .t_active_Input, +:root.t_dark .t_light .t_active_RadioGroupItem, +:root.t_dark .t_light .t_active_SelectTrigger, +:root.t_dark .t_light .t_active_Switch, +:root.t_dark .t_light .t_active_TextArea, +:root.t_dark .t_light .t_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_light .t_active_Button, +:root.t_dark .t_light .t_dark .t_light .t_active_Card, +:root.t_dark .t_light .t_dark .t_light .t_active_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_active_Input, +:root.t_dark .t_light .t_dark .t_light .t_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_active_Switch, +:root.t_dark .t_light .t_dark .t_light .t_active_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_light .t_surface4, +:root.t_dark .t_light .t_surface4, +:root.t_light .t_active_Button, +:root.t_light .t_active_Card, +:root.t_light .t_active_Checkbox, +:root.t_light .t_active_Input, +:root.t_light .t_active_RadioGroupItem, +:root.t_light .t_active_SelectTrigger, +:root.t_light .t_active_Switch, +:root.t_light .t_active_TextArea, +:root.t_light .t_active_TooltipContent, +:root.t_light .t_dark .t_light .t_active_Button, +:root.t_light .t_dark .t_light .t_active_Card, +:root.t_light .t_dark .t_light .t_active_Checkbox, +:root.t_light .t_dark .t_light .t_active_Input, +:root.t_light .t_dark .t_light .t_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_active_Switch, +:root.t_light .t_dark .t_light .t_active_TextArea, +:root.t_light .t_dark .t_light .t_active_TooltipContent, +:root.t_light .t_dark .t_light .t_surface4, +:root.t_light .t_surface4 { + --background: var(--color-14); + --backgroundHover: var(--color-14); + --backgroundPress: var(--color-15); + --backgroundFocus: var(--color-15); + --borderColor: var(--color-14); + --borderColorHover: var(--color-14); + --borderColorFocus: var(--color-15); + --borderColorPress: var(--color-15); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_active_Button, + .t_active_Card, + .t_active_Checkbox, + .t_active_Input, + .t_active_RadioGroupItem, + .t_active_SelectTrigger, + .t_active_Switch, + .t_active_TextArea, + .t_active_TooltipContent, + .t_dark .t_light .t_active_Button, + .t_dark .t_light .t_active_Card, + .t_dark .t_light .t_active_Checkbox, + .t_dark .t_light .t_active_Input, + .t_dark .t_light .t_active_RadioGroupItem, + .t_dark .t_light .t_active_SelectTrigger, + .t_dark .t_light .t_active_Switch, + .t_dark .t_light .t_active_TextArea, + .t_dark .t_light .t_active_TooltipContent, + .t_dark .t_light .t_surface4, + .t_surface4 { + --background: var(--color-14); + --backgroundHover: var(--color-14); + --backgroundPress: var(--color-15); + --backgroundFocus: var(--color-15); + --borderColor: var(--color-14); + --borderColorHover: var(--color-14); + --borderColorFocus: var(--color-15); + --borderColorPress: var(--color-15); + } +} +:root.t_dark .t_alt1, +:root.t_dark .t_light .t_dark .t_alt1, +:root.t_light .t_dark .t_alt1, +:root.t_light .t_dark .t_light .t_dark .t_alt1 { + --color: var(--color-31); + --colorHover: var(--color-30); + --colorPress: var(--color-31); + --colorFocus: var(--color-30); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_alt1, + .t_light .t_dark .t_alt1 { + --color: var(--color-31); + --colorHover: var(--color-30); + --colorPress: var(--color-31); + --colorFocus: var(--color-30); + } +} +:root.t_dark .t_alt2, +:root.t_dark .t_light .t_dark .t_alt2, +:root.t_light .t_dark .t_alt2, +:root.t_light .t_dark .t_light .t_dark .t_alt2 { + --color: var(--color-30); + --colorHover: var(--color-29); + --colorPress: var(--color-30); + --colorFocus: var(--color-29); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_alt2, + .t_light .t_dark .t_alt2 { + --color: var(--color-30); + --colorHover: var(--color-29); + --colorPress: var(--color-30); + --colorFocus: var(--color-29); + } +} +:root.t_dark .t_active, +:root.t_dark .t_active_SliderTrackActive, +:root.t_dark .t_Button, +:root.t_dark .t_light .t_dark .t_active, +:root.t_dark .t_light .t_dark .t_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_Button, +:root.t_dark .t_light .t_dark .t_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_surface3, +:root.t_dark .t_SliderTrackActive, +:root.t_dark .t_surface3, +:root.t_light .t_dark .t_active, +:root.t_light .t_dark .t_active_SliderTrackActive, +:root.t_light .t_dark .t_Button, +:root.t_light .t_dark .t_light .t_dark .t_active, +:root.t_light .t_dark .t_light .t_dark .t_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_Button, +:root.t_light .t_dark .t_light .t_dark .t_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_surface3, +:root.t_light .t_dark .t_SliderTrackActive, +:root.t_light .t_dark .t_surface3 { + --background: var(--color-24); + --backgroundHover: var(--color-25); + --backgroundPress: var(--color-23); + --backgroundFocus: var(--color-23); + --borderColor: var(--color-27); + --borderColorHover: var(--color-28); + --borderColorFocus: var(--color-27); + --borderColorPress: var(--color-26); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_active, + .t_active_SliderTrackActive, + .t_Button, + .t_light .t_dark .t_active, + .t_light .t_dark .t_active_SliderTrackActive, + .t_light .t_dark .t_Button, + .t_light .t_dark .t_SliderTrackActive, + .t_light .t_dark .t_surface3, + .t_SliderTrackActive, + .t_surface3 { + --background: var(--color-24); + --backgroundHover: var(--color-25); + --backgroundPress: var(--color-23); + --backgroundFocus: var(--color-23); + --borderColor: var(--color-27); + --borderColorHover: var(--color-28); + --borderColorFocus: var(--color-27); + --borderColorPress: var(--color-26); + } +} +:root.t_dark .t_active_ListItem, +:root.t_dark .t_active_Progress, +:root.t_dark .t_active_SliderTrack, +:root.t_dark .t_active_TooltipArrow, +:root.t_dark .t_Card, +:root.t_dark .t_Input, +:root.t_dark .t_light .t_dark .t_active_ListItem, +:root.t_dark .t_light .t_dark .t_active_Progress, +:root.t_dark .t_light .t_dark .t_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_Card, +:root.t_dark .t_light .t_dark .t_Input, +:root.t_dark .t_light .t_dark .t_ListItem, +:root.t_dark .t_light .t_dark .t_Progress, +:root.t_dark .t_light .t_dark .t_SelectTrigger, +:root.t_dark .t_light .t_dark .t_SliderTrack, +:root.t_dark .t_light .t_dark .t_surface1, +:root.t_dark .t_light .t_dark .t_TextArea, +:root.t_dark .t_light .t_dark .t_TooltipArrow, +:root.t_dark .t_ListItem, +:root.t_dark .t_Progress, +:root.t_dark .t_SelectTrigger, +:root.t_dark .t_SliderTrack, +:root.t_dark .t_surface1, +:root.t_dark .t_TextArea, +:root.t_dark .t_TooltipArrow, +:root.t_light .t_dark .t_active_ListItem, +:root.t_light .t_dark .t_active_Progress, +:root.t_light .t_dark .t_active_SliderTrack, +:root.t_light .t_dark .t_active_TooltipArrow, +:root.t_light .t_dark .t_Card, +:root.t_light .t_dark .t_Input, +:root.t_light .t_dark .t_light .t_dark .t_active_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_active_Progress, +:root.t_light .t_dark .t_light .t_dark .t_active_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_Card, +:root.t_light .t_dark .t_light .t_dark .t_Input, +:root.t_light .t_dark .t_light .t_dark .t_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_Progress, +:root.t_light .t_dark .t_light .t_dark .t_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_surface1, +:root.t_light .t_dark .t_light .t_dark .t_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_TooltipArrow, +:root.t_light .t_dark .t_ListItem, +:root.t_light .t_dark .t_Progress, +:root.t_light .t_dark .t_SelectTrigger, +:root.t_light .t_dark .t_SliderTrack, +:root.t_light .t_dark .t_surface1, +:root.t_light .t_dark .t_TextArea, +:root.t_light .t_dark .t_TooltipArrow { + --background: var(--color-22); + --backgroundHover: var(--color-23); + --backgroundPress: var(--color-21); + --backgroundFocus: var(--color-21); + --borderColor: var(--color-25); + --borderColorHover: var(--color-26); + --borderColorFocus: var(--color-25); + --borderColorPress: var(--color-24); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_active_ListItem, + .t_active_Progress, + .t_active_SliderTrack, + .t_active_TooltipArrow, + .t_Card, + .t_Input, + .t_light .t_dark .t_active_ListItem, + .t_light .t_dark .t_active_Progress, + .t_light .t_dark .t_active_SliderTrack, + .t_light .t_dark .t_active_TooltipArrow, + .t_light .t_dark .t_Card, + .t_light .t_dark .t_Input, + .t_light .t_dark .t_ListItem, + .t_light .t_dark .t_Progress, + .t_light .t_dark .t_SelectTrigger, + .t_light .t_dark .t_SliderTrack, + .t_light .t_dark .t_surface1, + .t_light .t_dark .t_TextArea, + .t_light .t_dark .t_TooltipArrow, + .t_ListItem, + .t_Progress, + .t_SelectTrigger, + .t_SliderTrack, + .t_surface1, + .t_TextArea, + .t_TooltipArrow { + --background: var(--color-22); + --backgroundHover: var(--color-23); + --backgroundPress: var(--color-21); + --backgroundFocus: var(--color-21); + --borderColor: var(--color-25); + --borderColorHover: var(--color-26); + --borderColorFocus: var(--color-25); + --borderColorPress: var(--color-24); + } +} +:root.t_dark .t_Checkbox, +:root.t_dark .t_light .t_dark .t_Checkbox, +:root.t_dark .t_light .t_dark .t_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_surface2, +:root.t_dark .t_light .t_dark .t_Switch, +:root.t_dark .t_light .t_dark .t_TooltipContent, +:root.t_dark .t_RadioGroupItem, +:root.t_dark .t_surface2, +:root.t_dark .t_Switch, +:root.t_dark .t_TooltipContent, +:root.t_light .t_dark .t_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_surface2, +:root.t_light .t_dark .t_light .t_dark .t_Switch, +:root.t_light .t_dark .t_light .t_dark .t_TooltipContent, +:root.t_light .t_dark .t_RadioGroupItem, +:root.t_light .t_dark .t_surface2, +:root.t_light .t_dark .t_Switch, +:root.t_light .t_dark .t_TooltipContent { + --background: var(--color-23); + --backgroundHover: var(--color-24); + --backgroundPress: var(--color-22); + --backgroundFocus: var(--color-22); + --borderColor: var(--color-26); + --borderColorHover: var(--color-27); + --borderColorFocus: var(--color-26); + --borderColorPress: var(--color-25); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_Checkbox, + .t_light .t_dark .t_Checkbox, + .t_light .t_dark .t_RadioGroupItem, + .t_light .t_dark .t_surface2, + .t_light .t_dark .t_Switch, + .t_light .t_dark .t_TooltipContent, + .t_RadioGroupItem, + .t_surface2, + .t_Switch, + .t_TooltipContent { + --background: var(--color-23); + --backgroundHover: var(--color-24); + --backgroundPress: var(--color-22); + --backgroundFocus: var(--color-22); + --borderColor: var(--color-26); + --borderColorHover: var(--color-27); + --borderColorFocus: var(--color-26); + --borderColorPress: var(--color-25); + } +} +:root.t_dark .t_active_Button, +:root.t_dark .t_active_Card, +:root.t_dark .t_active_Checkbox, +:root.t_dark .t_active_Input, +:root.t_dark .t_active_RadioGroupItem, +:root.t_dark .t_active_SelectTrigger, +:root.t_dark .t_active_Switch, +:root.t_dark .t_active_TextArea, +:root.t_dark .t_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_active_Button, +:root.t_dark .t_light .t_dark .t_active_Card, +:root.t_dark .t_light .t_dark .t_active_Checkbox, +:root.t_dark .t_light .t_dark .t_active_Input, +:root.t_dark .t_light .t_dark .t_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_active_Switch, +:root.t_dark .t_light .t_dark .t_active_TextArea, +:root.t_dark .t_light .t_dark .t_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_surface4, +:root.t_dark .t_surface4, +:root.t_light .t_dark .t_active_Button, +:root.t_light .t_dark .t_active_Card, +:root.t_light .t_dark .t_active_Checkbox, +:root.t_light .t_dark .t_active_Input, +:root.t_light .t_dark .t_active_RadioGroupItem, +:root.t_light .t_dark .t_active_SelectTrigger, +:root.t_light .t_dark .t_active_Switch, +:root.t_light .t_dark .t_active_TextArea, +:root.t_light .t_dark .t_active_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_active_Button, +:root.t_light .t_dark .t_light .t_dark .t_active_Card, +:root.t_light .t_dark .t_light .t_dark .t_active_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_active_Input, +:root.t_light .t_dark .t_light .t_dark .t_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_active_Switch, +:root.t_light .t_dark .t_light .t_dark .t_active_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_active_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_surface4, +:root.t_light .t_dark .t_surface4 { + --background: var(--color-26); + --backgroundHover: var(--color-26); + --backgroundPress: var(--color-25); + --backgroundFocus: var(--color-25); + --borderColor: var(--color-26); + --borderColorHover: var(--color-26); + --borderColorFocus: var(--color-25); + --borderColorPress: var(--color-25); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_active_Button, + .t_active_Card, + .t_active_Checkbox, + .t_active_Input, + .t_active_RadioGroupItem, + .t_active_SelectTrigger, + .t_active_Switch, + .t_active_TextArea, + .t_active_TooltipContent, + .t_light .t_dark .t_active_Button, + .t_light .t_dark .t_active_Card, + .t_light .t_dark .t_active_Checkbox, + .t_light .t_dark .t_active_Input, + .t_light .t_dark .t_active_RadioGroupItem, + .t_light .t_dark .t_active_SelectTrigger, + .t_light .t_dark .t_active_Switch, + .t_light .t_dark .t_active_TextArea, + .t_light .t_dark .t_active_TooltipContent, + .t_light .t_dark .t_surface4, + .t_surface4 { + --background: var(--color-26); + --backgroundHover: var(--color-26); + --backgroundPress: var(--color-25); + --backgroundFocus: var(--color-25); + --borderColor: var(--color-26); + --borderColorHover: var(--color-26); + --borderColorFocus: var(--color-25); + --borderColorPress: var(--color-25); + } +} +:root.t_dark .t_light .t_dark .t_light .t_orange_alt1, +:root.t_dark .t_light .t_orange_alt1, +:root.t_light .t_dark .t_light .t_orange_alt1, +:root.t_light .t_orange_alt1 { + --color: var(--color-79); + --colorHover: var(--color-78); + --colorPress: var(--color-79); + --colorFocus: var(--color-78); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_orange_alt1, + .t_orange_alt1 { + --color: var(--color-79); + --colorHover: var(--color-78); + --colorPress: var(--color-79); + --colorFocus: var(--color-78); + } +} +:root.t_dark .t_light .t_dark .t_light .t_orange_alt2, +:root.t_dark .t_light .t_orange_alt2, +:root.t_light .t_dark .t_light .t_orange_alt2, +:root.t_light .t_orange_alt2 { + --color: var(--color-78); + --colorHover: var(--color-173); + --colorPress: var(--color-78); + --colorFocus: var(--color-173); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_orange_alt2, + .t_orange_alt2 { + --color: var(--color-78); + --colorHover: var(--color-173); + --colorPress: var(--color-78); + --colorFocus: var(--color-173); + } +} +:root.t_dark .t_light .t_dark .t_light .t_orange_active, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_orange_Button, +:root.t_dark .t_light .t_dark .t_light .t_orange_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_orange_surface3, +:root.t_dark .t_light .t_orange_active, +:root.t_dark .t_light .t_orange_active_SliderTrackActive, +:root.t_dark .t_light .t_orange_Button, +:root.t_dark .t_light .t_orange_SliderTrackActive, +:root.t_dark .t_light .t_orange_surface3, +:root.t_light .t_dark .t_light .t_orange_active, +:root.t_light .t_dark .t_light .t_orange_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_orange_Button, +:root.t_light .t_dark .t_light .t_orange_SliderTrackActive, +:root.t_light .t_dark .t_light .t_orange_surface3, +:root.t_light .t_orange_active, +:root.t_light .t_orange_active_SliderTrackActive, +:root.t_light .t_orange_Button, +:root.t_light .t_orange_SliderTrackActive, +:root.t_light .t_orange_surface3 { + --background: var(--color-72); + --backgroundHover: var(--color-71); + --backgroundPress: var(--color-73); + --backgroundFocus: var(--color-73); + --borderColor: var(--color-75); + --borderColorHover: var(--color-74); + --borderColorFocus: var(--color-75); + --borderColorPress: var(--color-76); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_orange_active, + .t_dark .t_light .t_orange_active_SliderTrackActive, + .t_dark .t_light .t_orange_Button, + .t_dark .t_light .t_orange_SliderTrackActive, + .t_dark .t_light .t_orange_surface3, + .t_orange_active, + .t_orange_active_SliderTrackActive, + .t_orange_Button, + .t_orange_SliderTrackActive, + .t_orange_surface3 { + --background: var(--color-72); + --backgroundHover: var(--color-71); + --backgroundPress: var(--color-73); + --backgroundFocus: var(--color-73); + --borderColor: var(--color-75); + --borderColorHover: var(--color-74); + --borderColorFocus: var(--color-75); + --borderColorPress: var(--color-76); + } +} +:root.t_dark .t_light .t_dark .t_light .t_orange_active_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_Progress, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_light .t_orange_Card, +:root.t_dark .t_light .t_dark .t_light .t_orange_Input, +:root.t_dark .t_light .t_dark .t_light .t_orange_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_orange_Progress, +:root.t_dark .t_light .t_dark .t_light .t_orange_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_orange_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_orange_surface1, +:root.t_dark .t_light .t_dark .t_light .t_orange_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_orange_TooltipArrow, +:root.t_dark .t_light .t_orange_active_ListItem, +:root.t_dark .t_light .t_orange_active_Progress, +:root.t_dark .t_light .t_orange_active_SliderTrack, +:root.t_dark .t_light .t_orange_active_TooltipArrow, +:root.t_dark .t_light .t_orange_Card, +:root.t_dark .t_light .t_orange_Input, +:root.t_dark .t_light .t_orange_ListItem, +:root.t_dark .t_light .t_orange_Progress, +:root.t_dark .t_light .t_orange_SelectTrigger, +:root.t_dark .t_light .t_orange_SliderTrack, +:root.t_dark .t_light .t_orange_surface1, +:root.t_dark .t_light .t_orange_TextArea, +:root.t_dark .t_light .t_orange_TooltipArrow, +:root.t_light .t_dark .t_light .t_orange_active_ListItem, +:root.t_light .t_dark .t_light .t_orange_active_Progress, +:root.t_light .t_dark .t_light .t_orange_active_SliderTrack, +:root.t_light .t_dark .t_light .t_orange_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_orange_Card, +:root.t_light .t_dark .t_light .t_orange_Input, +:root.t_light .t_dark .t_light .t_orange_ListItem, +:root.t_light .t_dark .t_light .t_orange_Progress, +:root.t_light .t_dark .t_light .t_orange_SelectTrigger, +:root.t_light .t_dark .t_light .t_orange_SliderTrack, +:root.t_light .t_dark .t_light .t_orange_surface1, +:root.t_light .t_dark .t_light .t_orange_TextArea, +:root.t_light .t_dark .t_light .t_orange_TooltipArrow, +:root.t_light .t_orange_active_ListItem, +:root.t_light .t_orange_active_Progress, +:root.t_light .t_orange_active_SliderTrack, +:root.t_light .t_orange_active_TooltipArrow, +:root.t_light .t_orange_Card, +:root.t_light .t_orange_Input, +:root.t_light .t_orange_ListItem, +:root.t_light .t_orange_Progress, +:root.t_light .t_orange_SelectTrigger, +:root.t_light .t_orange_SliderTrack, +:root.t_light .t_orange_surface1, +:root.t_light .t_orange_TextArea, +:root.t_light .t_orange_TooltipArrow { + --background: var(--color-70); + --backgroundHover: var(--color-69); + --backgroundPress: var(--color-71); + --backgroundFocus: var(--color-71); + --borderColor: var(--color-73); + --borderColorHover: var(--color-72); + --borderColorFocus: var(--color-73); + --borderColorPress: var(--color-74); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_orange_active_ListItem, + .t_dark .t_light .t_orange_active_Progress, + .t_dark .t_light .t_orange_active_SliderTrack, + .t_dark .t_light .t_orange_active_TooltipArrow, + .t_dark .t_light .t_orange_Card, + .t_dark .t_light .t_orange_Input, + .t_dark .t_light .t_orange_ListItem, + .t_dark .t_light .t_orange_Progress, + .t_dark .t_light .t_orange_SelectTrigger, + .t_dark .t_light .t_orange_SliderTrack, + .t_dark .t_light .t_orange_surface1, + .t_dark .t_light .t_orange_TextArea, + .t_dark .t_light .t_orange_TooltipArrow, + .t_orange_active_ListItem, + .t_orange_active_Progress, + .t_orange_active_SliderTrack, + .t_orange_active_TooltipArrow, + .t_orange_Card, + .t_orange_Input, + .t_orange_ListItem, + .t_orange_Progress, + .t_orange_SelectTrigger, + .t_orange_SliderTrack, + .t_orange_surface1, + .t_orange_TextArea, + .t_orange_TooltipArrow { + --background: var(--color-70); + --backgroundHover: var(--color-69); + --backgroundPress: var(--color-71); + --backgroundFocus: var(--color-71); + --borderColor: var(--color-73); + --borderColorHover: var(--color-72); + --borderColorFocus: var(--color-73); + --borderColorPress: var(--color-74); + } +} +:root.t_dark .t_light .t_dark .t_light .t_orange_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_orange_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_orange_surface2, +:root.t_dark .t_light .t_dark .t_light .t_orange_Switch, +:root.t_dark .t_light .t_dark .t_light .t_orange_TooltipContent, +:root.t_dark .t_light .t_orange_Checkbox, +:root.t_dark .t_light .t_orange_RadioGroupItem, +:root.t_dark .t_light .t_orange_surface2, +:root.t_dark .t_light .t_orange_Switch, +:root.t_dark .t_light .t_orange_TooltipContent, +:root.t_light .t_dark .t_light .t_orange_Checkbox, +:root.t_light .t_dark .t_light .t_orange_RadioGroupItem, +:root.t_light .t_dark .t_light .t_orange_surface2, +:root.t_light .t_dark .t_light .t_orange_Switch, +:root.t_light .t_dark .t_light .t_orange_TooltipContent, +:root.t_light .t_orange_Checkbox, +:root.t_light .t_orange_RadioGroupItem, +:root.t_light .t_orange_surface2, +:root.t_light .t_orange_Switch, +:root.t_light .t_orange_TooltipContent { + --background: var(--color-71); + --backgroundHover: var(--color-70); + --backgroundPress: var(--color-72); + --backgroundFocus: var(--color-72); + --borderColor: var(--color-74); + --borderColorHover: var(--color-73); + --borderColorFocus: var(--color-74); + --borderColorPress: var(--color-75); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_orange_Checkbox, + .t_dark .t_light .t_orange_RadioGroupItem, + .t_dark .t_light .t_orange_surface2, + .t_dark .t_light .t_orange_Switch, + .t_dark .t_light .t_orange_TooltipContent, + .t_orange_Checkbox, + .t_orange_RadioGroupItem, + .t_orange_surface2, + .t_orange_Switch, + .t_orange_TooltipContent { + --background: var(--color-71); + --backgroundHover: var(--color-70); + --backgroundPress: var(--color-72); + --backgroundFocus: var(--color-72); + --borderColor: var(--color-74); + --borderColorHover: var(--color-73); + --borderColorFocus: var(--color-74); + --borderColorPress: var(--color-75); + } +} +:root.t_dark .t_light .t_dark .t_light .t_orange_active_Button, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_Card, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_Input, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_Switch, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_light .t_orange_surface4, +:root.t_dark .t_light .t_orange_active_Button, +:root.t_dark .t_light .t_orange_active_Card, +:root.t_dark .t_light .t_orange_active_Checkbox, +:root.t_dark .t_light .t_orange_active_Input, +:root.t_dark .t_light .t_orange_active_RadioGroupItem, +:root.t_dark .t_light .t_orange_active_SelectTrigger, +:root.t_dark .t_light .t_orange_active_Switch, +:root.t_dark .t_light .t_orange_active_TextArea, +:root.t_dark .t_light .t_orange_active_TooltipContent, +:root.t_dark .t_light .t_orange_surface4, +:root.t_light .t_dark .t_light .t_orange_active_Button, +:root.t_light .t_dark .t_light .t_orange_active_Card, +:root.t_light .t_dark .t_light .t_orange_active_Checkbox, +:root.t_light .t_dark .t_light .t_orange_active_Input, +:root.t_light .t_dark .t_light .t_orange_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_orange_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_orange_active_Switch, +:root.t_light .t_dark .t_light .t_orange_active_TextArea, +:root.t_light .t_dark .t_light .t_orange_active_TooltipContent, +:root.t_light .t_dark .t_light .t_orange_surface4, +:root.t_light .t_orange_active_Button, +:root.t_light .t_orange_active_Card, +:root.t_light .t_orange_active_Checkbox, +:root.t_light .t_orange_active_Input, +:root.t_light .t_orange_active_RadioGroupItem, +:root.t_light .t_orange_active_SelectTrigger, +:root.t_light .t_orange_active_Switch, +:root.t_light .t_orange_active_TextArea, +:root.t_light .t_orange_active_TooltipContent, +:root.t_light .t_orange_surface4 { + --background: var(--color-74); + --backgroundHover: var(--color-74); + --backgroundPress: var(--color-75); + --backgroundFocus: var(--color-75); + --borderColor: var(--color-74); + --borderColorHover: var(--color-74); + --borderColorFocus: var(--color-75); + --borderColorPress: var(--color-75); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_orange_active_Button, + .t_dark .t_light .t_orange_active_Card, + .t_dark .t_light .t_orange_active_Checkbox, + .t_dark .t_light .t_orange_active_Input, + .t_dark .t_light .t_orange_active_RadioGroupItem, + .t_dark .t_light .t_orange_active_SelectTrigger, + .t_dark .t_light .t_orange_active_Switch, + .t_dark .t_light .t_orange_active_TextArea, + .t_dark .t_light .t_orange_active_TooltipContent, + .t_dark .t_light .t_orange_surface4, + .t_orange_active_Button, + .t_orange_active_Card, + .t_orange_active_Checkbox, + .t_orange_active_Input, + .t_orange_active_RadioGroupItem, + .t_orange_active_SelectTrigger, + .t_orange_active_Switch, + .t_orange_active_TextArea, + .t_orange_active_TooltipContent, + .t_orange_surface4 { + --background: var(--color-74); + --backgroundHover: var(--color-74); + --backgroundPress: var(--color-75); + --backgroundFocus: var(--color-75); + --borderColor: var(--color-74); + --borderColorHover: var(--color-74); + --borderColorFocus: var(--color-75); + --borderColorPress: var(--color-75); + } +} +:root.t_dark .t_light .t_dark .t_light .t_yellow_alt1, +:root.t_dark .t_light .t_yellow_alt1, +:root.t_light .t_dark .t_light .t_yellow_alt1, +:root.t_light .t_yellow_alt1 { + --color: var(--color-127); + --colorHover: var(--color-126); + --colorPress: var(--color-127); + --colorFocus: var(--color-126); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_yellow_alt1, + .t_yellow_alt1 { + --color: var(--color-127); + --colorHover: var(--color-126); + --colorPress: var(--color-127); + --colorFocus: var(--color-126); + } +} +:root.t_dark .t_light .t_dark .t_light .t_yellow_alt2, +:root.t_dark .t_light .t_yellow_alt2, +:root.t_light .t_dark .t_light .t_yellow_alt2, +:root.t_light .t_yellow_alt2 { + --color: var(--color-126); + --colorHover: var(--color-221); + --colorPress: var(--color-126); + --colorFocus: var(--color-221); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_yellow_alt2, + .t_yellow_alt2 { + --color: var(--color-126); + --colorHover: var(--color-221); + --colorPress: var(--color-126); + --colorFocus: var(--color-221); + } +} +:root.t_dark .t_light .t_dark .t_light .t_yellow_active, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_yellow_Button, +:root.t_dark .t_light .t_dark .t_light .t_yellow_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_yellow_surface3, +:root.t_dark .t_light .t_yellow_active, +:root.t_dark .t_light .t_yellow_active_SliderTrackActive, +:root.t_dark .t_light .t_yellow_Button, +:root.t_dark .t_light .t_yellow_SliderTrackActive, +:root.t_dark .t_light .t_yellow_surface3, +:root.t_light .t_dark .t_light .t_yellow_active, +:root.t_light .t_dark .t_light .t_yellow_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_yellow_Button, +:root.t_light .t_dark .t_light .t_yellow_SliderTrackActive, +:root.t_light .t_dark .t_light .t_yellow_surface3, +:root.t_light .t_yellow_active, +:root.t_light .t_yellow_active_SliderTrackActive, +:root.t_light .t_yellow_Button, +:root.t_light .t_yellow_SliderTrackActive, +:root.t_light .t_yellow_surface3 { + --background: var(--color-120); + --backgroundHover: var(--color-119); + --backgroundPress: var(--color-121); + --backgroundFocus: var(--color-121); + --borderColor: var(--color-123); + --borderColorHover: var(--color-122); + --borderColorFocus: var(--color-123); + --borderColorPress: var(--color-124); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_yellow_active, + .t_dark .t_light .t_yellow_active_SliderTrackActive, + .t_dark .t_light .t_yellow_Button, + .t_dark .t_light .t_yellow_SliderTrackActive, + .t_dark .t_light .t_yellow_surface3, + .t_yellow_active, + .t_yellow_active_SliderTrackActive, + .t_yellow_Button, + .t_yellow_SliderTrackActive, + .t_yellow_surface3 { + --background: var(--color-120); + --backgroundHover: var(--color-119); + --backgroundPress: var(--color-121); + --backgroundFocus: var(--color-121); + --borderColor: var(--color-123); + --borderColorHover: var(--color-122); + --borderColorFocus: var(--color-123); + --borderColorPress: var(--color-124); + } +} +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_Progress, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_light .t_yellow_Card, +:root.t_dark .t_light .t_dark .t_light .t_yellow_Input, +:root.t_dark .t_light .t_dark .t_light .t_yellow_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_yellow_Progress, +:root.t_dark .t_light .t_dark .t_light .t_yellow_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_yellow_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_yellow_surface1, +:root.t_dark .t_light .t_dark .t_light .t_yellow_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_yellow_TooltipArrow, +:root.t_dark .t_light .t_yellow_active_ListItem, +:root.t_dark .t_light .t_yellow_active_Progress, +:root.t_dark .t_light .t_yellow_active_SliderTrack, +:root.t_dark .t_light .t_yellow_active_TooltipArrow, +:root.t_dark .t_light .t_yellow_Card, +:root.t_dark .t_light .t_yellow_Input, +:root.t_dark .t_light .t_yellow_ListItem, +:root.t_dark .t_light .t_yellow_Progress, +:root.t_dark .t_light .t_yellow_SelectTrigger, +:root.t_dark .t_light .t_yellow_SliderTrack, +:root.t_dark .t_light .t_yellow_surface1, +:root.t_dark .t_light .t_yellow_TextArea, +:root.t_dark .t_light .t_yellow_TooltipArrow, +:root.t_light .t_dark .t_light .t_yellow_active_ListItem, +:root.t_light .t_dark .t_light .t_yellow_active_Progress, +:root.t_light .t_dark .t_light .t_yellow_active_SliderTrack, +:root.t_light .t_dark .t_light .t_yellow_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_yellow_Card, +:root.t_light .t_dark .t_light .t_yellow_Input, +:root.t_light .t_dark .t_light .t_yellow_ListItem, +:root.t_light .t_dark .t_light .t_yellow_Progress, +:root.t_light .t_dark .t_light .t_yellow_SelectTrigger, +:root.t_light .t_dark .t_light .t_yellow_SliderTrack, +:root.t_light .t_dark .t_light .t_yellow_surface1, +:root.t_light .t_dark .t_light .t_yellow_TextArea, +:root.t_light .t_dark .t_light .t_yellow_TooltipArrow, +:root.t_light .t_yellow_active_ListItem, +:root.t_light .t_yellow_active_Progress, +:root.t_light .t_yellow_active_SliderTrack, +:root.t_light .t_yellow_active_TooltipArrow, +:root.t_light .t_yellow_Card, +:root.t_light .t_yellow_Input, +:root.t_light .t_yellow_ListItem, +:root.t_light .t_yellow_Progress, +:root.t_light .t_yellow_SelectTrigger, +:root.t_light .t_yellow_SliderTrack, +:root.t_light .t_yellow_surface1, +:root.t_light .t_yellow_TextArea, +:root.t_light .t_yellow_TooltipArrow { + --background: var(--color-118); + --backgroundHover: var(--color-117); + --backgroundPress: var(--color-119); + --backgroundFocus: var(--color-119); + --borderColor: var(--color-121); + --borderColorHover: var(--color-120); + --borderColorFocus: var(--color-121); + --borderColorPress: var(--color-122); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_yellow_active_ListItem, + .t_dark .t_light .t_yellow_active_Progress, + .t_dark .t_light .t_yellow_active_SliderTrack, + .t_dark .t_light .t_yellow_active_TooltipArrow, + .t_dark .t_light .t_yellow_Card, + .t_dark .t_light .t_yellow_Input, + .t_dark .t_light .t_yellow_ListItem, + .t_dark .t_light .t_yellow_Progress, + .t_dark .t_light .t_yellow_SelectTrigger, + .t_dark .t_light .t_yellow_SliderTrack, + .t_dark .t_light .t_yellow_surface1, + .t_dark .t_light .t_yellow_TextArea, + .t_dark .t_light .t_yellow_TooltipArrow, + .t_yellow_active_ListItem, + .t_yellow_active_Progress, + .t_yellow_active_SliderTrack, + .t_yellow_active_TooltipArrow, + .t_yellow_Card, + .t_yellow_Input, + .t_yellow_ListItem, + .t_yellow_Progress, + .t_yellow_SelectTrigger, + .t_yellow_SliderTrack, + .t_yellow_surface1, + .t_yellow_TextArea, + .t_yellow_TooltipArrow { + --background: var(--color-118); + --backgroundHover: var(--color-117); + --backgroundPress: var(--color-119); + --backgroundFocus: var(--color-119); + --borderColor: var(--color-121); + --borderColorHover: var(--color-120); + --borderColorFocus: var(--color-121); + --borderColorPress: var(--color-122); + } +} +:root.t_dark .t_light .t_dark .t_light .t_yellow_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_yellow_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_yellow_surface2, +:root.t_dark .t_light .t_dark .t_light .t_yellow_Switch, +:root.t_dark .t_light .t_dark .t_light .t_yellow_TooltipContent, +:root.t_dark .t_light .t_yellow_Checkbox, +:root.t_dark .t_light .t_yellow_RadioGroupItem, +:root.t_dark .t_light .t_yellow_surface2, +:root.t_dark .t_light .t_yellow_Switch, +:root.t_dark .t_light .t_yellow_TooltipContent, +:root.t_light .t_dark .t_light .t_yellow_Checkbox, +:root.t_light .t_dark .t_light .t_yellow_RadioGroupItem, +:root.t_light .t_dark .t_light .t_yellow_surface2, +:root.t_light .t_dark .t_light .t_yellow_Switch, +:root.t_light .t_dark .t_light .t_yellow_TooltipContent, +:root.t_light .t_yellow_Checkbox, +:root.t_light .t_yellow_RadioGroupItem, +:root.t_light .t_yellow_surface2, +:root.t_light .t_yellow_Switch, +:root.t_light .t_yellow_TooltipContent { + --background: var(--color-119); + --backgroundHover: var(--color-118); + --backgroundPress: var(--color-120); + --backgroundFocus: var(--color-120); + --borderColor: var(--color-122); + --borderColorHover: var(--color-121); + --borderColorFocus: var(--color-122); + --borderColorPress: var(--color-123); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_yellow_Checkbox, + .t_dark .t_light .t_yellow_RadioGroupItem, + .t_dark .t_light .t_yellow_surface2, + .t_dark .t_light .t_yellow_Switch, + .t_dark .t_light .t_yellow_TooltipContent, + .t_yellow_Checkbox, + .t_yellow_RadioGroupItem, + .t_yellow_surface2, + .t_yellow_Switch, + .t_yellow_TooltipContent { + --background: var(--color-119); + --backgroundHover: var(--color-118); + --backgroundPress: var(--color-120); + --backgroundFocus: var(--color-120); + --borderColor: var(--color-122); + --borderColorHover: var(--color-121); + --borderColorFocus: var(--color-122); + --borderColorPress: var(--color-123); + } +} +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_Button, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_Card, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_Input, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_Switch, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_light .t_yellow_surface4, +:root.t_dark .t_light .t_yellow_active_Button, +:root.t_dark .t_light .t_yellow_active_Card, +:root.t_dark .t_light .t_yellow_active_Checkbox, +:root.t_dark .t_light .t_yellow_active_Input, +:root.t_dark .t_light .t_yellow_active_RadioGroupItem, +:root.t_dark .t_light .t_yellow_active_SelectTrigger, +:root.t_dark .t_light .t_yellow_active_Switch, +:root.t_dark .t_light .t_yellow_active_TextArea, +:root.t_dark .t_light .t_yellow_active_TooltipContent, +:root.t_dark .t_light .t_yellow_surface4, +:root.t_light .t_dark .t_light .t_yellow_active_Button, +:root.t_light .t_dark .t_light .t_yellow_active_Card, +:root.t_light .t_dark .t_light .t_yellow_active_Checkbox, +:root.t_light .t_dark .t_light .t_yellow_active_Input, +:root.t_light .t_dark .t_light .t_yellow_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_yellow_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_yellow_active_Switch, +:root.t_light .t_dark .t_light .t_yellow_active_TextArea, +:root.t_light .t_dark .t_light .t_yellow_active_TooltipContent, +:root.t_light .t_dark .t_light .t_yellow_surface4, +:root.t_light .t_yellow_active_Button, +:root.t_light .t_yellow_active_Card, +:root.t_light .t_yellow_active_Checkbox, +:root.t_light .t_yellow_active_Input, +:root.t_light .t_yellow_active_RadioGroupItem, +:root.t_light .t_yellow_active_SelectTrigger, +:root.t_light .t_yellow_active_Switch, +:root.t_light .t_yellow_active_TextArea, +:root.t_light .t_yellow_active_TooltipContent, +:root.t_light .t_yellow_surface4 { + --background: var(--color-122); + --backgroundHover: var(--color-122); + --backgroundPress: var(--color-123); + --backgroundFocus: var(--color-123); + --borderColor: var(--color-122); + --borderColorHover: var(--color-122); + --borderColorFocus: var(--color-123); + --borderColorPress: var(--color-123); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_yellow_active_Button, + .t_dark .t_light .t_yellow_active_Card, + .t_dark .t_light .t_yellow_active_Checkbox, + .t_dark .t_light .t_yellow_active_Input, + .t_dark .t_light .t_yellow_active_RadioGroupItem, + .t_dark .t_light .t_yellow_active_SelectTrigger, + .t_dark .t_light .t_yellow_active_Switch, + .t_dark .t_light .t_yellow_active_TextArea, + .t_dark .t_light .t_yellow_active_TooltipContent, + .t_dark .t_light .t_yellow_surface4, + .t_yellow_active_Button, + .t_yellow_active_Card, + .t_yellow_active_Checkbox, + .t_yellow_active_Input, + .t_yellow_active_RadioGroupItem, + .t_yellow_active_SelectTrigger, + .t_yellow_active_Switch, + .t_yellow_active_TextArea, + .t_yellow_active_TooltipContent, + .t_yellow_surface4 { + --background: var(--color-122); + --backgroundHover: var(--color-122); + --backgroundPress: var(--color-123); + --backgroundFocus: var(--color-123); + --borderColor: var(--color-122); + --borderColorHover: var(--color-122); + --borderColorFocus: var(--color-123); + --borderColorPress: var(--color-123); + } +} +:root.t_dark .t_light .t_dark .t_light .t_green_alt1, +:root.t_dark .t_light .t_green_alt1, +:root.t_light .t_dark .t_light .t_green_alt1, +:root.t_light .t_green_alt1 { + --color: var(--color-67); + --colorHover: var(--color-66); + --colorPress: var(--color-67); + --colorFocus: var(--color-66); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_green_alt1, + .t_green_alt1 { + --color: var(--color-67); + --colorHover: var(--color-66); + --colorPress: var(--color-67); + --colorFocus: var(--color-66); + } +} +:root.t_dark .t_light .t_dark .t_light .t_green_alt2, +:root.t_dark .t_light .t_green_alt2, +:root.t_light .t_dark .t_light .t_green_alt2, +:root.t_light .t_green_alt2 { + --color: var(--color-66); + --colorHover: var(--color-161); + --colorPress: var(--color-66); + --colorFocus: var(--color-161); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_green_alt2, + .t_green_alt2 { + --color: var(--color-66); + --colorHover: var(--color-161); + --colorPress: var(--color-66); + --colorFocus: var(--color-161); + } +} +:root.t_dark .t_light .t_dark .t_light .t_green_active, +:root.t_dark .t_light .t_dark .t_light .t_green_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_green_Button, +:root.t_dark .t_light .t_dark .t_light .t_green_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_green_surface3, +:root.t_dark .t_light .t_green_active, +:root.t_dark .t_light .t_green_active_SliderTrackActive, +:root.t_dark .t_light .t_green_Button, +:root.t_dark .t_light .t_green_SliderTrackActive, +:root.t_dark .t_light .t_green_surface3, +:root.t_light .t_dark .t_light .t_green_active, +:root.t_light .t_dark .t_light .t_green_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_green_Button, +:root.t_light .t_dark .t_light .t_green_SliderTrackActive, +:root.t_light .t_dark .t_light .t_green_surface3, +:root.t_light .t_green_active, +:root.t_light .t_green_active_SliderTrackActive, +:root.t_light .t_green_Button, +:root.t_light .t_green_SliderTrackActive, +:root.t_light .t_green_surface3 { + --background: var(--color-60); + --backgroundHover: var(--color-59); + --backgroundPress: var(--color-61); + --backgroundFocus: var(--color-61); + --borderColor: var(--color-63); + --borderColorHover: var(--color-62); + --borderColorFocus: var(--color-63); + --borderColorPress: var(--color-64); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_green_active, + .t_dark .t_light .t_green_active_SliderTrackActive, + .t_dark .t_light .t_green_Button, + .t_dark .t_light .t_green_SliderTrackActive, + .t_dark .t_light .t_green_surface3, + .t_green_active, + .t_green_active_SliderTrackActive, + .t_green_Button, + .t_green_SliderTrackActive, + .t_green_surface3 { + --background: var(--color-60); + --backgroundHover: var(--color-59); + --backgroundPress: var(--color-61); + --backgroundFocus: var(--color-61); + --borderColor: var(--color-63); + --borderColorHover: var(--color-62); + --borderColorFocus: var(--color-63); + --borderColorPress: var(--color-64); + } +} +:root.t_dark .t_light .t_dark .t_light .t_green_active_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_green_active_Progress, +:root.t_dark .t_light .t_dark .t_light .t_green_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_green_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_light .t_green_Card, +:root.t_dark .t_light .t_dark .t_light .t_green_Input, +:root.t_dark .t_light .t_dark .t_light .t_green_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_green_Progress, +:root.t_dark .t_light .t_dark .t_light .t_green_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_green_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_green_surface1, +:root.t_dark .t_light .t_dark .t_light .t_green_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_green_TooltipArrow, +:root.t_dark .t_light .t_green_active_ListItem, +:root.t_dark .t_light .t_green_active_Progress, +:root.t_dark .t_light .t_green_active_SliderTrack, +:root.t_dark .t_light .t_green_active_TooltipArrow, +:root.t_dark .t_light .t_green_Card, +:root.t_dark .t_light .t_green_Input, +:root.t_dark .t_light .t_green_ListItem, +:root.t_dark .t_light .t_green_Progress, +:root.t_dark .t_light .t_green_SelectTrigger, +:root.t_dark .t_light .t_green_SliderTrack, +:root.t_dark .t_light .t_green_surface1, +:root.t_dark .t_light .t_green_TextArea, +:root.t_dark .t_light .t_green_TooltipArrow, +:root.t_light .t_dark .t_light .t_green_active_ListItem, +:root.t_light .t_dark .t_light .t_green_active_Progress, +:root.t_light .t_dark .t_light .t_green_active_SliderTrack, +:root.t_light .t_dark .t_light .t_green_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_green_Card, +:root.t_light .t_dark .t_light .t_green_Input, +:root.t_light .t_dark .t_light .t_green_ListItem, +:root.t_light .t_dark .t_light .t_green_Progress, +:root.t_light .t_dark .t_light .t_green_SelectTrigger, +:root.t_light .t_dark .t_light .t_green_SliderTrack, +:root.t_light .t_dark .t_light .t_green_surface1, +:root.t_light .t_dark .t_light .t_green_TextArea, +:root.t_light .t_dark .t_light .t_green_TooltipArrow, +:root.t_light .t_green_active_ListItem, +:root.t_light .t_green_active_Progress, +:root.t_light .t_green_active_SliderTrack, +:root.t_light .t_green_active_TooltipArrow, +:root.t_light .t_green_Card, +:root.t_light .t_green_Input, +:root.t_light .t_green_ListItem, +:root.t_light .t_green_Progress, +:root.t_light .t_green_SelectTrigger, +:root.t_light .t_green_SliderTrack, +:root.t_light .t_green_surface1, +:root.t_light .t_green_TextArea, +:root.t_light .t_green_TooltipArrow { + --background: var(--color-58); + --backgroundHover: var(--color-57); + --backgroundPress: var(--color-59); + --backgroundFocus: var(--color-59); + --borderColor: var(--color-61); + --borderColorHover: var(--color-60); + --borderColorFocus: var(--color-61); + --borderColorPress: var(--color-62); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_green_active_ListItem, + .t_dark .t_light .t_green_active_Progress, + .t_dark .t_light .t_green_active_SliderTrack, + .t_dark .t_light .t_green_active_TooltipArrow, + .t_dark .t_light .t_green_Card, + .t_dark .t_light .t_green_Input, + .t_dark .t_light .t_green_ListItem, + .t_dark .t_light .t_green_Progress, + .t_dark .t_light .t_green_SelectTrigger, + .t_dark .t_light .t_green_SliderTrack, + .t_dark .t_light .t_green_surface1, + .t_dark .t_light .t_green_TextArea, + .t_dark .t_light .t_green_TooltipArrow, + .t_green_active_ListItem, + .t_green_active_Progress, + .t_green_active_SliderTrack, + .t_green_active_TooltipArrow, + .t_green_Card, + .t_green_Input, + .t_green_ListItem, + .t_green_Progress, + .t_green_SelectTrigger, + .t_green_SliderTrack, + .t_green_surface1, + .t_green_TextArea, + .t_green_TooltipArrow { + --background: var(--color-58); + --backgroundHover: var(--color-57); + --backgroundPress: var(--color-59); + --backgroundFocus: var(--color-59); + --borderColor: var(--color-61); + --borderColorHover: var(--color-60); + --borderColorFocus: var(--color-61); + --borderColorPress: var(--color-62); + } +} +:root.t_dark .t_light .t_dark .t_light .t_green_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_green_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_green_surface2, +:root.t_dark .t_light .t_dark .t_light .t_green_Switch, +:root.t_dark .t_light .t_dark .t_light .t_green_TooltipContent, +:root.t_dark .t_light .t_green_Checkbox, +:root.t_dark .t_light .t_green_RadioGroupItem, +:root.t_dark .t_light .t_green_surface2, +:root.t_dark .t_light .t_green_Switch, +:root.t_dark .t_light .t_green_TooltipContent, +:root.t_light .t_dark .t_light .t_green_Checkbox, +:root.t_light .t_dark .t_light .t_green_RadioGroupItem, +:root.t_light .t_dark .t_light .t_green_surface2, +:root.t_light .t_dark .t_light .t_green_Switch, +:root.t_light .t_dark .t_light .t_green_TooltipContent, +:root.t_light .t_green_Checkbox, +:root.t_light .t_green_RadioGroupItem, +:root.t_light .t_green_surface2, +:root.t_light .t_green_Switch, +:root.t_light .t_green_TooltipContent { + --background: var(--color-59); + --backgroundHover: var(--color-58); + --backgroundPress: var(--color-60); + --backgroundFocus: var(--color-60); + --borderColor: var(--color-62); + --borderColorHover: var(--color-61); + --borderColorFocus: var(--color-62); + --borderColorPress: var(--color-63); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_green_Checkbox, + .t_dark .t_light .t_green_RadioGroupItem, + .t_dark .t_light .t_green_surface2, + .t_dark .t_light .t_green_Switch, + .t_dark .t_light .t_green_TooltipContent, + .t_green_Checkbox, + .t_green_RadioGroupItem, + .t_green_surface2, + .t_green_Switch, + .t_green_TooltipContent { + --background: var(--color-59); + --backgroundHover: var(--color-58); + --backgroundPress: var(--color-60); + --backgroundFocus: var(--color-60); + --borderColor: var(--color-62); + --borderColorHover: var(--color-61); + --borderColorFocus: var(--color-62); + --borderColorPress: var(--color-63); + } +} +:root.t_dark .t_light .t_dark .t_light .t_green_active_Button, +:root.t_dark .t_light .t_dark .t_light .t_green_active_Card, +:root.t_dark .t_light .t_dark .t_light .t_green_active_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_green_active_Input, +:root.t_dark .t_light .t_dark .t_light .t_green_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_green_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_green_active_Switch, +:root.t_dark .t_light .t_dark .t_light .t_green_active_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_green_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_light .t_green_surface4, +:root.t_dark .t_light .t_green_active_Button, +:root.t_dark .t_light .t_green_active_Card, +:root.t_dark .t_light .t_green_active_Checkbox, +:root.t_dark .t_light .t_green_active_Input, +:root.t_dark .t_light .t_green_active_RadioGroupItem, +:root.t_dark .t_light .t_green_active_SelectTrigger, +:root.t_dark .t_light .t_green_active_Switch, +:root.t_dark .t_light .t_green_active_TextArea, +:root.t_dark .t_light .t_green_active_TooltipContent, +:root.t_dark .t_light .t_green_surface4, +:root.t_light .t_dark .t_light .t_green_active_Button, +:root.t_light .t_dark .t_light .t_green_active_Card, +:root.t_light .t_dark .t_light .t_green_active_Checkbox, +:root.t_light .t_dark .t_light .t_green_active_Input, +:root.t_light .t_dark .t_light .t_green_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_green_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_green_active_Switch, +:root.t_light .t_dark .t_light .t_green_active_TextArea, +:root.t_light .t_dark .t_light .t_green_active_TooltipContent, +:root.t_light .t_dark .t_light .t_green_surface4, +:root.t_light .t_green_active_Button, +:root.t_light .t_green_active_Card, +:root.t_light .t_green_active_Checkbox, +:root.t_light .t_green_active_Input, +:root.t_light .t_green_active_RadioGroupItem, +:root.t_light .t_green_active_SelectTrigger, +:root.t_light .t_green_active_Switch, +:root.t_light .t_green_active_TextArea, +:root.t_light .t_green_active_TooltipContent, +:root.t_light .t_green_surface4 { + --background: var(--color-62); + --backgroundHover: var(--color-62); + --backgroundPress: var(--color-63); + --backgroundFocus: var(--color-63); + --borderColor: var(--color-62); + --borderColorHover: var(--color-62); + --borderColorFocus: var(--color-63); + --borderColorPress: var(--color-63); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_green_active_Button, + .t_dark .t_light .t_green_active_Card, + .t_dark .t_light .t_green_active_Checkbox, + .t_dark .t_light .t_green_active_Input, + .t_dark .t_light .t_green_active_RadioGroupItem, + .t_dark .t_light .t_green_active_SelectTrigger, + .t_dark .t_light .t_green_active_Switch, + .t_dark .t_light .t_green_active_TextArea, + .t_dark .t_light .t_green_active_TooltipContent, + .t_dark .t_light .t_green_surface4, + .t_green_active_Button, + .t_green_active_Card, + .t_green_active_Checkbox, + .t_green_active_Input, + .t_green_active_RadioGroupItem, + .t_green_active_SelectTrigger, + .t_green_active_Switch, + .t_green_active_TextArea, + .t_green_active_TooltipContent, + .t_green_surface4 { + --background: var(--color-62); + --backgroundHover: var(--color-62); + --backgroundPress: var(--color-63); + --backgroundFocus: var(--color-63); + --borderColor: var(--color-62); + --borderColorHover: var(--color-62); + --borderColorFocus: var(--color-63); + --borderColorPress: var(--color-63); + } +} +:root.t_dark .t_light .t_blue_alt1, +:root.t_dark .t_light .t_dark .t_light .t_blue_alt1, +:root.t_light .t_blue_alt1, +:root.t_light .t_dark .t_light .t_blue_alt1 { + --color: var(--color-43); + --colorHover: var(--color-42); + --colorPress: var(--color-43); + --colorFocus: var(--color-42); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_blue_alt1, + .t_dark .t_light .t_blue_alt1 { + --color: var(--color-43); + --colorHover: var(--color-42); + --colorPress: var(--color-43); + --colorFocus: var(--color-42); + } +} +:root.t_dark .t_light .t_blue_alt2, +:root.t_dark .t_light .t_dark .t_light .t_blue_alt2, +:root.t_light .t_blue_alt2, +:root.t_light .t_dark .t_light .t_blue_alt2 { + --color: var(--color-42); + --colorHover: var(--color-137); + --colorPress: var(--color-42); + --colorFocus: var(--color-137); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_blue_alt2, + .t_dark .t_light .t_blue_alt2 { + --color: var(--color-42); + --colorHover: var(--color-137); + --colorPress: var(--color-42); + --colorFocus: var(--color-137); + } +} +:root.t_dark .t_light .t_blue_active, +:root.t_dark .t_light .t_blue_active_SliderTrackActive, +:root.t_dark .t_light .t_blue_Button, +:root.t_dark .t_light .t_blue_SliderTrackActive, +:root.t_dark .t_light .t_blue_surface3, +:root.t_dark .t_light .t_dark .t_light .t_blue_active, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_blue_Button, +:root.t_dark .t_light .t_dark .t_light .t_blue_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_blue_surface3, +:root.t_light .t_blue_active, +:root.t_light .t_blue_active_SliderTrackActive, +:root.t_light .t_blue_Button, +:root.t_light .t_blue_SliderTrackActive, +:root.t_light .t_blue_surface3, +:root.t_light .t_dark .t_light .t_blue_active, +:root.t_light .t_dark .t_light .t_blue_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_blue_Button, +:root.t_light .t_dark .t_light .t_blue_SliderTrackActive, +:root.t_light .t_dark .t_light .t_blue_surface3 { + --background: var(--color-36); + --backgroundHover: var(--color-35); + --backgroundPress: var(--color-37); + --backgroundFocus: var(--color-37); + --borderColor: var(--color-39); + --borderColorHover: var(--color-38); + --borderColorFocus: var(--color-39); + --borderColorPress: var(--color-40); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_blue_active, + .t_blue_active_SliderTrackActive, + .t_blue_Button, + .t_blue_SliderTrackActive, + .t_blue_surface3, + .t_dark .t_light .t_blue_active, + .t_dark .t_light .t_blue_active_SliderTrackActive, + .t_dark .t_light .t_blue_Button, + .t_dark .t_light .t_blue_SliderTrackActive, + .t_dark .t_light .t_blue_surface3 { + --background: var(--color-36); + --backgroundHover: var(--color-35); + --backgroundPress: var(--color-37); + --backgroundFocus: var(--color-37); + --borderColor: var(--color-39); + --borderColorHover: var(--color-38); + --borderColorFocus: var(--color-39); + --borderColorPress: var(--color-40); + } +} +:root.t_dark .t_light .t_blue_active_ListItem, +:root.t_dark .t_light .t_blue_active_Progress, +:root.t_dark .t_light .t_blue_active_SliderTrack, +:root.t_dark .t_light .t_blue_active_TooltipArrow, +:root.t_dark .t_light .t_blue_Card, +:root.t_dark .t_light .t_blue_Input, +:root.t_dark .t_light .t_blue_ListItem, +:root.t_dark .t_light .t_blue_Progress, +:root.t_dark .t_light .t_blue_SelectTrigger, +:root.t_dark .t_light .t_blue_SliderTrack, +:root.t_dark .t_light .t_blue_surface1, +:root.t_dark .t_light .t_blue_TextArea, +:root.t_dark .t_light .t_blue_TooltipArrow, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_Progress, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_light .t_blue_Card, +:root.t_dark .t_light .t_dark .t_light .t_blue_Input, +:root.t_dark .t_light .t_dark .t_light .t_blue_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_blue_Progress, +:root.t_dark .t_light .t_dark .t_light .t_blue_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_blue_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_blue_surface1, +:root.t_dark .t_light .t_dark .t_light .t_blue_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_blue_TooltipArrow, +:root.t_light .t_blue_active_ListItem, +:root.t_light .t_blue_active_Progress, +:root.t_light .t_blue_active_SliderTrack, +:root.t_light .t_blue_active_TooltipArrow, +:root.t_light .t_blue_Card, +:root.t_light .t_blue_Input, +:root.t_light .t_blue_ListItem, +:root.t_light .t_blue_Progress, +:root.t_light .t_blue_SelectTrigger, +:root.t_light .t_blue_SliderTrack, +:root.t_light .t_blue_surface1, +:root.t_light .t_blue_TextArea, +:root.t_light .t_blue_TooltipArrow, +:root.t_light .t_dark .t_light .t_blue_active_ListItem, +:root.t_light .t_dark .t_light .t_blue_active_Progress, +:root.t_light .t_dark .t_light .t_blue_active_SliderTrack, +:root.t_light .t_dark .t_light .t_blue_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_blue_Card, +:root.t_light .t_dark .t_light .t_blue_Input, +:root.t_light .t_dark .t_light .t_blue_ListItem, +:root.t_light .t_dark .t_light .t_blue_Progress, +:root.t_light .t_dark .t_light .t_blue_SelectTrigger, +:root.t_light .t_dark .t_light .t_blue_SliderTrack, +:root.t_light .t_dark .t_light .t_blue_surface1, +:root.t_light .t_dark .t_light .t_blue_TextArea, +:root.t_light .t_dark .t_light .t_blue_TooltipArrow { + --background: var(--color-34); + --backgroundHover: var(--color-33); + --backgroundPress: var(--color-35); + --backgroundFocus: var(--color-35); + --borderColor: var(--color-37); + --borderColorHover: var(--color-36); + --borderColorFocus: var(--color-37); + --borderColorPress: var(--color-38); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_blue_active_ListItem, + .t_blue_active_Progress, + .t_blue_active_SliderTrack, + .t_blue_active_TooltipArrow, + .t_blue_Card, + .t_blue_Input, + .t_blue_ListItem, + .t_blue_Progress, + .t_blue_SelectTrigger, + .t_blue_SliderTrack, + .t_blue_surface1, + .t_blue_TextArea, + .t_blue_TooltipArrow, + .t_dark .t_light .t_blue_active_ListItem, + .t_dark .t_light .t_blue_active_Progress, + .t_dark .t_light .t_blue_active_SliderTrack, + .t_dark .t_light .t_blue_active_TooltipArrow, + .t_dark .t_light .t_blue_Card, + .t_dark .t_light .t_blue_Input, + .t_dark .t_light .t_blue_ListItem, + .t_dark .t_light .t_blue_Progress, + .t_dark .t_light .t_blue_SelectTrigger, + .t_dark .t_light .t_blue_SliderTrack, + .t_dark .t_light .t_blue_surface1, + .t_dark .t_light .t_blue_TextArea, + .t_dark .t_light .t_blue_TooltipArrow { + --background: var(--color-34); + --backgroundHover: var(--color-33); + --backgroundPress: var(--color-35); + --backgroundFocus: var(--color-35); + --borderColor: var(--color-37); + --borderColorHover: var(--color-36); + --borderColorFocus: var(--color-37); + --borderColorPress: var(--color-38); + } +} +:root.t_dark .t_light .t_blue_Checkbox, +:root.t_dark .t_light .t_blue_RadioGroupItem, +:root.t_dark .t_light .t_blue_surface2, +:root.t_dark .t_light .t_blue_Switch, +:root.t_dark .t_light .t_blue_TooltipContent, +:root.t_dark .t_light .t_dark .t_light .t_blue_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_blue_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_blue_surface2, +:root.t_dark .t_light .t_dark .t_light .t_blue_Switch, +:root.t_dark .t_light .t_dark .t_light .t_blue_TooltipContent, +:root.t_light .t_blue_Checkbox, +:root.t_light .t_blue_RadioGroupItem, +:root.t_light .t_blue_surface2, +:root.t_light .t_blue_Switch, +:root.t_light .t_blue_TooltipContent, +:root.t_light .t_dark .t_light .t_blue_Checkbox, +:root.t_light .t_dark .t_light .t_blue_RadioGroupItem, +:root.t_light .t_dark .t_light .t_blue_surface2, +:root.t_light .t_dark .t_light .t_blue_Switch, +:root.t_light .t_dark .t_light .t_blue_TooltipContent { + --background: var(--color-35); + --backgroundHover: var(--color-34); + --backgroundPress: var(--color-36); + --backgroundFocus: var(--color-36); + --borderColor: var(--color-38); + --borderColorHover: var(--color-37); + --borderColorFocus: var(--color-38); + --borderColorPress: var(--color-39); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_blue_Checkbox, + .t_blue_RadioGroupItem, + .t_blue_surface2, + .t_blue_Switch, + .t_blue_TooltipContent, + .t_dark .t_light .t_blue_Checkbox, + .t_dark .t_light .t_blue_RadioGroupItem, + .t_dark .t_light .t_blue_surface2, + .t_dark .t_light .t_blue_Switch, + .t_dark .t_light .t_blue_TooltipContent { + --background: var(--color-35); + --backgroundHover: var(--color-34); + --backgroundPress: var(--color-36); + --backgroundFocus: var(--color-36); + --borderColor: var(--color-38); + --borderColorHover: var(--color-37); + --borderColorFocus: var(--color-38); + --borderColorPress: var(--color-39); + } +} +:root.t_dark .t_light .t_blue_active_Button, +:root.t_dark .t_light .t_blue_active_Card, +:root.t_dark .t_light .t_blue_active_Checkbox, +:root.t_dark .t_light .t_blue_active_Input, +:root.t_dark .t_light .t_blue_active_RadioGroupItem, +:root.t_dark .t_light .t_blue_active_SelectTrigger, +:root.t_dark .t_light .t_blue_active_Switch, +:root.t_dark .t_light .t_blue_active_TextArea, +:root.t_dark .t_light .t_blue_active_TooltipContent, +:root.t_dark .t_light .t_blue_surface4, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_Button, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_Card, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_Input, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_Switch, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_light .t_blue_surface4, +:root.t_light .t_blue_active_Button, +:root.t_light .t_blue_active_Card, +:root.t_light .t_blue_active_Checkbox, +:root.t_light .t_blue_active_Input, +:root.t_light .t_blue_active_RadioGroupItem, +:root.t_light .t_blue_active_SelectTrigger, +:root.t_light .t_blue_active_Switch, +:root.t_light .t_blue_active_TextArea, +:root.t_light .t_blue_active_TooltipContent, +:root.t_light .t_blue_surface4, +:root.t_light .t_dark .t_light .t_blue_active_Button, +:root.t_light .t_dark .t_light .t_blue_active_Card, +:root.t_light .t_dark .t_light .t_blue_active_Checkbox, +:root.t_light .t_dark .t_light .t_blue_active_Input, +:root.t_light .t_dark .t_light .t_blue_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_blue_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_blue_active_Switch, +:root.t_light .t_dark .t_light .t_blue_active_TextArea, +:root.t_light .t_dark .t_light .t_blue_active_TooltipContent, +:root.t_light .t_dark .t_light .t_blue_surface4 { + --background: var(--color-38); + --backgroundHover: var(--color-38); + --backgroundPress: var(--color-39); + --backgroundFocus: var(--color-39); + --borderColor: var(--color-38); + --borderColorHover: var(--color-38); + --borderColorFocus: var(--color-39); + --borderColorPress: var(--color-39); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_blue_active_Button, + .t_blue_active_Card, + .t_blue_active_Checkbox, + .t_blue_active_Input, + .t_blue_active_RadioGroupItem, + .t_blue_active_SelectTrigger, + .t_blue_active_Switch, + .t_blue_active_TextArea, + .t_blue_active_TooltipContent, + .t_blue_surface4, + .t_dark .t_light .t_blue_active_Button, + .t_dark .t_light .t_blue_active_Card, + .t_dark .t_light .t_blue_active_Checkbox, + .t_dark .t_light .t_blue_active_Input, + .t_dark .t_light .t_blue_active_RadioGroupItem, + .t_dark .t_light .t_blue_active_SelectTrigger, + .t_dark .t_light .t_blue_active_Switch, + .t_dark .t_light .t_blue_active_TextArea, + .t_dark .t_light .t_blue_active_TooltipContent, + .t_dark .t_light .t_blue_surface4 { + --background: var(--color-38); + --backgroundHover: var(--color-38); + --backgroundPress: var(--color-39); + --backgroundFocus: var(--color-39); + --borderColor: var(--color-38); + --borderColorHover: var(--color-38); + --borderColorFocus: var(--color-39); + --borderColorPress: var(--color-39); + } +} +:root.t_dark .t_light .t_dark .t_light .t_purple_alt1, +:root.t_dark .t_light .t_purple_alt1, +:root.t_light .t_dark .t_light .t_purple_alt1, +:root.t_light .t_purple_alt1 { + --color: var(--color-103); + --colorHover: var(--color-102); + --colorPress: var(--color-103); + --colorFocus: var(--color-102); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_purple_alt1, + .t_purple_alt1 { + --color: var(--color-103); + --colorHover: var(--color-102); + --colorPress: var(--color-103); + --colorFocus: var(--color-102); + } +} +:root.t_dark .t_light .t_dark .t_light .t_purple_alt2, +:root.t_dark .t_light .t_purple_alt2, +:root.t_light .t_dark .t_light .t_purple_alt2, +:root.t_light .t_purple_alt2 { + --color: var(--color-102); + --colorHover: var(--color-197); + --colorPress: var(--color-102); + --colorFocus: var(--color-197); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_purple_alt2, + .t_purple_alt2 { + --color: var(--color-102); + --colorHover: var(--color-197); + --colorPress: var(--color-102); + --colorFocus: var(--color-197); + } +} +:root.t_dark .t_light .t_dark .t_light .t_purple_active, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_purple_Button, +:root.t_dark .t_light .t_dark .t_light .t_purple_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_purple_surface3, +:root.t_dark .t_light .t_purple_active, +:root.t_dark .t_light .t_purple_active_SliderTrackActive, +:root.t_dark .t_light .t_purple_Button, +:root.t_dark .t_light .t_purple_SliderTrackActive, +:root.t_dark .t_light .t_purple_surface3, +:root.t_light .t_dark .t_light .t_purple_active, +:root.t_light .t_dark .t_light .t_purple_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_purple_Button, +:root.t_light .t_dark .t_light .t_purple_SliderTrackActive, +:root.t_light .t_dark .t_light .t_purple_surface3, +:root.t_light .t_purple_active, +:root.t_light .t_purple_active_SliderTrackActive, +:root.t_light .t_purple_Button, +:root.t_light .t_purple_SliderTrackActive, +:root.t_light .t_purple_surface3 { + --background: var(--color-96); + --backgroundHover: var(--color-95); + --backgroundPress: var(--color-97); + --backgroundFocus: var(--color-97); + --borderColor: var(--color-99); + --borderColorHover: var(--color-98); + --borderColorFocus: var(--color-99); + --borderColorPress: var(--color-100); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_purple_active, + .t_dark .t_light .t_purple_active_SliderTrackActive, + .t_dark .t_light .t_purple_Button, + .t_dark .t_light .t_purple_SliderTrackActive, + .t_dark .t_light .t_purple_surface3, + .t_purple_active, + .t_purple_active_SliderTrackActive, + .t_purple_Button, + .t_purple_SliderTrackActive, + .t_purple_surface3 { + --background: var(--color-96); + --backgroundHover: var(--color-95); + --backgroundPress: var(--color-97); + --backgroundFocus: var(--color-97); + --borderColor: var(--color-99); + --borderColorHover: var(--color-98); + --borderColorFocus: var(--color-99); + --borderColorPress: var(--color-100); + } +} +:root.t_dark .t_light .t_dark .t_light .t_purple_active_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_Progress, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_light .t_purple_Card, +:root.t_dark .t_light .t_dark .t_light .t_purple_Input, +:root.t_dark .t_light .t_dark .t_light .t_purple_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_purple_Progress, +:root.t_dark .t_light .t_dark .t_light .t_purple_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_purple_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_purple_surface1, +:root.t_dark .t_light .t_dark .t_light .t_purple_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_purple_TooltipArrow, +:root.t_dark .t_light .t_purple_active_ListItem, +:root.t_dark .t_light .t_purple_active_Progress, +:root.t_dark .t_light .t_purple_active_SliderTrack, +:root.t_dark .t_light .t_purple_active_TooltipArrow, +:root.t_dark .t_light .t_purple_Card, +:root.t_dark .t_light .t_purple_Input, +:root.t_dark .t_light .t_purple_ListItem, +:root.t_dark .t_light .t_purple_Progress, +:root.t_dark .t_light .t_purple_SelectTrigger, +:root.t_dark .t_light .t_purple_SliderTrack, +:root.t_dark .t_light .t_purple_surface1, +:root.t_dark .t_light .t_purple_TextArea, +:root.t_dark .t_light .t_purple_TooltipArrow, +:root.t_light .t_dark .t_light .t_purple_active_ListItem, +:root.t_light .t_dark .t_light .t_purple_active_Progress, +:root.t_light .t_dark .t_light .t_purple_active_SliderTrack, +:root.t_light .t_dark .t_light .t_purple_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_purple_Card, +:root.t_light .t_dark .t_light .t_purple_Input, +:root.t_light .t_dark .t_light .t_purple_ListItem, +:root.t_light .t_dark .t_light .t_purple_Progress, +:root.t_light .t_dark .t_light .t_purple_SelectTrigger, +:root.t_light .t_dark .t_light .t_purple_SliderTrack, +:root.t_light .t_dark .t_light .t_purple_surface1, +:root.t_light .t_dark .t_light .t_purple_TextArea, +:root.t_light .t_dark .t_light .t_purple_TooltipArrow, +:root.t_light .t_purple_active_ListItem, +:root.t_light .t_purple_active_Progress, +:root.t_light .t_purple_active_SliderTrack, +:root.t_light .t_purple_active_TooltipArrow, +:root.t_light .t_purple_Card, +:root.t_light .t_purple_Input, +:root.t_light .t_purple_ListItem, +:root.t_light .t_purple_Progress, +:root.t_light .t_purple_SelectTrigger, +:root.t_light .t_purple_SliderTrack, +:root.t_light .t_purple_surface1, +:root.t_light .t_purple_TextArea, +:root.t_light .t_purple_TooltipArrow { + --background: var(--color-94); + --backgroundHover: var(--color-93); + --backgroundPress: var(--color-95); + --backgroundFocus: var(--color-95); + --borderColor: var(--color-97); + --borderColorHover: var(--color-96); + --borderColorFocus: var(--color-97); + --borderColorPress: var(--color-98); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_purple_active_ListItem, + .t_dark .t_light .t_purple_active_Progress, + .t_dark .t_light .t_purple_active_SliderTrack, + .t_dark .t_light .t_purple_active_TooltipArrow, + .t_dark .t_light .t_purple_Card, + .t_dark .t_light .t_purple_Input, + .t_dark .t_light .t_purple_ListItem, + .t_dark .t_light .t_purple_Progress, + .t_dark .t_light .t_purple_SelectTrigger, + .t_dark .t_light .t_purple_SliderTrack, + .t_dark .t_light .t_purple_surface1, + .t_dark .t_light .t_purple_TextArea, + .t_dark .t_light .t_purple_TooltipArrow, + .t_purple_active_ListItem, + .t_purple_active_Progress, + .t_purple_active_SliderTrack, + .t_purple_active_TooltipArrow, + .t_purple_Card, + .t_purple_Input, + .t_purple_ListItem, + .t_purple_Progress, + .t_purple_SelectTrigger, + .t_purple_SliderTrack, + .t_purple_surface1, + .t_purple_TextArea, + .t_purple_TooltipArrow { + --background: var(--color-94); + --backgroundHover: var(--color-93); + --backgroundPress: var(--color-95); + --backgroundFocus: var(--color-95); + --borderColor: var(--color-97); + --borderColorHover: var(--color-96); + --borderColorFocus: var(--color-97); + --borderColorPress: var(--color-98); + } +} +:root.t_dark .t_light .t_dark .t_light .t_purple_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_purple_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_purple_surface2, +:root.t_dark .t_light .t_dark .t_light .t_purple_Switch, +:root.t_dark .t_light .t_dark .t_light .t_purple_TooltipContent, +:root.t_dark .t_light .t_purple_Checkbox, +:root.t_dark .t_light .t_purple_RadioGroupItem, +:root.t_dark .t_light .t_purple_surface2, +:root.t_dark .t_light .t_purple_Switch, +:root.t_dark .t_light .t_purple_TooltipContent, +:root.t_light .t_dark .t_light .t_purple_Checkbox, +:root.t_light .t_dark .t_light .t_purple_RadioGroupItem, +:root.t_light .t_dark .t_light .t_purple_surface2, +:root.t_light .t_dark .t_light .t_purple_Switch, +:root.t_light .t_dark .t_light .t_purple_TooltipContent, +:root.t_light .t_purple_Checkbox, +:root.t_light .t_purple_RadioGroupItem, +:root.t_light .t_purple_surface2, +:root.t_light .t_purple_Switch, +:root.t_light .t_purple_TooltipContent { + --background: var(--color-95); + --backgroundHover: var(--color-94); + --backgroundPress: var(--color-96); + --backgroundFocus: var(--color-96); + --borderColor: var(--color-98); + --borderColorHover: var(--color-97); + --borderColorFocus: var(--color-98); + --borderColorPress: var(--color-99); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_purple_Checkbox, + .t_dark .t_light .t_purple_RadioGroupItem, + .t_dark .t_light .t_purple_surface2, + .t_dark .t_light .t_purple_Switch, + .t_dark .t_light .t_purple_TooltipContent, + .t_purple_Checkbox, + .t_purple_RadioGroupItem, + .t_purple_surface2, + .t_purple_Switch, + .t_purple_TooltipContent { + --background: var(--color-95); + --backgroundHover: var(--color-94); + --backgroundPress: var(--color-96); + --backgroundFocus: var(--color-96); + --borderColor: var(--color-98); + --borderColorHover: var(--color-97); + --borderColorFocus: var(--color-98); + --borderColorPress: var(--color-99); + } +} +:root.t_dark .t_light .t_dark .t_light .t_purple_active_Button, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_Card, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_Input, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_Switch, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_light .t_purple_surface4, +:root.t_dark .t_light .t_purple_active_Button, +:root.t_dark .t_light .t_purple_active_Card, +:root.t_dark .t_light .t_purple_active_Checkbox, +:root.t_dark .t_light .t_purple_active_Input, +:root.t_dark .t_light .t_purple_active_RadioGroupItem, +:root.t_dark .t_light .t_purple_active_SelectTrigger, +:root.t_dark .t_light .t_purple_active_Switch, +:root.t_dark .t_light .t_purple_active_TextArea, +:root.t_dark .t_light .t_purple_active_TooltipContent, +:root.t_dark .t_light .t_purple_surface4, +:root.t_light .t_dark .t_light .t_purple_active_Button, +:root.t_light .t_dark .t_light .t_purple_active_Card, +:root.t_light .t_dark .t_light .t_purple_active_Checkbox, +:root.t_light .t_dark .t_light .t_purple_active_Input, +:root.t_light .t_dark .t_light .t_purple_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_purple_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_purple_active_Switch, +:root.t_light .t_dark .t_light .t_purple_active_TextArea, +:root.t_light .t_dark .t_light .t_purple_active_TooltipContent, +:root.t_light .t_dark .t_light .t_purple_surface4, +:root.t_light .t_purple_active_Button, +:root.t_light .t_purple_active_Card, +:root.t_light .t_purple_active_Checkbox, +:root.t_light .t_purple_active_Input, +:root.t_light .t_purple_active_RadioGroupItem, +:root.t_light .t_purple_active_SelectTrigger, +:root.t_light .t_purple_active_Switch, +:root.t_light .t_purple_active_TextArea, +:root.t_light .t_purple_active_TooltipContent, +:root.t_light .t_purple_surface4 { + --background: var(--color-98); + --backgroundHover: var(--color-98); + --backgroundPress: var(--color-99); + --backgroundFocus: var(--color-99); + --borderColor: var(--color-98); + --borderColorHover: var(--color-98); + --borderColorFocus: var(--color-99); + --borderColorPress: var(--color-99); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_purple_active_Button, + .t_dark .t_light .t_purple_active_Card, + .t_dark .t_light .t_purple_active_Checkbox, + .t_dark .t_light .t_purple_active_Input, + .t_dark .t_light .t_purple_active_RadioGroupItem, + .t_dark .t_light .t_purple_active_SelectTrigger, + .t_dark .t_light .t_purple_active_Switch, + .t_dark .t_light .t_purple_active_TextArea, + .t_dark .t_light .t_purple_active_TooltipContent, + .t_dark .t_light .t_purple_surface4, + .t_purple_active_Button, + .t_purple_active_Card, + .t_purple_active_Checkbox, + .t_purple_active_Input, + .t_purple_active_RadioGroupItem, + .t_purple_active_SelectTrigger, + .t_purple_active_Switch, + .t_purple_active_TextArea, + .t_purple_active_TooltipContent, + .t_purple_surface4 { + --background: var(--color-98); + --backgroundHover: var(--color-98); + --backgroundPress: var(--color-99); + --backgroundFocus: var(--color-99); + --borderColor: var(--color-98); + --borderColorHover: var(--color-98); + --borderColorFocus: var(--color-99); + --borderColorPress: var(--color-99); + } +} +:root.t_dark .t_light .t_dark .t_light .t_pink_alt1, +:root.t_dark .t_light .t_pink_alt1, +:root.t_light .t_dark .t_light .t_pink_alt1, +:root.t_light .t_pink_alt1 { + --color: var(--color-91); + --colorHover: var(--color-90); + --colorPress: var(--color-91); + --colorFocus: var(--color-90); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_pink_alt1, + .t_pink_alt1 { + --color: var(--color-91); + --colorHover: var(--color-90); + --colorPress: var(--color-91); + --colorFocus: var(--color-90); + } +} +:root.t_dark .t_light .t_dark .t_light .t_pink_alt2, +:root.t_dark .t_light .t_pink_alt2, +:root.t_light .t_dark .t_light .t_pink_alt2, +:root.t_light .t_pink_alt2 { + --color: var(--color-90); + --colorHover: var(--color-185); + --colorPress: var(--color-90); + --colorFocus: var(--color-185); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_pink_alt2, + .t_pink_alt2 { + --color: var(--color-90); + --colorHover: var(--color-185); + --colorPress: var(--color-90); + --colorFocus: var(--color-185); + } +} +:root.t_dark .t_light .t_dark .t_light .t_pink_active, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_pink_Button, +:root.t_dark .t_light .t_dark .t_light .t_pink_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_pink_surface3, +:root.t_dark .t_light .t_pink_active, +:root.t_dark .t_light .t_pink_active_SliderTrackActive, +:root.t_dark .t_light .t_pink_Button, +:root.t_dark .t_light .t_pink_SliderTrackActive, +:root.t_dark .t_light .t_pink_surface3, +:root.t_light .t_dark .t_light .t_pink_active, +:root.t_light .t_dark .t_light .t_pink_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_pink_Button, +:root.t_light .t_dark .t_light .t_pink_SliderTrackActive, +:root.t_light .t_dark .t_light .t_pink_surface3, +:root.t_light .t_pink_active, +:root.t_light .t_pink_active_SliderTrackActive, +:root.t_light .t_pink_Button, +:root.t_light .t_pink_SliderTrackActive, +:root.t_light .t_pink_surface3 { + --background: var(--color-84); + --backgroundHover: var(--color-83); + --backgroundPress: var(--color-85); + --backgroundFocus: var(--color-85); + --borderColor: var(--color-87); + --borderColorHover: var(--color-86); + --borderColorFocus: var(--color-87); + --borderColorPress: var(--color-88); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_pink_active, + .t_dark .t_light .t_pink_active_SliderTrackActive, + .t_dark .t_light .t_pink_Button, + .t_dark .t_light .t_pink_SliderTrackActive, + .t_dark .t_light .t_pink_surface3, + .t_pink_active, + .t_pink_active_SliderTrackActive, + .t_pink_Button, + .t_pink_SliderTrackActive, + .t_pink_surface3 { + --background: var(--color-84); + --backgroundHover: var(--color-83); + --backgroundPress: var(--color-85); + --backgroundFocus: var(--color-85); + --borderColor: var(--color-87); + --borderColorHover: var(--color-86); + --borderColorFocus: var(--color-87); + --borderColorPress: var(--color-88); + } +} +:root.t_dark .t_light .t_dark .t_light .t_pink_active_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_Progress, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_light .t_pink_Card, +:root.t_dark .t_light .t_dark .t_light .t_pink_Input, +:root.t_dark .t_light .t_dark .t_light .t_pink_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_pink_Progress, +:root.t_dark .t_light .t_dark .t_light .t_pink_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_pink_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_pink_surface1, +:root.t_dark .t_light .t_dark .t_light .t_pink_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_pink_TooltipArrow, +:root.t_dark .t_light .t_pink_active_ListItem, +:root.t_dark .t_light .t_pink_active_Progress, +:root.t_dark .t_light .t_pink_active_SliderTrack, +:root.t_dark .t_light .t_pink_active_TooltipArrow, +:root.t_dark .t_light .t_pink_Card, +:root.t_dark .t_light .t_pink_Input, +:root.t_dark .t_light .t_pink_ListItem, +:root.t_dark .t_light .t_pink_Progress, +:root.t_dark .t_light .t_pink_SelectTrigger, +:root.t_dark .t_light .t_pink_SliderTrack, +:root.t_dark .t_light .t_pink_surface1, +:root.t_dark .t_light .t_pink_TextArea, +:root.t_dark .t_light .t_pink_TooltipArrow, +:root.t_light .t_dark .t_light .t_pink_active_ListItem, +:root.t_light .t_dark .t_light .t_pink_active_Progress, +:root.t_light .t_dark .t_light .t_pink_active_SliderTrack, +:root.t_light .t_dark .t_light .t_pink_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_pink_Card, +:root.t_light .t_dark .t_light .t_pink_Input, +:root.t_light .t_dark .t_light .t_pink_ListItem, +:root.t_light .t_dark .t_light .t_pink_Progress, +:root.t_light .t_dark .t_light .t_pink_SelectTrigger, +:root.t_light .t_dark .t_light .t_pink_SliderTrack, +:root.t_light .t_dark .t_light .t_pink_surface1, +:root.t_light .t_dark .t_light .t_pink_TextArea, +:root.t_light .t_dark .t_light .t_pink_TooltipArrow, +:root.t_light .t_pink_active_ListItem, +:root.t_light .t_pink_active_Progress, +:root.t_light .t_pink_active_SliderTrack, +:root.t_light .t_pink_active_TooltipArrow, +:root.t_light .t_pink_Card, +:root.t_light .t_pink_Input, +:root.t_light .t_pink_ListItem, +:root.t_light .t_pink_Progress, +:root.t_light .t_pink_SelectTrigger, +:root.t_light .t_pink_SliderTrack, +:root.t_light .t_pink_surface1, +:root.t_light .t_pink_TextArea, +:root.t_light .t_pink_TooltipArrow { + --background: var(--color-82); + --backgroundHover: var(--color-81); + --backgroundPress: var(--color-83); + --backgroundFocus: var(--color-83); + --borderColor: var(--color-85); + --borderColorHover: var(--color-84); + --borderColorFocus: var(--color-85); + --borderColorPress: var(--color-86); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_pink_active_ListItem, + .t_dark .t_light .t_pink_active_Progress, + .t_dark .t_light .t_pink_active_SliderTrack, + .t_dark .t_light .t_pink_active_TooltipArrow, + .t_dark .t_light .t_pink_Card, + .t_dark .t_light .t_pink_Input, + .t_dark .t_light .t_pink_ListItem, + .t_dark .t_light .t_pink_Progress, + .t_dark .t_light .t_pink_SelectTrigger, + .t_dark .t_light .t_pink_SliderTrack, + .t_dark .t_light .t_pink_surface1, + .t_dark .t_light .t_pink_TextArea, + .t_dark .t_light .t_pink_TooltipArrow, + .t_pink_active_ListItem, + .t_pink_active_Progress, + .t_pink_active_SliderTrack, + .t_pink_active_TooltipArrow, + .t_pink_Card, + .t_pink_Input, + .t_pink_ListItem, + .t_pink_Progress, + .t_pink_SelectTrigger, + .t_pink_SliderTrack, + .t_pink_surface1, + .t_pink_TextArea, + .t_pink_TooltipArrow { + --background: var(--color-82); + --backgroundHover: var(--color-81); + --backgroundPress: var(--color-83); + --backgroundFocus: var(--color-83); + --borderColor: var(--color-85); + --borderColorHover: var(--color-84); + --borderColorFocus: var(--color-85); + --borderColorPress: var(--color-86); + } +} +:root.t_dark .t_light .t_dark .t_light .t_pink_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_pink_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_pink_surface2, +:root.t_dark .t_light .t_dark .t_light .t_pink_Switch, +:root.t_dark .t_light .t_dark .t_light .t_pink_TooltipContent, +:root.t_dark .t_light .t_pink_Checkbox, +:root.t_dark .t_light .t_pink_RadioGroupItem, +:root.t_dark .t_light .t_pink_surface2, +:root.t_dark .t_light .t_pink_Switch, +:root.t_dark .t_light .t_pink_TooltipContent, +:root.t_light .t_dark .t_light .t_pink_Checkbox, +:root.t_light .t_dark .t_light .t_pink_RadioGroupItem, +:root.t_light .t_dark .t_light .t_pink_surface2, +:root.t_light .t_dark .t_light .t_pink_Switch, +:root.t_light .t_dark .t_light .t_pink_TooltipContent, +:root.t_light .t_pink_Checkbox, +:root.t_light .t_pink_RadioGroupItem, +:root.t_light .t_pink_surface2, +:root.t_light .t_pink_Switch, +:root.t_light .t_pink_TooltipContent { + --background: var(--color-83); + --backgroundHover: var(--color-82); + --backgroundPress: var(--color-84); + --backgroundFocus: var(--color-84); + --borderColor: var(--color-86); + --borderColorHover: var(--color-85); + --borderColorFocus: var(--color-86); + --borderColorPress: var(--color-87); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_pink_Checkbox, + .t_dark .t_light .t_pink_RadioGroupItem, + .t_dark .t_light .t_pink_surface2, + .t_dark .t_light .t_pink_Switch, + .t_dark .t_light .t_pink_TooltipContent, + .t_pink_Checkbox, + .t_pink_RadioGroupItem, + .t_pink_surface2, + .t_pink_Switch, + .t_pink_TooltipContent { + --background: var(--color-83); + --backgroundHover: var(--color-82); + --backgroundPress: var(--color-84); + --backgroundFocus: var(--color-84); + --borderColor: var(--color-86); + --borderColorHover: var(--color-85); + --borderColorFocus: var(--color-86); + --borderColorPress: var(--color-87); + } +} +:root.t_dark .t_light .t_dark .t_light .t_pink_active_Button, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_Card, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_Input, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_Switch, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_light .t_pink_surface4, +:root.t_dark .t_light .t_pink_active_Button, +:root.t_dark .t_light .t_pink_active_Card, +:root.t_dark .t_light .t_pink_active_Checkbox, +:root.t_dark .t_light .t_pink_active_Input, +:root.t_dark .t_light .t_pink_active_RadioGroupItem, +:root.t_dark .t_light .t_pink_active_SelectTrigger, +:root.t_dark .t_light .t_pink_active_Switch, +:root.t_dark .t_light .t_pink_active_TextArea, +:root.t_dark .t_light .t_pink_active_TooltipContent, +:root.t_dark .t_light .t_pink_surface4, +:root.t_light .t_dark .t_light .t_pink_active_Button, +:root.t_light .t_dark .t_light .t_pink_active_Card, +:root.t_light .t_dark .t_light .t_pink_active_Checkbox, +:root.t_light .t_dark .t_light .t_pink_active_Input, +:root.t_light .t_dark .t_light .t_pink_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_pink_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_pink_active_Switch, +:root.t_light .t_dark .t_light .t_pink_active_TextArea, +:root.t_light .t_dark .t_light .t_pink_active_TooltipContent, +:root.t_light .t_dark .t_light .t_pink_surface4, +:root.t_light .t_pink_active_Button, +:root.t_light .t_pink_active_Card, +:root.t_light .t_pink_active_Checkbox, +:root.t_light .t_pink_active_Input, +:root.t_light .t_pink_active_RadioGroupItem, +:root.t_light .t_pink_active_SelectTrigger, +:root.t_light .t_pink_active_Switch, +:root.t_light .t_pink_active_TextArea, +:root.t_light .t_pink_active_TooltipContent, +:root.t_light .t_pink_surface4 { + --background: var(--color-86); + --backgroundHover: var(--color-86); + --backgroundPress: var(--color-87); + --backgroundFocus: var(--color-87); + --borderColor: var(--color-86); + --borderColorHover: var(--color-86); + --borderColorFocus: var(--color-87); + --borderColorPress: var(--color-87); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_pink_active_Button, + .t_dark .t_light .t_pink_active_Card, + .t_dark .t_light .t_pink_active_Checkbox, + .t_dark .t_light .t_pink_active_Input, + .t_dark .t_light .t_pink_active_RadioGroupItem, + .t_dark .t_light .t_pink_active_SelectTrigger, + .t_dark .t_light .t_pink_active_Switch, + .t_dark .t_light .t_pink_active_TextArea, + .t_dark .t_light .t_pink_active_TooltipContent, + .t_dark .t_light .t_pink_surface4, + .t_pink_active_Button, + .t_pink_active_Card, + .t_pink_active_Checkbox, + .t_pink_active_Input, + .t_pink_active_RadioGroupItem, + .t_pink_active_SelectTrigger, + .t_pink_active_Switch, + .t_pink_active_TextArea, + .t_pink_active_TooltipContent, + .t_pink_surface4 { + --background: var(--color-86); + --backgroundHover: var(--color-86); + --backgroundPress: var(--color-87); + --backgroundFocus: var(--color-87); + --borderColor: var(--color-86); + --borderColorHover: var(--color-86); + --borderColorFocus: var(--color-87); + --borderColorPress: var(--color-87); + } +} +:root.t_dark .t_light .t_dark .t_light .t_red_alt1, +:root.t_dark .t_light .t_red_alt1, +:root.t_light .t_dark .t_light .t_red_alt1, +:root.t_light .t_red_alt1 { + --color: var(--color-115); + --colorHover: var(--color-114); + --colorPress: var(--color-115); + --colorFocus: var(--color-114); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_red_alt1, + .t_red_alt1 { + --color: var(--color-115); + --colorHover: var(--color-114); + --colorPress: var(--color-115); + --colorFocus: var(--color-114); + } +} +:root.t_dark .t_light .t_dark .t_light .t_red_alt2, +:root.t_dark .t_light .t_red_alt2, +:root.t_light .t_dark .t_light .t_red_alt2, +:root.t_light .t_red_alt2 { + --color: var(--color-114); + --colorHover: var(--color-209); + --colorPress: var(--color-114); + --colorFocus: var(--color-209); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_red_alt2, + .t_red_alt2 { + --color: var(--color-114); + --colorHover: var(--color-209); + --colorPress: var(--color-114); + --colorFocus: var(--color-209); + } +} +:root.t_dark .t_light .t_dark .t_light .t_red_active, +:root.t_dark .t_light .t_dark .t_light .t_red_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_red_Button, +:root.t_dark .t_light .t_dark .t_light .t_red_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_red_surface3, +:root.t_dark .t_light .t_red_active, +:root.t_dark .t_light .t_red_active_SliderTrackActive, +:root.t_dark .t_light .t_red_Button, +:root.t_dark .t_light .t_red_SliderTrackActive, +:root.t_dark .t_light .t_red_surface3, +:root.t_light .t_dark .t_light .t_red_active, +:root.t_light .t_dark .t_light .t_red_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_red_Button, +:root.t_light .t_dark .t_light .t_red_SliderTrackActive, +:root.t_light .t_dark .t_light .t_red_surface3, +:root.t_light .t_red_active, +:root.t_light .t_red_active_SliderTrackActive, +:root.t_light .t_red_Button, +:root.t_light .t_red_SliderTrackActive, +:root.t_light .t_red_surface3 { + --background: var(--color-108); + --backgroundHover: var(--color-107); + --backgroundPress: var(--color-109); + --backgroundFocus: var(--color-109); + --borderColor: var(--color-111); + --borderColorHover: var(--color-110); + --borderColorFocus: var(--color-111); + --borderColorPress: var(--color-112); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_red_active, + .t_dark .t_light .t_red_active_SliderTrackActive, + .t_dark .t_light .t_red_Button, + .t_dark .t_light .t_red_SliderTrackActive, + .t_dark .t_light .t_red_surface3, + .t_red_active, + .t_red_active_SliderTrackActive, + .t_red_Button, + .t_red_SliderTrackActive, + .t_red_surface3 { + --background: var(--color-108); + --backgroundHover: var(--color-107); + --backgroundPress: var(--color-109); + --backgroundFocus: var(--color-109); + --borderColor: var(--color-111); + --borderColorHover: var(--color-110); + --borderColorFocus: var(--color-111); + --borderColorPress: var(--color-112); + } +} +:root.t_dark .t_light .t_dark .t_light .t_red_active_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_red_active_Progress, +:root.t_dark .t_light .t_dark .t_light .t_red_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_red_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_light .t_red_Card, +:root.t_dark .t_light .t_dark .t_light .t_red_Input, +:root.t_dark .t_light .t_dark .t_light .t_red_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_red_Progress, +:root.t_dark .t_light .t_dark .t_light .t_red_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_red_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_red_surface1, +:root.t_dark .t_light .t_dark .t_light .t_red_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_red_TooltipArrow, +:root.t_dark .t_light .t_red_active_ListItem, +:root.t_dark .t_light .t_red_active_Progress, +:root.t_dark .t_light .t_red_active_SliderTrack, +:root.t_dark .t_light .t_red_active_TooltipArrow, +:root.t_dark .t_light .t_red_Card, +:root.t_dark .t_light .t_red_Input, +:root.t_dark .t_light .t_red_ListItem, +:root.t_dark .t_light .t_red_Progress, +:root.t_dark .t_light .t_red_SelectTrigger, +:root.t_dark .t_light .t_red_SliderTrack, +:root.t_dark .t_light .t_red_surface1, +:root.t_dark .t_light .t_red_TextArea, +:root.t_dark .t_light .t_red_TooltipArrow, +:root.t_light .t_dark .t_light .t_red_active_ListItem, +:root.t_light .t_dark .t_light .t_red_active_Progress, +:root.t_light .t_dark .t_light .t_red_active_SliderTrack, +:root.t_light .t_dark .t_light .t_red_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_red_Card, +:root.t_light .t_dark .t_light .t_red_Input, +:root.t_light .t_dark .t_light .t_red_ListItem, +:root.t_light .t_dark .t_light .t_red_Progress, +:root.t_light .t_dark .t_light .t_red_SelectTrigger, +:root.t_light .t_dark .t_light .t_red_SliderTrack, +:root.t_light .t_dark .t_light .t_red_surface1, +:root.t_light .t_dark .t_light .t_red_TextArea, +:root.t_light .t_dark .t_light .t_red_TooltipArrow, +:root.t_light .t_red_active_ListItem, +:root.t_light .t_red_active_Progress, +:root.t_light .t_red_active_SliderTrack, +:root.t_light .t_red_active_TooltipArrow, +:root.t_light .t_red_Card, +:root.t_light .t_red_Input, +:root.t_light .t_red_ListItem, +:root.t_light .t_red_Progress, +:root.t_light .t_red_SelectTrigger, +:root.t_light .t_red_SliderTrack, +:root.t_light .t_red_surface1, +:root.t_light .t_red_TextArea, +:root.t_light .t_red_TooltipArrow { + --background: var(--color-106); + --backgroundHover: var(--color-105); + --backgroundPress: var(--color-107); + --backgroundFocus: var(--color-107); + --borderColor: var(--color-109); + --borderColorHover: var(--color-108); + --borderColorFocus: var(--color-109); + --borderColorPress: var(--color-110); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_red_active_ListItem, + .t_dark .t_light .t_red_active_Progress, + .t_dark .t_light .t_red_active_SliderTrack, + .t_dark .t_light .t_red_active_TooltipArrow, + .t_dark .t_light .t_red_Card, + .t_dark .t_light .t_red_Input, + .t_dark .t_light .t_red_ListItem, + .t_dark .t_light .t_red_Progress, + .t_dark .t_light .t_red_SelectTrigger, + .t_dark .t_light .t_red_SliderTrack, + .t_dark .t_light .t_red_surface1, + .t_dark .t_light .t_red_TextArea, + .t_dark .t_light .t_red_TooltipArrow, + .t_red_active_ListItem, + .t_red_active_Progress, + .t_red_active_SliderTrack, + .t_red_active_TooltipArrow, + .t_red_Card, + .t_red_Input, + .t_red_ListItem, + .t_red_Progress, + .t_red_SelectTrigger, + .t_red_SliderTrack, + .t_red_surface1, + .t_red_TextArea, + .t_red_TooltipArrow { + --background: var(--color-106); + --backgroundHover: var(--color-105); + --backgroundPress: var(--color-107); + --backgroundFocus: var(--color-107); + --borderColor: var(--color-109); + --borderColorHover: var(--color-108); + --borderColorFocus: var(--color-109); + --borderColorPress: var(--color-110); + } +} +:root.t_dark .t_light .t_dark .t_light .t_red_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_red_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_red_surface2, +:root.t_dark .t_light .t_dark .t_light .t_red_Switch, +:root.t_dark .t_light .t_dark .t_light .t_red_TooltipContent, +:root.t_dark .t_light .t_red_Checkbox, +:root.t_dark .t_light .t_red_RadioGroupItem, +:root.t_dark .t_light .t_red_surface2, +:root.t_dark .t_light .t_red_Switch, +:root.t_dark .t_light .t_red_TooltipContent, +:root.t_light .t_dark .t_light .t_red_Checkbox, +:root.t_light .t_dark .t_light .t_red_RadioGroupItem, +:root.t_light .t_dark .t_light .t_red_surface2, +:root.t_light .t_dark .t_light .t_red_Switch, +:root.t_light .t_dark .t_light .t_red_TooltipContent, +:root.t_light .t_red_Checkbox, +:root.t_light .t_red_RadioGroupItem, +:root.t_light .t_red_surface2, +:root.t_light .t_red_Switch, +:root.t_light .t_red_TooltipContent { + --background: var(--color-107); + --backgroundHover: var(--color-106); + --backgroundPress: var(--color-108); + --backgroundFocus: var(--color-108); + --borderColor: var(--color-110); + --borderColorHover: var(--color-109); + --borderColorFocus: var(--color-110); + --borderColorPress: var(--color-111); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_red_Checkbox, + .t_dark .t_light .t_red_RadioGroupItem, + .t_dark .t_light .t_red_surface2, + .t_dark .t_light .t_red_Switch, + .t_dark .t_light .t_red_TooltipContent, + .t_red_Checkbox, + .t_red_RadioGroupItem, + .t_red_surface2, + .t_red_Switch, + .t_red_TooltipContent { + --background: var(--color-107); + --backgroundHover: var(--color-106); + --backgroundPress: var(--color-108); + --backgroundFocus: var(--color-108); + --borderColor: var(--color-110); + --borderColorHover: var(--color-109); + --borderColorFocus: var(--color-110); + --borderColorPress: var(--color-111); + } +} +:root.t_dark .t_light .t_dark .t_light .t_red_active_Button, +:root.t_dark .t_light .t_dark .t_light .t_red_active_Card, +:root.t_dark .t_light .t_dark .t_light .t_red_active_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_red_active_Input, +:root.t_dark .t_light .t_dark .t_light .t_red_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_red_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_red_active_Switch, +:root.t_dark .t_light .t_dark .t_light .t_red_active_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_red_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_light .t_red_surface4, +:root.t_dark .t_light .t_red_active_Button, +:root.t_dark .t_light .t_red_active_Card, +:root.t_dark .t_light .t_red_active_Checkbox, +:root.t_dark .t_light .t_red_active_Input, +:root.t_dark .t_light .t_red_active_RadioGroupItem, +:root.t_dark .t_light .t_red_active_SelectTrigger, +:root.t_dark .t_light .t_red_active_Switch, +:root.t_dark .t_light .t_red_active_TextArea, +:root.t_dark .t_light .t_red_active_TooltipContent, +:root.t_dark .t_light .t_red_surface4, +:root.t_light .t_dark .t_light .t_red_active_Button, +:root.t_light .t_dark .t_light .t_red_active_Card, +:root.t_light .t_dark .t_light .t_red_active_Checkbox, +:root.t_light .t_dark .t_light .t_red_active_Input, +:root.t_light .t_dark .t_light .t_red_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_red_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_red_active_Switch, +:root.t_light .t_dark .t_light .t_red_active_TextArea, +:root.t_light .t_dark .t_light .t_red_active_TooltipContent, +:root.t_light .t_dark .t_light .t_red_surface4, +:root.t_light .t_red_active_Button, +:root.t_light .t_red_active_Card, +:root.t_light .t_red_active_Checkbox, +:root.t_light .t_red_active_Input, +:root.t_light .t_red_active_RadioGroupItem, +:root.t_light .t_red_active_SelectTrigger, +:root.t_light .t_red_active_Switch, +:root.t_light .t_red_active_TextArea, +:root.t_light .t_red_active_TooltipContent, +:root.t_light .t_red_surface4 { + --background: var(--color-110); + --backgroundHover: var(--color-110); + --backgroundPress: var(--color-111); + --backgroundFocus: var(--color-111); + --borderColor: var(--color-110); + --borderColorHover: var(--color-110); + --borderColorFocus: var(--color-111); + --borderColorPress: var(--color-111); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_red_active_Button, + .t_dark .t_light .t_red_active_Card, + .t_dark .t_light .t_red_active_Checkbox, + .t_dark .t_light .t_red_active_Input, + .t_dark .t_light .t_red_active_RadioGroupItem, + .t_dark .t_light .t_red_active_SelectTrigger, + .t_dark .t_light .t_red_active_Switch, + .t_dark .t_light .t_red_active_TextArea, + .t_dark .t_light .t_red_active_TooltipContent, + .t_dark .t_light .t_red_surface4, + .t_red_active_Button, + .t_red_active_Card, + .t_red_active_Checkbox, + .t_red_active_Input, + .t_red_active_RadioGroupItem, + .t_red_active_SelectTrigger, + .t_red_active_Switch, + .t_red_active_TextArea, + .t_red_active_TooltipContent, + .t_red_surface4 { + --background: var(--color-110); + --backgroundHover: var(--color-110); + --backgroundPress: var(--color-111); + --backgroundFocus: var(--color-111); + --borderColor: var(--color-110); + --borderColorHover: var(--color-110); + --borderColorFocus: var(--color-111); + --borderColorPress: var(--color-111); + } +} +:root.t_dark .t_light .t_dark .t_light .t_gray_alt1, +:root.t_dark .t_light .t_gray_alt1, +:root.t_light .t_dark .t_light .t_gray_alt1, +:root.t_light .t_gray_alt1 { + --color: var(--color-55); + --colorHover: var(--color-54); + --colorPress: var(--color-55); + --colorFocus: var(--color-54); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_gray_alt1, + .t_gray_alt1 { + --color: var(--color-55); + --colorHover: var(--color-54); + --colorPress: var(--color-55); + --colorFocus: var(--color-54); + } +} +:root.t_dark .t_light .t_dark .t_light .t_gray_alt2, +:root.t_dark .t_light .t_gray_alt2, +:root.t_light .t_dark .t_light .t_gray_alt2, +:root.t_light .t_gray_alt2 { + --color: var(--color-54); + --colorHover: var(--color-53); + --colorPress: var(--color-54); + --colorFocus: var(--color-53); +} +@media (prefers-color-scheme: light) { + body { + color: var(--color); + } + .t_dark .t_light .t_gray_alt2, + .t_gray_alt2 { + --color: var(--color-54); + --colorHover: var(--color-53); + --colorPress: var(--color-54); + --colorFocus: var(--color-53); + } +} +:root.t_dark .t_light .t_dark .t_light .t_gray_active, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_gray_Button, +:root.t_dark .t_light .t_dark .t_light .t_gray_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_light .t_gray_surface3, +:root.t_dark .t_light .t_gray_active, +:root.t_dark .t_light .t_gray_active_SliderTrackActive, +:root.t_dark .t_light .t_gray_Button, +:root.t_dark .t_light .t_gray_SliderTrackActive, +:root.t_dark .t_light .t_gray_surface3, +:root.t_light .t_dark .t_light .t_gray_active, +:root.t_light .t_dark .t_light .t_gray_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_gray_Button, +:root.t_light .t_dark .t_light .t_gray_SliderTrackActive, +:root.t_light .t_dark .t_light .t_gray_surface3, +:root.t_light .t_gray_active, +:root.t_light .t_gray_active_SliderTrackActive, +:root.t_light .t_gray_Button, +:root.t_light .t_gray_SliderTrackActive, +:root.t_light .t_gray_surface3 { + --background: var(--color-152); + --backgroundHover: var(--color-47); + --backgroundPress: var(--color-49); + --backgroundFocus: var(--color-49); + --borderColor: var(--color-51); + --borderColorHover: var(--color-50); + --borderColorFocus: var(--color-51); + --borderColorPress: var(--color-52); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_gray_active, + .t_dark .t_light .t_gray_active_SliderTrackActive, + .t_dark .t_light .t_gray_Button, + .t_dark .t_light .t_gray_SliderTrackActive, + .t_dark .t_light .t_gray_surface3, + .t_gray_active, + .t_gray_active_SliderTrackActive, + .t_gray_Button, + .t_gray_SliderTrackActive, + .t_gray_surface3 { + --background: var(--color-152); + --backgroundHover: var(--color-47); + --backgroundPress: var(--color-49); + --backgroundFocus: var(--color-49); + --borderColor: var(--color-51); + --borderColorHover: var(--color-50); + --borderColorFocus: var(--color-51); + --borderColorPress: var(--color-52); + } +} +:root.t_dark .t_light .t_dark .t_light .t_gray_active_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_Progress, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_light .t_gray_Card, +:root.t_dark .t_light .t_dark .t_light .t_gray_Input, +:root.t_dark .t_light .t_dark .t_light .t_gray_ListItem, +:root.t_dark .t_light .t_dark .t_light .t_gray_Progress, +:root.t_dark .t_light .t_dark .t_light .t_gray_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_gray_SliderTrack, +:root.t_dark .t_light .t_dark .t_light .t_gray_surface1, +:root.t_dark .t_light .t_dark .t_light .t_gray_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_gray_TooltipArrow, +:root.t_dark .t_light .t_gray_active_ListItem, +:root.t_dark .t_light .t_gray_active_Progress, +:root.t_dark .t_light .t_gray_active_SliderTrack, +:root.t_dark .t_light .t_gray_active_TooltipArrow, +:root.t_dark .t_light .t_gray_Card, +:root.t_dark .t_light .t_gray_Input, +:root.t_dark .t_light .t_gray_ListItem, +:root.t_dark .t_light .t_gray_Progress, +:root.t_dark .t_light .t_gray_SelectTrigger, +:root.t_dark .t_light .t_gray_SliderTrack, +:root.t_dark .t_light .t_gray_surface1, +:root.t_dark .t_light .t_gray_TextArea, +:root.t_dark .t_light .t_gray_TooltipArrow, +:root.t_light .t_dark .t_light .t_gray_active_ListItem, +:root.t_light .t_dark .t_light .t_gray_active_Progress, +:root.t_light .t_dark .t_light .t_gray_active_SliderTrack, +:root.t_light .t_dark .t_light .t_gray_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_gray_Card, +:root.t_light .t_dark .t_light .t_gray_Input, +:root.t_light .t_dark .t_light .t_gray_ListItem, +:root.t_light .t_dark .t_light .t_gray_Progress, +:root.t_light .t_dark .t_light .t_gray_SelectTrigger, +:root.t_light .t_dark .t_light .t_gray_SliderTrack, +:root.t_light .t_dark .t_light .t_gray_surface1, +:root.t_light .t_dark .t_light .t_gray_TextArea, +:root.t_light .t_dark .t_light .t_gray_TooltipArrow, +:root.t_light .t_gray_active_ListItem, +:root.t_light .t_gray_active_Progress, +:root.t_light .t_gray_active_SliderTrack, +:root.t_light .t_gray_active_TooltipArrow, +:root.t_light .t_gray_Card, +:root.t_light .t_gray_Input, +:root.t_light .t_gray_ListItem, +:root.t_light .t_gray_Progress, +:root.t_light .t_gray_SelectTrigger, +:root.t_light .t_gray_SliderTrack, +:root.t_light .t_gray_surface1, +:root.t_light .t_gray_TextArea, +:root.t_light .t_gray_TooltipArrow { + --background: var(--color-46); + --backgroundHover: var(--color-45); + --backgroundPress: var(--color-47); + --backgroundFocus: var(--color-47); + --borderColor: var(--color-49); + --borderColorHover: var(--color-152); + --borderColorFocus: var(--color-49); + --borderColorPress: var(--color-50); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_gray_active_ListItem, + .t_dark .t_light .t_gray_active_Progress, + .t_dark .t_light .t_gray_active_SliderTrack, + .t_dark .t_light .t_gray_active_TooltipArrow, + .t_dark .t_light .t_gray_Card, + .t_dark .t_light .t_gray_Input, + .t_dark .t_light .t_gray_ListItem, + .t_dark .t_light .t_gray_Progress, + .t_dark .t_light .t_gray_SelectTrigger, + .t_dark .t_light .t_gray_SliderTrack, + .t_dark .t_light .t_gray_surface1, + .t_dark .t_light .t_gray_TextArea, + .t_dark .t_light .t_gray_TooltipArrow, + .t_gray_active_ListItem, + .t_gray_active_Progress, + .t_gray_active_SliderTrack, + .t_gray_active_TooltipArrow, + .t_gray_Card, + .t_gray_Input, + .t_gray_ListItem, + .t_gray_Progress, + .t_gray_SelectTrigger, + .t_gray_SliderTrack, + .t_gray_surface1, + .t_gray_TextArea, + .t_gray_TooltipArrow { + --background: var(--color-46); + --backgroundHover: var(--color-45); + --backgroundPress: var(--color-47); + --backgroundFocus: var(--color-47); + --borderColor: var(--color-49); + --borderColorHover: var(--color-152); + --borderColorFocus: var(--color-49); + --borderColorPress: var(--color-50); + } +} +:root.t_dark .t_light .t_dark .t_light .t_gray_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_gray_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_gray_surface2, +:root.t_dark .t_light .t_dark .t_light .t_gray_Switch, +:root.t_dark .t_light .t_dark .t_light .t_gray_TooltipContent, +:root.t_dark .t_light .t_gray_Checkbox, +:root.t_dark .t_light .t_gray_RadioGroupItem, +:root.t_dark .t_light .t_gray_surface2, +:root.t_dark .t_light .t_gray_Switch, +:root.t_dark .t_light .t_gray_TooltipContent, +:root.t_light .t_dark .t_light .t_gray_Checkbox, +:root.t_light .t_dark .t_light .t_gray_RadioGroupItem, +:root.t_light .t_dark .t_light .t_gray_surface2, +:root.t_light .t_dark .t_light .t_gray_Switch, +:root.t_light .t_dark .t_light .t_gray_TooltipContent, +:root.t_light .t_gray_Checkbox, +:root.t_light .t_gray_RadioGroupItem, +:root.t_light .t_gray_surface2, +:root.t_light .t_gray_Switch, +:root.t_light .t_gray_TooltipContent { + --background: var(--color-47); + --backgroundHover: var(--color-46); + --backgroundPress: var(--color-152); + --backgroundFocus: var(--color-152); + --borderColor: var(--color-50); + --borderColorHover: var(--color-49); + --borderColorFocus: var(--color-50); + --borderColorPress: var(--color-51); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_gray_Checkbox, + .t_dark .t_light .t_gray_RadioGroupItem, + .t_dark .t_light .t_gray_surface2, + .t_dark .t_light .t_gray_Switch, + .t_dark .t_light .t_gray_TooltipContent, + .t_gray_Checkbox, + .t_gray_RadioGroupItem, + .t_gray_surface2, + .t_gray_Switch, + .t_gray_TooltipContent { + --background: var(--color-47); + --backgroundHover: var(--color-46); + --backgroundPress: var(--color-152); + --backgroundFocus: var(--color-152); + --borderColor: var(--color-50); + --borderColorHover: var(--color-49); + --borderColorFocus: var(--color-50); + --borderColorPress: var(--color-51); + } +} +:root.t_dark .t_light .t_dark .t_light .t_gray_active_Button, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_Card, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_Checkbox, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_Input, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_Switch, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_TextArea, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_light .t_gray_surface4, +:root.t_dark .t_light .t_gray_active_Button, +:root.t_dark .t_light .t_gray_active_Card, +:root.t_dark .t_light .t_gray_active_Checkbox, +:root.t_dark .t_light .t_gray_active_Input, +:root.t_dark .t_light .t_gray_active_RadioGroupItem, +:root.t_dark .t_light .t_gray_active_SelectTrigger, +:root.t_dark .t_light .t_gray_active_Switch, +:root.t_dark .t_light .t_gray_active_TextArea, +:root.t_dark .t_light .t_gray_active_TooltipContent, +:root.t_dark .t_light .t_gray_surface4, +:root.t_light .t_dark .t_light .t_gray_active_Button, +:root.t_light .t_dark .t_light .t_gray_active_Card, +:root.t_light .t_dark .t_light .t_gray_active_Checkbox, +:root.t_light .t_dark .t_light .t_gray_active_Input, +:root.t_light .t_dark .t_light .t_gray_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_gray_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_gray_active_Switch, +:root.t_light .t_dark .t_light .t_gray_active_TextArea, +:root.t_light .t_dark .t_light .t_gray_active_TooltipContent, +:root.t_light .t_dark .t_light .t_gray_surface4, +:root.t_light .t_gray_active_Button, +:root.t_light .t_gray_active_Card, +:root.t_light .t_gray_active_Checkbox, +:root.t_light .t_gray_active_Input, +:root.t_light .t_gray_active_RadioGroupItem, +:root.t_light .t_gray_active_SelectTrigger, +:root.t_light .t_gray_active_Switch, +:root.t_light .t_gray_active_TextArea, +:root.t_light .t_gray_active_TooltipContent, +:root.t_light .t_gray_surface4 { + --background: var(--color-50); + --backgroundHover: var(--color-50); + --backgroundPress: var(--color-51); + --backgroundFocus: var(--color-51); + --borderColor: var(--color-50); + --borderColorHover: var(--color-50); + --borderColorFocus: var(--color-51); + --borderColorPress: var(--color-51); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_dark .t_light .t_gray_active_Button, + .t_dark .t_light .t_gray_active_Card, + .t_dark .t_light .t_gray_active_Checkbox, + .t_dark .t_light .t_gray_active_Input, + .t_dark .t_light .t_gray_active_RadioGroupItem, + .t_dark .t_light .t_gray_active_SelectTrigger, + .t_dark .t_light .t_gray_active_Switch, + .t_dark .t_light .t_gray_active_TextArea, + .t_dark .t_light .t_gray_active_TooltipContent, + .t_dark .t_light .t_gray_surface4, + .t_gray_active_Button, + .t_gray_active_Card, + .t_gray_active_Checkbox, + .t_gray_active_Input, + .t_gray_active_RadioGroupItem, + .t_gray_active_SelectTrigger, + .t_gray_active_Switch, + .t_gray_active_TextArea, + .t_gray_active_TooltipContent, + .t_gray_surface4 { + --background: var(--color-50); + --backgroundHover: var(--color-50); + --backgroundPress: var(--color-51); + --backgroundFocus: var(--color-51); + --borderColor: var(--color-50); + --borderColorHover: var(--color-50); + --borderColorFocus: var(--color-51); + --borderColorPress: var(--color-51); + } +} +:root.t_dark .t_light .t_dark .t_orange_alt1, +:root.t_dark .t_orange_alt1, +:root.t_light .t_dark .t_light .t_dark .t_orange_alt1, +:root.t_light .t_dark .t_orange_alt1 { + --color: var(--color-175); + --colorHover: var(--color-174); + --colorPress: var(--color-175); + --colorFocus: var(--color-174); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_light .t_dark .t_orange_alt1, + .t_orange_alt1 { + --color: var(--color-175); + --colorHover: var(--color-174); + --colorPress: var(--color-175); + --colorFocus: var(--color-174); + } +} +:root.t_dark .t_light .t_dark .t_orange_alt2, +:root.t_dark .t_orange_alt2, +:root.t_light .t_dark .t_light .t_dark .t_orange_alt2, +:root.t_light .t_dark .t_orange_alt2 { + --color: var(--color-174); + --colorHover: var(--color-173); + --colorPress: var(--color-174); + --colorFocus: var(--color-173); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_light .t_dark .t_orange_alt2, + .t_orange_alt2 { + --color: var(--color-174); + --colorHover: var(--color-173); + --colorPress: var(--color-174); + --colorFocus: var(--color-173); + } +} +:root.t_dark .t_light .t_dark .t_orange_active, +:root.t_dark .t_light .t_dark .t_orange_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_orange_Button, +:root.t_dark .t_light .t_dark .t_orange_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_orange_surface3, +:root.t_dark .t_orange_active, +:root.t_dark .t_orange_active_SliderTrackActive, +:root.t_dark .t_orange_Button, +:root.t_dark .t_orange_SliderTrackActive, +:root.t_dark .t_orange_surface3, +:root.t_light .t_dark .t_light .t_dark .t_orange_active, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_orange_Button, +:root.t_light .t_dark .t_light .t_dark .t_orange_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_orange_surface3, +:root.t_light .t_dark .t_orange_active, +:root.t_light .t_dark .t_orange_active_SliderTrackActive, +:root.t_light .t_dark .t_orange_Button, +:root.t_light .t_dark .t_orange_SliderTrackActive, +:root.t_light .t_dark .t_orange_surface3 { + --background: var(--color-168); + --backgroundHover: var(--color-169); + --backgroundPress: var(--color-167); + --backgroundFocus: var(--color-167); + --borderColor: var(--color-171); + --borderColorHover: var(--color-172); + --borderColorFocus: var(--color-171); + --borderColorPress: var(--color-170); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_orange_active, + .t_light .t_dark .t_orange_active_SliderTrackActive, + .t_light .t_dark .t_orange_Button, + .t_light .t_dark .t_orange_SliderTrackActive, + .t_light .t_dark .t_orange_surface3, + .t_orange_active, + .t_orange_active_SliderTrackActive, + .t_orange_Button, + .t_orange_SliderTrackActive, + .t_orange_surface3 { + --background: var(--color-168); + --backgroundHover: var(--color-169); + --backgroundPress: var(--color-167); + --backgroundFocus: var(--color-167); + --borderColor: var(--color-171); + --borderColorHover: var(--color-172); + --borderColorFocus: var(--color-171); + --borderColorPress: var(--color-170); + } +} +:root.t_dark .t_light .t_dark .t_orange_active_ListItem, +:root.t_dark .t_light .t_dark .t_orange_active_Progress, +:root.t_dark .t_light .t_dark .t_orange_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_orange_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_orange_Card, +:root.t_dark .t_light .t_dark .t_orange_Input, +:root.t_dark .t_light .t_dark .t_orange_ListItem, +:root.t_dark .t_light .t_dark .t_orange_Progress, +:root.t_dark .t_light .t_dark .t_orange_SelectTrigger, +:root.t_dark .t_light .t_dark .t_orange_SliderTrack, +:root.t_dark .t_light .t_dark .t_orange_surface1, +:root.t_dark .t_light .t_dark .t_orange_TextArea, +:root.t_dark .t_light .t_dark .t_orange_TooltipArrow, +:root.t_dark .t_orange_active_ListItem, +:root.t_dark .t_orange_active_Progress, +:root.t_dark .t_orange_active_SliderTrack, +:root.t_dark .t_orange_active_TooltipArrow, +:root.t_dark .t_orange_Card, +:root.t_dark .t_orange_Input, +:root.t_dark .t_orange_ListItem, +:root.t_dark .t_orange_Progress, +:root.t_dark .t_orange_SelectTrigger, +:root.t_dark .t_orange_SliderTrack, +:root.t_dark .t_orange_surface1, +:root.t_dark .t_orange_TextArea, +:root.t_dark .t_orange_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_Progress, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_orange_Card, +:root.t_light .t_dark .t_light .t_dark .t_orange_Input, +:root.t_light .t_dark .t_light .t_dark .t_orange_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_orange_Progress, +:root.t_light .t_dark .t_light .t_dark .t_orange_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_orange_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_orange_surface1, +:root.t_light .t_dark .t_light .t_dark .t_orange_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_orange_TooltipArrow, +:root.t_light .t_dark .t_orange_active_ListItem, +:root.t_light .t_dark .t_orange_active_Progress, +:root.t_light .t_dark .t_orange_active_SliderTrack, +:root.t_light .t_dark .t_orange_active_TooltipArrow, +:root.t_light .t_dark .t_orange_Card, +:root.t_light .t_dark .t_orange_Input, +:root.t_light .t_dark .t_orange_ListItem, +:root.t_light .t_dark .t_orange_Progress, +:root.t_light .t_dark .t_orange_SelectTrigger, +:root.t_light .t_dark .t_orange_SliderTrack, +:root.t_light .t_dark .t_orange_surface1, +:root.t_light .t_dark .t_orange_TextArea, +:root.t_light .t_dark .t_orange_TooltipArrow { + --background: var(--color-166); + --backgroundHover: var(--color-167); + --backgroundPress: var(--color-165); + --backgroundFocus: var(--color-165); + --borderColor: var(--color-169); + --borderColorHover: var(--color-170); + --borderColorFocus: var(--color-169); + --borderColorPress: var(--color-168); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_orange_active_ListItem, + .t_light .t_dark .t_orange_active_Progress, + .t_light .t_dark .t_orange_active_SliderTrack, + .t_light .t_dark .t_orange_active_TooltipArrow, + .t_light .t_dark .t_orange_Card, + .t_light .t_dark .t_orange_Input, + .t_light .t_dark .t_orange_ListItem, + .t_light .t_dark .t_orange_Progress, + .t_light .t_dark .t_orange_SelectTrigger, + .t_light .t_dark .t_orange_SliderTrack, + .t_light .t_dark .t_orange_surface1, + .t_light .t_dark .t_orange_TextArea, + .t_light .t_dark .t_orange_TooltipArrow, + .t_orange_active_ListItem, + .t_orange_active_Progress, + .t_orange_active_SliderTrack, + .t_orange_active_TooltipArrow, + .t_orange_Card, + .t_orange_Input, + .t_orange_ListItem, + .t_orange_Progress, + .t_orange_SelectTrigger, + .t_orange_SliderTrack, + .t_orange_surface1, + .t_orange_TextArea, + .t_orange_TooltipArrow { + --background: var(--color-166); + --backgroundHover: var(--color-167); + --backgroundPress: var(--color-165); + --backgroundFocus: var(--color-165); + --borderColor: var(--color-169); + --borderColorHover: var(--color-170); + --borderColorFocus: var(--color-169); + --borderColorPress: var(--color-168); + } +} +:root.t_dark .t_light .t_dark .t_orange_Checkbox, +:root.t_dark .t_light .t_dark .t_orange_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_orange_surface2, +:root.t_dark .t_light .t_dark .t_orange_Switch, +:root.t_dark .t_light .t_dark .t_orange_TooltipContent, +:root.t_dark .t_orange_Checkbox, +:root.t_dark .t_orange_RadioGroupItem, +:root.t_dark .t_orange_surface2, +:root.t_dark .t_orange_Switch, +:root.t_dark .t_orange_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_orange_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_orange_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_orange_surface2, +:root.t_light .t_dark .t_light .t_dark .t_orange_Switch, +:root.t_light .t_dark .t_light .t_dark .t_orange_TooltipContent, +:root.t_light .t_dark .t_orange_Checkbox, +:root.t_light .t_dark .t_orange_RadioGroupItem, +:root.t_light .t_dark .t_orange_surface2, +:root.t_light .t_dark .t_orange_Switch, +:root.t_light .t_dark .t_orange_TooltipContent { + --background: var(--color-167); + --backgroundHover: var(--color-168); + --backgroundPress: var(--color-166); + --backgroundFocus: var(--color-166); + --borderColor: var(--color-170); + --borderColorHover: var(--color-171); + --borderColorFocus: var(--color-170); + --borderColorPress: var(--color-169); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_orange_Checkbox, + .t_light .t_dark .t_orange_RadioGroupItem, + .t_light .t_dark .t_orange_surface2, + .t_light .t_dark .t_orange_Switch, + .t_light .t_dark .t_orange_TooltipContent, + .t_orange_Checkbox, + .t_orange_RadioGroupItem, + .t_orange_surface2, + .t_orange_Switch, + .t_orange_TooltipContent { + --background: var(--color-167); + --backgroundHover: var(--color-168); + --backgroundPress: var(--color-166); + --backgroundFocus: var(--color-166); + --borderColor: var(--color-170); + --borderColorHover: var(--color-171); + --borderColorFocus: var(--color-170); + --borderColorPress: var(--color-169); + } +} +:root.t_dark .t_light .t_dark .t_orange_active_Button, +:root.t_dark .t_light .t_dark .t_orange_active_Card, +:root.t_dark .t_light .t_dark .t_orange_active_Checkbox, +:root.t_dark .t_light .t_dark .t_orange_active_Input, +:root.t_dark .t_light .t_dark .t_orange_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_orange_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_orange_active_Switch, +:root.t_dark .t_light .t_dark .t_orange_active_TextArea, +:root.t_dark .t_light .t_dark .t_orange_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_orange_surface4, +:root.t_dark .t_orange_active_Button, +:root.t_dark .t_orange_active_Card, +:root.t_dark .t_orange_active_Checkbox, +:root.t_dark .t_orange_active_Input, +:root.t_dark .t_orange_active_RadioGroupItem, +:root.t_dark .t_orange_active_SelectTrigger, +:root.t_dark .t_orange_active_Switch, +:root.t_dark .t_orange_active_TextArea, +:root.t_dark .t_orange_active_TooltipContent, +:root.t_dark .t_orange_surface4, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_Button, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_Card, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_Input, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_Switch, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_orange_surface4, +:root.t_light .t_dark .t_orange_active_Button, +:root.t_light .t_dark .t_orange_active_Card, +:root.t_light .t_dark .t_orange_active_Checkbox, +:root.t_light .t_dark .t_orange_active_Input, +:root.t_light .t_dark .t_orange_active_RadioGroupItem, +:root.t_light .t_dark .t_orange_active_SelectTrigger, +:root.t_light .t_dark .t_orange_active_Switch, +:root.t_light .t_dark .t_orange_active_TextArea, +:root.t_light .t_dark .t_orange_active_TooltipContent, +:root.t_light .t_dark .t_orange_surface4 { + --background: var(--color-170); + --backgroundHover: var(--color-170); + --backgroundPress: var(--color-169); + --backgroundFocus: var(--color-169); + --borderColor: var(--color-170); + --borderColorHover: var(--color-170); + --borderColorFocus: var(--color-169); + --borderColorPress: var(--color-169); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_orange_active_Button, + .t_light .t_dark .t_orange_active_Card, + .t_light .t_dark .t_orange_active_Checkbox, + .t_light .t_dark .t_orange_active_Input, + .t_light .t_dark .t_orange_active_RadioGroupItem, + .t_light .t_dark .t_orange_active_SelectTrigger, + .t_light .t_dark .t_orange_active_Switch, + .t_light .t_dark .t_orange_active_TextArea, + .t_light .t_dark .t_orange_active_TooltipContent, + .t_light .t_dark .t_orange_surface4, + .t_orange_active_Button, + .t_orange_active_Card, + .t_orange_active_Checkbox, + .t_orange_active_Input, + .t_orange_active_RadioGroupItem, + .t_orange_active_SelectTrigger, + .t_orange_active_Switch, + .t_orange_active_TextArea, + .t_orange_active_TooltipContent, + .t_orange_surface4 { + --background: var(--color-170); + --backgroundHover: var(--color-170); + --backgroundPress: var(--color-169); + --backgroundFocus: var(--color-169); + --borderColor: var(--color-170); + --borderColorHover: var(--color-170); + --borderColorFocus: var(--color-169); + --borderColorPress: var(--color-169); + } +} +:root.t_dark .t_light .t_dark .t_yellow_alt1, +:root.t_dark .t_yellow_alt1, +:root.t_light .t_dark .t_light .t_dark .t_yellow_alt1, +:root.t_light .t_dark .t_yellow_alt1 { + --color: var(--color-223); + --colorHover: var(--color-222); + --colorPress: var(--color-223); + --colorFocus: var(--color-222); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_light .t_dark .t_yellow_alt1, + .t_yellow_alt1 { + --color: var(--color-223); + --colorHover: var(--color-222); + --colorPress: var(--color-223); + --colorFocus: var(--color-222); + } +} +:root.t_dark .t_light .t_dark .t_yellow_alt2, +:root.t_dark .t_yellow_alt2, +:root.t_light .t_dark .t_light .t_dark .t_yellow_alt2, +:root.t_light .t_dark .t_yellow_alt2 { + --color: var(--color-222); + --colorHover: var(--color-221); + --colorPress: var(--color-222); + --colorFocus: var(--color-221); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_light .t_dark .t_yellow_alt2, + .t_yellow_alt2 { + --color: var(--color-222); + --colorHover: var(--color-221); + --colorPress: var(--color-222); + --colorFocus: var(--color-221); + } +} +:root.t_dark .t_light .t_dark .t_yellow_active, +:root.t_dark .t_light .t_dark .t_yellow_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_yellow_Button, +:root.t_dark .t_light .t_dark .t_yellow_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_yellow_surface3, +:root.t_dark .t_yellow_active, +:root.t_dark .t_yellow_active_SliderTrackActive, +:root.t_dark .t_yellow_Button, +:root.t_dark .t_yellow_SliderTrackActive, +:root.t_dark .t_yellow_surface3, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_yellow_Button, +:root.t_light .t_dark .t_light .t_dark .t_yellow_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_yellow_surface3, +:root.t_light .t_dark .t_yellow_active, +:root.t_light .t_dark .t_yellow_active_SliderTrackActive, +:root.t_light .t_dark .t_yellow_Button, +:root.t_light .t_dark .t_yellow_SliderTrackActive, +:root.t_light .t_dark .t_yellow_surface3 { + --background: var(--color-216); + --backgroundHover: var(--color-217); + --backgroundPress: var(--color-215); + --backgroundFocus: var(--color-215); + --borderColor: var(--color-219); + --borderColorHover: var(--color-220); + --borderColorFocus: var(--color-219); + --borderColorPress: var(--color-218); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_yellow_active, + .t_light .t_dark .t_yellow_active_SliderTrackActive, + .t_light .t_dark .t_yellow_Button, + .t_light .t_dark .t_yellow_SliderTrackActive, + .t_light .t_dark .t_yellow_surface3, + .t_yellow_active, + .t_yellow_active_SliderTrackActive, + .t_yellow_Button, + .t_yellow_SliderTrackActive, + .t_yellow_surface3 { + --background: var(--color-216); + --backgroundHover: var(--color-217); + --backgroundPress: var(--color-215); + --backgroundFocus: var(--color-215); + --borderColor: var(--color-219); + --borderColorHover: var(--color-220); + --borderColorFocus: var(--color-219); + --borderColorPress: var(--color-218); + } +} +:root.t_dark .t_light .t_dark .t_yellow_active_ListItem, +:root.t_dark .t_light .t_dark .t_yellow_active_Progress, +:root.t_dark .t_light .t_dark .t_yellow_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_yellow_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_yellow_Card, +:root.t_dark .t_light .t_dark .t_yellow_Input, +:root.t_dark .t_light .t_dark .t_yellow_ListItem, +:root.t_dark .t_light .t_dark .t_yellow_Progress, +:root.t_dark .t_light .t_dark .t_yellow_SelectTrigger, +:root.t_dark .t_light .t_dark .t_yellow_SliderTrack, +:root.t_dark .t_light .t_dark .t_yellow_surface1, +:root.t_dark .t_light .t_dark .t_yellow_TextArea, +:root.t_dark .t_light .t_dark .t_yellow_TooltipArrow, +:root.t_dark .t_yellow_active_ListItem, +:root.t_dark .t_yellow_active_Progress, +:root.t_dark .t_yellow_active_SliderTrack, +:root.t_dark .t_yellow_active_TooltipArrow, +:root.t_dark .t_yellow_Card, +:root.t_dark .t_yellow_Input, +:root.t_dark .t_yellow_ListItem, +:root.t_dark .t_yellow_Progress, +:root.t_dark .t_yellow_SelectTrigger, +:root.t_dark .t_yellow_SliderTrack, +:root.t_dark .t_yellow_surface1, +:root.t_dark .t_yellow_TextArea, +:root.t_dark .t_yellow_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_Progress, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_yellow_Card, +:root.t_light .t_dark .t_light .t_dark .t_yellow_Input, +:root.t_light .t_dark .t_light .t_dark .t_yellow_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_yellow_Progress, +:root.t_light .t_dark .t_light .t_dark .t_yellow_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_yellow_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_yellow_surface1, +:root.t_light .t_dark .t_light .t_dark .t_yellow_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_yellow_TooltipArrow, +:root.t_light .t_dark .t_yellow_active_ListItem, +:root.t_light .t_dark .t_yellow_active_Progress, +:root.t_light .t_dark .t_yellow_active_SliderTrack, +:root.t_light .t_dark .t_yellow_active_TooltipArrow, +:root.t_light .t_dark .t_yellow_Card, +:root.t_light .t_dark .t_yellow_Input, +:root.t_light .t_dark .t_yellow_ListItem, +:root.t_light .t_dark .t_yellow_Progress, +:root.t_light .t_dark .t_yellow_SelectTrigger, +:root.t_light .t_dark .t_yellow_SliderTrack, +:root.t_light .t_dark .t_yellow_surface1, +:root.t_light .t_dark .t_yellow_TextArea, +:root.t_light .t_dark .t_yellow_TooltipArrow { + --background: var(--color-214); + --backgroundHover: var(--color-215); + --backgroundPress: var(--color-213); + --backgroundFocus: var(--color-213); + --borderColor: var(--color-217); + --borderColorHover: var(--color-218); + --borderColorFocus: var(--color-217); + --borderColorPress: var(--color-216); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_yellow_active_ListItem, + .t_light .t_dark .t_yellow_active_Progress, + .t_light .t_dark .t_yellow_active_SliderTrack, + .t_light .t_dark .t_yellow_active_TooltipArrow, + .t_light .t_dark .t_yellow_Card, + .t_light .t_dark .t_yellow_Input, + .t_light .t_dark .t_yellow_ListItem, + .t_light .t_dark .t_yellow_Progress, + .t_light .t_dark .t_yellow_SelectTrigger, + .t_light .t_dark .t_yellow_SliderTrack, + .t_light .t_dark .t_yellow_surface1, + .t_light .t_dark .t_yellow_TextArea, + .t_light .t_dark .t_yellow_TooltipArrow, + .t_yellow_active_ListItem, + .t_yellow_active_Progress, + .t_yellow_active_SliderTrack, + .t_yellow_active_TooltipArrow, + .t_yellow_Card, + .t_yellow_Input, + .t_yellow_ListItem, + .t_yellow_Progress, + .t_yellow_SelectTrigger, + .t_yellow_SliderTrack, + .t_yellow_surface1, + .t_yellow_TextArea, + .t_yellow_TooltipArrow { + --background: var(--color-214); + --backgroundHover: var(--color-215); + --backgroundPress: var(--color-213); + --backgroundFocus: var(--color-213); + --borderColor: var(--color-217); + --borderColorHover: var(--color-218); + --borderColorFocus: var(--color-217); + --borderColorPress: var(--color-216); + } +} +:root.t_dark .t_light .t_dark .t_yellow_Checkbox, +:root.t_dark .t_light .t_dark .t_yellow_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_yellow_surface2, +:root.t_dark .t_light .t_dark .t_yellow_Switch, +:root.t_dark .t_light .t_dark .t_yellow_TooltipContent, +:root.t_dark .t_yellow_Checkbox, +:root.t_dark .t_yellow_RadioGroupItem, +:root.t_dark .t_yellow_surface2, +:root.t_dark .t_yellow_Switch, +:root.t_dark .t_yellow_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_yellow_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_yellow_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_yellow_surface2, +:root.t_light .t_dark .t_light .t_dark .t_yellow_Switch, +:root.t_light .t_dark .t_light .t_dark .t_yellow_TooltipContent, +:root.t_light .t_dark .t_yellow_Checkbox, +:root.t_light .t_dark .t_yellow_RadioGroupItem, +:root.t_light .t_dark .t_yellow_surface2, +:root.t_light .t_dark .t_yellow_Switch, +:root.t_light .t_dark .t_yellow_TooltipContent { + --background: var(--color-215); + --backgroundHover: var(--color-216); + --backgroundPress: var(--color-214); + --backgroundFocus: var(--color-214); + --borderColor: var(--color-218); + --borderColorHover: var(--color-219); + --borderColorFocus: var(--color-218); + --borderColorPress: var(--color-217); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_yellow_Checkbox, + .t_light .t_dark .t_yellow_RadioGroupItem, + .t_light .t_dark .t_yellow_surface2, + .t_light .t_dark .t_yellow_Switch, + .t_light .t_dark .t_yellow_TooltipContent, + .t_yellow_Checkbox, + .t_yellow_RadioGroupItem, + .t_yellow_surface2, + .t_yellow_Switch, + .t_yellow_TooltipContent { + --background: var(--color-215); + --backgroundHover: var(--color-216); + --backgroundPress: var(--color-214); + --backgroundFocus: var(--color-214); + --borderColor: var(--color-218); + --borderColorHover: var(--color-219); + --borderColorFocus: var(--color-218); + --borderColorPress: var(--color-217); + } +} +:root.t_dark .t_light .t_dark .t_yellow_active_Button, +:root.t_dark .t_light .t_dark .t_yellow_active_Card, +:root.t_dark .t_light .t_dark .t_yellow_active_Checkbox, +:root.t_dark .t_light .t_dark .t_yellow_active_Input, +:root.t_dark .t_light .t_dark .t_yellow_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_yellow_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_yellow_active_Switch, +:root.t_dark .t_light .t_dark .t_yellow_active_TextArea, +:root.t_dark .t_light .t_dark .t_yellow_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_yellow_surface4, +:root.t_dark .t_yellow_active_Button, +:root.t_dark .t_yellow_active_Card, +:root.t_dark .t_yellow_active_Checkbox, +:root.t_dark .t_yellow_active_Input, +:root.t_dark .t_yellow_active_RadioGroupItem, +:root.t_dark .t_yellow_active_SelectTrigger, +:root.t_dark .t_yellow_active_Switch, +:root.t_dark .t_yellow_active_TextArea, +:root.t_dark .t_yellow_active_TooltipContent, +:root.t_dark .t_yellow_surface4, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_Button, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_Card, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_Input, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_Switch, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_yellow_surface4, +:root.t_light .t_dark .t_yellow_active_Button, +:root.t_light .t_dark .t_yellow_active_Card, +:root.t_light .t_dark .t_yellow_active_Checkbox, +:root.t_light .t_dark .t_yellow_active_Input, +:root.t_light .t_dark .t_yellow_active_RadioGroupItem, +:root.t_light .t_dark .t_yellow_active_SelectTrigger, +:root.t_light .t_dark .t_yellow_active_Switch, +:root.t_light .t_dark .t_yellow_active_TextArea, +:root.t_light .t_dark .t_yellow_active_TooltipContent, +:root.t_light .t_dark .t_yellow_surface4 { + --background: var(--color-218); + --backgroundHover: var(--color-218); + --backgroundPress: var(--color-217); + --backgroundFocus: var(--color-217); + --borderColor: var(--color-218); + --borderColorHover: var(--color-218); + --borderColorFocus: var(--color-217); + --borderColorPress: var(--color-217); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_yellow_active_Button, + .t_light .t_dark .t_yellow_active_Card, + .t_light .t_dark .t_yellow_active_Checkbox, + .t_light .t_dark .t_yellow_active_Input, + .t_light .t_dark .t_yellow_active_RadioGroupItem, + .t_light .t_dark .t_yellow_active_SelectTrigger, + .t_light .t_dark .t_yellow_active_Switch, + .t_light .t_dark .t_yellow_active_TextArea, + .t_light .t_dark .t_yellow_active_TooltipContent, + .t_light .t_dark .t_yellow_surface4, + .t_yellow_active_Button, + .t_yellow_active_Card, + .t_yellow_active_Checkbox, + .t_yellow_active_Input, + .t_yellow_active_RadioGroupItem, + .t_yellow_active_SelectTrigger, + .t_yellow_active_Switch, + .t_yellow_active_TextArea, + .t_yellow_active_TooltipContent, + .t_yellow_surface4 { + --background: var(--color-218); + --backgroundHover: var(--color-218); + --backgroundPress: var(--color-217); + --backgroundFocus: var(--color-217); + --borderColor: var(--color-218); + --borderColorHover: var(--color-218); + --borderColorFocus: var(--color-217); + --borderColorPress: var(--color-217); + } +} +:root.t_dark .t_green_alt1, +:root.t_dark .t_light .t_dark .t_green_alt1, +:root.t_light .t_dark .t_green_alt1, +:root.t_light .t_dark .t_light .t_dark .t_green_alt1 { + --color: var(--color-163); + --colorHover: var(--color-162); + --colorPress: var(--color-163); + --colorFocus: var(--color-162); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_green_alt1, + .t_light .t_dark .t_green_alt1 { + --color: var(--color-163); + --colorHover: var(--color-162); + --colorPress: var(--color-163); + --colorFocus: var(--color-162); + } +} +:root.t_dark .t_green_alt2, +:root.t_dark .t_light .t_dark .t_green_alt2, +:root.t_light .t_dark .t_green_alt2, +:root.t_light .t_dark .t_light .t_dark .t_green_alt2 { + --color: var(--color-162); + --colorHover: var(--color-161); + --colorPress: var(--color-162); + --colorFocus: var(--color-161); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_green_alt2, + .t_light .t_dark .t_green_alt2 { + --color: var(--color-162); + --colorHover: var(--color-161); + --colorPress: var(--color-162); + --colorFocus: var(--color-161); + } +} +:root.t_dark .t_green_active, +:root.t_dark .t_green_active_SliderTrackActive, +:root.t_dark .t_green_Button, +:root.t_dark .t_green_SliderTrackActive, +:root.t_dark .t_green_surface3, +:root.t_dark .t_light .t_dark .t_green_active, +:root.t_dark .t_light .t_dark .t_green_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_green_Button, +:root.t_dark .t_light .t_dark .t_green_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_green_surface3, +:root.t_light .t_dark .t_green_active, +:root.t_light .t_dark .t_green_active_SliderTrackActive, +:root.t_light .t_dark .t_green_Button, +:root.t_light .t_dark .t_green_SliderTrackActive, +:root.t_light .t_dark .t_green_surface3, +:root.t_light .t_dark .t_light .t_dark .t_green_active, +:root.t_light .t_dark .t_light .t_dark .t_green_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_green_Button, +:root.t_light .t_dark .t_light .t_dark .t_green_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_green_surface3 { + --background: var(--color-156); + --backgroundHover: var(--color-157); + --backgroundPress: var(--color-155); + --backgroundFocus: var(--color-155); + --borderColor: var(--color-159); + --borderColorHover: var(--color-160); + --borderColorFocus: var(--color-159); + --borderColorPress: var(--color-158); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_green_active, + .t_green_active_SliderTrackActive, + .t_green_Button, + .t_green_SliderTrackActive, + .t_green_surface3, + .t_light .t_dark .t_green_active, + .t_light .t_dark .t_green_active_SliderTrackActive, + .t_light .t_dark .t_green_Button, + .t_light .t_dark .t_green_SliderTrackActive, + .t_light .t_dark .t_green_surface3 { + --background: var(--color-156); + --backgroundHover: var(--color-157); + --backgroundPress: var(--color-155); + --backgroundFocus: var(--color-155); + --borderColor: var(--color-159); + --borderColorHover: var(--color-160); + --borderColorFocus: var(--color-159); + --borderColorPress: var(--color-158); + } +} +:root.t_dark .t_green_active_ListItem, +:root.t_dark .t_green_active_Progress, +:root.t_dark .t_green_active_SliderTrack, +:root.t_dark .t_green_active_TooltipArrow, +:root.t_dark .t_green_Card, +:root.t_dark .t_green_Input, +:root.t_dark .t_green_ListItem, +:root.t_dark .t_green_Progress, +:root.t_dark .t_green_SelectTrigger, +:root.t_dark .t_green_SliderTrack, +:root.t_dark .t_green_surface1, +:root.t_dark .t_green_TextArea, +:root.t_dark .t_green_TooltipArrow, +:root.t_dark .t_light .t_dark .t_green_active_ListItem, +:root.t_dark .t_light .t_dark .t_green_active_Progress, +:root.t_dark .t_light .t_dark .t_green_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_green_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_green_Card, +:root.t_dark .t_light .t_dark .t_green_Input, +:root.t_dark .t_light .t_dark .t_green_ListItem, +:root.t_dark .t_light .t_dark .t_green_Progress, +:root.t_dark .t_light .t_dark .t_green_SelectTrigger, +:root.t_dark .t_light .t_dark .t_green_SliderTrack, +:root.t_dark .t_light .t_dark .t_green_surface1, +:root.t_dark .t_light .t_dark .t_green_TextArea, +:root.t_dark .t_light .t_dark .t_green_TooltipArrow, +:root.t_light .t_dark .t_green_active_ListItem, +:root.t_light .t_dark .t_green_active_Progress, +:root.t_light .t_dark .t_green_active_SliderTrack, +:root.t_light .t_dark .t_green_active_TooltipArrow, +:root.t_light .t_dark .t_green_Card, +:root.t_light .t_dark .t_green_Input, +:root.t_light .t_dark .t_green_ListItem, +:root.t_light .t_dark .t_green_Progress, +:root.t_light .t_dark .t_green_SelectTrigger, +:root.t_light .t_dark .t_green_SliderTrack, +:root.t_light .t_dark .t_green_surface1, +:root.t_light .t_dark .t_green_TextArea, +:root.t_light .t_dark .t_green_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_green_active_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_green_active_Progress, +:root.t_light .t_dark .t_light .t_dark .t_green_active_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_green_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_green_Card, +:root.t_light .t_dark .t_light .t_dark .t_green_Input, +:root.t_light .t_dark .t_light .t_dark .t_green_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_green_Progress, +:root.t_light .t_dark .t_light .t_dark .t_green_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_green_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_green_surface1, +:root.t_light .t_dark .t_light .t_dark .t_green_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_green_TooltipArrow { + --background: var(--color-154); + --backgroundHover: var(--color-155); + --backgroundPress: var(--color-153); + --backgroundFocus: var(--color-153); + --borderColor: var(--color-157); + --borderColorHover: var(--color-158); + --borderColorFocus: var(--color-157); + --borderColorPress: var(--color-156); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_green_active_ListItem, + .t_green_active_Progress, + .t_green_active_SliderTrack, + .t_green_active_TooltipArrow, + .t_green_Card, + .t_green_Input, + .t_green_ListItem, + .t_green_Progress, + .t_green_SelectTrigger, + .t_green_SliderTrack, + .t_green_surface1, + .t_green_TextArea, + .t_green_TooltipArrow, + .t_light .t_dark .t_green_active_ListItem, + .t_light .t_dark .t_green_active_Progress, + .t_light .t_dark .t_green_active_SliderTrack, + .t_light .t_dark .t_green_active_TooltipArrow, + .t_light .t_dark .t_green_Card, + .t_light .t_dark .t_green_Input, + .t_light .t_dark .t_green_ListItem, + .t_light .t_dark .t_green_Progress, + .t_light .t_dark .t_green_SelectTrigger, + .t_light .t_dark .t_green_SliderTrack, + .t_light .t_dark .t_green_surface1, + .t_light .t_dark .t_green_TextArea, + .t_light .t_dark .t_green_TooltipArrow { + --background: var(--color-154); + --backgroundHover: var(--color-155); + --backgroundPress: var(--color-153); + --backgroundFocus: var(--color-153); + --borderColor: var(--color-157); + --borderColorHover: var(--color-158); + --borderColorFocus: var(--color-157); + --borderColorPress: var(--color-156); + } +} +:root.t_dark .t_green_Checkbox, +:root.t_dark .t_green_RadioGroupItem, +:root.t_dark .t_green_surface2, +:root.t_dark .t_green_Switch, +:root.t_dark .t_green_TooltipContent, +:root.t_dark .t_light .t_dark .t_green_Checkbox, +:root.t_dark .t_light .t_dark .t_green_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_green_surface2, +:root.t_dark .t_light .t_dark .t_green_Switch, +:root.t_dark .t_light .t_dark .t_green_TooltipContent, +:root.t_light .t_dark .t_green_Checkbox, +:root.t_light .t_dark .t_green_RadioGroupItem, +:root.t_light .t_dark .t_green_surface2, +:root.t_light .t_dark .t_green_Switch, +:root.t_light .t_dark .t_green_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_green_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_green_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_green_surface2, +:root.t_light .t_dark .t_light .t_dark .t_green_Switch, +:root.t_light .t_dark .t_light .t_dark .t_green_TooltipContent { + --background: var(--color-155); + --backgroundHover: var(--color-156); + --backgroundPress: var(--color-154); + --backgroundFocus: var(--color-154); + --borderColor: var(--color-158); + --borderColorHover: var(--color-159); + --borderColorFocus: var(--color-158); + --borderColorPress: var(--color-157); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_green_Checkbox, + .t_green_RadioGroupItem, + .t_green_surface2, + .t_green_Switch, + .t_green_TooltipContent, + .t_light .t_dark .t_green_Checkbox, + .t_light .t_dark .t_green_RadioGroupItem, + .t_light .t_dark .t_green_surface2, + .t_light .t_dark .t_green_Switch, + .t_light .t_dark .t_green_TooltipContent { + --background: var(--color-155); + --backgroundHover: var(--color-156); + --backgroundPress: var(--color-154); + --backgroundFocus: var(--color-154); + --borderColor: var(--color-158); + --borderColorHover: var(--color-159); + --borderColorFocus: var(--color-158); + --borderColorPress: var(--color-157); + } +} +:root.t_dark .t_green_active_Button, +:root.t_dark .t_green_active_Card, +:root.t_dark .t_green_active_Checkbox, +:root.t_dark .t_green_active_Input, +:root.t_dark .t_green_active_RadioGroupItem, +:root.t_dark .t_green_active_SelectTrigger, +:root.t_dark .t_green_active_Switch, +:root.t_dark .t_green_active_TextArea, +:root.t_dark .t_green_active_TooltipContent, +:root.t_dark .t_green_surface4, +:root.t_dark .t_light .t_dark .t_green_active_Button, +:root.t_dark .t_light .t_dark .t_green_active_Card, +:root.t_dark .t_light .t_dark .t_green_active_Checkbox, +:root.t_dark .t_light .t_dark .t_green_active_Input, +:root.t_dark .t_light .t_dark .t_green_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_green_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_green_active_Switch, +:root.t_dark .t_light .t_dark .t_green_active_TextArea, +:root.t_dark .t_light .t_dark .t_green_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_green_surface4, +:root.t_light .t_dark .t_green_active_Button, +:root.t_light .t_dark .t_green_active_Card, +:root.t_light .t_dark .t_green_active_Checkbox, +:root.t_light .t_dark .t_green_active_Input, +:root.t_light .t_dark .t_green_active_RadioGroupItem, +:root.t_light .t_dark .t_green_active_SelectTrigger, +:root.t_light .t_dark .t_green_active_Switch, +:root.t_light .t_dark .t_green_active_TextArea, +:root.t_light .t_dark .t_green_active_TooltipContent, +:root.t_light .t_dark .t_green_surface4, +:root.t_light .t_dark .t_light .t_dark .t_green_active_Button, +:root.t_light .t_dark .t_light .t_dark .t_green_active_Card, +:root.t_light .t_dark .t_light .t_dark .t_green_active_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_green_active_Input, +:root.t_light .t_dark .t_light .t_dark .t_green_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_green_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_green_active_Switch, +:root.t_light .t_dark .t_light .t_dark .t_green_active_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_green_active_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_green_surface4 { + --background: var(--color-158); + --backgroundHover: var(--color-158); + --backgroundPress: var(--color-157); + --backgroundFocus: var(--color-157); + --borderColor: var(--color-158); + --borderColorHover: var(--color-158); + --borderColorFocus: var(--color-157); + --borderColorPress: var(--color-157); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_green_active_Button, + .t_green_active_Card, + .t_green_active_Checkbox, + .t_green_active_Input, + .t_green_active_RadioGroupItem, + .t_green_active_SelectTrigger, + .t_green_active_Switch, + .t_green_active_TextArea, + .t_green_active_TooltipContent, + .t_green_surface4, + .t_light .t_dark .t_green_active_Button, + .t_light .t_dark .t_green_active_Card, + .t_light .t_dark .t_green_active_Checkbox, + .t_light .t_dark .t_green_active_Input, + .t_light .t_dark .t_green_active_RadioGroupItem, + .t_light .t_dark .t_green_active_SelectTrigger, + .t_light .t_dark .t_green_active_Switch, + .t_light .t_dark .t_green_active_TextArea, + .t_light .t_dark .t_green_active_TooltipContent, + .t_light .t_dark .t_green_surface4 { + --background: var(--color-158); + --backgroundHover: var(--color-158); + --backgroundPress: var(--color-157); + --backgroundFocus: var(--color-157); + --borderColor: var(--color-158); + --borderColorHover: var(--color-158); + --borderColorFocus: var(--color-157); + --borderColorPress: var(--color-157); + } +} +:root.t_dark .t_blue_alt1, +:root.t_dark .t_light .t_dark .t_blue_alt1, +:root.t_light .t_dark .t_blue_alt1, +:root.t_light .t_dark .t_light .t_dark .t_blue_alt1 { + --color: var(--color-139); + --colorHover: var(--color-138); + --colorPress: var(--color-139); + --colorFocus: var(--color-138); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_blue_alt1, + .t_light .t_dark .t_blue_alt1 { + --color: var(--color-139); + --colorHover: var(--color-138); + --colorPress: var(--color-139); + --colorFocus: var(--color-138); + } +} +:root.t_dark .t_blue_alt2, +:root.t_dark .t_light .t_dark .t_blue_alt2, +:root.t_light .t_dark .t_blue_alt2, +:root.t_light .t_dark .t_light .t_dark .t_blue_alt2 { + --color: var(--color-138); + --colorHover: var(--color-137); + --colorPress: var(--color-138); + --colorFocus: var(--color-137); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_blue_alt2, + .t_light .t_dark .t_blue_alt2 { + --color: var(--color-138); + --colorHover: var(--color-137); + --colorPress: var(--color-138); + --colorFocus: var(--color-137); + } +} +:root.t_dark .t_blue_active, +:root.t_dark .t_blue_active_SliderTrackActive, +:root.t_dark .t_blue_Button, +:root.t_dark .t_blue_SliderTrackActive, +:root.t_dark .t_blue_surface3, +:root.t_dark .t_light .t_dark .t_blue_active, +:root.t_dark .t_light .t_dark .t_blue_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_blue_Button, +:root.t_dark .t_light .t_dark .t_blue_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_blue_surface3, +:root.t_light .t_dark .t_blue_active, +:root.t_light .t_dark .t_blue_active_SliderTrackActive, +:root.t_light .t_dark .t_blue_Button, +:root.t_light .t_dark .t_blue_SliderTrackActive, +:root.t_light .t_dark .t_blue_surface3, +:root.t_light .t_dark .t_light .t_dark .t_blue_active, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_blue_Button, +:root.t_light .t_dark .t_light .t_dark .t_blue_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_blue_surface3 { + --background: var(--color-132); + --backgroundHover: var(--color-133); + --backgroundPress: var(--color-131); + --backgroundFocus: var(--color-131); + --borderColor: var(--color-135); + --borderColorHover: var(--color-136); + --borderColorFocus: var(--color-135); + --borderColorPress: var(--color-134); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_blue_active, + .t_blue_active_SliderTrackActive, + .t_blue_Button, + .t_blue_SliderTrackActive, + .t_blue_surface3, + .t_light .t_dark .t_blue_active, + .t_light .t_dark .t_blue_active_SliderTrackActive, + .t_light .t_dark .t_blue_Button, + .t_light .t_dark .t_blue_SliderTrackActive, + .t_light .t_dark .t_blue_surface3 { + --background: var(--color-132); + --backgroundHover: var(--color-133); + --backgroundPress: var(--color-131); + --backgroundFocus: var(--color-131); + --borderColor: var(--color-135); + --borderColorHover: var(--color-136); + --borderColorFocus: var(--color-135); + --borderColorPress: var(--color-134); + } +} +:root.t_dark .t_blue_active_ListItem, +:root.t_dark .t_blue_active_Progress, +:root.t_dark .t_blue_active_SliderTrack, +:root.t_dark .t_blue_active_TooltipArrow, +:root.t_dark .t_blue_Card, +:root.t_dark .t_blue_Input, +:root.t_dark .t_blue_ListItem, +:root.t_dark .t_blue_Progress, +:root.t_dark .t_blue_SelectTrigger, +:root.t_dark .t_blue_SliderTrack, +:root.t_dark .t_blue_surface1, +:root.t_dark .t_blue_TextArea, +:root.t_dark .t_blue_TooltipArrow, +:root.t_dark .t_light .t_dark .t_blue_active_ListItem, +:root.t_dark .t_light .t_dark .t_blue_active_Progress, +:root.t_dark .t_light .t_dark .t_blue_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_blue_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_blue_Card, +:root.t_dark .t_light .t_dark .t_blue_Input, +:root.t_dark .t_light .t_dark .t_blue_ListItem, +:root.t_dark .t_light .t_dark .t_blue_Progress, +:root.t_dark .t_light .t_dark .t_blue_SelectTrigger, +:root.t_dark .t_light .t_dark .t_blue_SliderTrack, +:root.t_dark .t_light .t_dark .t_blue_surface1, +:root.t_dark .t_light .t_dark .t_blue_TextArea, +:root.t_dark .t_light .t_dark .t_blue_TooltipArrow, +:root.t_light .t_dark .t_blue_active_ListItem, +:root.t_light .t_dark .t_blue_active_Progress, +:root.t_light .t_dark .t_blue_active_SliderTrack, +:root.t_light .t_dark .t_blue_active_TooltipArrow, +:root.t_light .t_dark .t_blue_Card, +:root.t_light .t_dark .t_blue_Input, +:root.t_light .t_dark .t_blue_ListItem, +:root.t_light .t_dark .t_blue_Progress, +:root.t_light .t_dark .t_blue_SelectTrigger, +:root.t_light .t_dark .t_blue_SliderTrack, +:root.t_light .t_dark .t_blue_surface1, +:root.t_light .t_dark .t_blue_TextArea, +:root.t_light .t_dark .t_blue_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_Progress, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_blue_Card, +:root.t_light .t_dark .t_light .t_dark .t_blue_Input, +:root.t_light .t_dark .t_light .t_dark .t_blue_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_blue_Progress, +:root.t_light .t_dark .t_light .t_dark .t_blue_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_blue_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_blue_surface1, +:root.t_light .t_dark .t_light .t_dark .t_blue_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_blue_TooltipArrow { + --background: var(--color-130); + --backgroundHover: var(--color-131); + --backgroundPress: var(--color-129); + --backgroundFocus: var(--color-129); + --borderColor: var(--color-133); + --borderColorHover: var(--color-134); + --borderColorFocus: var(--color-133); + --borderColorPress: var(--color-132); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_blue_active_ListItem, + .t_blue_active_Progress, + .t_blue_active_SliderTrack, + .t_blue_active_TooltipArrow, + .t_blue_Card, + .t_blue_Input, + .t_blue_ListItem, + .t_blue_Progress, + .t_blue_SelectTrigger, + .t_blue_SliderTrack, + .t_blue_surface1, + .t_blue_TextArea, + .t_blue_TooltipArrow, + .t_light .t_dark .t_blue_active_ListItem, + .t_light .t_dark .t_blue_active_Progress, + .t_light .t_dark .t_blue_active_SliderTrack, + .t_light .t_dark .t_blue_active_TooltipArrow, + .t_light .t_dark .t_blue_Card, + .t_light .t_dark .t_blue_Input, + .t_light .t_dark .t_blue_ListItem, + .t_light .t_dark .t_blue_Progress, + .t_light .t_dark .t_blue_SelectTrigger, + .t_light .t_dark .t_blue_SliderTrack, + .t_light .t_dark .t_blue_surface1, + .t_light .t_dark .t_blue_TextArea, + .t_light .t_dark .t_blue_TooltipArrow { + --background: var(--color-130); + --backgroundHover: var(--color-131); + --backgroundPress: var(--color-129); + --backgroundFocus: var(--color-129); + --borderColor: var(--color-133); + --borderColorHover: var(--color-134); + --borderColorFocus: var(--color-133); + --borderColorPress: var(--color-132); + } +} +:root.t_dark .t_blue_Checkbox, +:root.t_dark .t_blue_RadioGroupItem, +:root.t_dark .t_blue_surface2, +:root.t_dark .t_blue_Switch, +:root.t_dark .t_blue_TooltipContent, +:root.t_dark .t_light .t_dark .t_blue_Checkbox, +:root.t_dark .t_light .t_dark .t_blue_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_blue_surface2, +:root.t_dark .t_light .t_dark .t_blue_Switch, +:root.t_dark .t_light .t_dark .t_blue_TooltipContent, +:root.t_light .t_dark .t_blue_Checkbox, +:root.t_light .t_dark .t_blue_RadioGroupItem, +:root.t_light .t_dark .t_blue_surface2, +:root.t_light .t_dark .t_blue_Switch, +:root.t_light .t_dark .t_blue_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_blue_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_blue_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_blue_surface2, +:root.t_light .t_dark .t_light .t_dark .t_blue_Switch, +:root.t_light .t_dark .t_light .t_dark .t_blue_TooltipContent { + --background: var(--color-131); + --backgroundHover: var(--color-132); + --backgroundPress: var(--color-130); + --backgroundFocus: var(--color-130); + --borderColor: var(--color-134); + --borderColorHover: var(--color-135); + --borderColorFocus: var(--color-134); + --borderColorPress: var(--color-133); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_blue_Checkbox, + .t_blue_RadioGroupItem, + .t_blue_surface2, + .t_blue_Switch, + .t_blue_TooltipContent, + .t_light .t_dark .t_blue_Checkbox, + .t_light .t_dark .t_blue_RadioGroupItem, + .t_light .t_dark .t_blue_surface2, + .t_light .t_dark .t_blue_Switch, + .t_light .t_dark .t_blue_TooltipContent { + --background: var(--color-131); + --backgroundHover: var(--color-132); + --backgroundPress: var(--color-130); + --backgroundFocus: var(--color-130); + --borderColor: var(--color-134); + --borderColorHover: var(--color-135); + --borderColorFocus: var(--color-134); + --borderColorPress: var(--color-133); + } +} +:root.t_dark .t_blue_active_Button, +:root.t_dark .t_blue_active_Card, +:root.t_dark .t_blue_active_Checkbox, +:root.t_dark .t_blue_active_Input, +:root.t_dark .t_blue_active_RadioGroupItem, +:root.t_dark .t_blue_active_SelectTrigger, +:root.t_dark .t_blue_active_Switch, +:root.t_dark .t_blue_active_TextArea, +:root.t_dark .t_blue_active_TooltipContent, +:root.t_dark .t_blue_surface4, +:root.t_dark .t_light .t_dark .t_blue_active_Button, +:root.t_dark .t_light .t_dark .t_blue_active_Card, +:root.t_dark .t_light .t_dark .t_blue_active_Checkbox, +:root.t_dark .t_light .t_dark .t_blue_active_Input, +:root.t_dark .t_light .t_dark .t_blue_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_blue_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_blue_active_Switch, +:root.t_dark .t_light .t_dark .t_blue_active_TextArea, +:root.t_dark .t_light .t_dark .t_blue_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_blue_surface4, +:root.t_light .t_dark .t_blue_active_Button, +:root.t_light .t_dark .t_blue_active_Card, +:root.t_light .t_dark .t_blue_active_Checkbox, +:root.t_light .t_dark .t_blue_active_Input, +:root.t_light .t_dark .t_blue_active_RadioGroupItem, +:root.t_light .t_dark .t_blue_active_SelectTrigger, +:root.t_light .t_dark .t_blue_active_Switch, +:root.t_light .t_dark .t_blue_active_TextArea, +:root.t_light .t_dark .t_blue_active_TooltipContent, +:root.t_light .t_dark .t_blue_surface4, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_Button, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_Card, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_Input, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_Switch, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_blue_surface4 { + --background: var(--color-134); + --backgroundHover: var(--color-134); + --backgroundPress: var(--color-133); + --backgroundFocus: var(--color-133); + --borderColor: var(--color-134); + --borderColorHover: var(--color-134); + --borderColorFocus: var(--color-133); + --borderColorPress: var(--color-133); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_blue_active_Button, + .t_blue_active_Card, + .t_blue_active_Checkbox, + .t_blue_active_Input, + .t_blue_active_RadioGroupItem, + .t_blue_active_SelectTrigger, + .t_blue_active_Switch, + .t_blue_active_TextArea, + .t_blue_active_TooltipContent, + .t_blue_surface4, + .t_light .t_dark .t_blue_active_Button, + .t_light .t_dark .t_blue_active_Card, + .t_light .t_dark .t_blue_active_Checkbox, + .t_light .t_dark .t_blue_active_Input, + .t_light .t_dark .t_blue_active_RadioGroupItem, + .t_light .t_dark .t_blue_active_SelectTrigger, + .t_light .t_dark .t_blue_active_Switch, + .t_light .t_dark .t_blue_active_TextArea, + .t_light .t_dark .t_blue_active_TooltipContent, + .t_light .t_dark .t_blue_surface4 { + --background: var(--color-134); + --backgroundHover: var(--color-134); + --backgroundPress: var(--color-133); + --backgroundFocus: var(--color-133); + --borderColor: var(--color-134); + --borderColorHover: var(--color-134); + --borderColorFocus: var(--color-133); + --borderColorPress: var(--color-133); + } +} +:root.t_dark .t_light .t_dark .t_purple_alt1, +:root.t_dark .t_purple_alt1, +:root.t_light .t_dark .t_light .t_dark .t_purple_alt1, +:root.t_light .t_dark .t_purple_alt1 { + --color: var(--color-199); + --colorHover: var(--color-198); + --colorPress: var(--color-199); + --colorFocus: var(--color-198); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_light .t_dark .t_purple_alt1, + .t_purple_alt1 { + --color: var(--color-199); + --colorHover: var(--color-198); + --colorPress: var(--color-199); + --colorFocus: var(--color-198); + } +} +:root.t_dark .t_light .t_dark .t_purple_alt2, +:root.t_dark .t_purple_alt2, +:root.t_light .t_dark .t_light .t_dark .t_purple_alt2, +:root.t_light .t_dark .t_purple_alt2 { + --color: var(--color-198); + --colorHover: var(--color-197); + --colorPress: var(--color-198); + --colorFocus: var(--color-197); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_light .t_dark .t_purple_alt2, + .t_purple_alt2 { + --color: var(--color-198); + --colorHover: var(--color-197); + --colorPress: var(--color-198); + --colorFocus: var(--color-197); + } +} +:root.t_dark .t_light .t_dark .t_purple_active, +:root.t_dark .t_light .t_dark .t_purple_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_purple_Button, +:root.t_dark .t_light .t_dark .t_purple_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_purple_surface3, +:root.t_dark .t_purple_active, +:root.t_dark .t_purple_active_SliderTrackActive, +:root.t_dark .t_purple_Button, +:root.t_dark .t_purple_SliderTrackActive, +:root.t_dark .t_purple_surface3, +:root.t_light .t_dark .t_light .t_dark .t_purple_active, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_purple_Button, +:root.t_light .t_dark .t_light .t_dark .t_purple_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_purple_surface3, +:root.t_light .t_dark .t_purple_active, +:root.t_light .t_dark .t_purple_active_SliderTrackActive, +:root.t_light .t_dark .t_purple_Button, +:root.t_light .t_dark .t_purple_SliderTrackActive, +:root.t_light .t_dark .t_purple_surface3 { + --background: var(--color-192); + --backgroundHover: var(--color-193); + --backgroundPress: var(--color-191); + --backgroundFocus: var(--color-191); + --borderColor: var(--color-195); + --borderColorHover: var(--color-196); + --borderColorFocus: var(--color-195); + --borderColorPress: var(--color-194); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_purple_active, + .t_light .t_dark .t_purple_active_SliderTrackActive, + .t_light .t_dark .t_purple_Button, + .t_light .t_dark .t_purple_SliderTrackActive, + .t_light .t_dark .t_purple_surface3, + .t_purple_active, + .t_purple_active_SliderTrackActive, + .t_purple_Button, + .t_purple_SliderTrackActive, + .t_purple_surface3 { + --background: var(--color-192); + --backgroundHover: var(--color-193); + --backgroundPress: var(--color-191); + --backgroundFocus: var(--color-191); + --borderColor: var(--color-195); + --borderColorHover: var(--color-196); + --borderColorFocus: var(--color-195); + --borderColorPress: var(--color-194); + } +} +:root.t_dark .t_light .t_dark .t_purple_active_ListItem, +:root.t_dark .t_light .t_dark .t_purple_active_Progress, +:root.t_dark .t_light .t_dark .t_purple_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_purple_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_purple_Card, +:root.t_dark .t_light .t_dark .t_purple_Input, +:root.t_dark .t_light .t_dark .t_purple_ListItem, +:root.t_dark .t_light .t_dark .t_purple_Progress, +:root.t_dark .t_light .t_dark .t_purple_SelectTrigger, +:root.t_dark .t_light .t_dark .t_purple_SliderTrack, +:root.t_dark .t_light .t_dark .t_purple_surface1, +:root.t_dark .t_light .t_dark .t_purple_TextArea, +:root.t_dark .t_light .t_dark .t_purple_TooltipArrow, +:root.t_dark .t_purple_active_ListItem, +:root.t_dark .t_purple_active_Progress, +:root.t_dark .t_purple_active_SliderTrack, +:root.t_dark .t_purple_active_TooltipArrow, +:root.t_dark .t_purple_Card, +:root.t_dark .t_purple_Input, +:root.t_dark .t_purple_ListItem, +:root.t_dark .t_purple_Progress, +:root.t_dark .t_purple_SelectTrigger, +:root.t_dark .t_purple_SliderTrack, +:root.t_dark .t_purple_surface1, +:root.t_dark .t_purple_TextArea, +:root.t_dark .t_purple_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_Progress, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_purple_Card, +:root.t_light .t_dark .t_light .t_dark .t_purple_Input, +:root.t_light .t_dark .t_light .t_dark .t_purple_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_purple_Progress, +:root.t_light .t_dark .t_light .t_dark .t_purple_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_purple_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_purple_surface1, +:root.t_light .t_dark .t_light .t_dark .t_purple_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_purple_TooltipArrow, +:root.t_light .t_dark .t_purple_active_ListItem, +:root.t_light .t_dark .t_purple_active_Progress, +:root.t_light .t_dark .t_purple_active_SliderTrack, +:root.t_light .t_dark .t_purple_active_TooltipArrow, +:root.t_light .t_dark .t_purple_Card, +:root.t_light .t_dark .t_purple_Input, +:root.t_light .t_dark .t_purple_ListItem, +:root.t_light .t_dark .t_purple_Progress, +:root.t_light .t_dark .t_purple_SelectTrigger, +:root.t_light .t_dark .t_purple_SliderTrack, +:root.t_light .t_dark .t_purple_surface1, +:root.t_light .t_dark .t_purple_TextArea, +:root.t_light .t_dark .t_purple_TooltipArrow { + --background: var(--color-190); + --backgroundHover: var(--color-191); + --backgroundPress: var(--color-189); + --backgroundFocus: var(--color-189); + --borderColor: var(--color-193); + --borderColorHover: var(--color-194); + --borderColorFocus: var(--color-193); + --borderColorPress: var(--color-192); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_purple_active_ListItem, + .t_light .t_dark .t_purple_active_Progress, + .t_light .t_dark .t_purple_active_SliderTrack, + .t_light .t_dark .t_purple_active_TooltipArrow, + .t_light .t_dark .t_purple_Card, + .t_light .t_dark .t_purple_Input, + .t_light .t_dark .t_purple_ListItem, + .t_light .t_dark .t_purple_Progress, + .t_light .t_dark .t_purple_SelectTrigger, + .t_light .t_dark .t_purple_SliderTrack, + .t_light .t_dark .t_purple_surface1, + .t_light .t_dark .t_purple_TextArea, + .t_light .t_dark .t_purple_TooltipArrow, + .t_purple_active_ListItem, + .t_purple_active_Progress, + .t_purple_active_SliderTrack, + .t_purple_active_TooltipArrow, + .t_purple_Card, + .t_purple_Input, + .t_purple_ListItem, + .t_purple_Progress, + .t_purple_SelectTrigger, + .t_purple_SliderTrack, + .t_purple_surface1, + .t_purple_TextArea, + .t_purple_TooltipArrow { + --background: var(--color-190); + --backgroundHover: var(--color-191); + --backgroundPress: var(--color-189); + --backgroundFocus: var(--color-189); + --borderColor: var(--color-193); + --borderColorHover: var(--color-194); + --borderColorFocus: var(--color-193); + --borderColorPress: var(--color-192); + } +} +:root.t_dark .t_light .t_dark .t_purple_Checkbox, +:root.t_dark .t_light .t_dark .t_purple_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_purple_surface2, +:root.t_dark .t_light .t_dark .t_purple_Switch, +:root.t_dark .t_light .t_dark .t_purple_TooltipContent, +:root.t_dark .t_purple_Checkbox, +:root.t_dark .t_purple_RadioGroupItem, +:root.t_dark .t_purple_surface2, +:root.t_dark .t_purple_Switch, +:root.t_dark .t_purple_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_purple_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_purple_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_purple_surface2, +:root.t_light .t_dark .t_light .t_dark .t_purple_Switch, +:root.t_light .t_dark .t_light .t_dark .t_purple_TooltipContent, +:root.t_light .t_dark .t_purple_Checkbox, +:root.t_light .t_dark .t_purple_RadioGroupItem, +:root.t_light .t_dark .t_purple_surface2, +:root.t_light .t_dark .t_purple_Switch, +:root.t_light .t_dark .t_purple_TooltipContent { + --background: var(--color-191); + --backgroundHover: var(--color-192); + --backgroundPress: var(--color-190); + --backgroundFocus: var(--color-190); + --borderColor: var(--color-194); + --borderColorHover: var(--color-195); + --borderColorFocus: var(--color-194); + --borderColorPress: var(--color-193); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_purple_Checkbox, + .t_light .t_dark .t_purple_RadioGroupItem, + .t_light .t_dark .t_purple_surface2, + .t_light .t_dark .t_purple_Switch, + .t_light .t_dark .t_purple_TooltipContent, + .t_purple_Checkbox, + .t_purple_RadioGroupItem, + .t_purple_surface2, + .t_purple_Switch, + .t_purple_TooltipContent { + --background: var(--color-191); + --backgroundHover: var(--color-192); + --backgroundPress: var(--color-190); + --backgroundFocus: var(--color-190); + --borderColor: var(--color-194); + --borderColorHover: var(--color-195); + --borderColorFocus: var(--color-194); + --borderColorPress: var(--color-193); + } +} +:root.t_dark .t_light .t_dark .t_purple_active_Button, +:root.t_dark .t_light .t_dark .t_purple_active_Card, +:root.t_dark .t_light .t_dark .t_purple_active_Checkbox, +:root.t_dark .t_light .t_dark .t_purple_active_Input, +:root.t_dark .t_light .t_dark .t_purple_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_purple_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_purple_active_Switch, +:root.t_dark .t_light .t_dark .t_purple_active_TextArea, +:root.t_dark .t_light .t_dark .t_purple_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_purple_surface4, +:root.t_dark .t_purple_active_Button, +:root.t_dark .t_purple_active_Card, +:root.t_dark .t_purple_active_Checkbox, +:root.t_dark .t_purple_active_Input, +:root.t_dark .t_purple_active_RadioGroupItem, +:root.t_dark .t_purple_active_SelectTrigger, +:root.t_dark .t_purple_active_Switch, +:root.t_dark .t_purple_active_TextArea, +:root.t_dark .t_purple_active_TooltipContent, +:root.t_dark .t_purple_surface4, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_Button, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_Card, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_Input, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_Switch, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_purple_surface4, +:root.t_light .t_dark .t_purple_active_Button, +:root.t_light .t_dark .t_purple_active_Card, +:root.t_light .t_dark .t_purple_active_Checkbox, +:root.t_light .t_dark .t_purple_active_Input, +:root.t_light .t_dark .t_purple_active_RadioGroupItem, +:root.t_light .t_dark .t_purple_active_SelectTrigger, +:root.t_light .t_dark .t_purple_active_Switch, +:root.t_light .t_dark .t_purple_active_TextArea, +:root.t_light .t_dark .t_purple_active_TooltipContent, +:root.t_light .t_dark .t_purple_surface4 { + --background: var(--color-194); + --backgroundHover: var(--color-194); + --backgroundPress: var(--color-193); + --backgroundFocus: var(--color-193); + --borderColor: var(--color-194); + --borderColorHover: var(--color-194); + --borderColorFocus: var(--color-193); + --borderColorPress: var(--color-193); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_purple_active_Button, + .t_light .t_dark .t_purple_active_Card, + .t_light .t_dark .t_purple_active_Checkbox, + .t_light .t_dark .t_purple_active_Input, + .t_light .t_dark .t_purple_active_RadioGroupItem, + .t_light .t_dark .t_purple_active_SelectTrigger, + .t_light .t_dark .t_purple_active_Switch, + .t_light .t_dark .t_purple_active_TextArea, + .t_light .t_dark .t_purple_active_TooltipContent, + .t_light .t_dark .t_purple_surface4, + .t_purple_active_Button, + .t_purple_active_Card, + .t_purple_active_Checkbox, + .t_purple_active_Input, + .t_purple_active_RadioGroupItem, + .t_purple_active_SelectTrigger, + .t_purple_active_Switch, + .t_purple_active_TextArea, + .t_purple_active_TooltipContent, + .t_purple_surface4 { + --background: var(--color-194); + --backgroundHover: var(--color-194); + --backgroundPress: var(--color-193); + --backgroundFocus: var(--color-193); + --borderColor: var(--color-194); + --borderColorHover: var(--color-194); + --borderColorFocus: var(--color-193); + --borderColorPress: var(--color-193); + } +} +:root.t_dark .t_light .t_dark .t_pink_alt1, +:root.t_dark .t_pink_alt1, +:root.t_light .t_dark .t_light .t_dark .t_pink_alt1, +:root.t_light .t_dark .t_pink_alt1 { + --color: var(--color-187); + --colorHover: var(--color-186); + --colorPress: var(--color-187); + --colorFocus: var(--color-186); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_light .t_dark .t_pink_alt1, + .t_pink_alt1 { + --color: var(--color-187); + --colorHover: var(--color-186); + --colorPress: var(--color-187); + --colorFocus: var(--color-186); + } +} +:root.t_dark .t_light .t_dark .t_pink_alt2, +:root.t_dark .t_pink_alt2, +:root.t_light .t_dark .t_light .t_dark .t_pink_alt2, +:root.t_light .t_dark .t_pink_alt2 { + --color: var(--color-186); + --colorHover: var(--color-185); + --colorPress: var(--color-186); + --colorFocus: var(--color-185); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_light .t_dark .t_pink_alt2, + .t_pink_alt2 { + --color: var(--color-186); + --colorHover: var(--color-185); + --colorPress: var(--color-186); + --colorFocus: var(--color-185); + } +} +:root.t_dark .t_light .t_dark .t_pink_active, +:root.t_dark .t_light .t_dark .t_pink_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_pink_Button, +:root.t_dark .t_light .t_dark .t_pink_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_pink_surface3, +:root.t_dark .t_pink_active, +:root.t_dark .t_pink_active_SliderTrackActive, +:root.t_dark .t_pink_Button, +:root.t_dark .t_pink_SliderTrackActive, +:root.t_dark .t_pink_surface3, +:root.t_light .t_dark .t_light .t_dark .t_pink_active, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_pink_Button, +:root.t_light .t_dark .t_light .t_dark .t_pink_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_pink_surface3, +:root.t_light .t_dark .t_pink_active, +:root.t_light .t_dark .t_pink_active_SliderTrackActive, +:root.t_light .t_dark .t_pink_Button, +:root.t_light .t_dark .t_pink_SliderTrackActive, +:root.t_light .t_dark .t_pink_surface3 { + --background: var(--color-180); + --backgroundHover: var(--color-181); + --backgroundPress: var(--color-179); + --backgroundFocus: var(--color-179); + --borderColor: var(--color-183); + --borderColorHover: var(--color-184); + --borderColorFocus: var(--color-183); + --borderColorPress: var(--color-182); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_pink_active, + .t_light .t_dark .t_pink_active_SliderTrackActive, + .t_light .t_dark .t_pink_Button, + .t_light .t_dark .t_pink_SliderTrackActive, + .t_light .t_dark .t_pink_surface3, + .t_pink_active, + .t_pink_active_SliderTrackActive, + .t_pink_Button, + .t_pink_SliderTrackActive, + .t_pink_surface3 { + --background: var(--color-180); + --backgroundHover: var(--color-181); + --backgroundPress: var(--color-179); + --backgroundFocus: var(--color-179); + --borderColor: var(--color-183); + --borderColorHover: var(--color-184); + --borderColorFocus: var(--color-183); + --borderColorPress: var(--color-182); + } +} +:root.t_dark .t_light .t_dark .t_pink_active_ListItem, +:root.t_dark .t_light .t_dark .t_pink_active_Progress, +:root.t_dark .t_light .t_dark .t_pink_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_pink_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_pink_Card, +:root.t_dark .t_light .t_dark .t_pink_Input, +:root.t_dark .t_light .t_dark .t_pink_ListItem, +:root.t_dark .t_light .t_dark .t_pink_Progress, +:root.t_dark .t_light .t_dark .t_pink_SelectTrigger, +:root.t_dark .t_light .t_dark .t_pink_SliderTrack, +:root.t_dark .t_light .t_dark .t_pink_surface1, +:root.t_dark .t_light .t_dark .t_pink_TextArea, +:root.t_dark .t_light .t_dark .t_pink_TooltipArrow, +:root.t_dark .t_pink_active_ListItem, +:root.t_dark .t_pink_active_Progress, +:root.t_dark .t_pink_active_SliderTrack, +:root.t_dark .t_pink_active_TooltipArrow, +:root.t_dark .t_pink_Card, +:root.t_dark .t_pink_Input, +:root.t_dark .t_pink_ListItem, +:root.t_dark .t_pink_Progress, +:root.t_dark .t_pink_SelectTrigger, +:root.t_dark .t_pink_SliderTrack, +:root.t_dark .t_pink_surface1, +:root.t_dark .t_pink_TextArea, +:root.t_dark .t_pink_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_Progress, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_pink_Card, +:root.t_light .t_dark .t_light .t_dark .t_pink_Input, +:root.t_light .t_dark .t_light .t_dark .t_pink_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_pink_Progress, +:root.t_light .t_dark .t_light .t_dark .t_pink_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_pink_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_pink_surface1, +:root.t_light .t_dark .t_light .t_dark .t_pink_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_pink_TooltipArrow, +:root.t_light .t_dark .t_pink_active_ListItem, +:root.t_light .t_dark .t_pink_active_Progress, +:root.t_light .t_dark .t_pink_active_SliderTrack, +:root.t_light .t_dark .t_pink_active_TooltipArrow, +:root.t_light .t_dark .t_pink_Card, +:root.t_light .t_dark .t_pink_Input, +:root.t_light .t_dark .t_pink_ListItem, +:root.t_light .t_dark .t_pink_Progress, +:root.t_light .t_dark .t_pink_SelectTrigger, +:root.t_light .t_dark .t_pink_SliderTrack, +:root.t_light .t_dark .t_pink_surface1, +:root.t_light .t_dark .t_pink_TextArea, +:root.t_light .t_dark .t_pink_TooltipArrow { + --background: var(--color-178); + --backgroundHover: var(--color-179); + --backgroundPress: var(--color-177); + --backgroundFocus: var(--color-177); + --borderColor: var(--color-181); + --borderColorHover: var(--color-182); + --borderColorFocus: var(--color-181); + --borderColorPress: var(--color-180); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_pink_active_ListItem, + .t_light .t_dark .t_pink_active_Progress, + .t_light .t_dark .t_pink_active_SliderTrack, + .t_light .t_dark .t_pink_active_TooltipArrow, + .t_light .t_dark .t_pink_Card, + .t_light .t_dark .t_pink_Input, + .t_light .t_dark .t_pink_ListItem, + .t_light .t_dark .t_pink_Progress, + .t_light .t_dark .t_pink_SelectTrigger, + .t_light .t_dark .t_pink_SliderTrack, + .t_light .t_dark .t_pink_surface1, + .t_light .t_dark .t_pink_TextArea, + .t_light .t_dark .t_pink_TooltipArrow, + .t_pink_active_ListItem, + .t_pink_active_Progress, + .t_pink_active_SliderTrack, + .t_pink_active_TooltipArrow, + .t_pink_Card, + .t_pink_Input, + .t_pink_ListItem, + .t_pink_Progress, + .t_pink_SelectTrigger, + .t_pink_SliderTrack, + .t_pink_surface1, + .t_pink_TextArea, + .t_pink_TooltipArrow { + --background: var(--color-178); + --backgroundHover: var(--color-179); + --backgroundPress: var(--color-177); + --backgroundFocus: var(--color-177); + --borderColor: var(--color-181); + --borderColorHover: var(--color-182); + --borderColorFocus: var(--color-181); + --borderColorPress: var(--color-180); + } +} +:root.t_dark .t_light .t_dark .t_pink_Checkbox, +:root.t_dark .t_light .t_dark .t_pink_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_pink_surface2, +:root.t_dark .t_light .t_dark .t_pink_Switch, +:root.t_dark .t_light .t_dark .t_pink_TooltipContent, +:root.t_dark .t_pink_Checkbox, +:root.t_dark .t_pink_RadioGroupItem, +:root.t_dark .t_pink_surface2, +:root.t_dark .t_pink_Switch, +:root.t_dark .t_pink_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_pink_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_pink_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_pink_surface2, +:root.t_light .t_dark .t_light .t_dark .t_pink_Switch, +:root.t_light .t_dark .t_light .t_dark .t_pink_TooltipContent, +:root.t_light .t_dark .t_pink_Checkbox, +:root.t_light .t_dark .t_pink_RadioGroupItem, +:root.t_light .t_dark .t_pink_surface2, +:root.t_light .t_dark .t_pink_Switch, +:root.t_light .t_dark .t_pink_TooltipContent { + --background: var(--color-179); + --backgroundHover: var(--color-180); + --backgroundPress: var(--color-178); + --backgroundFocus: var(--color-178); + --borderColor: var(--color-182); + --borderColorHover: var(--color-183); + --borderColorFocus: var(--color-182); + --borderColorPress: var(--color-181); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_pink_Checkbox, + .t_light .t_dark .t_pink_RadioGroupItem, + .t_light .t_dark .t_pink_surface2, + .t_light .t_dark .t_pink_Switch, + .t_light .t_dark .t_pink_TooltipContent, + .t_pink_Checkbox, + .t_pink_RadioGroupItem, + .t_pink_surface2, + .t_pink_Switch, + .t_pink_TooltipContent { + --background: var(--color-179); + --backgroundHover: var(--color-180); + --backgroundPress: var(--color-178); + --backgroundFocus: var(--color-178); + --borderColor: var(--color-182); + --borderColorHover: var(--color-183); + --borderColorFocus: var(--color-182); + --borderColorPress: var(--color-181); + } +} +:root.t_dark .t_light .t_dark .t_pink_active_Button, +:root.t_dark .t_light .t_dark .t_pink_active_Card, +:root.t_dark .t_light .t_dark .t_pink_active_Checkbox, +:root.t_dark .t_light .t_dark .t_pink_active_Input, +:root.t_dark .t_light .t_dark .t_pink_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_pink_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_pink_active_Switch, +:root.t_dark .t_light .t_dark .t_pink_active_TextArea, +:root.t_dark .t_light .t_dark .t_pink_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_pink_surface4, +:root.t_dark .t_pink_active_Button, +:root.t_dark .t_pink_active_Card, +:root.t_dark .t_pink_active_Checkbox, +:root.t_dark .t_pink_active_Input, +:root.t_dark .t_pink_active_RadioGroupItem, +:root.t_dark .t_pink_active_SelectTrigger, +:root.t_dark .t_pink_active_Switch, +:root.t_dark .t_pink_active_TextArea, +:root.t_dark .t_pink_active_TooltipContent, +:root.t_dark .t_pink_surface4, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_Button, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_Card, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_Input, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_Switch, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_pink_surface4, +:root.t_light .t_dark .t_pink_active_Button, +:root.t_light .t_dark .t_pink_active_Card, +:root.t_light .t_dark .t_pink_active_Checkbox, +:root.t_light .t_dark .t_pink_active_Input, +:root.t_light .t_dark .t_pink_active_RadioGroupItem, +:root.t_light .t_dark .t_pink_active_SelectTrigger, +:root.t_light .t_dark .t_pink_active_Switch, +:root.t_light .t_dark .t_pink_active_TextArea, +:root.t_light .t_dark .t_pink_active_TooltipContent, +:root.t_light .t_dark .t_pink_surface4 { + --background: var(--color-182); + --backgroundHover: var(--color-182); + --backgroundPress: var(--color-181); + --backgroundFocus: var(--color-181); + --borderColor: var(--color-182); + --borderColorHover: var(--color-182); + --borderColorFocus: var(--color-181); + --borderColorPress: var(--color-181); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_pink_active_Button, + .t_light .t_dark .t_pink_active_Card, + .t_light .t_dark .t_pink_active_Checkbox, + .t_light .t_dark .t_pink_active_Input, + .t_light .t_dark .t_pink_active_RadioGroupItem, + .t_light .t_dark .t_pink_active_SelectTrigger, + .t_light .t_dark .t_pink_active_Switch, + .t_light .t_dark .t_pink_active_TextArea, + .t_light .t_dark .t_pink_active_TooltipContent, + .t_light .t_dark .t_pink_surface4, + .t_pink_active_Button, + .t_pink_active_Card, + .t_pink_active_Checkbox, + .t_pink_active_Input, + .t_pink_active_RadioGroupItem, + .t_pink_active_SelectTrigger, + .t_pink_active_Switch, + .t_pink_active_TextArea, + .t_pink_active_TooltipContent, + .t_pink_surface4 { + --background: var(--color-182); + --backgroundHover: var(--color-182); + --backgroundPress: var(--color-181); + --backgroundFocus: var(--color-181); + --borderColor: var(--color-182); + --borderColorHover: var(--color-182); + --borderColorFocus: var(--color-181); + --borderColorPress: var(--color-181); + } +} +:root.t_dark .t_light .t_dark .t_red_alt1, +:root.t_dark .t_red_alt1, +:root.t_light .t_dark .t_light .t_dark .t_red_alt1, +:root.t_light .t_dark .t_red_alt1 { + --color: var(--color-211); + --colorHover: var(--color-210); + --colorPress: var(--color-211); + --colorFocus: var(--color-210); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_light .t_dark .t_red_alt1, + .t_red_alt1 { + --color: var(--color-211); + --colorHover: var(--color-210); + --colorPress: var(--color-211); + --colorFocus: var(--color-210); + } +} +:root.t_dark .t_light .t_dark .t_red_alt2, +:root.t_dark .t_red_alt2, +:root.t_light .t_dark .t_light .t_dark .t_red_alt2, +:root.t_light .t_dark .t_red_alt2 { + --color: var(--color-210); + --colorHover: var(--color-209); + --colorPress: var(--color-210); + --colorFocus: var(--color-209); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_light .t_dark .t_red_alt2, + .t_red_alt2 { + --color: var(--color-210); + --colorHover: var(--color-209); + --colorPress: var(--color-210); + --colorFocus: var(--color-209); + } +} +:root.t_dark .t_light .t_dark .t_red_active, +:root.t_dark .t_light .t_dark .t_red_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_red_Button, +:root.t_dark .t_light .t_dark .t_red_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_red_surface3, +:root.t_dark .t_red_active, +:root.t_dark .t_red_active_SliderTrackActive, +:root.t_dark .t_red_Button, +:root.t_dark .t_red_SliderTrackActive, +:root.t_dark .t_red_surface3, +:root.t_light .t_dark .t_light .t_dark .t_red_active, +:root.t_light .t_dark .t_light .t_dark .t_red_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_red_Button, +:root.t_light .t_dark .t_light .t_dark .t_red_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_red_surface3, +:root.t_light .t_dark .t_red_active, +:root.t_light .t_dark .t_red_active_SliderTrackActive, +:root.t_light .t_dark .t_red_Button, +:root.t_light .t_dark .t_red_SliderTrackActive, +:root.t_light .t_dark .t_red_surface3 { + --background: var(--color-204); + --backgroundHover: var(--color-205); + --backgroundPress: var(--color-203); + --backgroundFocus: var(--color-203); + --borderColor: var(--color-207); + --borderColorHover: var(--color-208); + --borderColorFocus: var(--color-207); + --borderColorPress: var(--color-206); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_red_active, + .t_light .t_dark .t_red_active_SliderTrackActive, + .t_light .t_dark .t_red_Button, + .t_light .t_dark .t_red_SliderTrackActive, + .t_light .t_dark .t_red_surface3, + .t_red_active, + .t_red_active_SliderTrackActive, + .t_red_Button, + .t_red_SliderTrackActive, + .t_red_surface3 { + --background: var(--color-204); + --backgroundHover: var(--color-205); + --backgroundPress: var(--color-203); + --backgroundFocus: var(--color-203); + --borderColor: var(--color-207); + --borderColorHover: var(--color-208); + --borderColorFocus: var(--color-207); + --borderColorPress: var(--color-206); + } +} +:root.t_dark .t_light .t_dark .t_red_active_ListItem, +:root.t_dark .t_light .t_dark .t_red_active_Progress, +:root.t_dark .t_light .t_dark .t_red_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_red_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_red_Card, +:root.t_dark .t_light .t_dark .t_red_Input, +:root.t_dark .t_light .t_dark .t_red_ListItem, +:root.t_dark .t_light .t_dark .t_red_Progress, +:root.t_dark .t_light .t_dark .t_red_SelectTrigger, +:root.t_dark .t_light .t_dark .t_red_SliderTrack, +:root.t_dark .t_light .t_dark .t_red_surface1, +:root.t_dark .t_light .t_dark .t_red_TextArea, +:root.t_dark .t_light .t_dark .t_red_TooltipArrow, +:root.t_dark .t_red_active_ListItem, +:root.t_dark .t_red_active_Progress, +:root.t_dark .t_red_active_SliderTrack, +:root.t_dark .t_red_active_TooltipArrow, +:root.t_dark .t_red_Card, +:root.t_dark .t_red_Input, +:root.t_dark .t_red_ListItem, +:root.t_dark .t_red_Progress, +:root.t_dark .t_red_SelectTrigger, +:root.t_dark .t_red_SliderTrack, +:root.t_dark .t_red_surface1, +:root.t_dark .t_red_TextArea, +:root.t_dark .t_red_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_red_active_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_red_active_Progress, +:root.t_light .t_dark .t_light .t_dark .t_red_active_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_red_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_red_Card, +:root.t_light .t_dark .t_light .t_dark .t_red_Input, +:root.t_light .t_dark .t_light .t_dark .t_red_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_red_Progress, +:root.t_light .t_dark .t_light .t_dark .t_red_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_red_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_red_surface1, +:root.t_light .t_dark .t_light .t_dark .t_red_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_red_TooltipArrow, +:root.t_light .t_dark .t_red_active_ListItem, +:root.t_light .t_dark .t_red_active_Progress, +:root.t_light .t_dark .t_red_active_SliderTrack, +:root.t_light .t_dark .t_red_active_TooltipArrow, +:root.t_light .t_dark .t_red_Card, +:root.t_light .t_dark .t_red_Input, +:root.t_light .t_dark .t_red_ListItem, +:root.t_light .t_dark .t_red_Progress, +:root.t_light .t_dark .t_red_SelectTrigger, +:root.t_light .t_dark .t_red_SliderTrack, +:root.t_light .t_dark .t_red_surface1, +:root.t_light .t_dark .t_red_TextArea, +:root.t_light .t_dark .t_red_TooltipArrow { + --background: var(--color-202); + --backgroundHover: var(--color-203); + --backgroundPress: var(--color-201); + --backgroundFocus: var(--color-201); + --borderColor: var(--color-205); + --borderColorHover: var(--color-206); + --borderColorFocus: var(--color-205); + --borderColorPress: var(--color-204); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_red_active_ListItem, + .t_light .t_dark .t_red_active_Progress, + .t_light .t_dark .t_red_active_SliderTrack, + .t_light .t_dark .t_red_active_TooltipArrow, + .t_light .t_dark .t_red_Card, + .t_light .t_dark .t_red_Input, + .t_light .t_dark .t_red_ListItem, + .t_light .t_dark .t_red_Progress, + .t_light .t_dark .t_red_SelectTrigger, + .t_light .t_dark .t_red_SliderTrack, + .t_light .t_dark .t_red_surface1, + .t_light .t_dark .t_red_TextArea, + .t_light .t_dark .t_red_TooltipArrow, + .t_red_active_ListItem, + .t_red_active_Progress, + .t_red_active_SliderTrack, + .t_red_active_TooltipArrow, + .t_red_Card, + .t_red_Input, + .t_red_ListItem, + .t_red_Progress, + .t_red_SelectTrigger, + .t_red_SliderTrack, + .t_red_surface1, + .t_red_TextArea, + .t_red_TooltipArrow { + --background: var(--color-202); + --backgroundHover: var(--color-203); + --backgroundPress: var(--color-201); + --backgroundFocus: var(--color-201); + --borderColor: var(--color-205); + --borderColorHover: var(--color-206); + --borderColorFocus: var(--color-205); + --borderColorPress: var(--color-204); + } +} +:root.t_dark .t_light .t_dark .t_red_Checkbox, +:root.t_dark .t_light .t_dark .t_red_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_red_surface2, +:root.t_dark .t_light .t_dark .t_red_Switch, +:root.t_dark .t_light .t_dark .t_red_TooltipContent, +:root.t_dark .t_red_Checkbox, +:root.t_dark .t_red_RadioGroupItem, +:root.t_dark .t_red_surface2, +:root.t_dark .t_red_Switch, +:root.t_dark .t_red_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_red_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_red_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_red_surface2, +:root.t_light .t_dark .t_light .t_dark .t_red_Switch, +:root.t_light .t_dark .t_light .t_dark .t_red_TooltipContent, +:root.t_light .t_dark .t_red_Checkbox, +:root.t_light .t_dark .t_red_RadioGroupItem, +:root.t_light .t_dark .t_red_surface2, +:root.t_light .t_dark .t_red_Switch, +:root.t_light .t_dark .t_red_TooltipContent { + --background: var(--color-203); + --backgroundHover: var(--color-204); + --backgroundPress: var(--color-202); + --backgroundFocus: var(--color-202); + --borderColor: var(--color-206); + --borderColorHover: var(--color-207); + --borderColorFocus: var(--color-206); + --borderColorPress: var(--color-205); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_red_Checkbox, + .t_light .t_dark .t_red_RadioGroupItem, + .t_light .t_dark .t_red_surface2, + .t_light .t_dark .t_red_Switch, + .t_light .t_dark .t_red_TooltipContent, + .t_red_Checkbox, + .t_red_RadioGroupItem, + .t_red_surface2, + .t_red_Switch, + .t_red_TooltipContent { + --background: var(--color-203); + --backgroundHover: var(--color-204); + --backgroundPress: var(--color-202); + --backgroundFocus: var(--color-202); + --borderColor: var(--color-206); + --borderColorHover: var(--color-207); + --borderColorFocus: var(--color-206); + --borderColorPress: var(--color-205); + } +} +:root.t_dark .t_light .t_dark .t_red_active_Button, +:root.t_dark .t_light .t_dark .t_red_active_Card, +:root.t_dark .t_light .t_dark .t_red_active_Checkbox, +:root.t_dark .t_light .t_dark .t_red_active_Input, +:root.t_dark .t_light .t_dark .t_red_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_red_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_red_active_Switch, +:root.t_dark .t_light .t_dark .t_red_active_TextArea, +:root.t_dark .t_light .t_dark .t_red_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_red_surface4, +:root.t_dark .t_red_active_Button, +:root.t_dark .t_red_active_Card, +:root.t_dark .t_red_active_Checkbox, +:root.t_dark .t_red_active_Input, +:root.t_dark .t_red_active_RadioGroupItem, +:root.t_dark .t_red_active_SelectTrigger, +:root.t_dark .t_red_active_Switch, +:root.t_dark .t_red_active_TextArea, +:root.t_dark .t_red_active_TooltipContent, +:root.t_dark .t_red_surface4, +:root.t_light .t_dark .t_light .t_dark .t_red_active_Button, +:root.t_light .t_dark .t_light .t_dark .t_red_active_Card, +:root.t_light .t_dark .t_light .t_dark .t_red_active_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_red_active_Input, +:root.t_light .t_dark .t_light .t_dark .t_red_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_red_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_red_active_Switch, +:root.t_light .t_dark .t_light .t_dark .t_red_active_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_red_active_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_red_surface4, +:root.t_light .t_dark .t_red_active_Button, +:root.t_light .t_dark .t_red_active_Card, +:root.t_light .t_dark .t_red_active_Checkbox, +:root.t_light .t_dark .t_red_active_Input, +:root.t_light .t_dark .t_red_active_RadioGroupItem, +:root.t_light .t_dark .t_red_active_SelectTrigger, +:root.t_light .t_dark .t_red_active_Switch, +:root.t_light .t_dark .t_red_active_TextArea, +:root.t_light .t_dark .t_red_active_TooltipContent, +:root.t_light .t_dark .t_red_surface4 { + --background: var(--color-206); + --backgroundHover: var(--color-206); + --backgroundPress: var(--color-205); + --backgroundFocus: var(--color-205); + --borderColor: var(--color-206); + --borderColorHover: var(--color-206); + --borderColorFocus: var(--color-205); + --borderColorPress: var(--color-205); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_light .t_dark .t_red_active_Button, + .t_light .t_dark .t_red_active_Card, + .t_light .t_dark .t_red_active_Checkbox, + .t_light .t_dark .t_red_active_Input, + .t_light .t_dark .t_red_active_RadioGroupItem, + .t_light .t_dark .t_red_active_SelectTrigger, + .t_light .t_dark .t_red_active_Switch, + .t_light .t_dark .t_red_active_TextArea, + .t_light .t_dark .t_red_active_TooltipContent, + .t_light .t_dark .t_red_surface4, + .t_red_active_Button, + .t_red_active_Card, + .t_red_active_Checkbox, + .t_red_active_Input, + .t_red_active_RadioGroupItem, + .t_red_active_SelectTrigger, + .t_red_active_Switch, + .t_red_active_TextArea, + .t_red_active_TooltipContent, + .t_red_surface4 { + --background: var(--color-206); + --backgroundHover: var(--color-206); + --backgroundPress: var(--color-205); + --backgroundFocus: var(--color-205); + --borderColor: var(--color-206); + --borderColorHover: var(--color-206); + --borderColorFocus: var(--color-205); + --borderColorPress: var(--color-205); + } +} +:root.t_dark .t_gray_alt1, +:root.t_dark .t_light .t_dark .t_gray_alt1, +:root.t_light .t_dark .t_gray_alt1, +:root.t_light .t_dark .t_light .t_dark .t_gray_alt1 { + --color: var(--color-151); + --colorHover: var(--color-150); + --colorPress: var(--color-151); + --colorFocus: var(--color-150); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_gray_alt1, + .t_light .t_dark .t_gray_alt1 { + --color: var(--color-151); + --colorHover: var(--color-150); + --colorPress: var(--color-151); + --colorFocus: var(--color-150); + } +} +:root.t_dark .t_gray_alt2, +:root.t_dark .t_light .t_dark .t_gray_alt2, +:root.t_light .t_dark .t_gray_alt2, +:root.t_light .t_dark .t_light .t_dark .t_gray_alt2 { + --color: var(--color-150); + --colorHover: var(--color-149); + --colorPress: var(--color-150); + --colorFocus: var(--color-149); +} +@media (prefers-color-scheme: dark) { + body { + color: var(--color); + } + .t_gray_alt2, + .t_light .t_dark .t_gray_alt2 { + --color: var(--color-150); + --colorHover: var(--color-149); + --colorPress: var(--color-150); + --colorFocus: var(--color-149); + } +} +:root.t_dark .t_gray_active, +:root.t_dark .t_gray_active_SliderTrackActive, +:root.t_dark .t_gray_Button, +:root.t_dark .t_gray_SliderTrackActive, +:root.t_dark .t_gray_surface3, +:root.t_dark .t_light .t_dark .t_gray_active, +:root.t_dark .t_light .t_dark .t_gray_active_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_gray_Button, +:root.t_dark .t_light .t_dark .t_gray_SliderTrackActive, +:root.t_dark .t_light .t_dark .t_gray_surface3, +:root.t_light .t_dark .t_gray_active, +:root.t_light .t_dark .t_gray_active_SliderTrackActive, +:root.t_light .t_dark .t_gray_Button, +:root.t_light .t_dark .t_gray_SliderTrackActive, +:root.t_light .t_dark .t_gray_surface3, +:root.t_light .t_dark .t_light .t_dark .t_gray_active, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_gray_Button, +:root.t_light .t_dark .t_light .t_dark .t_gray_SliderTrackActive, +:root.t_light .t_dark .t_light .t_dark .t_gray_surface3 { + --background: var(--color-144); + --backgroundHover: var(--color-145); + --backgroundPress: var(--color-143); + --backgroundFocus: var(--color-143); + --borderColor: var(--color-147); + --borderColorHover: var(--color-148); + --borderColorFocus: var(--color-147); + --borderColorPress: var(--color-146); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_gray_active, + .t_gray_active_SliderTrackActive, + .t_gray_Button, + .t_gray_SliderTrackActive, + .t_gray_surface3, + .t_light .t_dark .t_gray_active, + .t_light .t_dark .t_gray_active_SliderTrackActive, + .t_light .t_dark .t_gray_Button, + .t_light .t_dark .t_gray_SliderTrackActive, + .t_light .t_dark .t_gray_surface3 { + --background: var(--color-144); + --backgroundHover: var(--color-145); + --backgroundPress: var(--color-143); + --backgroundFocus: var(--color-143); + --borderColor: var(--color-147); + --borderColorHover: var(--color-148); + --borderColorFocus: var(--color-147); + --borderColorPress: var(--color-146); + } +} +:root.t_dark .t_gray_active_ListItem, +:root.t_dark .t_gray_active_Progress, +:root.t_dark .t_gray_active_SliderTrack, +:root.t_dark .t_gray_active_TooltipArrow, +:root.t_dark .t_gray_Card, +:root.t_dark .t_gray_Input, +:root.t_dark .t_gray_ListItem, +:root.t_dark .t_gray_Progress, +:root.t_dark .t_gray_SelectTrigger, +:root.t_dark .t_gray_SliderTrack, +:root.t_dark .t_gray_surface1, +:root.t_dark .t_gray_TextArea, +:root.t_dark .t_gray_TooltipArrow, +:root.t_dark .t_light .t_dark .t_gray_active_ListItem, +:root.t_dark .t_light .t_dark .t_gray_active_Progress, +:root.t_dark .t_light .t_dark .t_gray_active_SliderTrack, +:root.t_dark .t_light .t_dark .t_gray_active_TooltipArrow, +:root.t_dark .t_light .t_dark .t_gray_Card, +:root.t_dark .t_light .t_dark .t_gray_Input, +:root.t_dark .t_light .t_dark .t_gray_ListItem, +:root.t_dark .t_light .t_dark .t_gray_Progress, +:root.t_dark .t_light .t_dark .t_gray_SelectTrigger, +:root.t_dark .t_light .t_dark .t_gray_SliderTrack, +:root.t_dark .t_light .t_dark .t_gray_surface1, +:root.t_dark .t_light .t_dark .t_gray_TextArea, +:root.t_dark .t_light .t_dark .t_gray_TooltipArrow, +:root.t_light .t_dark .t_gray_active_ListItem, +:root.t_light .t_dark .t_gray_active_Progress, +:root.t_light .t_dark .t_gray_active_SliderTrack, +:root.t_light .t_dark .t_gray_active_TooltipArrow, +:root.t_light .t_dark .t_gray_Card, +:root.t_light .t_dark .t_gray_Input, +:root.t_light .t_dark .t_gray_ListItem, +:root.t_light .t_dark .t_gray_Progress, +:root.t_light .t_dark .t_gray_SelectTrigger, +:root.t_light .t_dark .t_gray_SliderTrack, +:root.t_light .t_dark .t_gray_surface1, +:root.t_light .t_dark .t_gray_TextArea, +:root.t_light .t_dark .t_gray_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_Progress, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_TooltipArrow, +:root.t_light .t_dark .t_light .t_dark .t_gray_Card, +:root.t_light .t_dark .t_light .t_dark .t_gray_Input, +:root.t_light .t_dark .t_light .t_dark .t_gray_ListItem, +:root.t_light .t_dark .t_light .t_dark .t_gray_Progress, +:root.t_light .t_dark .t_light .t_dark .t_gray_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_gray_SliderTrack, +:root.t_light .t_dark .t_light .t_dark .t_gray_surface1, +:root.t_light .t_dark .t_light .t_dark .t_gray_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_gray_TooltipArrow { + --background: var(--color-142); + --backgroundHover: var(--color-143); + --backgroundPress: var(--color-141); + --backgroundFocus: var(--color-141); + --borderColor: var(--color-145); + --borderColorHover: var(--color-146); + --borderColorFocus: var(--color-145); + --borderColorPress: var(--color-144); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_gray_active_ListItem, + .t_gray_active_Progress, + .t_gray_active_SliderTrack, + .t_gray_active_TooltipArrow, + .t_gray_Card, + .t_gray_Input, + .t_gray_ListItem, + .t_gray_Progress, + .t_gray_SelectTrigger, + .t_gray_SliderTrack, + .t_gray_surface1, + .t_gray_TextArea, + .t_gray_TooltipArrow, + .t_light .t_dark .t_gray_active_ListItem, + .t_light .t_dark .t_gray_active_Progress, + .t_light .t_dark .t_gray_active_SliderTrack, + .t_light .t_dark .t_gray_active_TooltipArrow, + .t_light .t_dark .t_gray_Card, + .t_light .t_dark .t_gray_Input, + .t_light .t_dark .t_gray_ListItem, + .t_light .t_dark .t_gray_Progress, + .t_light .t_dark .t_gray_SelectTrigger, + .t_light .t_dark .t_gray_SliderTrack, + .t_light .t_dark .t_gray_surface1, + .t_light .t_dark .t_gray_TextArea, + .t_light .t_dark .t_gray_TooltipArrow { + --background: var(--color-142); + --backgroundHover: var(--color-143); + --backgroundPress: var(--color-141); + --backgroundFocus: var(--color-141); + --borderColor: var(--color-145); + --borderColorHover: var(--color-146); + --borderColorFocus: var(--color-145); + --borderColorPress: var(--color-144); + } +} +:root.t_dark .t_gray_Checkbox, +:root.t_dark .t_gray_RadioGroupItem, +:root.t_dark .t_gray_surface2, +:root.t_dark .t_gray_Switch, +:root.t_dark .t_gray_TooltipContent, +:root.t_dark .t_light .t_dark .t_gray_Checkbox, +:root.t_dark .t_light .t_dark .t_gray_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_gray_surface2, +:root.t_dark .t_light .t_dark .t_gray_Switch, +:root.t_dark .t_light .t_dark .t_gray_TooltipContent, +:root.t_light .t_dark .t_gray_Checkbox, +:root.t_light .t_dark .t_gray_RadioGroupItem, +:root.t_light .t_dark .t_gray_surface2, +:root.t_light .t_dark .t_gray_Switch, +:root.t_light .t_dark .t_gray_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_gray_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_gray_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_gray_surface2, +:root.t_light .t_dark .t_light .t_dark .t_gray_Switch, +:root.t_light .t_dark .t_light .t_dark .t_gray_TooltipContent { + --background: var(--color-143); + --backgroundHover: var(--color-144); + --backgroundPress: var(--color-142); + --backgroundFocus: var(--color-142); + --borderColor: var(--color-146); + --borderColorHover: var(--color-147); + --borderColorFocus: var(--color-146); + --borderColorPress: var(--color-145); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_gray_Checkbox, + .t_gray_RadioGroupItem, + .t_gray_surface2, + .t_gray_Switch, + .t_gray_TooltipContent, + .t_light .t_dark .t_gray_Checkbox, + .t_light .t_dark .t_gray_RadioGroupItem, + .t_light .t_dark .t_gray_surface2, + .t_light .t_dark .t_gray_Switch, + .t_light .t_dark .t_gray_TooltipContent { + --background: var(--color-143); + --backgroundHover: var(--color-144); + --backgroundPress: var(--color-142); + --backgroundFocus: var(--color-142); + --borderColor: var(--color-146); + --borderColorHover: var(--color-147); + --borderColorFocus: var(--color-146); + --borderColorPress: var(--color-145); + } +} +:root.t_dark .t_gray_active_Button, +:root.t_dark .t_gray_active_Card, +:root.t_dark .t_gray_active_Checkbox, +:root.t_dark .t_gray_active_Input, +:root.t_dark .t_gray_active_RadioGroupItem, +:root.t_dark .t_gray_active_SelectTrigger, +:root.t_dark .t_gray_active_Switch, +:root.t_dark .t_gray_active_TextArea, +:root.t_dark .t_gray_active_TooltipContent, +:root.t_dark .t_gray_surface4, +:root.t_dark .t_light .t_dark .t_gray_active_Button, +:root.t_dark .t_light .t_dark .t_gray_active_Card, +:root.t_dark .t_light .t_dark .t_gray_active_Checkbox, +:root.t_dark .t_light .t_dark .t_gray_active_Input, +:root.t_dark .t_light .t_dark .t_gray_active_RadioGroupItem, +:root.t_dark .t_light .t_dark .t_gray_active_SelectTrigger, +:root.t_dark .t_light .t_dark .t_gray_active_Switch, +:root.t_dark .t_light .t_dark .t_gray_active_TextArea, +:root.t_dark .t_light .t_dark .t_gray_active_TooltipContent, +:root.t_dark .t_light .t_dark .t_gray_surface4, +:root.t_light .t_dark .t_gray_active_Button, +:root.t_light .t_dark .t_gray_active_Card, +:root.t_light .t_dark .t_gray_active_Checkbox, +:root.t_light .t_dark .t_gray_active_Input, +:root.t_light .t_dark .t_gray_active_RadioGroupItem, +:root.t_light .t_dark .t_gray_active_SelectTrigger, +:root.t_light .t_dark .t_gray_active_Switch, +:root.t_light .t_dark .t_gray_active_TextArea, +:root.t_light .t_dark .t_gray_active_TooltipContent, +:root.t_light .t_dark .t_gray_surface4, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_Button, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_Card, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_Checkbox, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_Input, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_RadioGroupItem, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_SelectTrigger, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_Switch, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_TextArea, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_TooltipContent, +:root.t_light .t_dark .t_light .t_dark .t_gray_surface4 { + --background: var(--color-146); + --backgroundHover: var(--color-146); + --backgroundPress: var(--color-145); + --backgroundFocus: var(--color-145); + --borderColor: var(--color-146); + --borderColorHover: var(--color-146); + --borderColorFocus: var(--color-145); + --borderColorPress: var(--color-145); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_gray_active_Button, + .t_gray_active_Card, + .t_gray_active_Checkbox, + .t_gray_active_Input, + .t_gray_active_RadioGroupItem, + .t_gray_active_SelectTrigger, + .t_gray_active_Switch, + .t_gray_active_TextArea, + .t_gray_active_TooltipContent, + .t_gray_surface4, + .t_light .t_dark .t_gray_active_Button, + .t_light .t_dark .t_gray_active_Card, + .t_light .t_dark .t_gray_active_Checkbox, + .t_light .t_dark .t_gray_active_Input, + .t_light .t_dark .t_gray_active_RadioGroupItem, + .t_light .t_dark .t_gray_active_SelectTrigger, + .t_light .t_dark .t_gray_active_Switch, + .t_light .t_dark .t_gray_active_TextArea, + .t_light .t_dark .t_gray_active_TooltipContent, + .t_light .t_dark .t_gray_surface4 { + --background: var(--color-146); + --backgroundHover: var(--color-146); + --backgroundPress: var(--color-145); + --backgroundFocus: var(--color-145); + --borderColor: var(--color-146); + --borderColorHover: var(--color-146); + --borderColorFocus: var(--color-145); + --borderColorPress: var(--color-145); + } +} +:root.t_dark .t_light .t_dark .t_light .t_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_Tooltip, +:root.t_dark .t_light .t_ProgressIndicator, +:root.t_dark .t_light .t_SliderThumb, +:root.t_dark .t_light .t_SwitchThumb, +:root.t_dark .t_light .t_Tooltip, +:root.t_light .t_dark .t_light .t_ProgressIndicator, +:root.t_light .t_dark .t_light .t_SliderThumb, +:root.t_light .t_dark .t_light .t_SwitchThumb, +:root.t_light .t_dark .t_light .t_Tooltip, +:root.t_light .t_ProgressIndicator, +:root.t_light .t_SliderThumb, +:root.t_light .t_SwitchThumb, +:root.t_light .t_Tooltip { + --color: var(--color-10); + --colorHover: var(--color-32); + --colorPress: var(--color-11); + --colorFocus: var(--color-11); + --background: var(--color-56); + --backgroundHover: var(--color-19); + --backgroundPress: var(--color-56); + --backgroundFocus: var(--color-19); + --borderColor: var(--color-18); + --borderColorHover: var(--color-53); + --borderColorFocus: var(--color-16); + --borderColorPress: var(--color-15); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_ProgressIndicator, + .t_dark .t_light .t_SliderThumb, + .t_dark .t_light .t_SwitchThumb, + .t_dark .t_light .t_Tooltip, + .t_ProgressIndicator, + .t_SliderThumb, + .t_SwitchThumb, + .t_Tooltip { + --color: var(--color-10); + --colorHover: var(--color-32); + --colorPress: var(--color-11); + --colorFocus: var(--color-11); + --background: var(--color-56); + --backgroundHover: var(--color-19); + --backgroundPress: var(--color-56); + --backgroundFocus: var(--color-19); + --borderColor: var(--color-18); + --borderColorHover: var(--color-53); + --borderColorFocus: var(--color-16); + --borderColorPress: var(--color-15); + } +} +:root.t_dark .t_light .t_active_DialogOverlay, +:root.t_dark .t_light .t_active_ModalOverlay, +:root.t_dark .t_light .t_active_SheetOverlay, +:root.t_dark .t_light .t_blue_active_DialogOverlay, +:root.t_dark .t_light .t_blue_active_ModalOverlay, +:root.t_dark .t_light .t_blue_active_SheetOverlay, +:root.t_dark .t_light .t_blue_DialogOverlay, +:root.t_dark .t_light .t_blue_ModalOverlay, +:root.t_dark .t_light .t_blue_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_blue_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_blue_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_blue_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_gray_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_gray_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_gray_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_green_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_green_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_green_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_green_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_green_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_green_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_orange_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_orange_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_orange_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_pink_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_pink_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_pink_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_purple_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_purple_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_purple_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_red_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_red_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_red_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_red_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_red_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_red_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_light .t_yellow_DialogOverlay, +:root.t_dark .t_light .t_dark .t_light .t_yellow_ModalOverlay, +:root.t_dark .t_light .t_dark .t_light .t_yellow_SheetOverlay, +:root.t_dark .t_light .t_DialogOverlay, +:root.t_dark .t_light .t_gray_active_DialogOverlay, +:root.t_dark .t_light .t_gray_active_ModalOverlay, +:root.t_dark .t_light .t_gray_active_SheetOverlay, +:root.t_dark .t_light .t_gray_DialogOverlay, +:root.t_dark .t_light .t_gray_ModalOverlay, +:root.t_dark .t_light .t_gray_SheetOverlay, +:root.t_dark .t_light .t_green_active_DialogOverlay, +:root.t_dark .t_light .t_green_active_ModalOverlay, +:root.t_dark .t_light .t_green_active_SheetOverlay, +:root.t_dark .t_light .t_green_DialogOverlay, +:root.t_dark .t_light .t_green_ModalOverlay, +:root.t_dark .t_light .t_green_SheetOverlay, +:root.t_dark .t_light .t_ModalOverlay, +:root.t_dark .t_light .t_orange_active_DialogOverlay, +:root.t_dark .t_light .t_orange_active_ModalOverlay, +:root.t_dark .t_light .t_orange_active_SheetOverlay, +:root.t_dark .t_light .t_orange_DialogOverlay, +:root.t_dark .t_light .t_orange_ModalOverlay, +:root.t_dark .t_light .t_orange_SheetOverlay, +:root.t_dark .t_light .t_pink_active_DialogOverlay, +:root.t_dark .t_light .t_pink_active_ModalOverlay, +:root.t_dark .t_light .t_pink_active_SheetOverlay, +:root.t_dark .t_light .t_pink_DialogOverlay, +:root.t_dark .t_light .t_pink_ModalOverlay, +:root.t_dark .t_light .t_pink_SheetOverlay, +:root.t_dark .t_light .t_purple_active_DialogOverlay, +:root.t_dark .t_light .t_purple_active_ModalOverlay, +:root.t_dark .t_light .t_purple_active_SheetOverlay, +:root.t_dark .t_light .t_purple_DialogOverlay, +:root.t_dark .t_light .t_purple_ModalOverlay, +:root.t_dark .t_light .t_purple_SheetOverlay, +:root.t_dark .t_light .t_red_active_DialogOverlay, +:root.t_dark .t_light .t_red_active_ModalOverlay, +:root.t_dark .t_light .t_red_active_SheetOverlay, +:root.t_dark .t_light .t_red_DialogOverlay, +:root.t_dark .t_light .t_red_ModalOverlay, +:root.t_dark .t_light .t_red_SheetOverlay, +:root.t_dark .t_light .t_SheetOverlay, +:root.t_dark .t_light .t_yellow_active_DialogOverlay, +:root.t_dark .t_light .t_yellow_active_ModalOverlay, +:root.t_dark .t_light .t_yellow_active_SheetOverlay, +:root.t_dark .t_light .t_yellow_DialogOverlay, +:root.t_dark .t_light .t_yellow_ModalOverlay, +:root.t_dark .t_light .t_yellow_SheetOverlay, +:root.t_light .t_active_DialogOverlay, +:root.t_light .t_active_ModalOverlay, +:root.t_light .t_active_SheetOverlay, +:root.t_light .t_blue_active_DialogOverlay, +:root.t_light .t_blue_active_ModalOverlay, +:root.t_light .t_blue_active_SheetOverlay, +:root.t_light .t_blue_DialogOverlay, +:root.t_light .t_blue_ModalOverlay, +:root.t_light .t_blue_SheetOverlay, +:root.t_light .t_dark .t_light .t_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_blue_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_blue_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_blue_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_blue_DialogOverlay, +:root.t_light .t_dark .t_light .t_blue_ModalOverlay, +:root.t_light .t_dark .t_light .t_blue_SheetOverlay, +:root.t_light .t_dark .t_light .t_DialogOverlay, +:root.t_light .t_dark .t_light .t_gray_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_gray_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_gray_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_gray_DialogOverlay, +:root.t_light .t_dark .t_light .t_gray_ModalOverlay, +:root.t_light .t_dark .t_light .t_gray_SheetOverlay, +:root.t_light .t_dark .t_light .t_green_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_green_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_green_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_green_DialogOverlay, +:root.t_light .t_dark .t_light .t_green_ModalOverlay, +:root.t_light .t_dark .t_light .t_green_SheetOverlay, +:root.t_light .t_dark .t_light .t_ModalOverlay, +:root.t_light .t_dark .t_light .t_orange_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_orange_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_orange_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_orange_DialogOverlay, +:root.t_light .t_dark .t_light .t_orange_ModalOverlay, +:root.t_light .t_dark .t_light .t_orange_SheetOverlay, +:root.t_light .t_dark .t_light .t_pink_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_pink_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_pink_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_pink_DialogOverlay, +:root.t_light .t_dark .t_light .t_pink_ModalOverlay, +:root.t_light .t_dark .t_light .t_pink_SheetOverlay, +:root.t_light .t_dark .t_light .t_purple_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_purple_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_purple_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_purple_DialogOverlay, +:root.t_light .t_dark .t_light .t_purple_ModalOverlay, +:root.t_light .t_dark .t_light .t_purple_SheetOverlay, +:root.t_light .t_dark .t_light .t_red_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_red_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_red_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_red_DialogOverlay, +:root.t_light .t_dark .t_light .t_red_ModalOverlay, +:root.t_light .t_dark .t_light .t_red_SheetOverlay, +:root.t_light .t_dark .t_light .t_SheetOverlay, +:root.t_light .t_dark .t_light .t_yellow_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_yellow_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_yellow_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_yellow_DialogOverlay, +:root.t_light .t_dark .t_light .t_yellow_ModalOverlay, +:root.t_light .t_dark .t_light .t_yellow_SheetOverlay, +:root.t_light .t_DialogOverlay, +:root.t_light .t_gray_active_DialogOverlay, +:root.t_light .t_gray_active_ModalOverlay, +:root.t_light .t_gray_active_SheetOverlay, +:root.t_light .t_gray_DialogOverlay, +:root.t_light .t_gray_ModalOverlay, +:root.t_light .t_gray_SheetOverlay, +:root.t_light .t_green_active_DialogOverlay, +:root.t_light .t_green_active_ModalOverlay, +:root.t_light .t_green_active_SheetOverlay, +:root.t_light .t_green_DialogOverlay, +:root.t_light .t_green_ModalOverlay, +:root.t_light .t_green_SheetOverlay, +:root.t_light .t_ModalOverlay, +:root.t_light .t_orange_active_DialogOverlay, +:root.t_light .t_orange_active_ModalOverlay, +:root.t_light .t_orange_active_SheetOverlay, +:root.t_light .t_orange_DialogOverlay, +:root.t_light .t_orange_ModalOverlay, +:root.t_light .t_orange_SheetOverlay, +:root.t_light .t_pink_active_DialogOverlay, +:root.t_light .t_pink_active_ModalOverlay, +:root.t_light .t_pink_active_SheetOverlay, +:root.t_light .t_pink_DialogOverlay, +:root.t_light .t_pink_ModalOverlay, +:root.t_light .t_pink_SheetOverlay, +:root.t_light .t_purple_active_DialogOverlay, +:root.t_light .t_purple_active_ModalOverlay, +:root.t_light .t_purple_active_SheetOverlay, +:root.t_light .t_purple_DialogOverlay, +:root.t_light .t_purple_ModalOverlay, +:root.t_light .t_purple_SheetOverlay, +:root.t_light .t_red_active_DialogOverlay, +:root.t_light .t_red_active_ModalOverlay, +:root.t_light .t_red_active_SheetOverlay, +:root.t_light .t_red_DialogOverlay, +:root.t_light .t_red_ModalOverlay, +:root.t_light .t_red_SheetOverlay, +:root.t_light .t_SheetOverlay, +:root.t_light .t_yellow_active_DialogOverlay, +:root.t_light .t_yellow_active_ModalOverlay, +:root.t_light .t_yellow_active_SheetOverlay, +:root.t_light .t_yellow_DialogOverlay, +:root.t_light .t_yellow_ModalOverlay, +:root.t_light .t_yellow_SheetOverlay { + --background: rgba(0, 0, 0, 0.5); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + } + .t_active_DialogOverlay, + .t_active_ModalOverlay, + .t_active_SheetOverlay, + .t_blue_active_DialogOverlay, + .t_blue_active_ModalOverlay, + .t_blue_active_SheetOverlay, + .t_blue_DialogOverlay, + .t_blue_ModalOverlay, + .t_blue_SheetOverlay, + .t_dark .t_light .t_active_DialogOverlay, + .t_dark .t_light .t_active_ModalOverlay, + .t_dark .t_light .t_active_SheetOverlay, + .t_dark .t_light .t_blue_active_DialogOverlay, + .t_dark .t_light .t_blue_active_ModalOverlay, + .t_dark .t_light .t_blue_active_SheetOverlay, + .t_dark .t_light .t_blue_DialogOverlay, + .t_dark .t_light .t_blue_ModalOverlay, + .t_dark .t_light .t_blue_SheetOverlay, + .t_dark .t_light .t_DialogOverlay, + .t_dark .t_light .t_gray_active_DialogOverlay, + .t_dark .t_light .t_gray_active_ModalOverlay, + .t_dark .t_light .t_gray_active_SheetOverlay, + .t_dark .t_light .t_gray_DialogOverlay, + .t_dark .t_light .t_gray_ModalOverlay, + .t_dark .t_light .t_gray_SheetOverlay, + .t_dark .t_light .t_green_active_DialogOverlay, + .t_dark .t_light .t_green_active_ModalOverlay, + .t_dark .t_light .t_green_active_SheetOverlay, + .t_dark .t_light .t_green_DialogOverlay, + .t_dark .t_light .t_green_ModalOverlay, + .t_dark .t_light .t_green_SheetOverlay, + .t_dark .t_light .t_ModalOverlay, + .t_dark .t_light .t_orange_active_DialogOverlay, + .t_dark .t_light .t_orange_active_ModalOverlay, + .t_dark .t_light .t_orange_active_SheetOverlay, + .t_dark .t_light .t_orange_DialogOverlay, + .t_dark .t_light .t_orange_ModalOverlay, + .t_dark .t_light .t_orange_SheetOverlay, + .t_dark .t_light .t_pink_active_DialogOverlay, + .t_dark .t_light .t_pink_active_ModalOverlay, + .t_dark .t_light .t_pink_active_SheetOverlay, + .t_dark .t_light .t_pink_DialogOverlay, + .t_dark .t_light .t_pink_ModalOverlay, + .t_dark .t_light .t_pink_SheetOverlay, + .t_dark .t_light .t_purple_active_DialogOverlay, + .t_dark .t_light .t_purple_active_ModalOverlay, + .t_dark .t_light .t_purple_active_SheetOverlay, + .t_dark .t_light .t_purple_DialogOverlay, + .t_dark .t_light .t_purple_ModalOverlay, + .t_dark .t_light .t_purple_SheetOverlay, + .t_dark .t_light .t_red_active_DialogOverlay, + .t_dark .t_light .t_red_active_ModalOverlay, + .t_dark .t_light .t_red_active_SheetOverlay, + .t_dark .t_light .t_red_DialogOverlay, + .t_dark .t_light .t_red_ModalOverlay, + .t_dark .t_light .t_red_SheetOverlay, + .t_dark .t_light .t_SheetOverlay, + .t_dark .t_light .t_yellow_active_DialogOverlay, + .t_dark .t_light .t_yellow_active_ModalOverlay, + .t_dark .t_light .t_yellow_active_SheetOverlay, + .t_dark .t_light .t_yellow_DialogOverlay, + .t_dark .t_light .t_yellow_ModalOverlay, + .t_dark .t_light .t_yellow_SheetOverlay, + .t_DialogOverlay, + .t_gray_active_DialogOverlay, + .t_gray_active_ModalOverlay, + .t_gray_active_SheetOverlay, + .t_gray_DialogOverlay, + .t_gray_ModalOverlay, + .t_gray_SheetOverlay, + .t_green_active_DialogOverlay, + .t_green_active_ModalOverlay, + .t_green_active_SheetOverlay, + .t_green_DialogOverlay, + .t_green_ModalOverlay, + .t_green_SheetOverlay, + .t_ModalOverlay, + .t_orange_active_DialogOverlay, + .t_orange_active_ModalOverlay, + .t_orange_active_SheetOverlay, + .t_orange_DialogOverlay, + .t_orange_ModalOverlay, + .t_orange_SheetOverlay, + .t_pink_active_DialogOverlay, + .t_pink_active_ModalOverlay, + .t_pink_active_SheetOverlay, + .t_pink_DialogOverlay, + .t_pink_ModalOverlay, + .t_pink_SheetOverlay, + .t_purple_active_DialogOverlay, + .t_purple_active_ModalOverlay, + .t_purple_active_SheetOverlay, + .t_purple_DialogOverlay, + .t_purple_ModalOverlay, + .t_purple_SheetOverlay, + .t_red_active_DialogOverlay, + .t_red_active_ModalOverlay, + .t_red_active_SheetOverlay, + .t_red_DialogOverlay, + .t_red_ModalOverlay, + .t_red_SheetOverlay, + .t_SheetOverlay, + .t_yellow_active_DialogOverlay, + .t_yellow_active_ModalOverlay, + .t_yellow_active_SheetOverlay, + .t_yellow_DialogOverlay, + .t_yellow_ModalOverlay, + .t_yellow_SheetOverlay { + --background: rgba(0, 0, 0, 0.5); + } +} +:root.t_dark .t_light .t_dark .t_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_SliderThumb, +:root.t_dark .t_light .t_dark .t_SwitchThumb, +:root.t_dark .t_light .t_dark .t_Tooltip, +:root.t_dark .t_ProgressIndicator, +:root.t_dark .t_SliderThumb, +:root.t_dark .t_SwitchThumb, +:root.t_dark .t_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_Tooltip, +:root.t_light .t_dark .t_ProgressIndicator, +:root.t_light .t_dark .t_SliderThumb, +:root.t_light .t_dark .t_SwitchThumb, +:root.t_light .t_dark .t_Tooltip { + --color: var(--color-22); + --colorHover: var(--color-23); + --colorPress: var(--color-21); + --colorFocus: var(--color-21); + --background: var(--color-32); + --backgroundHover: var(--color-31); + --backgroundPress: var(--color-32); + --backgroundFocus: var(--color-31); + --borderColor: var(--color-30); + --borderColorHover: var(--color-29); + --borderColorFocus: var(--color-28); + --borderColorPress: var(--color-27); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_ProgressIndicator, + .t_light .t_dark .t_SliderThumb, + .t_light .t_dark .t_SwitchThumb, + .t_light .t_dark .t_Tooltip, + .t_ProgressIndicator, + .t_SliderThumb, + .t_SwitchThumb, + .t_Tooltip { + --color: var(--color-22); + --colorHover: var(--color-23); + --colorPress: var(--color-21); + --colorFocus: var(--color-21); + --background: var(--color-32); + --backgroundHover: var(--color-31); + --backgroundPress: var(--color-32); + --backgroundFocus: var(--color-31); + --borderColor: var(--color-30); + --borderColorHover: var(--color-29); + --borderColorFocus: var(--color-28); + --borderColorPress: var(--color-27); + } +} +:root.t_dark .t_active_DialogOverlay, +:root.t_dark .t_active_ModalOverlay, +:root.t_dark .t_active_SheetOverlay, +:root.t_dark .t_blue_active_DialogOverlay, +:root.t_dark .t_blue_active_ModalOverlay, +:root.t_dark .t_blue_active_SheetOverlay, +:root.t_dark .t_blue_DialogOverlay, +:root.t_dark .t_blue_ModalOverlay, +:root.t_dark .t_blue_SheetOverlay, +:root.t_dark .t_DialogOverlay, +:root.t_dark .t_gray_active_DialogOverlay, +:root.t_dark .t_gray_active_ModalOverlay, +:root.t_dark .t_gray_active_SheetOverlay, +:root.t_dark .t_gray_DialogOverlay, +:root.t_dark .t_gray_ModalOverlay, +:root.t_dark .t_gray_SheetOverlay, +:root.t_dark .t_green_active_DialogOverlay, +:root.t_dark .t_green_active_ModalOverlay, +:root.t_dark .t_green_active_SheetOverlay, +:root.t_dark .t_green_DialogOverlay, +:root.t_dark .t_green_ModalOverlay, +:root.t_dark .t_green_SheetOverlay, +:root.t_dark .t_light .t_dark .t_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_blue_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_blue_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_blue_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_blue_DialogOverlay, +:root.t_dark .t_light .t_dark .t_blue_ModalOverlay, +:root.t_dark .t_light .t_dark .t_blue_SheetOverlay, +:root.t_dark .t_light .t_dark .t_DialogOverlay, +:root.t_dark .t_light .t_dark .t_gray_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_gray_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_gray_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_gray_DialogOverlay, +:root.t_dark .t_light .t_dark .t_gray_ModalOverlay, +:root.t_dark .t_light .t_dark .t_gray_SheetOverlay, +:root.t_dark .t_light .t_dark .t_green_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_green_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_green_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_green_DialogOverlay, +:root.t_dark .t_light .t_dark .t_green_ModalOverlay, +:root.t_dark .t_light .t_dark .t_green_SheetOverlay, +:root.t_dark .t_light .t_dark .t_ModalOverlay, +:root.t_dark .t_light .t_dark .t_orange_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_orange_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_orange_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_orange_DialogOverlay, +:root.t_dark .t_light .t_dark .t_orange_ModalOverlay, +:root.t_dark .t_light .t_dark .t_orange_SheetOverlay, +:root.t_dark .t_light .t_dark .t_pink_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_pink_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_pink_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_pink_DialogOverlay, +:root.t_dark .t_light .t_dark .t_pink_ModalOverlay, +:root.t_dark .t_light .t_dark .t_pink_SheetOverlay, +:root.t_dark .t_light .t_dark .t_purple_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_purple_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_purple_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_purple_DialogOverlay, +:root.t_dark .t_light .t_dark .t_purple_ModalOverlay, +:root.t_dark .t_light .t_dark .t_purple_SheetOverlay, +:root.t_dark .t_light .t_dark .t_red_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_red_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_red_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_red_DialogOverlay, +:root.t_dark .t_light .t_dark .t_red_ModalOverlay, +:root.t_dark .t_light .t_dark .t_red_SheetOverlay, +:root.t_dark .t_light .t_dark .t_SheetOverlay, +:root.t_dark .t_light .t_dark .t_yellow_active_DialogOverlay, +:root.t_dark .t_light .t_dark .t_yellow_active_ModalOverlay, +:root.t_dark .t_light .t_dark .t_yellow_active_SheetOverlay, +:root.t_dark .t_light .t_dark .t_yellow_DialogOverlay, +:root.t_dark .t_light .t_dark .t_yellow_ModalOverlay, +:root.t_dark .t_light .t_dark .t_yellow_SheetOverlay, +:root.t_dark .t_ModalOverlay, +:root.t_dark .t_orange_active_DialogOverlay, +:root.t_dark .t_orange_active_ModalOverlay, +:root.t_dark .t_orange_active_SheetOverlay, +:root.t_dark .t_orange_DialogOverlay, +:root.t_dark .t_orange_ModalOverlay, +:root.t_dark .t_orange_SheetOverlay, +:root.t_dark .t_pink_active_DialogOverlay, +:root.t_dark .t_pink_active_ModalOverlay, +:root.t_dark .t_pink_active_SheetOverlay, +:root.t_dark .t_pink_DialogOverlay, +:root.t_dark .t_pink_ModalOverlay, +:root.t_dark .t_pink_SheetOverlay, +:root.t_dark .t_purple_active_DialogOverlay, +:root.t_dark .t_purple_active_ModalOverlay, +:root.t_dark .t_purple_active_SheetOverlay, +:root.t_dark .t_purple_DialogOverlay, +:root.t_dark .t_purple_ModalOverlay, +:root.t_dark .t_purple_SheetOverlay, +:root.t_dark .t_red_active_DialogOverlay, +:root.t_dark .t_red_active_ModalOverlay, +:root.t_dark .t_red_active_SheetOverlay, +:root.t_dark .t_red_DialogOverlay, +:root.t_dark .t_red_ModalOverlay, +:root.t_dark .t_red_SheetOverlay, +:root.t_dark .t_SheetOverlay, +:root.t_dark .t_yellow_active_DialogOverlay, +:root.t_dark .t_yellow_active_ModalOverlay, +:root.t_dark .t_yellow_active_SheetOverlay, +:root.t_dark .t_yellow_DialogOverlay, +:root.t_dark .t_yellow_ModalOverlay, +:root.t_dark .t_yellow_SheetOverlay, +:root.t_light .t_dark .t_active_DialogOverlay, +:root.t_light .t_dark .t_active_ModalOverlay, +:root.t_light .t_dark .t_active_SheetOverlay, +:root.t_light .t_dark .t_blue_active_DialogOverlay, +:root.t_light .t_dark .t_blue_active_ModalOverlay, +:root.t_light .t_dark .t_blue_active_SheetOverlay, +:root.t_light .t_dark .t_blue_DialogOverlay, +:root.t_light .t_dark .t_blue_ModalOverlay, +:root.t_light .t_dark .t_blue_SheetOverlay, +:root.t_light .t_dark .t_DialogOverlay, +:root.t_light .t_dark .t_gray_active_DialogOverlay, +:root.t_light .t_dark .t_gray_active_ModalOverlay, +:root.t_light .t_dark .t_gray_active_SheetOverlay, +:root.t_light .t_dark .t_gray_DialogOverlay, +:root.t_light .t_dark .t_gray_ModalOverlay, +:root.t_light .t_dark .t_gray_SheetOverlay, +:root.t_light .t_dark .t_green_active_DialogOverlay, +:root.t_light .t_dark .t_green_active_ModalOverlay, +:root.t_light .t_dark .t_green_active_SheetOverlay, +:root.t_light .t_dark .t_green_DialogOverlay, +:root.t_light .t_dark .t_green_ModalOverlay, +:root.t_light .t_dark .t_green_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_blue_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_blue_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_blue_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_gray_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_gray_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_gray_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_green_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_green_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_green_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_green_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_green_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_green_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_orange_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_orange_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_orange_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_pink_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_pink_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_pink_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_purple_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_purple_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_purple_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_red_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_red_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_red_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_red_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_red_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_red_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_SheetOverlay, +:root.t_light .t_dark .t_light .t_dark .t_yellow_DialogOverlay, +:root.t_light .t_dark .t_light .t_dark .t_yellow_ModalOverlay, +:root.t_light .t_dark .t_light .t_dark .t_yellow_SheetOverlay, +:root.t_light .t_dark .t_ModalOverlay, +:root.t_light .t_dark .t_orange_active_DialogOverlay, +:root.t_light .t_dark .t_orange_active_ModalOverlay, +:root.t_light .t_dark .t_orange_active_SheetOverlay, +:root.t_light .t_dark .t_orange_DialogOverlay, +:root.t_light .t_dark .t_orange_ModalOverlay, +:root.t_light .t_dark .t_orange_SheetOverlay, +:root.t_light .t_dark .t_pink_active_DialogOverlay, +:root.t_light .t_dark .t_pink_active_ModalOverlay, +:root.t_light .t_dark .t_pink_active_SheetOverlay, +:root.t_light .t_dark .t_pink_DialogOverlay, +:root.t_light .t_dark .t_pink_ModalOverlay, +:root.t_light .t_dark .t_pink_SheetOverlay, +:root.t_light .t_dark .t_purple_active_DialogOverlay, +:root.t_light .t_dark .t_purple_active_ModalOverlay, +:root.t_light .t_dark .t_purple_active_SheetOverlay, +:root.t_light .t_dark .t_purple_DialogOverlay, +:root.t_light .t_dark .t_purple_ModalOverlay, +:root.t_light .t_dark .t_purple_SheetOverlay, +:root.t_light .t_dark .t_red_active_DialogOverlay, +:root.t_light .t_dark .t_red_active_ModalOverlay, +:root.t_light .t_dark .t_red_active_SheetOverlay, +:root.t_light .t_dark .t_red_DialogOverlay, +:root.t_light .t_dark .t_red_ModalOverlay, +:root.t_light .t_dark .t_red_SheetOverlay, +:root.t_light .t_dark .t_SheetOverlay, +:root.t_light .t_dark .t_yellow_active_DialogOverlay, +:root.t_light .t_dark .t_yellow_active_ModalOverlay, +:root.t_light .t_dark .t_yellow_active_SheetOverlay, +:root.t_light .t_dark .t_yellow_DialogOverlay, +:root.t_light .t_dark .t_yellow_ModalOverlay, +:root.t_light .t_dark .t_yellow_SheetOverlay { + --background: rgba(0, 0, 0, 0.8); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + } + .t_active_DialogOverlay, + .t_active_ModalOverlay, + .t_active_SheetOverlay, + .t_blue_active_DialogOverlay, + .t_blue_active_ModalOverlay, + .t_blue_active_SheetOverlay, + .t_blue_DialogOverlay, + .t_blue_ModalOverlay, + .t_blue_SheetOverlay, + .t_DialogOverlay, + .t_gray_active_DialogOverlay, + .t_gray_active_ModalOverlay, + .t_gray_active_SheetOverlay, + .t_gray_DialogOverlay, + .t_gray_ModalOverlay, + .t_gray_SheetOverlay, + .t_green_active_DialogOverlay, + .t_green_active_ModalOverlay, + .t_green_active_SheetOverlay, + .t_green_DialogOverlay, + .t_green_ModalOverlay, + .t_green_SheetOverlay, + .t_light .t_dark .t_active_DialogOverlay, + .t_light .t_dark .t_active_ModalOverlay, + .t_light .t_dark .t_active_SheetOverlay, + .t_light .t_dark .t_blue_active_DialogOverlay, + .t_light .t_dark .t_blue_active_ModalOverlay, + .t_light .t_dark .t_blue_active_SheetOverlay, + .t_light .t_dark .t_blue_DialogOverlay, + .t_light .t_dark .t_blue_ModalOverlay, + .t_light .t_dark .t_blue_SheetOverlay, + .t_light .t_dark .t_DialogOverlay, + .t_light .t_dark .t_gray_active_DialogOverlay, + .t_light .t_dark .t_gray_active_ModalOverlay, + .t_light .t_dark .t_gray_active_SheetOverlay, + .t_light .t_dark .t_gray_DialogOverlay, + .t_light .t_dark .t_gray_ModalOverlay, + .t_light .t_dark .t_gray_SheetOverlay, + .t_light .t_dark .t_green_active_DialogOverlay, + .t_light .t_dark .t_green_active_ModalOverlay, + .t_light .t_dark .t_green_active_SheetOverlay, + .t_light .t_dark .t_green_DialogOverlay, + .t_light .t_dark .t_green_ModalOverlay, + .t_light .t_dark .t_green_SheetOverlay, + .t_light .t_dark .t_ModalOverlay, + .t_light .t_dark .t_orange_active_DialogOverlay, + .t_light .t_dark .t_orange_active_ModalOverlay, + .t_light .t_dark .t_orange_active_SheetOverlay, + .t_light .t_dark .t_orange_DialogOverlay, + .t_light .t_dark .t_orange_ModalOverlay, + .t_light .t_dark .t_orange_SheetOverlay, + .t_light .t_dark .t_pink_active_DialogOverlay, + .t_light .t_dark .t_pink_active_ModalOverlay, + .t_light .t_dark .t_pink_active_SheetOverlay, + .t_light .t_dark .t_pink_DialogOverlay, + .t_light .t_dark .t_pink_ModalOverlay, + .t_light .t_dark .t_pink_SheetOverlay, + .t_light .t_dark .t_purple_active_DialogOverlay, + .t_light .t_dark .t_purple_active_ModalOverlay, + .t_light .t_dark .t_purple_active_SheetOverlay, + .t_light .t_dark .t_purple_DialogOverlay, + .t_light .t_dark .t_purple_ModalOverlay, + .t_light .t_dark .t_purple_SheetOverlay, + .t_light .t_dark .t_red_active_DialogOverlay, + .t_light .t_dark .t_red_active_ModalOverlay, + .t_light .t_dark .t_red_active_SheetOverlay, + .t_light .t_dark .t_red_DialogOverlay, + .t_light .t_dark .t_red_ModalOverlay, + .t_light .t_dark .t_red_SheetOverlay, + .t_light .t_dark .t_SheetOverlay, + .t_light .t_dark .t_yellow_active_DialogOverlay, + .t_light .t_dark .t_yellow_active_ModalOverlay, + .t_light .t_dark .t_yellow_active_SheetOverlay, + .t_light .t_dark .t_yellow_DialogOverlay, + .t_light .t_dark .t_yellow_ModalOverlay, + .t_light .t_dark .t_yellow_SheetOverlay, + .t_ModalOverlay, + .t_orange_active_DialogOverlay, + .t_orange_active_ModalOverlay, + .t_orange_active_SheetOverlay, + .t_orange_DialogOverlay, + .t_orange_ModalOverlay, + .t_orange_SheetOverlay, + .t_pink_active_DialogOverlay, + .t_pink_active_ModalOverlay, + .t_pink_active_SheetOverlay, + .t_pink_DialogOverlay, + .t_pink_ModalOverlay, + .t_pink_SheetOverlay, + .t_purple_active_DialogOverlay, + .t_purple_active_ModalOverlay, + .t_purple_active_SheetOverlay, + .t_purple_DialogOverlay, + .t_purple_ModalOverlay, + .t_purple_SheetOverlay, + .t_red_active_DialogOverlay, + .t_red_active_ModalOverlay, + .t_red_active_SheetOverlay, + .t_red_DialogOverlay, + .t_red_ModalOverlay, + .t_red_SheetOverlay, + .t_SheetOverlay, + .t_yellow_active_DialogOverlay, + .t_yellow_active_ModalOverlay, + .t_yellow_active_SheetOverlay, + .t_yellow_DialogOverlay, + .t_yellow_ModalOverlay, + .t_yellow_SheetOverlay { + --background: rgba(0, 0, 0, 0.8); + } +} +:root.t_dark .t_light .t_dark .t_light .t_orange_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_orange_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_orange_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_orange_Tooltip, +:root.t_dark .t_light .t_orange_ProgressIndicator, +:root.t_dark .t_light .t_orange_SliderThumb, +:root.t_dark .t_light .t_orange_SwitchThumb, +:root.t_dark .t_light .t_orange_Tooltip, +:root.t_light .t_dark .t_light .t_orange_ProgressIndicator, +:root.t_light .t_dark .t_light .t_orange_SliderThumb, +:root.t_light .t_dark .t_light .t_orange_SwitchThumb, +:root.t_light .t_dark .t_light .t_orange_Tooltip, +:root.t_light .t_orange_ProgressIndicator, +:root.t_light .t_orange_SliderThumb, +:root.t_light .t_orange_SwitchThumb, +:root.t_light .t_orange_Tooltip { + --color: var(--color-70); + --colorHover: var(--color-69); + --colorPress: var(--color-71); + --colorFocus: var(--color-71); + --background: var(--color-80); + --backgroundHover: var(--color-79); + --backgroundPress: var(--color-80); + --backgroundFocus: var(--color-79); + --borderColor: var(--color-78); + --borderColorHover: var(--color-173); + --borderColorFocus: var(--color-76); + --borderColorPress: var(--color-75); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_orange_ProgressIndicator, + .t_dark .t_light .t_orange_SliderThumb, + .t_dark .t_light .t_orange_SwitchThumb, + .t_dark .t_light .t_orange_Tooltip, + .t_orange_ProgressIndicator, + .t_orange_SliderThumb, + .t_orange_SwitchThumb, + .t_orange_Tooltip { + --color: var(--color-70); + --colorHover: var(--color-69); + --colorPress: var(--color-71); + --colorFocus: var(--color-71); + --background: var(--color-80); + --backgroundHover: var(--color-79); + --backgroundPress: var(--color-80); + --backgroundFocus: var(--color-79); + --borderColor: var(--color-78); + --borderColorHover: var(--color-173); + --borderColorFocus: var(--color-76); + --borderColorPress: var(--color-75); + } +} +:root.t_dark .t_light .t_dark .t_light .t_yellow_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_yellow_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_yellow_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_yellow_Tooltip, +:root.t_dark .t_light .t_yellow_ProgressIndicator, +:root.t_dark .t_light .t_yellow_SliderThumb, +:root.t_dark .t_light .t_yellow_SwitchThumb, +:root.t_dark .t_light .t_yellow_Tooltip, +:root.t_light .t_dark .t_light .t_yellow_ProgressIndicator, +:root.t_light .t_dark .t_light .t_yellow_SliderThumb, +:root.t_light .t_dark .t_light .t_yellow_SwitchThumb, +:root.t_light .t_dark .t_light .t_yellow_Tooltip, +:root.t_light .t_yellow_ProgressIndicator, +:root.t_light .t_yellow_SliderThumb, +:root.t_light .t_yellow_SwitchThumb, +:root.t_light .t_yellow_Tooltip { + --color: var(--color-118); + --colorHover: var(--color-117); + --colorPress: var(--color-119); + --colorFocus: var(--color-119); + --background: var(--color-128); + --backgroundHover: var(--color-127); + --backgroundPress: var(--color-128); + --backgroundFocus: var(--color-127); + --borderColor: var(--color-126); + --borderColorHover: var(--color-221); + --borderColorFocus: var(--color-124); + --borderColorPress: var(--color-123); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_yellow_ProgressIndicator, + .t_dark .t_light .t_yellow_SliderThumb, + .t_dark .t_light .t_yellow_SwitchThumb, + .t_dark .t_light .t_yellow_Tooltip, + .t_yellow_ProgressIndicator, + .t_yellow_SliderThumb, + .t_yellow_SwitchThumb, + .t_yellow_Tooltip { + --color: var(--color-118); + --colorHover: var(--color-117); + --colorPress: var(--color-119); + --colorFocus: var(--color-119); + --background: var(--color-128); + --backgroundHover: var(--color-127); + --backgroundPress: var(--color-128); + --backgroundFocus: var(--color-127); + --borderColor: var(--color-126); + --borderColorHover: var(--color-221); + --borderColorFocus: var(--color-124); + --borderColorPress: var(--color-123); + } +} +:root.t_dark .t_light .t_dark .t_light .t_green_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_green_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_green_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_green_Tooltip, +:root.t_dark .t_light .t_green_ProgressIndicator, +:root.t_dark .t_light .t_green_SliderThumb, +:root.t_dark .t_light .t_green_SwitchThumb, +:root.t_dark .t_light .t_green_Tooltip, +:root.t_light .t_dark .t_light .t_green_ProgressIndicator, +:root.t_light .t_dark .t_light .t_green_SliderThumb, +:root.t_light .t_dark .t_light .t_green_SwitchThumb, +:root.t_light .t_dark .t_light .t_green_Tooltip, +:root.t_light .t_green_ProgressIndicator, +:root.t_light .t_green_SliderThumb, +:root.t_light .t_green_SwitchThumb, +:root.t_light .t_green_Tooltip { + --color: var(--color-58); + --colorHover: var(--color-57); + --colorPress: var(--color-59); + --colorFocus: var(--color-59); + --background: var(--color-68); + --backgroundHover: var(--color-67); + --backgroundPress: var(--color-68); + --backgroundFocus: var(--color-67); + --borderColor: var(--color-66); + --borderColorHover: var(--color-161); + --borderColorFocus: var(--color-64); + --borderColorPress: var(--color-63); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_green_ProgressIndicator, + .t_dark .t_light .t_green_SliderThumb, + .t_dark .t_light .t_green_SwitchThumb, + .t_dark .t_light .t_green_Tooltip, + .t_green_ProgressIndicator, + .t_green_SliderThumb, + .t_green_SwitchThumb, + .t_green_Tooltip { + --color: var(--color-58); + --colorHover: var(--color-57); + --colorPress: var(--color-59); + --colorFocus: var(--color-59); + --background: var(--color-68); + --backgroundHover: var(--color-67); + --backgroundPress: var(--color-68); + --backgroundFocus: var(--color-67); + --borderColor: var(--color-66); + --borderColorHover: var(--color-161); + --borderColorFocus: var(--color-64); + --borderColorPress: var(--color-63); + } +} +:root.t_dark .t_light .t_blue_ProgressIndicator, +:root.t_dark .t_light .t_blue_SliderThumb, +:root.t_dark .t_light .t_blue_SwitchThumb, +:root.t_dark .t_light .t_blue_Tooltip, +:root.t_dark .t_light .t_dark .t_light .t_blue_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_blue_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_blue_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_blue_Tooltip, +:root.t_light .t_blue_ProgressIndicator, +:root.t_light .t_blue_SliderThumb, +:root.t_light .t_blue_SwitchThumb, +:root.t_light .t_blue_Tooltip, +:root.t_light .t_dark .t_light .t_blue_ProgressIndicator, +:root.t_light .t_dark .t_light .t_blue_SliderThumb, +:root.t_light .t_dark .t_light .t_blue_SwitchThumb, +:root.t_light .t_dark .t_light .t_blue_Tooltip { + --color: var(--color-34); + --colorHover: var(--color-33); + --colorPress: var(--color-35); + --colorFocus: var(--color-35); + --background: var(--color-44); + --backgroundHover: var(--color-43); + --backgroundPress: var(--color-44); + --backgroundFocus: var(--color-43); + --borderColor: var(--color-42); + --borderColorHover: var(--color-137); + --borderColorFocus: var(--color-40); + --borderColorPress: var(--color-39); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_blue_ProgressIndicator, + .t_blue_SliderThumb, + .t_blue_SwitchThumb, + .t_blue_Tooltip, + .t_dark .t_light .t_blue_ProgressIndicator, + .t_dark .t_light .t_blue_SliderThumb, + .t_dark .t_light .t_blue_SwitchThumb, + .t_dark .t_light .t_blue_Tooltip { + --color: var(--color-34); + --colorHover: var(--color-33); + --colorPress: var(--color-35); + --colorFocus: var(--color-35); + --background: var(--color-44); + --backgroundHover: var(--color-43); + --backgroundPress: var(--color-44); + --backgroundFocus: var(--color-43); + --borderColor: var(--color-42); + --borderColorHover: var(--color-137); + --borderColorFocus: var(--color-40); + --borderColorPress: var(--color-39); + } +} +:root.t_dark .t_light .t_dark .t_light .t_purple_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_purple_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_purple_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_purple_Tooltip, +:root.t_dark .t_light .t_purple_ProgressIndicator, +:root.t_dark .t_light .t_purple_SliderThumb, +:root.t_dark .t_light .t_purple_SwitchThumb, +:root.t_dark .t_light .t_purple_Tooltip, +:root.t_light .t_dark .t_light .t_purple_ProgressIndicator, +:root.t_light .t_dark .t_light .t_purple_SliderThumb, +:root.t_light .t_dark .t_light .t_purple_SwitchThumb, +:root.t_light .t_dark .t_light .t_purple_Tooltip, +:root.t_light .t_purple_ProgressIndicator, +:root.t_light .t_purple_SliderThumb, +:root.t_light .t_purple_SwitchThumb, +:root.t_light .t_purple_Tooltip { + --color: var(--color-94); + --colorHover: var(--color-93); + --colorPress: var(--color-95); + --colorFocus: var(--color-95); + --background: var(--color-104); + --backgroundHover: var(--color-103); + --backgroundPress: var(--color-104); + --backgroundFocus: var(--color-103); + --borderColor: var(--color-102); + --borderColorHover: var(--color-197); + --borderColorFocus: var(--color-100); + --borderColorPress: var(--color-99); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_purple_ProgressIndicator, + .t_dark .t_light .t_purple_SliderThumb, + .t_dark .t_light .t_purple_SwitchThumb, + .t_dark .t_light .t_purple_Tooltip, + .t_purple_ProgressIndicator, + .t_purple_SliderThumb, + .t_purple_SwitchThumb, + .t_purple_Tooltip { + --color: var(--color-94); + --colorHover: var(--color-93); + --colorPress: var(--color-95); + --colorFocus: var(--color-95); + --background: var(--color-104); + --backgroundHover: var(--color-103); + --backgroundPress: var(--color-104); + --backgroundFocus: var(--color-103); + --borderColor: var(--color-102); + --borderColorHover: var(--color-197); + --borderColorFocus: var(--color-100); + --borderColorPress: var(--color-99); + } +} +:root.t_dark .t_light .t_dark .t_light .t_pink_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_pink_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_pink_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_pink_Tooltip, +:root.t_dark .t_light .t_pink_ProgressIndicator, +:root.t_dark .t_light .t_pink_SliderThumb, +:root.t_dark .t_light .t_pink_SwitchThumb, +:root.t_dark .t_light .t_pink_Tooltip, +:root.t_light .t_dark .t_light .t_pink_ProgressIndicator, +:root.t_light .t_dark .t_light .t_pink_SliderThumb, +:root.t_light .t_dark .t_light .t_pink_SwitchThumb, +:root.t_light .t_dark .t_light .t_pink_Tooltip, +:root.t_light .t_pink_ProgressIndicator, +:root.t_light .t_pink_SliderThumb, +:root.t_light .t_pink_SwitchThumb, +:root.t_light .t_pink_Tooltip { + --color: var(--color-82); + --colorHover: var(--color-81); + --colorPress: var(--color-83); + --colorFocus: var(--color-83); + --background: var(--color-92); + --backgroundHover: var(--color-91); + --backgroundPress: var(--color-92); + --backgroundFocus: var(--color-91); + --borderColor: var(--color-90); + --borderColorHover: var(--color-185); + --borderColorFocus: var(--color-88); + --borderColorPress: var(--color-87); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_pink_ProgressIndicator, + .t_dark .t_light .t_pink_SliderThumb, + .t_dark .t_light .t_pink_SwitchThumb, + .t_dark .t_light .t_pink_Tooltip, + .t_pink_ProgressIndicator, + .t_pink_SliderThumb, + .t_pink_SwitchThumb, + .t_pink_Tooltip { + --color: var(--color-82); + --colorHover: var(--color-81); + --colorPress: var(--color-83); + --colorFocus: var(--color-83); + --background: var(--color-92); + --backgroundHover: var(--color-91); + --backgroundPress: var(--color-92); + --backgroundFocus: var(--color-91); + --borderColor: var(--color-90); + --borderColorHover: var(--color-185); + --borderColorFocus: var(--color-88); + --borderColorPress: var(--color-87); + } +} +:root.t_dark .t_light .t_dark .t_light .t_red_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_red_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_red_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_red_Tooltip, +:root.t_dark .t_light .t_red_ProgressIndicator, +:root.t_dark .t_light .t_red_SliderThumb, +:root.t_dark .t_light .t_red_SwitchThumb, +:root.t_dark .t_light .t_red_Tooltip, +:root.t_light .t_dark .t_light .t_red_ProgressIndicator, +:root.t_light .t_dark .t_light .t_red_SliderThumb, +:root.t_light .t_dark .t_light .t_red_SwitchThumb, +:root.t_light .t_dark .t_light .t_red_Tooltip, +:root.t_light .t_red_ProgressIndicator, +:root.t_light .t_red_SliderThumb, +:root.t_light .t_red_SwitchThumb, +:root.t_light .t_red_Tooltip { + --color: var(--color-106); + --colorHover: var(--color-105); + --colorPress: var(--color-107); + --colorFocus: var(--color-107); + --background: var(--color-116); + --backgroundHover: var(--color-115); + --backgroundPress: var(--color-116); + --backgroundFocus: var(--color-115); + --borderColor: var(--color-114); + --borderColorHover: var(--color-209); + --borderColorFocus: var(--color-112); + --borderColorPress: var(--color-111); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_red_ProgressIndicator, + .t_dark .t_light .t_red_SliderThumb, + .t_dark .t_light .t_red_SwitchThumb, + .t_dark .t_light .t_red_Tooltip, + .t_red_ProgressIndicator, + .t_red_SliderThumb, + .t_red_SwitchThumb, + .t_red_Tooltip { + --color: var(--color-106); + --colorHover: var(--color-105); + --colorPress: var(--color-107); + --colorFocus: var(--color-107); + --background: var(--color-116); + --backgroundHover: var(--color-115); + --backgroundPress: var(--color-116); + --backgroundFocus: var(--color-115); + --borderColor: var(--color-114); + --borderColorHover: var(--color-209); + --borderColorFocus: var(--color-112); + --borderColorPress: var(--color-111); + } +} +:root.t_dark .t_light .t_dark .t_light .t_gray_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_gray_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_gray_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_gray_Tooltip, +:root.t_dark .t_light .t_gray_ProgressIndicator, +:root.t_dark .t_light .t_gray_SliderThumb, +:root.t_dark .t_light .t_gray_SwitchThumb, +:root.t_dark .t_light .t_gray_Tooltip, +:root.t_light .t_dark .t_light .t_gray_ProgressIndicator, +:root.t_light .t_dark .t_light .t_gray_SliderThumb, +:root.t_light .t_dark .t_light .t_gray_SwitchThumb, +:root.t_light .t_dark .t_light .t_gray_Tooltip, +:root.t_light .t_gray_ProgressIndicator, +:root.t_light .t_gray_SliderThumb, +:root.t_light .t_gray_SwitchThumb, +:root.t_light .t_gray_Tooltip { + --color: var(--color-46); + --colorHover: var(--color-45); + --colorPress: var(--color-47); + --colorFocus: var(--color-47); + --background: var(--color-56); + --backgroundHover: var(--color-55); + --backgroundPress: var(--color-56); + --backgroundFocus: var(--color-55); + --borderColor: var(--color-54); + --borderColorHover: var(--color-53); + --borderColorFocus: var(--color-52); + --borderColorPress: var(--color-51); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_gray_ProgressIndicator, + .t_dark .t_light .t_gray_SliderThumb, + .t_dark .t_light .t_gray_SwitchThumb, + .t_dark .t_light .t_gray_Tooltip, + .t_gray_ProgressIndicator, + .t_gray_SliderThumb, + .t_gray_SwitchThumb, + .t_gray_Tooltip { + --color: var(--color-46); + --colorHover: var(--color-45); + --colorPress: var(--color-47); + --colorFocus: var(--color-47); + --background: var(--color-56); + --backgroundHover: var(--color-55); + --backgroundPress: var(--color-56); + --backgroundFocus: var(--color-55); + --borderColor: var(--color-54); + --borderColorHover: var(--color-53); + --borderColorFocus: var(--color-52); + --borderColorPress: var(--color-51); + } +} +:root.t_dark .t_light .t_dark .t_orange_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_orange_SliderThumb, +:root.t_dark .t_light .t_dark .t_orange_SwitchThumb, +:root.t_dark .t_light .t_dark .t_orange_Tooltip, +:root.t_dark .t_orange_ProgressIndicator, +:root.t_dark .t_orange_SliderThumb, +:root.t_dark .t_orange_SwitchThumb, +:root.t_dark .t_orange_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_orange_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_orange_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_orange_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_orange_Tooltip, +:root.t_light .t_dark .t_orange_ProgressIndicator, +:root.t_light .t_dark .t_orange_SliderThumb, +:root.t_light .t_dark .t_orange_SwitchThumb, +:root.t_light .t_dark .t_orange_Tooltip { + --color: var(--color-166); + --colorHover: var(--color-167); + --colorPress: var(--color-165); + --colorFocus: var(--color-165); + --background: var(--color-176); + --backgroundHover: var(--color-175); + --backgroundPress: var(--color-176); + --backgroundFocus: var(--color-175); + --borderColor: var(--color-174); + --borderColorHover: var(--color-173); + --borderColorFocus: var(--color-172); + --borderColorPress: var(--color-171); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_orange_ProgressIndicator, + .t_light .t_dark .t_orange_SliderThumb, + .t_light .t_dark .t_orange_SwitchThumb, + .t_light .t_dark .t_orange_Tooltip, + .t_orange_ProgressIndicator, + .t_orange_SliderThumb, + .t_orange_SwitchThumb, + .t_orange_Tooltip { + --color: var(--color-166); + --colorHover: var(--color-167); + --colorPress: var(--color-165); + --colorFocus: var(--color-165); + --background: var(--color-176); + --backgroundHover: var(--color-175); + --backgroundPress: var(--color-176); + --backgroundFocus: var(--color-175); + --borderColor: var(--color-174); + --borderColorHover: var(--color-173); + --borderColorFocus: var(--color-172); + --borderColorPress: var(--color-171); + } +} +:root.t_dark .t_light .t_dark .t_yellow_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_yellow_SliderThumb, +:root.t_dark .t_light .t_dark .t_yellow_SwitchThumb, +:root.t_dark .t_light .t_dark .t_yellow_Tooltip, +:root.t_dark .t_yellow_ProgressIndicator, +:root.t_dark .t_yellow_SliderThumb, +:root.t_dark .t_yellow_SwitchThumb, +:root.t_dark .t_yellow_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_yellow_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_yellow_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_yellow_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_yellow_Tooltip, +:root.t_light .t_dark .t_yellow_ProgressIndicator, +:root.t_light .t_dark .t_yellow_SliderThumb, +:root.t_light .t_dark .t_yellow_SwitchThumb, +:root.t_light .t_dark .t_yellow_Tooltip { + --color: var(--color-214); + --colorHover: var(--color-215); + --colorPress: var(--color-213); + --colorFocus: var(--color-213); + --background: var(--color-224); + --backgroundHover: var(--color-223); + --backgroundPress: var(--color-224); + --backgroundFocus: var(--color-223); + --borderColor: var(--color-222); + --borderColorHover: var(--color-221); + --borderColorFocus: var(--color-220); + --borderColorPress: var(--color-219); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_yellow_ProgressIndicator, + .t_light .t_dark .t_yellow_SliderThumb, + .t_light .t_dark .t_yellow_SwitchThumb, + .t_light .t_dark .t_yellow_Tooltip, + .t_yellow_ProgressIndicator, + .t_yellow_SliderThumb, + .t_yellow_SwitchThumb, + .t_yellow_Tooltip { + --color: var(--color-214); + --colorHover: var(--color-215); + --colorPress: var(--color-213); + --colorFocus: var(--color-213); + --background: var(--color-224); + --backgroundHover: var(--color-223); + --backgroundPress: var(--color-224); + --backgroundFocus: var(--color-223); + --borderColor: var(--color-222); + --borderColorHover: var(--color-221); + --borderColorFocus: var(--color-220); + --borderColorPress: var(--color-219); + } +} +:root.t_dark .t_green_ProgressIndicator, +:root.t_dark .t_green_SliderThumb, +:root.t_dark .t_green_SwitchThumb, +:root.t_dark .t_green_Tooltip, +:root.t_dark .t_light .t_dark .t_green_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_green_SliderThumb, +:root.t_dark .t_light .t_dark .t_green_SwitchThumb, +:root.t_dark .t_light .t_dark .t_green_Tooltip, +:root.t_light .t_dark .t_green_ProgressIndicator, +:root.t_light .t_dark .t_green_SliderThumb, +:root.t_light .t_dark .t_green_SwitchThumb, +:root.t_light .t_dark .t_green_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_green_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_green_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_green_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_green_Tooltip { + --color: var(--color-154); + --colorHover: var(--color-155); + --colorPress: var(--color-153); + --colorFocus: var(--color-153); + --background: var(--color-164); + --backgroundHover: var(--color-163); + --backgroundPress: var(--color-164); + --backgroundFocus: var(--color-163); + --borderColor: var(--color-162); + --borderColorHover: var(--color-161); + --borderColorFocus: var(--color-160); + --borderColorPress: var(--color-159); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_green_ProgressIndicator, + .t_green_SliderThumb, + .t_green_SwitchThumb, + .t_green_Tooltip, + .t_light .t_dark .t_green_ProgressIndicator, + .t_light .t_dark .t_green_SliderThumb, + .t_light .t_dark .t_green_SwitchThumb, + .t_light .t_dark .t_green_Tooltip { + --color: var(--color-154); + --colorHover: var(--color-155); + --colorPress: var(--color-153); + --colorFocus: var(--color-153); + --background: var(--color-164); + --backgroundHover: var(--color-163); + --backgroundPress: var(--color-164); + --backgroundFocus: var(--color-163); + --borderColor: var(--color-162); + --borderColorHover: var(--color-161); + --borderColorFocus: var(--color-160); + --borderColorPress: var(--color-159); + } +} +:root.t_dark .t_blue_ProgressIndicator, +:root.t_dark .t_blue_SliderThumb, +:root.t_dark .t_blue_SwitchThumb, +:root.t_dark .t_blue_Tooltip, +:root.t_dark .t_light .t_dark .t_blue_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_blue_SliderThumb, +:root.t_dark .t_light .t_dark .t_blue_SwitchThumb, +:root.t_dark .t_light .t_dark .t_blue_Tooltip, +:root.t_light .t_dark .t_blue_ProgressIndicator, +:root.t_light .t_dark .t_blue_SliderThumb, +:root.t_light .t_dark .t_blue_SwitchThumb, +:root.t_light .t_dark .t_blue_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_blue_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_blue_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_blue_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_blue_Tooltip { + --color: var(--color-130); + --colorHover: var(--color-131); + --colorPress: var(--color-129); + --colorFocus: var(--color-129); + --background: var(--color-140); + --backgroundHover: var(--color-139); + --backgroundPress: var(--color-140); + --backgroundFocus: var(--color-139); + --borderColor: var(--color-138); + --borderColorHover: var(--color-137); + --borderColorFocus: var(--color-136); + --borderColorPress: var(--color-135); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_blue_ProgressIndicator, + .t_blue_SliderThumb, + .t_blue_SwitchThumb, + .t_blue_Tooltip, + .t_light .t_dark .t_blue_ProgressIndicator, + .t_light .t_dark .t_blue_SliderThumb, + .t_light .t_dark .t_blue_SwitchThumb, + .t_light .t_dark .t_blue_Tooltip { + --color: var(--color-130); + --colorHover: var(--color-131); + --colorPress: var(--color-129); + --colorFocus: var(--color-129); + --background: var(--color-140); + --backgroundHover: var(--color-139); + --backgroundPress: var(--color-140); + --backgroundFocus: var(--color-139); + --borderColor: var(--color-138); + --borderColorHover: var(--color-137); + --borderColorFocus: var(--color-136); + --borderColorPress: var(--color-135); + } +} +:root.t_dark .t_light .t_dark .t_purple_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_purple_SliderThumb, +:root.t_dark .t_light .t_dark .t_purple_SwitchThumb, +:root.t_dark .t_light .t_dark .t_purple_Tooltip, +:root.t_dark .t_purple_ProgressIndicator, +:root.t_dark .t_purple_SliderThumb, +:root.t_dark .t_purple_SwitchThumb, +:root.t_dark .t_purple_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_purple_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_purple_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_purple_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_purple_Tooltip, +:root.t_light .t_dark .t_purple_ProgressIndicator, +:root.t_light .t_dark .t_purple_SliderThumb, +:root.t_light .t_dark .t_purple_SwitchThumb, +:root.t_light .t_dark .t_purple_Tooltip { + --color: var(--color-190); + --colorHover: var(--color-191); + --colorPress: var(--color-189); + --colorFocus: var(--color-189); + --background: var(--color-200); + --backgroundHover: var(--color-199); + --backgroundPress: var(--color-200); + --backgroundFocus: var(--color-199); + --borderColor: var(--color-198); + --borderColorHover: var(--color-197); + --borderColorFocus: var(--color-196); + --borderColorPress: var(--color-195); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_purple_ProgressIndicator, + .t_light .t_dark .t_purple_SliderThumb, + .t_light .t_dark .t_purple_SwitchThumb, + .t_light .t_dark .t_purple_Tooltip, + .t_purple_ProgressIndicator, + .t_purple_SliderThumb, + .t_purple_SwitchThumb, + .t_purple_Tooltip { + --color: var(--color-190); + --colorHover: var(--color-191); + --colorPress: var(--color-189); + --colorFocus: var(--color-189); + --background: var(--color-200); + --backgroundHover: var(--color-199); + --backgroundPress: var(--color-200); + --backgroundFocus: var(--color-199); + --borderColor: var(--color-198); + --borderColorHover: var(--color-197); + --borderColorFocus: var(--color-196); + --borderColorPress: var(--color-195); + } +} +:root.t_dark .t_light .t_dark .t_pink_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_pink_SliderThumb, +:root.t_dark .t_light .t_dark .t_pink_SwitchThumb, +:root.t_dark .t_light .t_dark .t_pink_Tooltip, +:root.t_dark .t_pink_ProgressIndicator, +:root.t_dark .t_pink_SliderThumb, +:root.t_dark .t_pink_SwitchThumb, +:root.t_dark .t_pink_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_pink_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_pink_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_pink_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_pink_Tooltip, +:root.t_light .t_dark .t_pink_ProgressIndicator, +:root.t_light .t_dark .t_pink_SliderThumb, +:root.t_light .t_dark .t_pink_SwitchThumb, +:root.t_light .t_dark .t_pink_Tooltip { + --color: var(--color-178); + --colorHover: var(--color-179); + --colorPress: var(--color-177); + --colorFocus: var(--color-177); + --background: var(--color-188); + --backgroundHover: var(--color-187); + --backgroundPress: var(--color-188); + --backgroundFocus: var(--color-187); + --borderColor: var(--color-186); + --borderColorHover: var(--color-185); + --borderColorFocus: var(--color-184); + --borderColorPress: var(--color-183); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_pink_ProgressIndicator, + .t_light .t_dark .t_pink_SliderThumb, + .t_light .t_dark .t_pink_SwitchThumb, + .t_light .t_dark .t_pink_Tooltip, + .t_pink_ProgressIndicator, + .t_pink_SliderThumb, + .t_pink_SwitchThumb, + .t_pink_Tooltip { + --color: var(--color-178); + --colorHover: var(--color-179); + --colorPress: var(--color-177); + --colorFocus: var(--color-177); + --background: var(--color-188); + --backgroundHover: var(--color-187); + --backgroundPress: var(--color-188); + --backgroundFocus: var(--color-187); + --borderColor: var(--color-186); + --borderColorHover: var(--color-185); + --borderColorFocus: var(--color-184); + --borderColorPress: var(--color-183); + } +} +:root.t_dark .t_light .t_dark .t_red_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_red_SliderThumb, +:root.t_dark .t_light .t_dark .t_red_SwitchThumb, +:root.t_dark .t_light .t_dark .t_red_Tooltip, +:root.t_dark .t_red_ProgressIndicator, +:root.t_dark .t_red_SliderThumb, +:root.t_dark .t_red_SwitchThumb, +:root.t_dark .t_red_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_red_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_red_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_red_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_red_Tooltip, +:root.t_light .t_dark .t_red_ProgressIndicator, +:root.t_light .t_dark .t_red_SliderThumb, +:root.t_light .t_dark .t_red_SwitchThumb, +:root.t_light .t_dark .t_red_Tooltip { + --color: var(--color-202); + --colorHover: var(--color-203); + --colorPress: var(--color-201); + --colorFocus: var(--color-201); + --background: var(--color-212); + --backgroundHover: var(--color-211); + --backgroundPress: var(--color-212); + --backgroundFocus: var(--color-211); + --borderColor: var(--color-210); + --borderColorHover: var(--color-209); + --borderColorFocus: var(--color-208); + --borderColorPress: var(--color-207); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_red_ProgressIndicator, + .t_light .t_dark .t_red_SliderThumb, + .t_light .t_dark .t_red_SwitchThumb, + .t_light .t_dark .t_red_Tooltip, + .t_red_ProgressIndicator, + .t_red_SliderThumb, + .t_red_SwitchThumb, + .t_red_Tooltip { + --color: var(--color-202); + --colorHover: var(--color-203); + --colorPress: var(--color-201); + --colorFocus: var(--color-201); + --background: var(--color-212); + --backgroundHover: var(--color-211); + --backgroundPress: var(--color-212); + --backgroundFocus: var(--color-211); + --borderColor: var(--color-210); + --borderColorHover: var(--color-209); + --borderColorFocus: var(--color-208); + --borderColorPress: var(--color-207); + } +} +:root.t_dark .t_gray_ProgressIndicator, +:root.t_dark .t_gray_SliderThumb, +:root.t_dark .t_gray_SwitchThumb, +:root.t_dark .t_gray_Tooltip, +:root.t_dark .t_light .t_dark .t_gray_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_gray_SliderThumb, +:root.t_dark .t_light .t_dark .t_gray_SwitchThumb, +:root.t_dark .t_light .t_dark .t_gray_Tooltip, +:root.t_light .t_dark .t_gray_ProgressIndicator, +:root.t_light .t_dark .t_gray_SliderThumb, +:root.t_light .t_dark .t_gray_SwitchThumb, +:root.t_light .t_dark .t_gray_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_gray_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_gray_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_gray_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_gray_Tooltip { + --color: var(--color-142); + --colorHover: var(--color-143); + --colorPress: var(--color-141); + --colorFocus: var(--color-141); + --background: var(--color-152); + --backgroundHover: var(--color-151); + --backgroundPress: var(--color-152); + --backgroundFocus: var(--color-151); + --borderColor: var(--color-150); + --borderColorHover: var(--color-149); + --borderColorFocus: var(--color-148); + --borderColorPress: var(--color-147); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_gray_ProgressIndicator, + .t_gray_SliderThumb, + .t_gray_SwitchThumb, + .t_gray_Tooltip, + .t_light .t_dark .t_gray_ProgressIndicator, + .t_light .t_dark .t_gray_SliderThumb, + .t_light .t_dark .t_gray_SwitchThumb, + .t_light .t_dark .t_gray_Tooltip { + --color: var(--color-142); + --colorHover: var(--color-143); + --colorPress: var(--color-141); + --colorFocus: var(--color-141); + --background: var(--color-152); + --backgroundHover: var(--color-151); + --backgroundPress: var(--color-152); + --backgroundFocus: var(--color-151); + --borderColor: var(--color-150); + --borderColorHover: var(--color-149); + --borderColorFocus: var(--color-148); + --borderColorPress: var(--color-147); + } +} +:root.t_dark .t_light .t_active_ProgressIndicator, +:root.t_dark .t_light .t_active_SliderThumb, +:root.t_dark .t_light .t_active_SwitchThumb, +:root.t_dark .t_light .t_active_Tooltip, +:root.t_dark .t_light .t_dark .t_light .t_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_active_Tooltip, +:root.t_light .t_active_ProgressIndicator, +:root.t_light .t_active_SliderThumb, +:root.t_light .t_active_SwitchThumb, +:root.t_light .t_active_Tooltip, +:root.t_light .t_dark .t_light .t_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_active_SliderThumb, +:root.t_light .t_dark .t_light .t_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_active_Tooltip { + --color: var(--color-10); + --colorHover: var(--color-32); + --colorPress: var(--color-11); + --colorFocus: var(--color-11); + --background: var(--color-18); + --backgroundHover: var(--color-53); + --backgroundPress: var(--color-18); + --backgroundFocus: var(--color-53); + --borderColor: var(--color-16); + --borderColorHover: var(--color-15); + --borderColorFocus: var(--color-14); + --borderColorPress: var(--color-13); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_active_ProgressIndicator, + .t_active_SliderThumb, + .t_active_SwitchThumb, + .t_active_Tooltip, + .t_dark .t_light .t_active_ProgressIndicator, + .t_dark .t_light .t_active_SliderThumb, + .t_dark .t_light .t_active_SwitchThumb, + .t_dark .t_light .t_active_Tooltip { + --color: var(--color-10); + --colorHover: var(--color-32); + --colorPress: var(--color-11); + --colorFocus: var(--color-11); + --background: var(--color-18); + --backgroundHover: var(--color-53); + --backgroundPress: var(--color-18); + --backgroundFocus: var(--color-53); + --borderColor: var(--color-16); + --borderColorHover: var(--color-15); + --borderColorFocus: var(--color-14); + --borderColorPress: var(--color-13); + } +} +:root.t_dark .t_active_ProgressIndicator, +:root.t_dark .t_active_SliderThumb, +:root.t_dark .t_active_SwitchThumb, +:root.t_dark .t_active_Tooltip, +:root.t_dark .t_light .t_dark .t_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_active_Tooltip, +:root.t_light .t_dark .t_active_ProgressIndicator, +:root.t_light .t_dark .t_active_SliderThumb, +:root.t_light .t_dark .t_active_SwitchThumb, +:root.t_light .t_dark .t_active_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_active_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_active_Tooltip { + --color: var(--color-22); + --colorHover: var(--color-23); + --colorPress: var(--color-21); + --colorFocus: var(--color-21); + --background: var(--color-30); + --backgroundHover: var(--color-29); + --backgroundPress: var(--color-30); + --backgroundFocus: var(--color-29); + --borderColor: var(--color-28); + --borderColorHover: var(--color-27); + --borderColorFocus: var(--color-26); + --borderColorPress: var(--color-25); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_active_ProgressIndicator, + .t_active_SliderThumb, + .t_active_SwitchThumb, + .t_active_Tooltip, + .t_light .t_dark .t_active_ProgressIndicator, + .t_light .t_dark .t_active_SliderThumb, + .t_light .t_dark .t_active_SwitchThumb, + .t_light .t_dark .t_active_Tooltip { + --color: var(--color-22); + --colorHover: var(--color-23); + --colorPress: var(--color-21); + --colorFocus: var(--color-21); + --background: var(--color-30); + --backgroundHover: var(--color-29); + --backgroundPress: var(--color-30); + --backgroundFocus: var(--color-29); + --borderColor: var(--color-28); + --borderColorHover: var(--color-27); + --borderColorFocus: var(--color-26); + --borderColorPress: var(--color-25); + } +} +:root.t_dark .t_light .t_dark .t_light .t_orange_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_orange_active_Tooltip, +:root.t_dark .t_light .t_orange_active_ProgressIndicator, +:root.t_dark .t_light .t_orange_active_SliderThumb, +:root.t_dark .t_light .t_orange_active_SwitchThumb, +:root.t_dark .t_light .t_orange_active_Tooltip, +:root.t_light .t_dark .t_light .t_orange_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_orange_active_SliderThumb, +:root.t_light .t_dark .t_light .t_orange_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_orange_active_Tooltip, +:root.t_light .t_orange_active_ProgressIndicator, +:root.t_light .t_orange_active_SliderThumb, +:root.t_light .t_orange_active_SwitchThumb, +:root.t_light .t_orange_active_Tooltip { + --color: var(--color-70); + --colorHover: var(--color-69); + --colorPress: var(--color-71); + --colorFocus: var(--color-71); + --background: var(--color-78); + --backgroundHover: var(--color-173); + --backgroundPress: var(--color-78); + --backgroundFocus: var(--color-173); + --borderColor: var(--color-76); + --borderColorHover: var(--color-75); + --borderColorFocus: var(--color-74); + --borderColorPress: var(--color-73); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_orange_active_ProgressIndicator, + .t_dark .t_light .t_orange_active_SliderThumb, + .t_dark .t_light .t_orange_active_SwitchThumb, + .t_dark .t_light .t_orange_active_Tooltip, + .t_orange_active_ProgressIndicator, + .t_orange_active_SliderThumb, + .t_orange_active_SwitchThumb, + .t_orange_active_Tooltip { + --color: var(--color-70); + --colorHover: var(--color-69); + --colorPress: var(--color-71); + --colorFocus: var(--color-71); + --background: var(--color-78); + --backgroundHover: var(--color-173); + --backgroundPress: var(--color-78); + --backgroundFocus: var(--color-173); + --borderColor: var(--color-76); + --borderColorHover: var(--color-75); + --borderColorFocus: var(--color-74); + --borderColorPress: var(--color-73); + } +} +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_yellow_active_Tooltip, +:root.t_dark .t_light .t_yellow_active_ProgressIndicator, +:root.t_dark .t_light .t_yellow_active_SliderThumb, +:root.t_dark .t_light .t_yellow_active_SwitchThumb, +:root.t_dark .t_light .t_yellow_active_Tooltip, +:root.t_light .t_dark .t_light .t_yellow_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_yellow_active_SliderThumb, +:root.t_light .t_dark .t_light .t_yellow_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_yellow_active_Tooltip, +:root.t_light .t_yellow_active_ProgressIndicator, +:root.t_light .t_yellow_active_SliderThumb, +:root.t_light .t_yellow_active_SwitchThumb, +:root.t_light .t_yellow_active_Tooltip { + --color: var(--color-118); + --colorHover: var(--color-117); + --colorPress: var(--color-119); + --colorFocus: var(--color-119); + --background: var(--color-126); + --backgroundHover: var(--color-221); + --backgroundPress: var(--color-126); + --backgroundFocus: var(--color-221); + --borderColor: var(--color-124); + --borderColorHover: var(--color-123); + --borderColorFocus: var(--color-122); + --borderColorPress: var(--color-121); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_yellow_active_ProgressIndicator, + .t_dark .t_light .t_yellow_active_SliderThumb, + .t_dark .t_light .t_yellow_active_SwitchThumb, + .t_dark .t_light .t_yellow_active_Tooltip, + .t_yellow_active_ProgressIndicator, + .t_yellow_active_SliderThumb, + .t_yellow_active_SwitchThumb, + .t_yellow_active_Tooltip { + --color: var(--color-118); + --colorHover: var(--color-117); + --colorPress: var(--color-119); + --colorFocus: var(--color-119); + --background: var(--color-126); + --backgroundHover: var(--color-221); + --backgroundPress: var(--color-126); + --backgroundFocus: var(--color-221); + --borderColor: var(--color-124); + --borderColorHover: var(--color-123); + --borderColorFocus: var(--color-122); + --borderColorPress: var(--color-121); + } +} +:root.t_dark .t_light .t_dark .t_light .t_green_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_green_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_green_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_green_active_Tooltip, +:root.t_dark .t_light .t_green_active_ProgressIndicator, +:root.t_dark .t_light .t_green_active_SliderThumb, +:root.t_dark .t_light .t_green_active_SwitchThumb, +:root.t_dark .t_light .t_green_active_Tooltip, +:root.t_light .t_dark .t_light .t_green_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_green_active_SliderThumb, +:root.t_light .t_dark .t_light .t_green_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_green_active_Tooltip, +:root.t_light .t_green_active_ProgressIndicator, +:root.t_light .t_green_active_SliderThumb, +:root.t_light .t_green_active_SwitchThumb, +:root.t_light .t_green_active_Tooltip { + --color: var(--color-58); + --colorHover: var(--color-57); + --colorPress: var(--color-59); + --colorFocus: var(--color-59); + --background: var(--color-66); + --backgroundHover: var(--color-161); + --backgroundPress: var(--color-66); + --backgroundFocus: var(--color-161); + --borderColor: var(--color-64); + --borderColorHover: var(--color-63); + --borderColorFocus: var(--color-62); + --borderColorPress: var(--color-61); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_green_active_ProgressIndicator, + .t_dark .t_light .t_green_active_SliderThumb, + .t_dark .t_light .t_green_active_SwitchThumb, + .t_dark .t_light .t_green_active_Tooltip, + .t_green_active_ProgressIndicator, + .t_green_active_SliderThumb, + .t_green_active_SwitchThumb, + .t_green_active_Tooltip { + --color: var(--color-58); + --colorHover: var(--color-57); + --colorPress: var(--color-59); + --colorFocus: var(--color-59); + --background: var(--color-66); + --backgroundHover: var(--color-161); + --backgroundPress: var(--color-66); + --backgroundFocus: var(--color-161); + --borderColor: var(--color-64); + --borderColorHover: var(--color-63); + --borderColorFocus: var(--color-62); + --borderColorPress: var(--color-61); + } +} +:root.t_dark .t_light .t_blue_active_ProgressIndicator, +:root.t_dark .t_light .t_blue_active_SliderThumb, +:root.t_dark .t_light .t_blue_active_SwitchThumb, +:root.t_dark .t_light .t_blue_active_Tooltip, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_blue_active_Tooltip, +:root.t_light .t_blue_active_ProgressIndicator, +:root.t_light .t_blue_active_SliderThumb, +:root.t_light .t_blue_active_SwitchThumb, +:root.t_light .t_blue_active_Tooltip, +:root.t_light .t_dark .t_light .t_blue_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_blue_active_SliderThumb, +:root.t_light .t_dark .t_light .t_blue_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_blue_active_Tooltip { + --color: var(--color-34); + --colorHover: var(--color-33); + --colorPress: var(--color-35); + --colorFocus: var(--color-35); + --background: var(--color-42); + --backgroundHover: var(--color-137); + --backgroundPress: var(--color-42); + --backgroundFocus: var(--color-137); + --borderColor: var(--color-40); + --borderColorHover: var(--color-39); + --borderColorFocus: var(--color-38); + --borderColorPress: var(--color-37); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_blue_active_ProgressIndicator, + .t_blue_active_SliderThumb, + .t_blue_active_SwitchThumb, + .t_blue_active_Tooltip, + .t_dark .t_light .t_blue_active_ProgressIndicator, + .t_dark .t_light .t_blue_active_SliderThumb, + .t_dark .t_light .t_blue_active_SwitchThumb, + .t_dark .t_light .t_blue_active_Tooltip { + --color: var(--color-34); + --colorHover: var(--color-33); + --colorPress: var(--color-35); + --colorFocus: var(--color-35); + --background: var(--color-42); + --backgroundHover: var(--color-137); + --backgroundPress: var(--color-42); + --backgroundFocus: var(--color-137); + --borderColor: var(--color-40); + --borderColorHover: var(--color-39); + --borderColorFocus: var(--color-38); + --borderColorPress: var(--color-37); + } +} +:root.t_dark .t_light .t_dark .t_light .t_purple_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_purple_active_Tooltip, +:root.t_dark .t_light .t_purple_active_ProgressIndicator, +:root.t_dark .t_light .t_purple_active_SliderThumb, +:root.t_dark .t_light .t_purple_active_SwitchThumb, +:root.t_dark .t_light .t_purple_active_Tooltip, +:root.t_light .t_dark .t_light .t_purple_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_purple_active_SliderThumb, +:root.t_light .t_dark .t_light .t_purple_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_purple_active_Tooltip, +:root.t_light .t_purple_active_ProgressIndicator, +:root.t_light .t_purple_active_SliderThumb, +:root.t_light .t_purple_active_SwitchThumb, +:root.t_light .t_purple_active_Tooltip { + --color: var(--color-94); + --colorHover: var(--color-93); + --colorPress: var(--color-95); + --colorFocus: var(--color-95); + --background: var(--color-102); + --backgroundHover: var(--color-197); + --backgroundPress: var(--color-102); + --backgroundFocus: var(--color-197); + --borderColor: var(--color-100); + --borderColorHover: var(--color-99); + --borderColorFocus: var(--color-98); + --borderColorPress: var(--color-97); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_purple_active_ProgressIndicator, + .t_dark .t_light .t_purple_active_SliderThumb, + .t_dark .t_light .t_purple_active_SwitchThumb, + .t_dark .t_light .t_purple_active_Tooltip, + .t_purple_active_ProgressIndicator, + .t_purple_active_SliderThumb, + .t_purple_active_SwitchThumb, + .t_purple_active_Tooltip { + --color: var(--color-94); + --colorHover: var(--color-93); + --colorPress: var(--color-95); + --colorFocus: var(--color-95); + --background: var(--color-102); + --backgroundHover: var(--color-197); + --backgroundPress: var(--color-102); + --backgroundFocus: var(--color-197); + --borderColor: var(--color-100); + --borderColorHover: var(--color-99); + --borderColorFocus: var(--color-98); + --borderColorPress: var(--color-97); + } +} +:root.t_dark .t_light .t_dark .t_light .t_pink_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_pink_active_Tooltip, +:root.t_dark .t_light .t_pink_active_ProgressIndicator, +:root.t_dark .t_light .t_pink_active_SliderThumb, +:root.t_dark .t_light .t_pink_active_SwitchThumb, +:root.t_dark .t_light .t_pink_active_Tooltip, +:root.t_light .t_dark .t_light .t_pink_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_pink_active_SliderThumb, +:root.t_light .t_dark .t_light .t_pink_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_pink_active_Tooltip, +:root.t_light .t_pink_active_ProgressIndicator, +:root.t_light .t_pink_active_SliderThumb, +:root.t_light .t_pink_active_SwitchThumb, +:root.t_light .t_pink_active_Tooltip { + --color: var(--color-82); + --colorHover: var(--color-81); + --colorPress: var(--color-83); + --colorFocus: var(--color-83); + --background: var(--color-90); + --backgroundHover: var(--color-185); + --backgroundPress: var(--color-90); + --backgroundFocus: var(--color-185); + --borderColor: var(--color-88); + --borderColorHover: var(--color-87); + --borderColorFocus: var(--color-86); + --borderColorPress: var(--color-85); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_pink_active_ProgressIndicator, + .t_dark .t_light .t_pink_active_SliderThumb, + .t_dark .t_light .t_pink_active_SwitchThumb, + .t_dark .t_light .t_pink_active_Tooltip, + .t_pink_active_ProgressIndicator, + .t_pink_active_SliderThumb, + .t_pink_active_SwitchThumb, + .t_pink_active_Tooltip { + --color: var(--color-82); + --colorHover: var(--color-81); + --colorPress: var(--color-83); + --colorFocus: var(--color-83); + --background: var(--color-90); + --backgroundHover: var(--color-185); + --backgroundPress: var(--color-90); + --backgroundFocus: var(--color-185); + --borderColor: var(--color-88); + --borderColorHover: var(--color-87); + --borderColorFocus: var(--color-86); + --borderColorPress: var(--color-85); + } +} +:root.t_dark .t_light .t_dark .t_light .t_red_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_red_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_red_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_red_active_Tooltip, +:root.t_dark .t_light .t_red_active_ProgressIndicator, +:root.t_dark .t_light .t_red_active_SliderThumb, +:root.t_dark .t_light .t_red_active_SwitchThumb, +:root.t_dark .t_light .t_red_active_Tooltip, +:root.t_light .t_dark .t_light .t_red_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_red_active_SliderThumb, +:root.t_light .t_dark .t_light .t_red_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_red_active_Tooltip, +:root.t_light .t_red_active_ProgressIndicator, +:root.t_light .t_red_active_SliderThumb, +:root.t_light .t_red_active_SwitchThumb, +:root.t_light .t_red_active_Tooltip { + --color: var(--color-106); + --colorHover: var(--color-105); + --colorPress: var(--color-107); + --colorFocus: var(--color-107); + --background: var(--color-114); + --backgroundHover: var(--color-209); + --backgroundPress: var(--color-114); + --backgroundFocus: var(--color-209); + --borderColor: var(--color-112); + --borderColorHover: var(--color-111); + --borderColorFocus: var(--color-110); + --borderColorPress: var(--color-109); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_red_active_ProgressIndicator, + .t_dark .t_light .t_red_active_SliderThumb, + .t_dark .t_light .t_red_active_SwitchThumb, + .t_dark .t_light .t_red_active_Tooltip, + .t_red_active_ProgressIndicator, + .t_red_active_SliderThumb, + .t_red_active_SwitchThumb, + .t_red_active_Tooltip { + --color: var(--color-106); + --colorHover: var(--color-105); + --colorPress: var(--color-107); + --colorFocus: var(--color-107); + --background: var(--color-114); + --backgroundHover: var(--color-209); + --backgroundPress: var(--color-114); + --backgroundFocus: var(--color-209); + --borderColor: var(--color-112); + --borderColorHover: var(--color-111); + --borderColorFocus: var(--color-110); + --borderColorPress: var(--color-109); + } +} +:root.t_dark .t_light .t_dark .t_light .t_gray_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_light .t_gray_active_Tooltip, +:root.t_dark .t_light .t_gray_active_ProgressIndicator, +:root.t_dark .t_light .t_gray_active_SliderThumb, +:root.t_dark .t_light .t_gray_active_SwitchThumb, +:root.t_dark .t_light .t_gray_active_Tooltip, +:root.t_light .t_dark .t_light .t_gray_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_gray_active_SliderThumb, +:root.t_light .t_dark .t_light .t_gray_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_gray_active_Tooltip, +:root.t_light .t_gray_active_ProgressIndicator, +:root.t_light .t_gray_active_SliderThumb, +:root.t_light .t_gray_active_SwitchThumb, +:root.t_light .t_gray_active_Tooltip { + --color: var(--color-46); + --colorHover: var(--color-45); + --colorPress: var(--color-47); + --colorFocus: var(--color-47); + --background: var(--color-54); + --backgroundHover: var(--color-53); + --backgroundPress: var(--color-54); + --backgroundFocus: var(--color-53); + --borderColor: var(--color-52); + --borderColorHover: var(--color-51); + --borderColorFocus: var(--color-50); + --borderColorPress: var(--color-49); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_dark .t_light .t_gray_active_ProgressIndicator, + .t_dark .t_light .t_gray_active_SliderThumb, + .t_dark .t_light .t_gray_active_SwitchThumb, + .t_dark .t_light .t_gray_active_Tooltip, + .t_gray_active_ProgressIndicator, + .t_gray_active_SliderThumb, + .t_gray_active_SwitchThumb, + .t_gray_active_Tooltip { + --color: var(--color-46); + --colorHover: var(--color-45); + --colorPress: var(--color-47); + --colorFocus: var(--color-47); + --background: var(--color-54); + --backgroundHover: var(--color-53); + --backgroundPress: var(--color-54); + --backgroundFocus: var(--color-53); + --borderColor: var(--color-52); + --borderColorHover: var(--color-51); + --borderColorFocus: var(--color-50); + --borderColorPress: var(--color-49); + } +} +:root.t_dark .t_light .t_dark .t_orange_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_orange_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_orange_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_orange_active_Tooltip, +:root.t_dark .t_orange_active_ProgressIndicator, +:root.t_dark .t_orange_active_SliderThumb, +:root.t_dark .t_orange_active_SwitchThumb, +:root.t_dark .t_orange_active_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_orange_active_Tooltip, +:root.t_light .t_dark .t_orange_active_ProgressIndicator, +:root.t_light .t_dark .t_orange_active_SliderThumb, +:root.t_light .t_dark .t_orange_active_SwitchThumb, +:root.t_light .t_dark .t_orange_active_Tooltip { + --color: var(--color-166); + --colorHover: var(--color-167); + --colorPress: var(--color-165); + --colorFocus: var(--color-165); + --background: var(--color-174); + --backgroundHover: var(--color-173); + --backgroundPress: var(--color-174); + --backgroundFocus: var(--color-173); + --borderColor: var(--color-172); + --borderColorHover: var(--color-171); + --borderColorFocus: var(--color-170); + --borderColorPress: var(--color-169); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_orange_active_ProgressIndicator, + .t_light .t_dark .t_orange_active_SliderThumb, + .t_light .t_dark .t_orange_active_SwitchThumb, + .t_light .t_dark .t_orange_active_Tooltip, + .t_orange_active_ProgressIndicator, + .t_orange_active_SliderThumb, + .t_orange_active_SwitchThumb, + .t_orange_active_Tooltip { + --color: var(--color-166); + --colorHover: var(--color-167); + --colorPress: var(--color-165); + --colorFocus: var(--color-165); + --background: var(--color-174); + --backgroundHover: var(--color-173); + --backgroundPress: var(--color-174); + --backgroundFocus: var(--color-173); + --borderColor: var(--color-172); + --borderColorHover: var(--color-171); + --borderColorFocus: var(--color-170); + --borderColorPress: var(--color-169); + } +} +:root.t_dark .t_light .t_dark .t_yellow_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_yellow_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_yellow_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_yellow_active_Tooltip, +:root.t_dark .t_yellow_active_ProgressIndicator, +:root.t_dark .t_yellow_active_SliderThumb, +:root.t_dark .t_yellow_active_SwitchThumb, +:root.t_dark .t_yellow_active_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_yellow_active_Tooltip, +:root.t_light .t_dark .t_yellow_active_ProgressIndicator, +:root.t_light .t_dark .t_yellow_active_SliderThumb, +:root.t_light .t_dark .t_yellow_active_SwitchThumb, +:root.t_light .t_dark .t_yellow_active_Tooltip { + --color: var(--color-214); + --colorHover: var(--color-215); + --colorPress: var(--color-213); + --colorFocus: var(--color-213); + --background: var(--color-222); + --backgroundHover: var(--color-221); + --backgroundPress: var(--color-222); + --backgroundFocus: var(--color-221); + --borderColor: var(--color-220); + --borderColorHover: var(--color-219); + --borderColorFocus: var(--color-218); + --borderColorPress: var(--color-217); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_yellow_active_ProgressIndicator, + .t_light .t_dark .t_yellow_active_SliderThumb, + .t_light .t_dark .t_yellow_active_SwitchThumb, + .t_light .t_dark .t_yellow_active_Tooltip, + .t_yellow_active_ProgressIndicator, + .t_yellow_active_SliderThumb, + .t_yellow_active_SwitchThumb, + .t_yellow_active_Tooltip { + --color: var(--color-214); + --colorHover: var(--color-215); + --colorPress: var(--color-213); + --colorFocus: var(--color-213); + --background: var(--color-222); + --backgroundHover: var(--color-221); + --backgroundPress: var(--color-222); + --backgroundFocus: var(--color-221); + --borderColor: var(--color-220); + --borderColorHover: var(--color-219); + --borderColorFocus: var(--color-218); + --borderColorPress: var(--color-217); + } +} +:root.t_dark .t_green_active_ProgressIndicator, +:root.t_dark .t_green_active_SliderThumb, +:root.t_dark .t_green_active_SwitchThumb, +:root.t_dark .t_green_active_Tooltip, +:root.t_dark .t_light .t_dark .t_green_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_green_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_green_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_green_active_Tooltip, +:root.t_light .t_dark .t_green_active_ProgressIndicator, +:root.t_light .t_dark .t_green_active_SliderThumb, +:root.t_light .t_dark .t_green_active_SwitchThumb, +:root.t_light .t_dark .t_green_active_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_green_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_green_active_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_green_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_green_active_Tooltip { + --color: var(--color-154); + --colorHover: var(--color-155); + --colorPress: var(--color-153); + --colorFocus: var(--color-153); + --background: var(--color-162); + --backgroundHover: var(--color-161); + --backgroundPress: var(--color-162); + --backgroundFocus: var(--color-161); + --borderColor: var(--color-160); + --borderColorHover: var(--color-159); + --borderColorFocus: var(--color-158); + --borderColorPress: var(--color-157); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_green_active_ProgressIndicator, + .t_green_active_SliderThumb, + .t_green_active_SwitchThumb, + .t_green_active_Tooltip, + .t_light .t_dark .t_green_active_ProgressIndicator, + .t_light .t_dark .t_green_active_SliderThumb, + .t_light .t_dark .t_green_active_SwitchThumb, + .t_light .t_dark .t_green_active_Tooltip { + --color: var(--color-154); + --colorHover: var(--color-155); + --colorPress: var(--color-153); + --colorFocus: var(--color-153); + --background: var(--color-162); + --backgroundHover: var(--color-161); + --backgroundPress: var(--color-162); + --backgroundFocus: var(--color-161); + --borderColor: var(--color-160); + --borderColorHover: var(--color-159); + --borderColorFocus: var(--color-158); + --borderColorPress: var(--color-157); + } +} +:root.t_dark .t_blue_active_ProgressIndicator, +:root.t_dark .t_blue_active_SliderThumb, +:root.t_dark .t_blue_active_SwitchThumb, +:root.t_dark .t_blue_active_Tooltip, +:root.t_dark .t_light .t_dark .t_blue_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_blue_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_blue_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_blue_active_Tooltip, +:root.t_light .t_dark .t_blue_active_ProgressIndicator, +:root.t_light .t_dark .t_blue_active_SliderThumb, +:root.t_light .t_dark .t_blue_active_SwitchThumb, +:root.t_light .t_dark .t_blue_active_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_blue_active_Tooltip { + --color: var(--color-130); + --colorHover: var(--color-131); + --colorPress: var(--color-129); + --colorFocus: var(--color-129); + --background: var(--color-138); + --backgroundHover: var(--color-137); + --backgroundPress: var(--color-138); + --backgroundFocus: var(--color-137); + --borderColor: var(--color-136); + --borderColorHover: var(--color-135); + --borderColorFocus: var(--color-134); + --borderColorPress: var(--color-133); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_blue_active_ProgressIndicator, + .t_blue_active_SliderThumb, + .t_blue_active_SwitchThumb, + .t_blue_active_Tooltip, + .t_light .t_dark .t_blue_active_ProgressIndicator, + .t_light .t_dark .t_blue_active_SliderThumb, + .t_light .t_dark .t_blue_active_SwitchThumb, + .t_light .t_dark .t_blue_active_Tooltip { + --color: var(--color-130); + --colorHover: var(--color-131); + --colorPress: var(--color-129); + --colorFocus: var(--color-129); + --background: var(--color-138); + --backgroundHover: var(--color-137); + --backgroundPress: var(--color-138); + --backgroundFocus: var(--color-137); + --borderColor: var(--color-136); + --borderColorHover: var(--color-135); + --borderColorFocus: var(--color-134); + --borderColorPress: var(--color-133); + } +} +:root.t_dark .t_light .t_dark .t_purple_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_purple_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_purple_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_purple_active_Tooltip, +:root.t_dark .t_purple_active_ProgressIndicator, +:root.t_dark .t_purple_active_SliderThumb, +:root.t_dark .t_purple_active_SwitchThumb, +:root.t_dark .t_purple_active_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_purple_active_Tooltip, +:root.t_light .t_dark .t_purple_active_ProgressIndicator, +:root.t_light .t_dark .t_purple_active_SliderThumb, +:root.t_light .t_dark .t_purple_active_SwitchThumb, +:root.t_light .t_dark .t_purple_active_Tooltip { + --color: var(--color-190); + --colorHover: var(--color-191); + --colorPress: var(--color-189); + --colorFocus: var(--color-189); + --background: var(--color-198); + --backgroundHover: var(--color-197); + --backgroundPress: var(--color-198); + --backgroundFocus: var(--color-197); + --borderColor: var(--color-196); + --borderColorHover: var(--color-195); + --borderColorFocus: var(--color-194); + --borderColorPress: var(--color-193); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_purple_active_ProgressIndicator, + .t_light .t_dark .t_purple_active_SliderThumb, + .t_light .t_dark .t_purple_active_SwitchThumb, + .t_light .t_dark .t_purple_active_Tooltip, + .t_purple_active_ProgressIndicator, + .t_purple_active_SliderThumb, + .t_purple_active_SwitchThumb, + .t_purple_active_Tooltip { + --color: var(--color-190); + --colorHover: var(--color-191); + --colorPress: var(--color-189); + --colorFocus: var(--color-189); + --background: var(--color-198); + --backgroundHover: var(--color-197); + --backgroundPress: var(--color-198); + --backgroundFocus: var(--color-197); + --borderColor: var(--color-196); + --borderColorHover: var(--color-195); + --borderColorFocus: var(--color-194); + --borderColorPress: var(--color-193); + } +} +:root.t_dark .t_light .t_dark .t_pink_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_pink_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_pink_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_pink_active_Tooltip, +:root.t_dark .t_pink_active_ProgressIndicator, +:root.t_dark .t_pink_active_SliderThumb, +:root.t_dark .t_pink_active_SwitchThumb, +:root.t_dark .t_pink_active_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_pink_active_Tooltip, +:root.t_light .t_dark .t_pink_active_ProgressIndicator, +:root.t_light .t_dark .t_pink_active_SliderThumb, +:root.t_light .t_dark .t_pink_active_SwitchThumb, +:root.t_light .t_dark .t_pink_active_Tooltip { + --color: var(--color-178); + --colorHover: var(--color-179); + --colorPress: var(--color-177); + --colorFocus: var(--color-177); + --background: var(--color-186); + --backgroundHover: var(--color-185); + --backgroundPress: var(--color-186); + --backgroundFocus: var(--color-185); + --borderColor: var(--color-184); + --borderColorHover: var(--color-183); + --borderColorFocus: var(--color-182); + --borderColorPress: var(--color-181); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_pink_active_ProgressIndicator, + .t_light .t_dark .t_pink_active_SliderThumb, + .t_light .t_dark .t_pink_active_SwitchThumb, + .t_light .t_dark .t_pink_active_Tooltip, + .t_pink_active_ProgressIndicator, + .t_pink_active_SliderThumb, + .t_pink_active_SwitchThumb, + .t_pink_active_Tooltip { + --color: var(--color-178); + --colorHover: var(--color-179); + --colorPress: var(--color-177); + --colorFocus: var(--color-177); + --background: var(--color-186); + --backgroundHover: var(--color-185); + --backgroundPress: var(--color-186); + --backgroundFocus: var(--color-185); + --borderColor: var(--color-184); + --borderColorHover: var(--color-183); + --borderColorFocus: var(--color-182); + --borderColorPress: var(--color-181); + } +} +:root.t_dark .t_light .t_dark .t_red_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_red_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_red_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_red_active_Tooltip, +:root.t_dark .t_red_active_ProgressIndicator, +:root.t_dark .t_red_active_SliderThumb, +:root.t_dark .t_red_active_SwitchThumb, +:root.t_dark .t_red_active_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_red_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_red_active_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_red_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_red_active_Tooltip, +:root.t_light .t_dark .t_red_active_ProgressIndicator, +:root.t_light .t_dark .t_red_active_SliderThumb, +:root.t_light .t_dark .t_red_active_SwitchThumb, +:root.t_light .t_dark .t_red_active_Tooltip { + --color: var(--color-202); + --colorHover: var(--color-203); + --colorPress: var(--color-201); + --colorFocus: var(--color-201); + --background: var(--color-210); + --backgroundHover: var(--color-209); + --backgroundPress: var(--color-210); + --backgroundFocus: var(--color-209); + --borderColor: var(--color-208); + --borderColorHover: var(--color-207); + --borderColorFocus: var(--color-206); + --borderColorPress: var(--color-205); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_light .t_dark .t_red_active_ProgressIndicator, + .t_light .t_dark .t_red_active_SliderThumb, + .t_light .t_dark .t_red_active_SwitchThumb, + .t_light .t_dark .t_red_active_Tooltip, + .t_red_active_ProgressIndicator, + .t_red_active_SliderThumb, + .t_red_active_SwitchThumb, + .t_red_active_Tooltip { + --color: var(--color-202); + --colorHover: var(--color-203); + --colorPress: var(--color-201); + --colorFocus: var(--color-201); + --background: var(--color-210); + --backgroundHover: var(--color-209); + --backgroundPress: var(--color-210); + --backgroundFocus: var(--color-209); + --borderColor: var(--color-208); + --borderColorHover: var(--color-207); + --borderColorFocus: var(--color-206); + --borderColorPress: var(--color-205); + } +} +:root.t_dark .t_gray_active_ProgressIndicator, +:root.t_dark .t_gray_active_SliderThumb, +:root.t_dark .t_gray_active_SwitchThumb, +:root.t_dark .t_gray_active_Tooltip, +:root.t_dark .t_light .t_dark .t_gray_active_ProgressIndicator, +:root.t_dark .t_light .t_dark .t_gray_active_SliderThumb, +:root.t_dark .t_light .t_dark .t_gray_active_SwitchThumb, +:root.t_dark .t_light .t_dark .t_gray_active_Tooltip, +:root.t_light .t_dark .t_gray_active_ProgressIndicator, +:root.t_light .t_dark .t_gray_active_SliderThumb, +:root.t_light .t_dark .t_gray_active_SwitchThumb, +:root.t_light .t_dark .t_gray_active_Tooltip, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_ProgressIndicator, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_SliderThumb, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_SwitchThumb, +:root.t_light .t_dark .t_light .t_dark .t_gray_active_Tooltip { + --color: var(--color-142); + --colorHover: var(--color-143); + --colorPress: var(--color-141); + --colorFocus: var(--color-141); + --background: var(--color-150); + --backgroundHover: var(--color-149); + --backgroundPress: var(--color-150); + --backgroundFocus: var(--color-149); + --borderColor: var(--color-148); + --borderColorHover: var(--color-147); + --borderColorFocus: var(--color-146); + --borderColorPress: var(--color-145); +} +@media (prefers-color-scheme: dark) { + body { + background: var(--background); + color: var(--color); + } + .t_gray_active_ProgressIndicator, + .t_gray_active_SliderThumb, + .t_gray_active_SwitchThumb, + .t_gray_active_Tooltip, + .t_light .t_dark .t_gray_active_ProgressIndicator, + .t_light .t_dark .t_gray_active_SliderThumb, + .t_light .t_dark .t_gray_active_SwitchThumb, + .t_light .t_dark .t_gray_active_Tooltip { + --color: var(--color-142); + --colorHover: var(--color-143); + --colorPress: var(--color-141); + --colorFocus: var(--color-141); + --background: var(--color-150); + --backgroundHover: var(--color-149); + --backgroundPress: var(--color-150); + --backgroundFocus: var(--color-149); + --borderColor: var(--color-148); + --borderColorHover: var(--color-147); + --borderColorFocus: var(--color-146); + --borderColorPress: var(--color-145); + } +} +:root .t_main { + --accentBackground: var(--color-132); + --accentColor: var(--color-36); + --background0: var(--color-5); + --background025: var(--color-8); + --background05: var(--color-7); + --background075: var(--color-6); + --color1: var(--color-21); + --color2: var(--color-22); + --color3: var(--color-23); + --color4: var(--color-24); + --color5: var(--color-25); + --color6: var(--color-26); + --color7: var(--color-27); + --color8: var(--color-28); + --color9: var(--color-29); + --color10: var(--color-30); + --color11: var(--color-31); + --color12: var(--color-32); + --color0: var(--color-1); + --color025: var(--color-4); + --color05: var(--color-3); + --color075: var(--color-2); + --background: #0a0a12; + --backgroundHover: var(--color-22); + --backgroundPress: var(--color-6); + --backgroundFocus: var(--color-6); + --borderColor: var(--color-24); + --borderColorHover: var(--color-25); + --borderColorPress: var(--color-23); + --borderColorFocus: var(--color-24); + --color: var(--color-32); + --colorHover: var(--color-31); + --colorPress: var(--color-32); + --colorFocus: var(--color-31); + --colorTransparent: var(--color-1); + --placeholderColor: var(--color-29); + --outlineColor: var(--color-4); + --blue1: var(--color-129); + --blue2: var(--color-130); + --blue3: var(--color-131); + --blue4: var(--color-132); + --blue5: var(--color-133); + --blue6: var(--color-134); + --blue7: var(--color-135); + --blue8: var(--color-136); + --blue9: var(--color-137); + --blue10: var(--color-138); + --blue11: var(--color-139); + --blue12: var(--color-140); + --gray1: var(--color-141); + --gray2: var(--color-142); + --gray3: var(--color-143); + --gray4: var(--color-144); + --gray5: var(--color-145); + --gray6: var(--color-146); + --gray7: var(--color-147); + --gray8: var(--color-148); + --gray9: var(--color-149); + --gray10: var(--color-150); + --gray11: var(--color-151); + --gray12: var(--color-152); + --green1: var(--color-153); + --green2: var(--color-154); + --green3: var(--color-155); + --green4: var(--color-156); + --green5: var(--color-157); + --green6: var(--color-158); + --green7: var(--color-159); + --green8: var(--color-160); + --green9: var(--color-161); + --green10: var(--color-162); + --green11: var(--color-163); + --green12: var(--color-164); + --orange1: var(--color-165); + --orange2: var(--color-166); + --orange3: var(--color-167); + --orange4: var(--color-168); + --orange5: var(--color-169); + --orange6: var(--color-170); + --orange7: var(--color-171); + --orange8: var(--color-172); + --orange9: var(--color-173); + --orange10: var(--color-174); + --orange11: var(--color-175); + --orange12: var(--color-176); + --pink1: var(--color-177); + --pink2: var(--color-178); + --pink3: var(--color-179); + --pink4: var(--color-180); + --pink5: var(--color-181); + --pink6: var(--color-182); + --pink7: var(--color-183); + --pink8: var(--color-184); + --pink9: var(--color-185); + --pink10: var(--color-186); + --pink11: var(--color-187); + --pink12: var(--color-188); + --purple1: var(--color-189); + --purple2: var(--color-190); + --purple3: var(--color-191); + --purple4: var(--color-192); + --purple5: var(--color-193); + --purple6: var(--color-194); + --purple7: var(--color-195); + --purple8: var(--color-196); + --purple9: var(--color-197); + --purple10: var(--color-198); + --purple11: var(--color-199); + --purple12: var(--color-200); + --red1: var(--color-201); + --red2: var(--color-202); + --red3: var(--color-203); + --red4: var(--color-204); + --red5: var(--color-205); + --red6: var(--color-206); + --red7: var(--color-207); + --red8: var(--color-208); + --red9: var(--color-209); + --red10: var(--color-210); + --red11: var(--color-211); + --red12: var(--color-212); + --yellow1: var(--color-213); + --yellow2: var(--color-214); + --yellow3: var(--color-215); + --yellow4: var(--color-216); + --yellow5: var(--color-217); + --yellow6: var(--color-218); + --yellow7: var(--color-219); + --yellow8: var(--color-220); + --yellow9: var(--color-221); + --yellow10: var(--color-222); + --yellow11: var(--color-223); + --yellow12: var(--color-224); + --shadowColor: rgba(0, 0, 0, 0.3); + --shadowColorHover: rgba(0, 0, 0, 0.3); + --shadowColorPress: rgba(0, 0, 0, 0.2); + --shadowColorFocus: rgba(0, 0, 0, 0.2); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_main { + --accentBackground: var(--color-132); + --accentColor: var(--color-36); + --background0: var(--color-5); + --background025: var(--color-8); + --background05: var(--color-7); + --background075: var(--color-6); + --color1: var(--color-21); + --color2: var(--color-22); + --color3: var(--color-23); + --color4: var(--color-24); + --color5: var(--color-25); + --color6: var(--color-26); + --color7: var(--color-27); + --color8: var(--color-28); + --color9: var(--color-29); + --color10: var(--color-30); + --color11: var(--color-31); + --color12: var(--color-32); + --color0: var(--color-1); + --color025: var(--color-4); + --color05: var(--color-3); + --color075: var(--color-2); + --background: #0a0a12; + --backgroundHover: var(--color-22); + --backgroundPress: var(--color-6); + --backgroundFocus: var(--color-6); + --borderColor: var(--color-24); + --borderColorHover: var(--color-25); + --borderColorPress: var(--color-23); + --borderColorFocus: var(--color-24); + --color: var(--color-32); + --colorHover: var(--color-31); + --colorPress: var(--color-32); + --colorFocus: var(--color-31); + --colorTransparent: var(--color-1); + --placeholderColor: var(--color-29); + --outlineColor: var(--color-4); + --blue1: var(--color-129); + --blue2: var(--color-130); + --blue3: var(--color-131); + --blue4: var(--color-132); + --blue5: var(--color-133); + --blue6: var(--color-134); + --blue7: var(--color-135); + --blue8: var(--color-136); + --blue9: var(--color-137); + --blue10: var(--color-138); + --blue11: var(--color-139); + --blue12: var(--color-140); + --gray1: var(--color-141); + --gray2: var(--color-142); + --gray3: var(--color-143); + --gray4: var(--color-144); + --gray5: var(--color-145); + --gray6: var(--color-146); + --gray7: var(--color-147); + --gray8: var(--color-148); + --gray9: var(--color-149); + --gray10: var(--color-150); + --gray11: var(--color-151); + --gray12: var(--color-152); + --green1: var(--color-153); + --green2: var(--color-154); + --green3: var(--color-155); + --green4: var(--color-156); + --green5: var(--color-157); + --green6: var(--color-158); + --green7: var(--color-159); + --green8: var(--color-160); + --green9: var(--color-161); + --green10: var(--color-162); + --green11: var(--color-163); + --green12: var(--color-164); + --orange1: var(--color-165); + --orange2: var(--color-166); + --orange3: var(--color-167); + --orange4: var(--color-168); + --orange5: var(--color-169); + --orange6: var(--color-170); + --orange7: var(--color-171); + --orange8: var(--color-172); + --orange9: var(--color-173); + --orange10: var(--color-174); + --orange11: var(--color-175); + --orange12: var(--color-176); + --pink1: var(--color-177); + --pink2: var(--color-178); + --pink3: var(--color-179); + --pink4: var(--color-180); + --pink5: var(--color-181); + --pink6: var(--color-182); + --pink7: var(--color-183); + --pink8: var(--color-184); + --pink9: var(--color-185); + --pink10: var(--color-186); + --pink11: var(--color-187); + --pink12: var(--color-188); + --purple1: var(--color-189); + --purple2: var(--color-190); + --purple3: var(--color-191); + --purple4: var(--color-192); + --purple5: var(--color-193); + --purple6: var(--color-194); + --purple7: var(--color-195); + --purple8: var(--color-196); + --purple9: var(--color-197); + --purple10: var(--color-198); + --purple11: var(--color-199); + --purple12: var(--color-200); + --red1: var(--color-201); + --red2: var(--color-202); + --red3: var(--color-203); + --red4: var(--color-204); + --red5: var(--color-205); + --red6: var(--color-206); + --red7: var(--color-207); + --red8: var(--color-208); + --red9: var(--color-209); + --red10: var(--color-210); + --red11: var(--color-211); + --red12: var(--color-212); + --yellow1: var(--color-213); + --yellow2: var(--color-214); + --yellow3: var(--color-215); + --yellow4: var(--color-216); + --yellow5: var(--color-217); + --yellow6: var(--color-218); + --yellow7: var(--color-219); + --yellow8: var(--color-220); + --yellow9: var(--color-221); + --yellow10: var(--color-222); + --yellow11: var(--color-223); + --yellow12: var(--color-224); + --shadowColor: rgba(0, 0, 0, 0.3); + --shadowColorHover: rgba(0, 0, 0, 0.3); + --shadowColorPress: rgba(0, 0, 0, 0.2); + --shadowColorFocus: rgba(0, 0, 0, 0.2); + } +} +.t_main ::selection { + background: var(--color5); + color: var(--color11); +} +:root .t_blue { + --accentBackground: var(--color-132); + --accentColor: var(--color-36); + --background0: var(--color-5); + --background025: var(--color-8); + --background05: var(--color-7); + --background075: var(--color-6); + --color1: var(--color-21); + --color2: var(--color-22); + --color3: var(--color-23); + --color4: var(--color-24); + --color5: var(--color-25); + --color6: var(--color-26); + --color7: var(--color-27); + --color8: var(--color-28); + --color9: var(--color-29); + --color10: var(--color-30); + --color11: var(--color-31); + --color12: var(--color-32); + --color0: var(--color-1); + --color025: var(--color-4); + --color05: var(--color-3); + --color075: var(--color-2); + --background: #0d0a12; + --backgroundHover: var(--color-22); + --backgroundPress: var(--color-6); + --backgroundFocus: var(--color-6); + --borderColor: var(--color-24); + --borderColorHover: var(--color-25); + --borderColorPress: var(--color-23); + --borderColorFocus: var(--color-24); + --color: var(--color-32); + --colorHover: var(--color-31); + --colorPress: var(--color-32); + --colorFocus: var(--color-31); + --colorTransparent: var(--color-1); + --placeholderColor: var(--color-29); + --outlineColor: var(--color-4); + --blue1: var(--color-129); + --blue2: var(--color-130); + --blue3: var(--color-131); + --blue4: var(--color-132); + --blue5: var(--color-133); + --blue6: var(--color-134); + --blue7: var(--color-135); + --blue8: var(--color-136); + --blue9: var(--color-137); + --blue10: var(--color-138); + --blue11: var(--color-139); + --blue12: var(--color-140); + --gray1: var(--color-141); + --gray2: var(--color-142); + --gray3: var(--color-143); + --gray4: var(--color-144); + --gray5: var(--color-145); + --gray6: var(--color-146); + --gray7: var(--color-147); + --gray8: var(--color-148); + --gray9: var(--color-149); + --gray10: var(--color-150); + --gray11: var(--color-151); + --gray12: var(--color-152); + --green1: var(--color-153); + --green2: var(--color-154); + --green3: var(--color-155); + --green4: var(--color-156); + --green5: var(--color-157); + --green6: var(--color-158); + --green7: var(--color-159); + --green8: var(--color-160); + --green9: var(--color-161); + --green10: var(--color-162); + --green11: var(--color-163); + --green12: var(--color-164); + --orange1: var(--color-165); + --orange2: var(--color-166); + --orange3: var(--color-167); + --orange4: var(--color-168); + --orange5: var(--color-169); + --orange6: var(--color-170); + --orange7: var(--color-171); + --orange8: var(--color-172); + --orange9: var(--color-173); + --orange10: var(--color-174); + --orange11: var(--color-175); + --orange12: var(--color-176); + --pink1: var(--color-177); + --pink2: var(--color-178); + --pink3: var(--color-179); + --pink4: var(--color-180); + --pink5: var(--color-181); + --pink6: var(--color-182); + --pink7: var(--color-183); + --pink8: var(--color-184); + --pink9: var(--color-185); + --pink10: var(--color-186); + --pink11: var(--color-187); + --pink12: var(--color-188); + --purple1: var(--color-189); + --purple2: var(--color-190); + --purple3: var(--color-191); + --purple4: var(--color-192); + --purple5: var(--color-193); + --purple6: var(--color-194); + --purple7: var(--color-195); + --purple8: var(--color-196); + --purple9: var(--color-197); + --purple10: var(--color-198); + --purple11: var(--color-199); + --purple12: var(--color-200); + --red1: var(--color-201); + --red2: var(--color-202); + --red3: var(--color-203); + --red4: var(--color-204); + --red5: var(--color-205); + --red6: var(--color-206); + --red7: var(--color-207); + --red8: var(--color-208); + --red9: var(--color-209); + --red10: var(--color-210); + --red11: var(--color-211); + --red12: var(--color-212); + --yellow1: var(--color-213); + --yellow2: var(--color-214); + --yellow3: var(--color-215); + --yellow4: var(--color-216); + --yellow5: var(--color-217); + --yellow6: var(--color-218); + --yellow7: var(--color-219); + --yellow8: var(--color-220); + --yellow9: var(--color-221); + --yellow10: var(--color-222); + --yellow11: var(--color-223); + --yellow12: var(--color-224); + --shadowColor: rgba(0, 0, 0, 0.3); + --shadowColorHover: rgba(0, 0, 0, 0.3); + --shadowColorPress: rgba(0, 0, 0, 0.2); + --shadowColorFocus: rgba(0, 0, 0, 0.2); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_blue { + --accentBackground: var(--color-132); + --accentColor: var(--color-36); + --background0: var(--color-5); + --background025: var(--color-8); + --background05: var(--color-7); + --background075: var(--color-6); + --color1: var(--color-21); + --color2: var(--color-22); + --color3: var(--color-23); + --color4: var(--color-24); + --color5: var(--color-25); + --color6: var(--color-26); + --color7: var(--color-27); + --color8: var(--color-28); + --color9: var(--color-29); + --color10: var(--color-30); + --color11: var(--color-31); + --color12: var(--color-32); + --color0: var(--color-1); + --color025: var(--color-4); + --color05: var(--color-3); + --color075: var(--color-2); + --background: #0d0a12; + --backgroundHover: var(--color-22); + --backgroundPress: var(--color-6); + --backgroundFocus: var(--color-6); + --borderColor: var(--color-24); + --borderColorHover: var(--color-25); + --borderColorPress: var(--color-23); + --borderColorFocus: var(--color-24); + --color: var(--color-32); + --colorHover: var(--color-31); + --colorPress: var(--color-32); + --colorFocus: var(--color-31); + --colorTransparent: var(--color-1); + --placeholderColor: var(--color-29); + --outlineColor: var(--color-4); + --blue1: var(--color-129); + --blue2: var(--color-130); + --blue3: var(--color-131); + --blue4: var(--color-132); + --blue5: var(--color-133); + --blue6: var(--color-134); + --blue7: var(--color-135); + --blue8: var(--color-136); + --blue9: var(--color-137); + --blue10: var(--color-138); + --blue11: var(--color-139); + --blue12: var(--color-140); + --gray1: var(--color-141); + --gray2: var(--color-142); + --gray3: var(--color-143); + --gray4: var(--color-144); + --gray5: var(--color-145); + --gray6: var(--color-146); + --gray7: var(--color-147); + --gray8: var(--color-148); + --gray9: var(--color-149); + --gray10: var(--color-150); + --gray11: var(--color-151); + --gray12: var(--color-152); + --green1: var(--color-153); + --green2: var(--color-154); + --green3: var(--color-155); + --green4: var(--color-156); + --green5: var(--color-157); + --green6: var(--color-158); + --green7: var(--color-159); + --green8: var(--color-160); + --green9: var(--color-161); + --green10: var(--color-162); + --green11: var(--color-163); + --green12: var(--color-164); + --orange1: var(--color-165); + --orange2: var(--color-166); + --orange3: var(--color-167); + --orange4: var(--color-168); + --orange5: var(--color-169); + --orange6: var(--color-170); + --orange7: var(--color-171); + --orange8: var(--color-172); + --orange9: var(--color-173); + --orange10: var(--color-174); + --orange11: var(--color-175); + --orange12: var(--color-176); + --pink1: var(--color-177); + --pink2: var(--color-178); + --pink3: var(--color-179); + --pink4: var(--color-180); + --pink5: var(--color-181); + --pink6: var(--color-182); + --pink7: var(--color-183); + --pink8: var(--color-184); + --pink9: var(--color-185); + --pink10: var(--color-186); + --pink11: var(--color-187); + --pink12: var(--color-188); + --purple1: var(--color-189); + --purple2: var(--color-190); + --purple3: var(--color-191); + --purple4: var(--color-192); + --purple5: var(--color-193); + --purple6: var(--color-194); + --purple7: var(--color-195); + --purple8: var(--color-196); + --purple9: var(--color-197); + --purple10: var(--color-198); + --purple11: var(--color-199); + --purple12: var(--color-200); + --red1: var(--color-201); + --red2: var(--color-202); + --red3: var(--color-203); + --red4: var(--color-204); + --red5: var(--color-205); + --red6: var(--color-206); + --red7: var(--color-207); + --red8: var(--color-208); + --red9: var(--color-209); + --red10: var(--color-210); + --red11: var(--color-211); + --red12: var(--color-212); + --yellow1: var(--color-213); + --yellow2: var(--color-214); + --yellow3: var(--color-215); + --yellow4: var(--color-216); + --yellow5: var(--color-217); + --yellow6: var(--color-218); + --yellow7: var(--color-219); + --yellow8: var(--color-220); + --yellow9: var(--color-221); + --yellow10: var(--color-222); + --yellow11: var(--color-223); + --yellow12: var(--color-224); + --shadowColor: rgba(0, 0, 0, 0.3); + --shadowColorHover: rgba(0, 0, 0, 0.3); + --shadowColorPress: rgba(0, 0, 0, 0.2); + --shadowColorFocus: rgba(0, 0, 0, 0.2); + } +} +.t_blue ::selection { + background: var(--color5); + color: var(--color11); +} +:root .t_gray { + --accentBackground: var(--color-132); + --accentColor: var(--color-36); + --background0: var(--color-5); + --background025: var(--color-8); + --background05: var(--color-7); + --background075: var(--color-6); + --color1: var(--color-21); + --color2: var(--color-22); + --color3: var(--color-23); + --color4: var(--color-24); + --color5: var(--color-25); + --color6: var(--color-26); + --color7: var(--color-27); + --color8: var(--color-28); + --color9: var(--color-29); + --color10: var(--color-30); + --color11: var(--color-31); + --color12: var(--color-32); + --color0: var(--color-1); + --color025: var(--color-4); + --color05: var(--color-3); + --color075: var(--color-2); + --background: #0e0e0e; + --backgroundHover: var(--color-22); + --backgroundPress: var(--color-6); + --backgroundFocus: var(--color-6); + --borderColor: var(--color-24); + --borderColorHover: var(--color-25); + --borderColorPress: var(--color-23); + --borderColorFocus: var(--color-24); + --color: var(--color-32); + --colorHover: var(--color-31); + --colorPress: var(--color-32); + --colorFocus: var(--color-31); + --colorTransparent: var(--color-1); + --placeholderColor: var(--color-29); + --outlineColor: var(--color-4); + --blue1: var(--color-129); + --blue2: var(--color-130); + --blue3: var(--color-131); + --blue4: var(--color-132); + --blue5: var(--color-133); + --blue6: var(--color-134); + --blue7: var(--color-135); + --blue8: var(--color-136); + --blue9: var(--color-137); + --blue10: var(--color-138); + --blue11: var(--color-139); + --blue12: var(--color-140); + --gray1: var(--color-141); + --gray2: var(--color-142); + --gray3: var(--color-143); + --gray4: var(--color-144); + --gray5: var(--color-145); + --gray6: var(--color-146); + --gray7: var(--color-147); + --gray8: var(--color-148); + --gray9: var(--color-149); + --gray10: var(--color-150); + --gray11: var(--color-151); + --gray12: var(--color-152); + --green1: var(--color-153); + --green2: var(--color-154); + --green3: var(--color-155); + --green4: var(--color-156); + --green5: var(--color-157); + --green6: var(--color-158); + --green7: var(--color-159); + --green8: var(--color-160); + --green9: var(--color-161); + --green10: var(--color-162); + --green11: var(--color-163); + --green12: var(--color-164); + --orange1: var(--color-165); + --orange2: var(--color-166); + --orange3: var(--color-167); + --orange4: var(--color-168); + --orange5: var(--color-169); + --orange6: var(--color-170); + --orange7: var(--color-171); + --orange8: var(--color-172); + --orange9: var(--color-173); + --orange10: var(--color-174); + --orange11: var(--color-175); + --orange12: var(--color-176); + --pink1: var(--color-177); + --pink2: var(--color-178); + --pink3: var(--color-179); + --pink4: var(--color-180); + --pink5: var(--color-181); + --pink6: var(--color-182); + --pink7: var(--color-183); + --pink8: var(--color-184); + --pink9: var(--color-185); + --pink10: var(--color-186); + --pink11: var(--color-187); + --pink12: var(--color-188); + --purple1: var(--color-189); + --purple2: var(--color-190); + --purple3: var(--color-191); + --purple4: var(--color-192); + --purple5: var(--color-193); + --purple6: var(--color-194); + --purple7: var(--color-195); + --purple8: var(--color-196); + --purple9: var(--color-197); + --purple10: var(--color-198); + --purple11: var(--color-199); + --purple12: var(--color-200); + --red1: var(--color-201); + --red2: var(--color-202); + --red3: var(--color-203); + --red4: var(--color-204); + --red5: var(--color-205); + --red6: var(--color-206); + --red7: var(--color-207); + --red8: var(--color-208); + --red9: var(--color-209); + --red10: var(--color-210); + --red11: var(--color-211); + --red12: var(--color-212); + --yellow1: var(--color-213); + --yellow2: var(--color-214); + --yellow3: var(--color-215); + --yellow4: var(--color-216); + --yellow5: var(--color-217); + --yellow6: var(--color-218); + --yellow7: var(--color-219); + --yellow8: var(--color-220); + --yellow9: var(--color-221); + --yellow10: var(--color-222); + --yellow11: var(--color-223); + --yellow12: var(--color-224); + --shadowColor: rgba(0, 0, 0, 0.3); + --shadowColorHover: rgba(0, 0, 0, 0.3); + --shadowColorPress: rgba(0, 0, 0, 0.2); + --shadowColorFocus: rgba(0, 0, 0, 0.2); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_gray { + --accentBackground: var(--color-132); + --accentColor: var(--color-36); + --background0: var(--color-5); + --background025: var(--color-8); + --background05: var(--color-7); + --background075: var(--color-6); + --color1: var(--color-21); + --color2: var(--color-22); + --color3: var(--color-23); + --color4: var(--color-24); + --color5: var(--color-25); + --color6: var(--color-26); + --color7: var(--color-27); + --color8: var(--color-28); + --color9: var(--color-29); + --color10: var(--color-30); + --color11: var(--color-31); + --color12: var(--color-32); + --color0: var(--color-1); + --color025: var(--color-4); + --color05: var(--color-3); + --color075: var(--color-2); + --background: #0e0e0e; + --backgroundHover: var(--color-22); + --backgroundPress: var(--color-6); + --backgroundFocus: var(--color-6); + --borderColor: var(--color-24); + --borderColorHover: var(--color-25); + --borderColorPress: var(--color-23); + --borderColorFocus: var(--color-24); + --color: var(--color-32); + --colorHover: var(--color-31); + --colorPress: var(--color-32); + --colorFocus: var(--color-31); + --colorTransparent: var(--color-1); + --placeholderColor: var(--color-29); + --outlineColor: var(--color-4); + --blue1: var(--color-129); + --blue2: var(--color-130); + --blue3: var(--color-131); + --blue4: var(--color-132); + --blue5: var(--color-133); + --blue6: var(--color-134); + --blue7: var(--color-135); + --blue8: var(--color-136); + --blue9: var(--color-137); + --blue10: var(--color-138); + --blue11: var(--color-139); + --blue12: var(--color-140); + --gray1: var(--color-141); + --gray2: var(--color-142); + --gray3: var(--color-143); + --gray4: var(--color-144); + --gray5: var(--color-145); + --gray6: var(--color-146); + --gray7: var(--color-147); + --gray8: var(--color-148); + --gray9: var(--color-149); + --gray10: var(--color-150); + --gray11: var(--color-151); + --gray12: var(--color-152); + --green1: var(--color-153); + --green2: var(--color-154); + --green3: var(--color-155); + --green4: var(--color-156); + --green5: var(--color-157); + --green6: var(--color-158); + --green7: var(--color-159); + --green8: var(--color-160); + --green9: var(--color-161); + --green10: var(--color-162); + --green11: var(--color-163); + --green12: var(--color-164); + --orange1: var(--color-165); + --orange2: var(--color-166); + --orange3: var(--color-167); + --orange4: var(--color-168); + --orange5: var(--color-169); + --orange6: var(--color-170); + --orange7: var(--color-171); + --orange8: var(--color-172); + --orange9: var(--color-173); + --orange10: var(--color-174); + --orange11: var(--color-175); + --orange12: var(--color-176); + --pink1: var(--color-177); + --pink2: var(--color-178); + --pink3: var(--color-179); + --pink4: var(--color-180); + --pink5: var(--color-181); + --pink6: var(--color-182); + --pink7: var(--color-183); + --pink8: var(--color-184); + --pink9: var(--color-185); + --pink10: var(--color-186); + --pink11: var(--color-187); + --pink12: var(--color-188); + --purple1: var(--color-189); + --purple2: var(--color-190); + --purple3: var(--color-191); + --purple4: var(--color-192); + --purple5: var(--color-193); + --purple6: var(--color-194); + --purple7: var(--color-195); + --purple8: var(--color-196); + --purple9: var(--color-197); + --purple10: var(--color-198); + --purple11: var(--color-199); + --purple12: var(--color-200); + --red1: var(--color-201); + --red2: var(--color-202); + --red3: var(--color-203); + --red4: var(--color-204); + --red5: var(--color-205); + --red6: var(--color-206); + --red7: var(--color-207); + --red8: var(--color-208); + --red9: var(--color-209); + --red10: var(--color-210); + --red11: var(--color-211); + --red12: var(--color-212); + --yellow1: var(--color-213); + --yellow2: var(--color-214); + --yellow3: var(--color-215); + --yellow4: var(--color-216); + --yellow5: var(--color-217); + --yellow6: var(--color-218); + --yellow7: var(--color-219); + --yellow8: var(--color-220); + --yellow9: var(--color-221); + --yellow10: var(--color-222); + --yellow11: var(--color-223); + --yellow12: var(--color-224); + --shadowColor: rgba(0, 0, 0, 0.3); + --shadowColorHover: rgba(0, 0, 0, 0.3); + --shadowColorPress: rgba(0, 0, 0, 0.2); + --shadowColorFocus: rgba(0, 0, 0, 0.2); + } +} +.t_gray ::selection { + background: var(--color5); + color: var(--color11); +} +:root .t_red { + --accentBackground: var(--color-132); + --accentColor: var(--color-36); + --background0: var(--color-5); + --background025: var(--color-8); + --background05: var(--color-7); + --background075: var(--color-6); + --color1: var(--color-21); + --color2: var(--color-22); + --color3: var(--color-23); + --color4: var(--color-24); + --color5: var(--color-25); + --color6: var(--color-26); + --color7: var(--color-27); + --color8: var(--color-28); + --color9: var(--color-29); + --color10: var(--color-30); + --color11: var(--color-31); + --color12: var(--color-32); + --color0: var(--color-1); + --color025: var(--color-4); + --color05: var(--color-3); + --color075: var(--color-2); + --background: #130909; + --backgroundHover: var(--color-22); + --backgroundPress: var(--color-6); + --backgroundFocus: var(--color-6); + --borderColor: var(--color-24); + --borderColorHover: var(--color-25); + --borderColorPress: var(--color-23); + --borderColorFocus: var(--color-24); + --color: var(--color-32); + --colorHover: var(--color-31); + --colorPress: var(--color-32); + --colorFocus: var(--color-31); + --colorTransparent: var(--color-1); + --placeholderColor: var(--color-29); + --outlineColor: var(--color-4); + --blue1: var(--color-129); + --blue2: var(--color-130); + --blue3: var(--color-131); + --blue4: var(--color-132); + --blue5: var(--color-133); + --blue6: var(--color-134); + --blue7: var(--color-135); + --blue8: var(--color-136); + --blue9: var(--color-137); + --blue10: var(--color-138); + --blue11: var(--color-139); + --blue12: var(--color-140); + --gray1: var(--color-141); + --gray2: var(--color-142); + --gray3: var(--color-143); + --gray4: var(--color-144); + --gray5: var(--color-145); + --gray6: var(--color-146); + --gray7: var(--color-147); + --gray8: var(--color-148); + --gray9: var(--color-149); + --gray10: var(--color-150); + --gray11: var(--color-151); + --gray12: var(--color-152); + --green1: var(--color-153); + --green2: var(--color-154); + --green3: var(--color-155); + --green4: var(--color-156); + --green5: var(--color-157); + --green6: var(--color-158); + --green7: var(--color-159); + --green8: var(--color-160); + --green9: var(--color-161); + --green10: var(--color-162); + --green11: var(--color-163); + --green12: var(--color-164); + --orange1: var(--color-165); + --orange2: var(--color-166); + --orange3: var(--color-167); + --orange4: var(--color-168); + --orange5: var(--color-169); + --orange6: var(--color-170); + --orange7: var(--color-171); + --orange8: var(--color-172); + --orange9: var(--color-173); + --orange10: var(--color-174); + --orange11: var(--color-175); + --orange12: var(--color-176); + --pink1: var(--color-177); + --pink2: var(--color-178); + --pink3: var(--color-179); + --pink4: var(--color-180); + --pink5: var(--color-181); + --pink6: var(--color-182); + --pink7: var(--color-183); + --pink8: var(--color-184); + --pink9: var(--color-185); + --pink10: var(--color-186); + --pink11: var(--color-187); + --pink12: var(--color-188); + --purple1: var(--color-189); + --purple2: var(--color-190); + --purple3: var(--color-191); + --purple4: var(--color-192); + --purple5: var(--color-193); + --purple6: var(--color-194); + --purple7: var(--color-195); + --purple8: var(--color-196); + --purple9: var(--color-197); + --purple10: var(--color-198); + --purple11: var(--color-199); + --purple12: var(--color-200); + --red1: var(--color-201); + --red2: var(--color-202); + --red3: var(--color-203); + --red4: var(--color-204); + --red5: var(--color-205); + --red6: var(--color-206); + --red7: var(--color-207); + --red8: var(--color-208); + --red9: var(--color-209); + --red10: var(--color-210); + --red11: var(--color-211); + --red12: var(--color-212); + --yellow1: var(--color-213); + --yellow2: var(--color-214); + --yellow3: var(--color-215); + --yellow4: var(--color-216); + --yellow5: var(--color-217); + --yellow6: var(--color-218); + --yellow7: var(--color-219); + --yellow8: var(--color-220); + --yellow9: var(--color-221); + --yellow10: var(--color-222); + --yellow11: var(--color-223); + --yellow12: var(--color-224); + --shadowColor: rgba(0, 0, 0, 0.3); + --shadowColorHover: rgba(0, 0, 0, 0.3); + --shadowColorPress: rgba(0, 0, 0, 0.2); + --shadowColorFocus: rgba(0, 0, 0, 0.2); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_red { + --accentBackground: var(--color-132); + --accentColor: var(--color-36); + --background0: var(--color-5); + --background025: var(--color-8); + --background05: var(--color-7); + --background075: var(--color-6); + --color1: var(--color-21); + --color2: var(--color-22); + --color3: var(--color-23); + --color4: var(--color-24); + --color5: var(--color-25); + --color6: var(--color-26); + --color7: var(--color-27); + --color8: var(--color-28); + --color9: var(--color-29); + --color10: var(--color-30); + --color11: var(--color-31); + --color12: var(--color-32); + --color0: var(--color-1); + --color025: var(--color-4); + --color05: var(--color-3); + --color075: var(--color-2); + --background: #130909; + --backgroundHover: var(--color-22); + --backgroundPress: var(--color-6); + --backgroundFocus: var(--color-6); + --borderColor: var(--color-24); + --borderColorHover: var(--color-25); + --borderColorPress: var(--color-23); + --borderColorFocus: var(--color-24); + --color: var(--color-32); + --colorHover: var(--color-31); + --colorPress: var(--color-32); + --colorFocus: var(--color-31); + --colorTransparent: var(--color-1); + --placeholderColor: var(--color-29); + --outlineColor: var(--color-4); + --blue1: var(--color-129); + --blue2: var(--color-130); + --blue3: var(--color-131); + --blue4: var(--color-132); + --blue5: var(--color-133); + --blue6: var(--color-134); + --blue7: var(--color-135); + --blue8: var(--color-136); + --blue9: var(--color-137); + --blue10: var(--color-138); + --blue11: var(--color-139); + --blue12: var(--color-140); + --gray1: var(--color-141); + --gray2: var(--color-142); + --gray3: var(--color-143); + --gray4: var(--color-144); + --gray5: var(--color-145); + --gray6: var(--color-146); + --gray7: var(--color-147); + --gray8: var(--color-148); + --gray9: var(--color-149); + --gray10: var(--color-150); + --gray11: var(--color-151); + --gray12: var(--color-152); + --green1: var(--color-153); + --green2: var(--color-154); + --green3: var(--color-155); + --green4: var(--color-156); + --green5: var(--color-157); + --green6: var(--color-158); + --green7: var(--color-159); + --green8: var(--color-160); + --green9: var(--color-161); + --green10: var(--color-162); + --green11: var(--color-163); + --green12: var(--color-164); + --orange1: var(--color-165); + --orange2: var(--color-166); + --orange3: var(--color-167); + --orange4: var(--color-168); + --orange5: var(--color-169); + --orange6: var(--color-170); + --orange7: var(--color-171); + --orange8: var(--color-172); + --orange9: var(--color-173); + --orange10: var(--color-174); + --orange11: var(--color-175); + --orange12: var(--color-176); + --pink1: var(--color-177); + --pink2: var(--color-178); + --pink3: var(--color-179); + --pink4: var(--color-180); + --pink5: var(--color-181); + --pink6: var(--color-182); + --pink7: var(--color-183); + --pink8: var(--color-184); + --pink9: var(--color-185); + --pink10: var(--color-186); + --pink11: var(--color-187); + --pink12: var(--color-188); + --purple1: var(--color-189); + --purple2: var(--color-190); + --purple3: var(--color-191); + --purple4: var(--color-192); + --purple5: var(--color-193); + --purple6: var(--color-194); + --purple7: var(--color-195); + --purple8: var(--color-196); + --purple9: var(--color-197); + --purple10: var(--color-198); + --purple11: var(--color-199); + --purple12: var(--color-200); + --red1: var(--color-201); + --red2: var(--color-202); + --red3: var(--color-203); + --red4: var(--color-204); + --red5: var(--color-205); + --red6: var(--color-206); + --red7: var(--color-207); + --red8: var(--color-208); + --red9: var(--color-209); + --red10: var(--color-210); + --red11: var(--color-211); + --red12: var(--color-212); + --yellow1: var(--color-213); + --yellow2: var(--color-214); + --yellow3: var(--color-215); + --yellow4: var(--color-216); + --yellow5: var(--color-217); + --yellow6: var(--color-218); + --yellow7: var(--color-219); + --yellow8: var(--color-220); + --yellow9: var(--color-221); + --yellow10: var(--color-222); + --yellow11: var(--color-223); + --yellow12: var(--color-224); + --shadowColor: rgba(0, 0, 0, 0.3); + --shadowColorHover: rgba(0, 0, 0, 0.3); + --shadowColorPress: rgba(0, 0, 0, 0.2); + --shadowColorFocus: rgba(0, 0, 0, 0.2); + } +} +.t_red ::selection { + background: var(--color5); + color: var(--color11); +} +:root .t_teal { + --accentBackground: var(--color-132); + --accentColor: var(--color-36); + --background0: var(--color-5); + --background025: var(--color-8); + --background05: var(--color-7); + --background075: var(--color-6); + --color1: var(--color-21); + --color2: var(--color-22); + --color3: var(--color-23); + --color4: var(--color-24); + --color5: var(--color-25); + --color6: var(--color-26); + --color7: var(--color-27); + --color8: var(--color-28); + --color9: var(--color-29); + --color10: var(--color-30); + --color11: var(--color-31); + --color12: var(--color-32); + --color0: var(--color-1); + --color025: var(--color-4); + --color05: var(--color-3); + --color075: var(--color-2); + --background: #0a0e12; + --backgroundHover: var(--color-22); + --backgroundPress: var(--color-6); + --backgroundFocus: var(--color-6); + --borderColor: var(--color-24); + --borderColorHover: var(--color-25); + --borderColorPress: var(--color-23); + --borderColorFocus: var(--color-24); + --color: var(--color-32); + --colorHover: var(--color-31); + --colorPress: var(--color-32); + --colorFocus: var(--color-31); + --colorTransparent: var(--color-1); + --placeholderColor: var(--color-29); + --outlineColor: var(--color-4); + --blue1: var(--color-129); + --blue2: var(--color-130); + --blue3: var(--color-131); + --blue4: var(--color-132); + --blue5: var(--color-133); + --blue6: var(--color-134); + --blue7: var(--color-135); + --blue8: var(--color-136); + --blue9: var(--color-137); + --blue10: var(--color-138); + --blue11: var(--color-139); + --blue12: var(--color-140); + --gray1: var(--color-141); + --gray2: var(--color-142); + --gray3: var(--color-143); + --gray4: var(--color-144); + --gray5: var(--color-145); + --gray6: var(--color-146); + --gray7: var(--color-147); + --gray8: var(--color-148); + --gray9: var(--color-149); + --gray10: var(--color-150); + --gray11: var(--color-151); + --gray12: var(--color-152); + --green1: var(--color-153); + --green2: var(--color-154); + --green3: var(--color-155); + --green4: var(--color-156); + --green5: var(--color-157); + --green6: var(--color-158); + --green7: var(--color-159); + --green8: var(--color-160); + --green9: var(--color-161); + --green10: var(--color-162); + --green11: var(--color-163); + --green12: var(--color-164); + --orange1: var(--color-165); + --orange2: var(--color-166); + --orange3: var(--color-167); + --orange4: var(--color-168); + --orange5: var(--color-169); + --orange6: var(--color-170); + --orange7: var(--color-171); + --orange8: var(--color-172); + --orange9: var(--color-173); + --orange10: var(--color-174); + --orange11: var(--color-175); + --orange12: var(--color-176); + --pink1: var(--color-177); + --pink2: var(--color-178); + --pink3: var(--color-179); + --pink4: var(--color-180); + --pink5: var(--color-181); + --pink6: var(--color-182); + --pink7: var(--color-183); + --pink8: var(--color-184); + --pink9: var(--color-185); + --pink10: var(--color-186); + --pink11: var(--color-187); + --pink12: var(--color-188); + --purple1: var(--color-189); + --purple2: var(--color-190); + --purple3: var(--color-191); + --purple4: var(--color-192); + --purple5: var(--color-193); + --purple6: var(--color-194); + --purple7: var(--color-195); + --purple8: var(--color-196); + --purple9: var(--color-197); + --purple10: var(--color-198); + --purple11: var(--color-199); + --purple12: var(--color-200); + --red1: var(--color-201); + --red2: var(--color-202); + --red3: var(--color-203); + --red4: var(--color-204); + --red5: var(--color-205); + --red6: var(--color-206); + --red7: var(--color-207); + --red8: var(--color-208); + --red9: var(--color-209); + --red10: var(--color-210); + --red11: var(--color-211); + --red12: var(--color-212); + --yellow1: var(--color-213); + --yellow2: var(--color-214); + --yellow3: var(--color-215); + --yellow4: var(--color-216); + --yellow5: var(--color-217); + --yellow6: var(--color-218); + --yellow7: var(--color-219); + --yellow8: var(--color-220); + --yellow9: var(--color-221); + --yellow10: var(--color-222); + --yellow11: var(--color-223); + --yellow12: var(--color-224); + --shadowColor: rgba(0, 0, 0, 0.3); + --shadowColorHover: rgba(0, 0, 0, 0.3); + --shadowColorPress: rgba(0, 0, 0, 0.2); + --shadowColorFocus: rgba(0, 0, 0, 0.2); +} +@media (prefers-color-scheme: light) { + body { + background: var(--background); + color: var(--color); + } + .t_teal { + --accentBackground: var(--color-132); + --accentColor: var(--color-36); + --background0: var(--color-5); + --background025: var(--color-8); + --background05: var(--color-7); + --background075: var(--color-6); + --color1: var(--color-21); + --color2: var(--color-22); + --color3: var(--color-23); + --color4: var(--color-24); + --color5: var(--color-25); + --color6: var(--color-26); + --color7: var(--color-27); + --color8: var(--color-28); + --color9: var(--color-29); + --color10: var(--color-30); + --color11: var(--color-31); + --color12: var(--color-32); + --color0: var(--color-1); + --color025: var(--color-4); + --color05: var(--color-3); + --color075: var(--color-2); + --background: #0a0e12; + --backgroundHover: var(--color-22); + --backgroundPress: var(--color-6); + --backgroundFocus: var(--color-6); + --borderColor: var(--color-24); + --borderColorHover: var(--color-25); + --borderColorPress: var(--color-23); + --borderColorFocus: var(--color-24); + --color: var(--color-32); + --colorHover: var(--color-31); + --colorPress: var(--color-32); + --colorFocus: var(--color-31); + --colorTransparent: var(--color-1); + --placeholderColor: var(--color-29); + --outlineColor: var(--color-4); + --blue1: var(--color-129); + --blue2: var(--color-130); + --blue3: var(--color-131); + --blue4: var(--color-132); + --blue5: var(--color-133); + --blue6: var(--color-134); + --blue7: var(--color-135); + --blue8: var(--color-136); + --blue9: var(--color-137); + --blue10: var(--color-138); + --blue11: var(--color-139); + --blue12: var(--color-140); + --gray1: var(--color-141); + --gray2: var(--color-142); + --gray3: var(--color-143); + --gray4: var(--color-144); + --gray5: var(--color-145); + --gray6: var(--color-146); + --gray7: var(--color-147); + --gray8: var(--color-148); + --gray9: var(--color-149); + --gray10: var(--color-150); + --gray11: var(--color-151); + --gray12: var(--color-152); + --green1: var(--color-153); + --green2: var(--color-154); + --green3: var(--color-155); + --green4: var(--color-156); + --green5: var(--color-157); + --green6: var(--color-158); + --green7: var(--color-159); + --green8: var(--color-160); + --green9: var(--color-161); + --green10: var(--color-162); + --green11: var(--color-163); + --green12: var(--color-164); + --orange1: var(--color-165); + --orange2: var(--color-166); + --orange3: var(--color-167); + --orange4: var(--color-168); + --orange5: var(--color-169); + --orange6: var(--color-170); + --orange7: var(--color-171); + --orange8: var(--color-172); + --orange9: var(--color-173); + --orange10: var(--color-174); + --orange11: var(--color-175); + --orange12: var(--color-176); + --pink1: var(--color-177); + --pink2: var(--color-178); + --pink3: var(--color-179); + --pink4: var(--color-180); + --pink5: var(--color-181); + --pink6: var(--color-182); + --pink7: var(--color-183); + --pink8: var(--color-184); + --pink9: var(--color-185); + --pink10: var(--color-186); + --pink11: var(--color-187); + --pink12: var(--color-188); + --purple1: var(--color-189); + --purple2: var(--color-190); + --purple3: var(--color-191); + --purple4: var(--color-192); + --purple5: var(--color-193); + --purple6: var(--color-194); + --purple7: var(--color-195); + --purple8: var(--color-196); + --purple9: var(--color-197); + --purple10: var(--color-198); + --purple11: var(--color-199); + --purple12: var(--color-200); + --red1: var(--color-201); + --red2: var(--color-202); + --red3: var(--color-203); + --red4: var(--color-204); + --red5: var(--color-205); + --red6: var(--color-206); + --red7: var(--color-207); + --red8: var(--color-208); + --red9: var(--color-209); + --red10: var(--color-210); + --red11: var(--color-211); + --red12: var(--color-212); + --yellow1: var(--color-213); + --yellow2: var(--color-214); + --yellow3: var(--color-215); + --yellow4: var(--color-216); + --yellow5: var(--color-217); + --yellow6: var(--color-218); + --yellow7: var(--color-219); + --yellow8: var(--color-220); + --yellow9: var(--color-221); + --yellow10: var(--color-222); + --yellow11: var(--color-223); + --yellow12: var(--color-224); + --shadowColor: rgba(0, 0, 0, 0.3); + --shadowColorHover: rgba(0, 0, 0, 0.3); + --shadowColorPress: rgba(0, 0, 0, 0.2); + --shadowColorFocus: rgba(0, 0, 0, 0.2); + } +} +.t_teal ::selection { + background: var(--color5); + color: var(--color11); +} diff --git a/apps/expo/tamagui.config.ts b/apps/expo/tamagui.config.ts new file mode 100644 index 0000000..250845a --- /dev/null +++ b/apps/expo/tamagui.config.ts @@ -0,0 +1,249 @@ +import { createAnimations } from "@tamagui/animations-moti"; +import { config } from "@tamagui/config/v3"; +import { createFont, createTamagui } from "tamagui"; + +import { + blueTokens, + grayTokens, + mainTokens, + redTokens, + tealTokens, +} from "@movie-web/colors"; + +type Tokens = + | typeof mainTokens + | typeof blueTokens + | typeof grayTokens + | typeof redTokens + | typeof tealTokens; + +const createThemeConfig = (tokens: Tokens) => ({ + screenBackground: tokens.shade.c900, + + tabBarBackground: tokens.shade.c700, + tabBarIcon: tokens.shade.c300, + tabBarIconFocused: tokens.purple.c200, + + scrapingCard: tokens.shade.c700, + scrapingLoading: tokens.purple.c200, + scrapingNoResult: tokens.ash.c100, + scrapingError: tokens.semantic.red.c200, + scrapingSuccess: tokens.semantic.green.c200, + + playerSettingsBackground: tokens.ash.c900, + playerSettingsUnactiveText: tokens.semantic.silver.c400, + playerSettingsActiveText: tokens.shade.c100, + + subtitleSelectorBackground: tokens.ash.c500, + + pillBackground: tokens.shade.c300, + pillHighlight: tokens.blue.c200, + pillActiveBackground: tokens.shade.c300, + + sheetBackground: tokens.shade.c800, + sheetItemBackground: tokens.shade.c600, + sheetIcon: tokens.shade.c300, + sheetText: tokens.shade.c100, + sheetHandle: tokens.shade.c300, + sheetItemSelected: tokens.purple.c200, + + videoSlider: tokens.ash.c50, + videoSliderFilled: tokens.purple.c200, + + progressBackground: tokens.shade.c600, + progressFilled: tokens.purple.c200, + + separatorBackground: tokens.ash.c600, + + loadingIndicator: tokens.purple.c200, + + switchActiveTrackColor: tokens.purple.c300, + switchInactiveTrackColor: tokens.ash.c500, + switchThumbColor: tokens.white, + + searchIcon: tokens.shade.c100, + searchBackground: tokens.shade.c600, + searchHoverBackground: tokens.shade.c600, + searchFocused: tokens.shade.c400, + searchPlaceholder: tokens.shade.c100, + + inputBackground: tokens.shade.c600, + inputBorder: tokens.shade.c600, + inputPlaceholderText: tokens.shade.c300, + inputText: tokens.white, + inputIconColor: tokens.shade.c50, + + red100: tokens.semantic.red.c100, + red200: tokens.semantic.red.c200, + red300: tokens.semantic.red.c300, + red400: tokens.semantic.red.c400, + + green100: tokens.semantic.green.c100, + green200: tokens.semantic.green.c200, + green300: tokens.semantic.green.c300, + green400: tokens.semantic.green.c400, + + silver100: tokens.semantic.silver.c100, + silver200: tokens.semantic.silver.c200, + silver300: tokens.semantic.silver.c300, + silver400: tokens.semantic.silver.c400, + + yellow100: tokens.semantic.yellow.c100, + yellow200: tokens.semantic.yellow.c200, + yellow300: tokens.semantic.yellow.c300, + yellow400: tokens.semantic.yellow.c400, + + rose100: tokens.semantic.rose.c100, + rose200: tokens.semantic.rose.c200, + rose300: tokens.semantic.rose.c300, + rose400: tokens.semantic.rose.c400, + + blue50: tokens.blue.c50, + blue100: tokens.blue.c100, + blue200: tokens.blue.c200, + blue300: tokens.blue.c300, + blue400: tokens.blue.c400, + blue500: tokens.blue.c500, + blue600: tokens.blue.c600, + blue700: tokens.blue.c700, + blue800: tokens.blue.c800, + blue900: tokens.blue.c900, + + purple50: tokens.purple.c50, + purple100: tokens.purple.c100, + purple200: tokens.purple.c200, + purple300: tokens.purple.c300, + purple400: tokens.purple.c400, + purple500: tokens.purple.c500, + purple600: tokens.purple.c600, + purple700: tokens.purple.c700, + purple800: tokens.purple.c800, + purple900: tokens.purple.c900, + + ash50: tokens.ash.c50, + ash100: tokens.ash.c100, + ash200: tokens.ash.c200, + ash300: tokens.ash.c300, + ash400: tokens.ash.c400, + ash500: tokens.ash.c500, + ash600: tokens.ash.c600, + ash700: tokens.ash.c700, + ash800: tokens.ash.c800, + ash900: tokens.ash.c900, + + shade50: tokens.shade.c50, + shade100: tokens.shade.c100, + shade200: tokens.shade.c200, + shade300: tokens.shade.c300, + shade400: tokens.shade.c400, + shade500: tokens.shade.c500, + shade600: tokens.shade.c600, + shade700: tokens.shade.c700, + shade800: tokens.shade.c800, + shade900: tokens.shade.c900, +}); + +const openSansFace = { + normal: { normal: "OpenSansRegular", italic: "OpenSansItalic" }, + bold: { normal: "OpenSansBold", italic: "OpenSansBoldItalic" }, + 300: { normal: "OpenSansLight", italic: "OpenSansLightItalic" }, + 500: { normal: "OpenSansRegular", italic: "OpenSansItalic" }, + 600: { normal: "OpenSansSemiBold", italic: "OpenSansSemiBoldItalic" }, + 700: { normal: "OpenSansBold", italic: "OpenSansBoldItalic" }, + 800: { normal: "OpenSansExtraBold", italic: "OpenSansExtraBoldItalic" }, +}; + +const headingFont = createFont({ + size: config.fonts.heading.size, + lineHeight: config.fonts.heading.lineHeight, + weight: { + light: 300, + normal: 500, + semibold: 600, + bold: 700, + extrabold: 800, + }, + letterSpacing: config.fonts.heading.letterSpacing, + face: openSansFace, +}); + +const bodyFont = createFont({ + size: config.fonts.body.size, + lineHeight: config.fonts.body.lineHeight, + weight: { + light: 300, + normal: 500, + semibold: 600, + bold: 700, + extrabold: 800, + }, + letterSpacing: config.fonts.body.letterSpacing, + face: openSansFace, +}); + +export const tamaguiConfig = createTamagui({ + ...config, + tokens: config.tokens, + themes: { + main: { + ...config.themes.dark, + ...createThemeConfig(mainTokens), + }, + blue: { + ...config.themes.dark, + ...createThemeConfig(blueTokens), + }, + gray: { + ...config.themes.dark, + ...createThemeConfig(grayTokens), + }, + red: { + ...config.themes.dark, + ...createThemeConfig(redTokens), + }, + teal: { + ...config.themes.dark, + ...createThemeConfig(tealTokens), + }, + }, + animations: createAnimations({ + fast: { + type: "spring", + damping: 20, + mass: 1.2, + stiffness: 250, + }, + bounce: { + type: "spring", + stiffness: 200, + damping: 10, + }, + quicker: { + type: "spring", + stiffness: 300, + damping: 20, + }, + static: { + type: "decay", + deceleration: 0.999, + }, + lazy: { + type: "spring", + stiffness: 100, + damping: 20, + }, + }), + fonts: { + heading: headingFont, + body: bodyFont, + }, +}); + +export default tamaguiConfig; + +export type Conf = typeof tamaguiConfig; + +declare module "tamagui" { + // eslint-disable-next-line @typescript-eslint/no-empty-interface + interface TamaguiCustomConfig extends Conf {} +} diff --git a/apps/expo/tsconfig.json b/apps/expo/tsconfig.json index 7bdd73b..0d01eda 100644 --- a/apps/expo/tsconfig.json +++ b/apps/expo/tsconfig.json @@ -1,16 +1,24 @@ { "extends": ["@movie-web/tsconfig/base.json"], "compilerOptions": { - "incremental": true, + "allowJs": true, "baseUrl": ".", "paths": { "~/*": ["./src/*"], - "~/components/*": ["./src/app/components/*"], + "~/components/*": ["./src/components/*"], + "modules/*": ["./modules/*"], }, "jsx": "react-native", "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json", - "types": ["nativewind/types"], }, - "include": ["src", "*.ts", "*.js", ".expo/types/**/*.ts", "expo-env.d.ts"], + "include": [ + "src", + "modules", + "*.ts", + "*.js", + ".expo/types/**/*.ts", + "expo-env.d.ts", + "src/plugins/*", + ], "exclude": ["node_modules"], } diff --git a/package.json b/package.json index 412b339..3546d07 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,11 @@ "engines": { "node": ">=20.11.0" }, - "packageManager": "pnpm@8.15.0", + "packageManager": "pnpm@9.0.4", "scripts": { "build": "turbo build", "clean": "git clean -xdf node_modules", "clean:workspaces": "turbo clean", - "db:push": "pnpm -F db push", - "db:studio": "pnpm -F db studio", "dev": "turbo dev --parallel", "format": "turbo format --continue -- --cache --cache-location node_modules/.cache/.prettiercache", "format:fix": "turbo format --continue -- --write --cache --cache-location node_modules/.cache/.prettiercache", @@ -25,12 +23,8 @@ "@turbo/gen": "^1.11.3", "prettier": "^3.1.1", "turbo": "^1.11.3", - "typescript": "^5.3.3" + "typescript": "^5.4.3" }, "prettier": "@movie-web/prettier-config", - "pnpm": { - "patchedDependencies": { - "nativewind@4.0.23": "patches/nativewind@4.0.23.patch" - } - } + "pnpm": {} } diff --git a/packages/api/package.json b/packages/api/package.json new file mode 100644 index 0000000..d0a27eb --- /dev/null +++ b/packages/api/package.json @@ -0,0 +1,37 @@ +{ + "name": "@movie-web/api", + "private": true, + "version": "0.1.0", + "type": "module", + "main": "./src/index.ts", + "exports": { + ".": "./src/index.ts" + }, + "license": "MIT", + "scripts": { + "clean": "rm -rf .turbo node_modules", + "format": "prettier --check . --ignore-path ../../.gitignore", + "lint": "eslint .", + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@movie-web/eslint-config": "workspace:^0.2.0", + "@movie-web/prettier-config": "workspace:^0.1.0", + "@movie-web/tsconfig": "workspace:^0.1.0", + "@types/node-forge": "^1.3.11", + "eslint": "^8.56.0", + "prettier": "^3.1.1", + "typescript": "^5.4.3" + }, + "eslintConfig": { + "extends": [ + "@movie-web/eslint-config/base" + ] + }, + "prettier": "@movie-web/prettier-config", + "dependencies": { + "@noble/hashes": "^1.4.0", + "@scure/bip39": "^1.3.0", + "node-forge": "^1.3.1" + } +} diff --git a/packages/api/src/auth.ts b/packages/api/src/auth.ts new file mode 100644 index 0000000..703070e --- /dev/null +++ b/packages/api/src/auth.ts @@ -0,0 +1,23 @@ +import type { LoginResponse } from "./types"; +import { f } from "./fetch"; + +export function getAuthHeaders(token: string): Record { + return { + authorization: `Bearer ${token}`, + }; +} + +export async function accountLogin( + url: string, + id: string, + deviceName: string, +): Promise { + return f("/auth/login", { + method: "POST", + body: { + id, + device: deviceName, + }, + baseUrl: url, + }); +} diff --git a/packages/api/src/bookmarks.ts b/packages/api/src/bookmarks.ts new file mode 100644 index 0000000..4a43844 --- /dev/null +++ b/packages/api/src/bookmarks.ts @@ -0,0 +1,51 @@ +import type { + AccountWithToken, + BookmarkInput, + BookmarkMediaItem, + BookmarkResponse, +} from "./types"; +import { getAuthHeaders } from "./auth"; +import { f } from "./fetch"; + +export function bookmarkMediaToInput( + tmdbId: string, + item: BookmarkMediaItem, +): BookmarkInput { + return { + meta: { + title: item.title, + type: item.type, + poster: item.poster, + year: item.year ?? 0, + }, + tmdbId, + }; +} + +export async function addBookmark( + url: string, + account: AccountWithToken, + input: BookmarkInput, +) { + return f( + `/users/${account.userId}/bookmarks/${input.tmdbId}`, + { + method: "POST", + headers: getAuthHeaders(account.token), + baseUrl: url, + body: input, + }, + ); +} + +export async function removeBookmark( + url: string, + account: AccountWithToken, + id: string, +) { + return f<{ tmdbId: string }>(`/users/${account.userId}/bookmarks/${id}`, { + method: "DELETE", + headers: getAuthHeaders(account.token), + baseUrl: url, + }); +} diff --git a/packages/api/src/crypto.ts b/packages/api/src/crypto.ts new file mode 100644 index 0000000..67f4e2a --- /dev/null +++ b/packages/api/src/crypto.ts @@ -0,0 +1,130 @@ +import { pbkdf2Async } from "@noble/hashes/pbkdf2"; +import { sha256 } from "@noble/hashes/sha256"; +import { generateMnemonic, validateMnemonic } from "@scure/bip39"; +import { wordlist } from "@scure/bip39/wordlists/english"; +import forge from "node-forge"; + +interface Keys { + privateKey: Uint8Array; + publicKey: Uint8Array; + seed: Uint8Array; +} + +async function seedFromMnemonic(mnemonic: string) { + return pbkdf2Async(sha256, mnemonic, "mnemonic", { + c: 2048, + dkLen: 32, + }); +} + +export function verifyValidMnemonic(mnemonic: string) { + return validateMnemonic(mnemonic, wordlist); +} + +export async function keysFromMnemonic(mnemonic: string): Promise { + const seed = await seedFromMnemonic(mnemonic); + + const { privateKey, publicKey } = forge.pki.ed25519.generateKeyPair({ + seed, + }); + + return { + privateKey, + publicKey, + seed, + }; +} + +export function genMnemonic(): string { + return generateMnemonic(wordlist); +} + +export function signCode(code: string, privateKey: Uint8Array): Uint8Array { + return forge.pki.ed25519.sign({ + encoding: "utf8", + message: code, + privateKey, + }); +} + +export function bytesToBase64(bytes: Uint8Array) { + return forge.util.encode64(String.fromCodePoint(...bytes)); +} + +export function bytesToBase64Url(bytes: Uint8Array): string { + return bytesToBase64(bytes) + .replace(/\//g, "_") + .replace(/\+/g, "-") + .replace(/=+$/, ""); +} + +export function signChallenge(keys: Keys, challengeCode: string) { + const signature = signCode(challengeCode, keys.privateKey); + return bytesToBase64Url(signature); +} + +export function base64ToBuffer(data: string) { + return forge.util.binary.base64.decode(data); +} + +export function base64ToStringBuffer(data: string) { + return forge.util.createBuffer(base64ToBuffer(data)); +} + +export function stringBufferToBase64(buffer: forge.util.ByteStringBuffer) { + return forge.util.encode64(buffer.getBytes()); +} + +export async function encryptData(data: string, secret: Uint8Array) { + if (secret.byteLength !== 32) + throw new Error("Secret must be at least 256-bit"); + + const iv = await new Promise((resolve, reject) => { + forge.random.getBytes(16, (err, bytes) => { + if (err) reject(err); + resolve(bytes); + }); + }); + + const cipher = forge.cipher.createCipher( + "AES-GCM", + forge.util.createBuffer(secret), + ); + cipher.start({ + iv, + tagLength: 128, + }); + cipher.update(forge.util.createBuffer(data, "utf8")); + cipher.finish(); + + const encryptedData = cipher.output; + const tag = cipher.mode.tag; + + return `${forge.util.encode64(iv)}.${stringBufferToBase64( + encryptedData, + )}.${stringBufferToBase64(tag)}` as const; +} + +export function decryptData(data: string, secret: Uint8Array) { + if (secret.byteLength !== 32) throw new Error("Secret must be 256-bit"); + + const [iv, encryptedData, tag] = data.split("."); + if (!iv || !encryptedData || !tag) + throw new Error("Invalid encrypted data format"); + + const decipher = forge.cipher.createDecipher( + "AES-GCM", + forge.util.createBuffer(secret), + ); + decipher.start({ + iv: base64ToStringBuffer(iv), + tag: base64ToStringBuffer(tag), + tagLength: 128, + }); + decipher.update(base64ToStringBuffer(encryptedData)); + const pass = decipher.finish(); + + if (!pass) throw new Error("Error decrypting data"); + + return decipher.output.toString(); +} diff --git a/packages/api/src/fetch.ts b/packages/api/src/fetch.ts new file mode 100644 index 0000000..1e7805c --- /dev/null +++ b/packages/api/src/fetch.ts @@ -0,0 +1,56 @@ +export interface FetcherOptions { + baseUrl?: string; + headers?: Record; + query?: Record; + method?: "HEAD" | "GET" | "POST" | "PUT" | "DELETE" | "PATCH"; + readHeaders?: string[]; + body?: Record; +} + +export type FullUrlOptions = Pick; + +export function makeFullUrl(url: string, ops?: FullUrlOptions): string { + // glue baseUrl and rest of url together + let leftSide = ops?.baseUrl ?? ""; + let rightSide = url; + + // left side should always end with slash, if its set + if (leftSide.length > 0 && !leftSide.endsWith("/")) leftSide += "/"; + + // right side should never start with slash + if (rightSide.startsWith("/")) rightSide = rightSide.slice(1); + + const fullUrl = leftSide + rightSide; + if (!fullUrl.startsWith("http://") && !fullUrl.startsWith("https://")) + throw new Error( + `Invald URL -- URL doesn't start with a http scheme: '${fullUrl}'`, + ); + + const parsedUrl = new URL(fullUrl); + Object.entries(ops?.query ?? {}).forEach(([k, v]) => { + parsedUrl.searchParams.set(k, v); + }); + + return parsedUrl.toString(); +} + +export async function f(url: string, ops?: FetcherOptions): Promise { + const fullUrl = makeFullUrl(url, ops); + const response = await fetch(fullUrl, { + method: ops?.method ?? "GET", + headers: { + "Content-Type": "application/json", + ...ops?.headers, + }, + body: ops?.body ? JSON.stringify(ops.body) : undefined, + }); + + if (!response.ok) { + throw new Error( + `Failed to fetch '${fullUrl}' -- ${response.status} ${response.statusText}`, + ); + } + + const data = (await response.json()) as T; + return data; +} diff --git a/packages/api/src/import.ts b/packages/api/src/import.ts new file mode 100644 index 0000000..a63fd9b --- /dev/null +++ b/packages/api/src/import.ts @@ -0,0 +1,29 @@ +import type { AccountWithToken, BookmarkInput, ProgressInput } from "./types"; +import { getAuthHeaders } from "./auth"; +import { f } from "./fetch"; + +export function importProgress( + url: string, + account: AccountWithToken, + progressItems: ProgressInput[], +) { + return f(`/users/${account.userId}/progress/import`, { + method: "PUT", + body: progressItems, + baseUrl: url, + headers: getAuthHeaders(account.token), + }); +} + +export function importBookmarks( + url: string, + account: AccountWithToken, + bookmarks: BookmarkInput[], +) { + return f(`/users/${account.userId}/bookmarks`, { + method: "PUT", + body: bookmarks, + baseUrl: url, + headers: getAuthHeaders(account.token), + }); +} diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts new file mode 100644 index 0000000..0718415 --- /dev/null +++ b/packages/api/src/index.ts @@ -0,0 +1,13 @@ +export const name = "api"; +export * from "./auth"; +export * from "./bookmarks"; +export * from "./crypto"; +export * from "./import"; +export * from "./login"; +export * from "./meta"; +export * from "./progress"; +export * from "./register"; +export * from "./sessions"; +export * from "./settings"; +export * from "./types"; +export * from "./user"; diff --git a/packages/api/src/login.ts b/packages/api/src/login.ts new file mode 100644 index 0000000..3029eea --- /dev/null +++ b/packages/api/src/login.ts @@ -0,0 +1,33 @@ +import type { + ChallengeTokenResponse, + LoginInput, + LoginResponse, +} from "./types"; +import { f } from "./fetch"; + +export async function getLoginChallengeToken( + url: string, + publicKey: string, +): Promise { + return f("/auth/login/start", { + method: "POST", + body: { + publicKey, + }, + baseUrl: url, + }); +} + +export async function loginAccount( + url: string, + data: LoginInput, +): Promise { + return f("/auth/login/complete", { + method: "POST", + body: { + namespace: "movie-web", + ...data, + }, + baseUrl: url, + }); +} diff --git a/packages/api/src/meta.ts b/packages/api/src/meta.ts new file mode 100644 index 0000000..cca92e4 --- /dev/null +++ b/packages/api/src/meta.ts @@ -0,0 +1,8 @@ +import type { MetaResponse } from "./types"; +import { f } from "./fetch"; + +export function getBackendMeta(url: string): Promise { + return f("/meta", { + baseUrl: url, + }); +} diff --git a/packages/api/src/progress.ts b/packages/api/src/progress.ts new file mode 100644 index 0000000..27da773 --- /dev/null +++ b/packages/api/src/progress.ts @@ -0,0 +1,101 @@ +import type { + AccountWithToken, + ProgressInput, + ProgressMediaItem, + ProgressResponse, + ProgressUpdateItem, +} from "./types"; +import { getAuthHeaders } from "./auth"; +import { f } from "./fetch"; + +export function progressUpdateItemToInput( + item: ProgressUpdateItem, +): ProgressInput { + return { + duration: item.progress?.duration ?? 0, + watched: item.progress?.watched ?? 0, + tmdbId: item.tmdbId, + meta: { + title: item.title ?? "", + type: item.type ?? "", + year: item.year ?? NaN, + poster: item.poster, + }, + episodeId: item.episodeId, + seasonId: item.seasonId, + episodeNumber: item.episodeNumber, + seasonNumber: item.seasonNumber, + }; +} + +export function progressMediaItemToInputs( + tmdbId: string, + item: ProgressMediaItem, +): ProgressInput[] { + if (item.type === "show") { + return Object.entries(item.episodes).flatMap(([_, episode]) => ({ + duration: item.progress?.duration ?? episode.progress.duration, + watched: item.progress?.watched ?? episode.progress.watched, + tmdbId, + meta: { + title: item.title ?? "", + type: item.type ?? "", + year: item.year ?? NaN, + poster: item.poster, + }, + episodeId: episode.id, + seasonId: episode.seasonId, + episodeNumber: episode.number, + seasonNumber: item.seasons[episode.seasonId]?.number, + updatedAt: new Date(episode.updatedAt).toISOString(), + })); + } + return [ + { + duration: item.progress?.duration ?? 0, + watched: item.progress?.watched ?? 0, + tmdbId, + updatedAt: new Date(item.updatedAt).toISOString(), + meta: { + title: item.title ?? "", + type: item.type ?? "", + year: item.year ?? NaN, + poster: item.poster, + }, + }, + ]; +} + +export async function setProgress( + url: string, + account: AccountWithToken, + input: ProgressInput, +) { + return f( + `/users/${account.userId}/progress/${input.tmdbId}`, + { + method: "PUT", + headers: getAuthHeaders(account.token), + baseUrl: url, + body: input, + }, + ); +} + +export async function removeProgress( + url: string, + account: AccountWithToken, + id: string, + episodeId?: string, + seasonId?: string, +) { + await f(`/users/${account.userId}/progress/${id}`, { + method: "DELETE", + headers: getAuthHeaders(account.token), + baseUrl: url, + body: { + episodeId, + seasonId, + }, + }); +} diff --git a/packages/api/src/register.ts b/packages/api/src/register.ts new file mode 100644 index 0000000..4ac09bc --- /dev/null +++ b/packages/api/src/register.ts @@ -0,0 +1,40 @@ +import type { + ChallengeTokenResponse, + RegisterInput, + SessionResponse, + UserResponse, +} from "./types"; +import { f } from "./fetch"; + +export async function getRegisterChallengeToken( + url: string, + captchaToken?: string, +): Promise { + return f("/auth/register/start", { + method: "POST", + body: { + captchaToken, + }, + baseUrl: url, + }); +} + +export interface RegisterResponse { + user: UserResponse; + session: SessionResponse; + token: string; +} + +export async function registerAccount( + url: string, + data: RegisterInput, +): Promise { + return f("/auth/register/complete", { + method: "POST", + body: { + namespace: "movie-web", + ...data, + }, + baseUrl: url, + }); +} diff --git a/packages/api/src/sessions.ts b/packages/api/src/sessions.ts new file mode 100644 index 0000000..8d996e1 --- /dev/null +++ b/packages/api/src/sessions.ts @@ -0,0 +1,35 @@ +import type { AccountWithToken, SessionResponse, SessionUpdate } from "./types"; +import { getAuthHeaders } from "./auth"; +import { f } from "./fetch"; + +export async function getSessions(url: string, account: AccountWithToken) { + return f(`/users/${account.userId}/sessions`, { + headers: getAuthHeaders(account.token), + baseUrl: url, + }); +} + +export async function updateSession( + url: string, + account: AccountWithToken, + update: SessionUpdate, +) { + return f(`/sessions/${account.sessionId}`, { + method: "PATCH", + headers: getAuthHeaders(account.token), + body: update, + baseUrl: url, + }); +} + +export async function removeSession( + url: string, + token: string, + sessionId: string, +) { + return f(`/sessions/${sessionId}`, { + method: "DELETE", + headers: getAuthHeaders(token), + baseUrl: url, + }); +} diff --git a/packages/api/src/settings.ts b/packages/api/src/settings.ts new file mode 100644 index 0000000..78bcdcd --- /dev/null +++ b/packages/api/src/settings.ts @@ -0,0 +1,28 @@ +import type { + AccountWithToken, + SettingsInput, + SettingsResponse, +} from "./types"; +import { getAuthHeaders } from "./auth"; +import { f } from "./fetch"; + +export function updateSettings( + url: string, + account: AccountWithToken, + settings: SettingsInput, +) { + return f(`/users/${account.userId}/settings`, { + method: "PUT", + body: settings, + baseUrl: url, + headers: getAuthHeaders(account.token), + }); +} + +export function getSettings(url: string, account: AccountWithToken) { + return f(`/users/${account.userId}/settings`, { + method: "GET", + baseUrl: url, + headers: getAuthHeaders(account.token), + }); +} diff --git a/packages/api/src/types.ts b/packages/api/src/types.ts new file mode 100644 index 0000000..fd5fba0 --- /dev/null +++ b/packages/api/src/types.ts @@ -0,0 +1,231 @@ +export interface SessionResponse { + id: string; + userId: string; + createdAt: string; + accessedAt: string; + device: string; + userAgent: string; +} +export interface LoginResponse { + session: SessionResponse; + token: string; +} + +export interface BookmarkMetaInput { + title: string; + year: number; + poster?: string; + type: string; +} + +export interface BookmarkInput { + tmdbId: string; + meta: BookmarkMetaInput; +} + +export interface ChallengeTokenResponse { + challenge: string; +} + +export interface LoginResponse { + session: SessionResponse; + token: string; +} + +export interface LoginInput { + publicKey: string; + challenge: { + code: string; + signature: string; + }; + device: string; +} + +export interface MetaResponse { + version: string; + name: string; + description?: string; + hasCaptcha: boolean; + captchaClientKey?: string; +} + +export interface RegisterInput { + publicKey: string; + challenge: { + code: string; + signature: string; + }; + device: string; + profile: { + colorA: string; + colorB: string; + icon: string; + }; +} + +export interface ProgressInput { + meta?: { + title: string; + year: number; + poster?: string; + type: string; + }; + tmdbId: string; + watched: number; + duration: number; + seasonId?: string; + episodeId?: string; + seasonNumber?: number; + episodeNumber?: number; + updatedAt?: string; +} + +export interface SessionResponse { + id: string; + userId: string; + createdAt: string; + accessedAt: string; + device: string; + userAgent: string; +} + +export interface SessionUpdate { + deviceName: string; +} + +interface Account { + profile: { + colorA: string; + colorB: string; + icon: string; + }; +} + +export type AccountWithToken = Account & { + sessionId: string; + userId: string; + token: string; + seed: string; + deviceName: string; +}; + +export interface SettingsInput { + applicationLanguage?: string; + applicationTheme?: string | null; + defaultSubtitleLanguage?: string; + proxyUrls?: string[] | null; +} + +export interface SettingsResponse { + applicationTheme?: string | null; + applicationLanguage?: string | null; + defaultSubtitleLanguage?: string | null; + proxyUrls?: string[] | null; +} + +export interface UserResponse { + id: string; + namespace: string; + name: string; + roles: string[]; + createdAt: string; + profile: { + colorA: string; + colorB: string; + icon: string; + }; +} + +export interface UserEdit { + profile?: { + colorA: string; + colorB: string; + icon: string; + }; +} + +export interface BookmarkMediaItem { + title: string; + year?: number; + poster?: string; + type: "show" | "movie"; + updatedAt: number; +} + +export interface BookmarkResponse { + tmdbId: string; + meta: { + title: string; + year: number; + poster?: string; + type: "show" | "movie"; + }; + updatedAt: string; +} + +export interface ProgressItem { + watched: number; + duration: number; +} + +export interface ProgressSeasonItem { + title: string; + number: number; + id: string; +} + +export interface ProgressEpisodeItem { + title: string; + number: number; + id: string; + seasonId: string; + updatedAt: number; + progress: ProgressItem; +} + +export interface ProgressMediaItem { + title: string; + year?: number; + poster?: string; + type: "show" | "movie"; + progress?: ProgressItem; + updatedAt: number; + seasons: Record; + episodes: Record; +} + +export interface ProgressUpdateItem { + title?: string; + year?: number; + poster?: string; + type?: "show" | "movie"; + progress?: ProgressItem; + tmdbId: string; + id: string; + episodeId?: string; + seasonId?: string; + episodeNumber?: number; + seasonNumber?: number; + action: "upsert" | "delete"; +} + +export interface ProgressResponse { + tmdbId: string; + season: { + id?: string; + number?: number; + }; + episode: { + id?: string; + number?: number; + }; + meta: { + title: string; + year: number; + poster?: string; + type: "show" | "movie"; + }; + duration: string; + watched: string; + updatedAt: string; +} diff --git a/packages/api/src/user.ts b/packages/api/src/user.ts new file mode 100644 index 0000000..57c7667 --- /dev/null +++ b/packages/api/src/user.ts @@ -0,0 +1,129 @@ +import type { + AccountWithToken, + BookmarkMediaItem, + BookmarkResponse, + ProgressMediaItem, + ProgressResponse, + SessionResponse, + UserEdit, + UserResponse, +} from "./types"; +import { getAuthHeaders } from "./auth"; +import { f } from "./fetch"; + +export function bookmarkResponsesToEntries(responses: BookmarkResponse[]) { + const entries = responses.map((bookmark) => { + const item: BookmarkMediaItem = { + ...bookmark.meta, + updatedAt: new Date(bookmark.updatedAt).getTime(), + }; + return [bookmark.tmdbId, item] as const; + }); + + return Object.fromEntries(entries); +} + +export function progressResponsesToEntries(responses: ProgressResponse[]) { + const items: Record = {}; + + responses.forEach((v) => { + if (!items[v.tmdbId]) { + items[v.tmdbId] = { + title: v.meta.title, + poster: v.meta.poster, + type: v.meta.type, + updatedAt: new Date(v.updatedAt).getTime(), + episodes: {}, + seasons: {}, + year: v.meta.year, + }; + } + + const item = items[v.tmdbId]; + if (!item) return; + + // Since each watched episode is a single array entry but with the same tmdbId, the root item updatedAt will only have the first episode's timestamp (which is not the newest). + // Here, we are setting it explicitly so the updatedAt always has the highest updatedAt from the episodes. + if (new Date(v.updatedAt).getTime() > item.updatedAt) { + item.updatedAt = new Date(v.updatedAt).getTime(); + } + + if (item.type === "movie") { + item.progress = { + duration: Number(v.duration), + watched: Number(v.watched), + }; + } + + if (item.type === "show" && v.season.id && v.episode.id) { + item.seasons[v.season.id] = { + id: v.season.id, + number: v.season.number ?? 0, + title: "", + }; + item.episodes[v.episode.id] = { + id: v.episode.id, + number: v.episode.number ?? 0, + title: "", + progress: { + duration: Number(v.duration), + watched: Number(v.watched), + }, + seasonId: v.season.id, + updatedAt: new Date(v.updatedAt).getTime(), + }; + } + }); + + return items; +} + +export async function getUser( + url: string, + token: string, +): Promise<{ user: UserResponse; session: SessionResponse }> { + return f<{ user: UserResponse; session: SessionResponse }>("/users/@me", { + headers: getAuthHeaders(token), + baseUrl: url, + }); +} + +export async function editUser( + url: string, + account: AccountWithToken, + object: UserEdit, +): Promise<{ user: UserResponse; session: SessionResponse }> { + return f<{ user: UserResponse; session: SessionResponse }>( + `/users/${account.userId}`, + { + method: "PATCH", + headers: getAuthHeaders(account.token), + body: object, + baseUrl: url, + }, + ); +} + +export async function deleteUser( + url: string, + account: AccountWithToken, +): Promise { + return f(`/users/${account.userId}`, { + headers: getAuthHeaders(account.token), + baseUrl: url, + }); +} + +export async function getBookmarks(url: string, account: AccountWithToken) { + return f(`/users/${account.userId}/bookmarks`, { + headers: getAuthHeaders(account.token), + baseUrl: url, + }); +} + +export async function getProgress(url: string, account: AccountWithToken) { + return f(`/users/${account.userId}/progress`, { + headers: getAuthHeaders(account.token), + baseUrl: url, + }); +} diff --git a/tooling/tailwind/tsconfig.json b/packages/api/tsconfig.json similarity index 85% rename from tooling/tailwind/tsconfig.json rename to packages/api/tsconfig.json index 6e1fcf4..12305a4 100644 --- a/tooling/tailwind/tsconfig.json +++ b/packages/api/tsconfig.json @@ -3,6 +3,6 @@ "compilerOptions": { "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json", }, - "include": ["."], + "include": ["*.ts", "src"], "exclude": ["node_modules"], } diff --git a/packages/provider-utils/package.json b/packages/provider-utils/package.json new file mode 100644 index 0000000..caa9de7 --- /dev/null +++ b/packages/provider-utils/package.json @@ -0,0 +1,37 @@ +{ + "name": "@movie-web/provider-utils", + "private": true, + "version": "0.1.0", + "type": "module", + "main": "./src/index.ts", + "exports": { + ".": "./src/index.ts" + }, + "license": "MIT", + "scripts": { + "clean": "rm -rf .turbo node_modules", + "format": "prettier --check . --ignore-path ../../.gitignore", + "lint": "eslint .", + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@movie-web/eslint-config": "workspace:^0.2.0", + "@movie-web/prettier-config": "workspace:^0.1.0", + "@movie-web/tsconfig": "workspace:^0.1.0", + "eslint": "^8.56.0", + "prettier": "^3.1.1", + "typescript": "^5.4.3" + }, + "eslintConfig": { + "extends": [ + "@movie-web/eslint-config/base" + ] + }, + "prettier": "@movie-web/prettier-config", + "dependencies": { + "@movie-web/providers": "^2.3.0", + "parse-hls": "^1.0.7", + "srt-webvtt": "^2.0.0", + "tmdb-ts": "^1.6.1" + } +} diff --git a/packages/provider-utils/src/index.ts b/packages/provider-utils/src/index.ts new file mode 100644 index 0000000..13c5233 --- /dev/null +++ b/packages/provider-utils/src/index.ts @@ -0,0 +1,5 @@ +export const name = "provider-utils"; +export * from "./video"; +export * from "./util"; + +export * from "@movie-web/providers"; diff --git a/packages/provider-utils/src/util.ts b/packages/provider-utils/src/util.ts new file mode 100644 index 0000000..d8f1726 --- /dev/null +++ b/packages/provider-utils/src/util.ts @@ -0,0 +1,90 @@ +import type { AppendToResponse, MovieDetails, TvShowDetails } from "tmdb-ts"; + +import type { ScrapeMedia } from "@movie-web/providers"; + +import type { HLSTracks } from "./video"; +import { constructFullUrl, providers } from "./video"; + +export function getMetaData() { + return [...providers.listSources(), ...providers.listEmbeds()]; +} + +export function transformSearchResultToScrapeMedia( + type: T, + result: T extends "tv" + ? AppendToResponse + : AppendToResponse, + season?: number, + episode?: number, +): ScrapeMedia { + if (type === "tv") { + const tvResult = result as AppendToResponse< + TvShowDetails, + "external_ids"[], + "tvShow" + >; + return { + type: "show", + tmdbId: tvResult.id.toString(), + imdbId: tvResult.external_ids.imdb_id, + title: tvResult.name, + releaseYear: new Date(tvResult.first_air_date).getFullYear(), + season: { + number: season ?? tvResult.seasons[0]?.season_number ?? 1, + tmdbId: season + ? tvResult.seasons + .find((s) => s.season_number === season) + ?.id.toString() ?? "" + : tvResult.seasons[0]?.id.toString() ?? "", + }, + episode: { + number: episode ?? 1, + tmdbId: "", + }, + }; + } + if (type === "movie") { + const movieResult = result as AppendToResponse< + MovieDetails, + "external_ids"[], + "movie" + >; + return { + type: "movie", + tmdbId: movieResult.id.toString(), + imdbId: movieResult.external_ids.imdb_id, + title: movieResult.title, + releaseYear: new Date(movieResult.release_date).getFullYear(), + }; + } + + throw new Error("Invalid type parameter"); +} + +interface AudioTrack { + uri: string; + name: string; + language: string; + active?: boolean; +} + +export function filterAudioTracks(tracks: HLSTracks, playlist: string) { + const audioTracks: AudioTrack[] = tracks.audio.map((track) => ({ + uri: constructFullUrl(playlist, track.uri), + name: track.properties[0]?.attributes.name?.toString() ?? "Unknown", + language: track.properties[0]?.attributes.language?.toString() ?? "Unknown", + active: Boolean(track.properties[0]?.attributes.default) ?? false, + })); + + const uniqueTracks = new Set(audioTracks.map((t) => t.language)); + + const filteredAudioTracks = audioTracks.filter((track) => { + if (uniqueTracks.has(track.language)) { + uniqueTracks.delete(track.language); + return true; + } + return false; + }); + + return filteredAudioTracks; +} diff --git a/packages/provider-utils/src/video.ts b/packages/provider-utils/src/video.ts new file mode 100644 index 0000000..5224136 --- /dev/null +++ b/packages/provider-utils/src/video.ts @@ -0,0 +1,277 @@ +import type { Item } from "parse-hls"; +import hls from "parse-hls"; +import { default as toWebVTT } from "srt-webvtt"; + +import type { + EmbedOutput, + EmbedRunnerOptions, + FileBasedStream, + FullScraperEvents, + Qualities, + RunnerOptions, + RunOutput, + ScrapeMedia, + SourcererOutput, + SourceRunnerOptions, + Stream, +} from "@movie-web/providers"; +import { + makeProviders, + makeStandardFetcher, + targets, +} from "@movie-web/providers"; + +export interface InitEvent { + sourceIds: string[]; +} + +export interface UpdateEvent { + id: string; + percentage: number; + status: UpdateEventStatus; + error?: unknown; + reason?: string; +} + +export type UpdateEventStatus = "success" | "failure" | "notfound" | "pending"; + +export interface DiscoverEmbedsEvent { + sourceId: string; + embeds: { + id: string; + embedScraperId: string; + }[]; +} + +export type RunnerEvent = + | string + | InitEvent + | UpdateEvent + | DiscoverEmbedsEvent; + +export const providers = makeProviders({ + fetcher: makeStandardFetcher(fetch), + target: targets.NATIVE, + consistentIpForRequests: true, +}); + +async function withTimeout( + promise: Promise, + timeoutMs: number, +): Promise { + let timeoutHandle: NodeJS.Timeout; + const timeoutPromise = new Promise((_, reject) => { + timeoutHandle = setTimeout(() => reject(new Error("Timeout")), timeoutMs); + }); + + return Promise.race([promise, timeoutPromise]).finally(() => + clearTimeout(timeoutHandle), + ); +} + +export async function getVideoStream({ + media, + forceVTT, + events, +}: { + media: ScrapeMedia; + forceVTT?: boolean; + events?: FullScraperEvents; +}): Promise { + try { + const options: RunnerOptions = { + media, + events, + }; + + const stream = await withTimeout(providers.runAll(options), 10000); + + if (!stream) return null; + + if (forceVTT) { + const streamResult = await convertStreamCaptionsToWebVTT(stream.stream); + return { ...stream, stream: streamResult }; + } + + return stream; + } catch (error) { + return null; + } +} + +export async function getVideoStreamFromSource({ + sourceId, + media, + events, +}: { + sourceId: string; + media: ScrapeMedia; + events?: SourceRunnerOptions["events"]; +}): Promise { + try { + const sourceResult = await withTimeout( + providers.runSourceScraper({ + id: sourceId, + media, + events, + }), + 10000, + ); + + return sourceResult; + } catch (error) { + return null; + } +} + +export async function getVideoStreamFromEmbed({ + embedId, + url, + events, +}: { + embedId: string; + url: string; + events?: EmbedRunnerOptions["events"]; +}): Promise { + try { + const embedResult = await withTimeout( + providers.runEmbedScraper({ + id: embedId, + url, + events, + }), + 10000, + ); + + return embedResult; + } catch (error) { + return null; + } +} + +export function findQuality( + stream: FileBasedStream, + highest = true, +): Qualities | undefined { + const qualityOrder: Qualities[] = [ + "4k", + "1080", + "720", + "480", + "360", + "unknown", + ]; + if (!highest) { + qualityOrder.reverse(); + } + for (const quality of qualityOrder) { + if (stream.qualities[quality]) { + return quality; + } + } + return undefined; +} + +export interface HLSTracks { + video: Item[]; + audio: Item[]; + subtitles: Item[]; +} + +export async function extractTracksFromHLS( + playlistUrl: string, + headers: Record, +): Promise { + try { + const response = await fetch(playlistUrl, { headers }).then((res) => + res.text(), + ); + const playlist = hls.parse(response); + return { + video: playlist.streamRenditions, + audio: playlist.audioRenditions, + subtitles: playlist.subtitlesRenditions, + }; + } catch (e) { + return null; + } +} + +export async function findHLSQuality( + playlistUrl: string, + headers?: Record, + highest = true, +) { + try { + const response = await fetch(playlistUrl, { headers }).then((res) => + res.text(), + ); + const playlist = hls.parse(response); + + const sortedStreams = playlist.streamRenditions + .filter((stream) => stream.properties[0]?.attributes.resolution) + .sort((a, b) => { + const [widthA, heightA] = ( + a.properties[0]?.attributes.resolution as string | undefined + ) + ?.split("x") + .map(Number) ?? [0, 0]; + const [widthB, heightB] = ( + b.properties[0]?.attributes.resolution as string | undefined + ) + ?.split("x") + .map(Number) ?? [0, 0]; + if (!widthA || !heightA || !widthB || !heightB) return 0; + return widthB * heightB - widthA * heightA; + }); + + const chosenQuality = sortedStreams[highest ? 0 : sortedStreams.length - 1]; + if (!chosenQuality) return null; + + return constructFullUrl(playlistUrl, chosenQuality.uri); + } catch (e) { + return null; + } +} + +export async function extractSegmentsFromHLS( + playlistUrl: string, + headers: Record, +) { + try { + const highestQualityUrl = await findHLSQuality(playlistUrl, headers); + if (!highestQualityUrl) return null; + const response = await fetch(highestQualityUrl, { headers }).then((res) => + res.text(), + ); + const playlist = hls.parse(response); + + return playlist.segments.map((segment) => + constructFullUrl(highestQualityUrl, segment.uri), + ); + } catch (e) { + return null; + } +} + +export async function convertStreamCaptionsToWebVTT( + stream: Stream, +): Promise { + if (!stream.captions) return stream; + for (const caption of stream.captions) { + if (caption.type === "srt") { + const response = await fetch(caption.url); + const srt = await response.blob(); + caption.url = await toWebVTT(srt); + caption.type = "vtt"; + } + } + return stream; +} + +export const constructFullUrl = (playlistUrl: string, uri: string) => { + const baseUrl = playlistUrl.substring(0, playlistUrl.lastIndexOf("/") + 1); + return uri.startsWith("http://") || uri.startsWith("https://") + ? uri + : baseUrl + uri; +}; diff --git a/packages/provider-utils/tsconfig.json b/packages/provider-utils/tsconfig.json new file mode 100644 index 0000000..12305a4 --- /dev/null +++ b/packages/provider-utils/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@movie-web/tsconfig/base.json", + "compilerOptions": { + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json", + }, + "include": ["*.ts", "src"], + "exclude": ["node_modules"], +} diff --git a/packages/tmdb/package.json b/packages/tmdb/package.json index a768004..1402f20 100644 --- a/packages/tmdb/package.json +++ b/packages/tmdb/package.json @@ -20,7 +20,7 @@ "@movie-web/tsconfig": "workspace:^0.1.0", "eslint": "^8.56.0", "prettier": "^3.1.1", - "typescript": "^5.3.3" + "typescript": "^5.4.3" }, "eslintConfig": { "extends": [ diff --git a/packages/tmdb/src/details.ts b/packages/tmdb/src/details.ts index d91b048..5065c8d 100644 --- a/packages/tmdb/src/details.ts +++ b/packages/tmdb/src/details.ts @@ -1,23 +1,46 @@ -import type { MovieDetails, TvShowDetails } from "tmdb-ts"; +import type { + AppendToResponse, + MovieDetails, + SeasonDetails, + TvShowDetails, +} from "tmdb-ts"; import { tmdb } from "./util"; -export async function fetchMediaDetails( - id: string, - type: "movie" | "tv", -): Promise< - { type: "movie" | "tv"; result: TvShowDetails | MovieDetails } | undefined -> { - try { - const result = - type === "movie" - ? await tmdb.movies.details(parseInt(id, 10)) - : await tmdb.tvShows.details(parseInt(id, 10)); +export async function fetchMediaDetails< + T extends "movie" | "tv", + R = T extends "movie" + ? { + type: "movie"; + result: AppendToResponse; + } + : { + type: "tv"; + result: AppendToResponse; + }, +>(id: string, type: T): Promise { + if (type === "movie") { + const movieResult = await tmdb.movies.details(parseInt(id, 10), [ + "external_ids", + ]); + return { type: "movie", result: movieResult } as R; + } + const tvResult = await tmdb.tvShows.details(parseInt(id, 10), [ + "external_ids", + ]); + return { type: "tv", result: tvResult } as R; +} - return { - type, - result, - }; +export async function fetchSeasonDetails( + id: string, + season: number, +): Promise { + try { + const result = await tmdb.tvSeasons.details( + { tvShowID: parseInt(id, 10), seasonNumber: season }, + ["external_ids"], + ); + return result; } catch (ex) { return undefined; } diff --git a/packages/tmdb/src/index.ts b/packages/tmdb/src/index.ts index fec6c9f..a4712f3 100644 --- a/packages/tmdb/src/index.ts +++ b/packages/tmdb/src/index.ts @@ -1,4 +1,8 @@ +import type { SeasonDetails } from "tmdb-ts"; + export const name = "tmdb"; export * from "./search"; export * from "./details"; export * from "./util"; + +export type { SeasonDetails }; diff --git a/packages/tmdb/src/util.ts b/packages/tmdb/src/util.ts index 9558c2f..8aa7de1 100644 --- a/packages/tmdb/src/util.ts +++ b/packages/tmdb/src/util.ts @@ -5,5 +5,5 @@ const TMDB_API_KEY = export const tmdb = new TMDB(TMDB_API_KEY); export function getMediaPoster(posterPath: string): string { - return `https://image.tmdb.org/t/p/w185/${posterPath}`; + return `https://image.tmdb.org/t/p/w500/${posterPath}`; } diff --git a/patches/nativewind@4.0.23.patch b/patches/nativewind@4.0.23.patch deleted file mode 100644 index 788eeb4..0000000 --- a/patches/nativewind@4.0.23.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/dist/metro/transformer.js b/dist/metro/transformer.js -index 1bda43b116d02834db01a42e64dd302e3d3fe785..8ff7f8a324cd9a8531df915a704d604828959e78 100644 ---- a/dist/metro/transformer.js -+++ b/dist/metro/transformer.js -@@ -16,7 +16,7 @@ new globalThis.WebSocket(\`\${url}:${config.nativewind.fastRefreshPort}\`).addEv - StyleSheet.registerCompiled(JSON.parse('${config.nativewind.parsedOutput}'));`, "utf8"), options); - } - else if (options.platform === "web") { -- return metro_transform_worker_1.default.transform(config, projectRoot, filename, Buffer.from(`require('${config.nativewind.outputPath}');`, "utf8"), options); -+ return metro_transform_worker_1.default.transform(config, projectRoot, filename, Buffer.from(`require('${config.nativewind.outputPath.replace(/\\/g, '\\\\')}');`, "utf8"), options); - } - else { - data = Buffer.from(config.nativewind.rawOutput, "utf8"); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c0b255e..67ddde9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,11 +4,6 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -patchedDependencies: - nativewind@4.0.23: - hash: 42qwizvrnoqgalbele35lpnaqi - path: patches/nativewind@4.0.23.patch - importers: .: @@ -18,7 +13,7 @@ importers: version: link:tooling/prettier '@turbo/gen': specifier: ^1.11.3 - version: 1.12.2(@types/node@20.11.16)(typescript@5.3.3) + version: 1.12.2(@types/node@20.12.7)(typescript@5.4.3) prettier: specifier: ^3.1.1 version: 3.2.4 @@ -26,47 +21,137 @@ importers: specifier: ^1.11.3 version: 1.12.2 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: ^5.4.3 + version: 5.4.3 apps/expo: dependencies: '@expo/metro-config': specifier: ^0.17.3 - version: 0.17.3(@react-native/babel-preset@0.73.20) + version: 0.17.3(@react-native/babel-preset@0.73.21) + '@movie-web/api': + specifier: '*' + version: link:../../packages/api + '@movie-web/colors': + specifier: '*' + version: link:../../tooling/colors + '@movie-web/provider-utils': + specifier: '*' + version: link:../../packages/provider-utils '@movie-web/tmdb': specifier: '*' version: link:../../packages/tmdb + '@octokit/rest': + specifier: ^20.0.2 + version: 20.0.2 + '@react-native-anywhere/polyfill-base64': + specifier: 0.0.1-alpha.0 + version: 0.0.1-alpha.0 + '@react-navigation/native': + specifier: ^6.1.9 + version: 6.1.9(react-native@0.73.6)(react@18.2.0) + '@salihgun/react-native-video-processor': + specifier: ^0.3.1 + version: 0.3.1(ffmpeg-kit-react-native@6.0.2)(react-native-video@5.2.1)(react-native@0.73.6)(react@18.2.0) + '@tamagui/animations-moti': + specifier: ^1.94.0 + version: 1.94.0(react-dom@18.2.0)(react-native-reanimated@3.6.2) + '@tamagui/babel-plugin': + specifier: ^1.94.0 + version: 1.94.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) + '@tamagui/config': + specifier: ^1.94.0 + version: 1.94.0(react-dom@18.2.0)(react-native-reanimated@3.6.2)(react-native@0.73.6)(react@18.2.0) + '@tamagui/metro-plugin': + specifier: ^1.94.0 + version: 1.94.0(@babel/core@7.23.9)(react-dom@18.2.0)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native-svg@14.1.0)(react-native@0.73.6)(react@18.2.0)(tailwindcss@3.4.3)(typescript@5.4.3) + '@tamagui/toast': + specifier: 1.94.0 + version: 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tanstack/react-query': + specifier: ^5.22.2 + version: 5.22.2(react@18.2.0) + burnt: + specifier: ^0.12.2 + version: 0.12.2(expo@50.0.14)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0) class-variance-authority: specifier: ^0.7.0 version: 0.7.0 - clsx: - specifier: ^2.1.0 - version: 2.1.0 expo: - specifier: ~50.0.5 - version: 50.0.5(@babel/core@7.23.9)(@react-native/babel-preset@0.73.20) + specifier: ~50.0.14 + version: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo-alternate-app-icons: + specifier: ^0.1.7 + version: 0.1.7(expo@50.0.14)(react-native@0.73.6)(react@18.2.0) + expo-application: + specifier: ~5.8.3 + version: 5.8.3(expo@50.0.14) + expo-av: + specifier: ~13.10.5 + version: 13.10.5(expo@50.0.14) + expo-brightness: + specifier: ~11.8.0 + version: 11.8.0(expo@50.0.14) + expo-build-properties: + specifier: ~0.11.1 + version: 0.11.1(expo@50.0.14) + expo-clipboard: + specifier: ^5.0.1 + version: 5.0.1(expo@50.0.14) expo-constants: specifier: ~15.4.5 - version: 15.4.5(expo@50.0.5) + version: 15.4.5(expo@50.0.14) + expo-file-system: + specifier: ~16.0.8 + version: 16.0.8(expo@50.0.14) + expo-haptics: + specifier: ~12.8.1 + version: 12.8.1(expo@50.0.14) + expo-linear-gradient: + specifier: ^12.7.2 + version: 12.7.2(expo@50.0.14) expo-linking: specifier: ~6.2.2 - version: 6.2.2(expo@50.0.5) + version: 6.2.2(expo@50.0.14) + expo-media-library: + specifier: ~15.9.1 + version: 15.9.1(expo@50.0.14) + expo-navigation-bar: + specifier: ^2.8.1 + version: 2.8.1(expo@50.0.14) + expo-network: + specifier: ~5.8.0 + version: 5.8.0(expo@50.0.14) + expo-pod-pinner: + specifier: ^1.0.1 + version: 1.0.1 expo-router: - specifier: ~3.4.6 - version: 3.4.6(expo-constants@15.4.5)(expo-linking@6.2.2)(expo-modules-autolinking@1.10.2)(expo-status-bar@1.11.1)(expo@50.0.5)(react-dom@18.2.0)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.2)(react@18.2.0) + specifier: ~3.4.8 + version: 3.4.8(expo-constants@15.4.5)(expo-linking@6.2.2)(expo-modules-autolinking@1.10.3)(expo-status-bar@1.11.1)(expo@50.0.14)(react-dom@18.2.0)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.6)(react@18.2.0) + expo-screen-orientation: + specifier: ~6.4.1 + version: 6.4.1(expo@50.0.14) expo-splash-screen: specifier: ~0.26.4 - version: 0.26.4(expo-modules-autolinking@1.10.2)(expo@50.0.5) + version: 0.26.4(expo-modules-autolinking@1.10.3)(expo@50.0.14) expo-status-bar: specifier: ~1.11.1 version: 1.11.1 + expo-system-ui: + specifier: ^2.9.3 + version: 2.9.3(expo@50.0.14) expo-web-browser: specifier: ^12.8.2 - version: 12.8.2(expo@50.0.5) - nativewind: - specifier: ~4.0.23 - version: 4.0.23(patch_hash=42qwizvrnoqgalbele35lpnaqi)(@babel/core@7.23.9)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native@0.73.2)(react@18.2.0)(tailwindcss@3.4.1) + version: 12.8.2(expo@50.0.14) + ffmpeg-kit-react-native: + specifier: ^6.0.2 + version: 6.0.2(react-native@0.73.6)(react@18.2.0) + immer: + specifier: ^10.0.3 + version: 10.0.3 + iso-639-1: + specifier: ^3.1.2 + version: 3.1.2 react: specifier: 18.2.0 version: 18.2.0 @@ -74,29 +159,56 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) react-native: - specifier: 0.73.2 - version: 0.73.2(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) - react-native-css-interop: - specifier: ~0.0.22 - version: 0.0.22(@babel/core@7.23.9)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native@0.73.2)(react@18.2.0)(tailwindcss@3.4.1) + specifier: 0.73.6 + version: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native-context-menu-view: + specifier: ^1.14.1 + version: 1.14.1(react-native@0.73.6)(react@18.2.0) react-native-gesture-handler: specifier: ~2.14.1 - version: 2.14.1(react-native@0.73.2)(react@18.2.0) + version: 2.14.1(react-native@0.73.6)(react@18.2.0) + react-native-markdown-display: + specifier: ^7.0.2 + version: 7.0.2(react-native@0.73.6)(react@18.2.0) + react-native-mmkv: + specifier: ^2.12.2 + version: 2.12.2(react-native@0.73.6)(react@18.2.0) + react-native-modal: + specifier: ^13.0.1 + version: 13.0.1(react-native@0.73.6)(react@18.2.0) + react-native-quick-base64: + specifier: ^2.0.8 + version: 2.0.8(react-native@0.73.6)(react@18.2.0) + react-native-quick-crypto: + specifier: ^0.6.1 + version: 0.6.1(react-native@0.73.6)(react@18.2.0) react-native-reanimated: specifier: ~3.6.2 - version: 3.6.2(@babel/core@7.23.9)(@babel/plugin-proposal-nullish-coalescing-operator@7.18.6)(@babel/plugin-proposal-optional-chaining@7.21.0)(@babel/plugin-transform-arrow-functions@7.23.3)(@babel/plugin-transform-shorthand-properties@7.23.3)(@babel/plugin-transform-template-literals@7.23.3)(react-native@0.73.2)(react@18.2.0) + version: 3.6.2(@babel/core@7.23.9)(@babel/plugin-proposal-nullish-coalescing-operator@7.18.6)(@babel/plugin-proposal-optional-chaining@7.21.0)(@babel/plugin-transform-arrow-functions@7.24.1)(@babel/plugin-transform-shorthand-properties@7.24.1)(@babel/plugin-transform-template-literals@7.24.1)(react-native@0.73.6)(react@18.2.0) react-native-safe-area-context: specifier: ~4.8.2 - version: 4.8.2(react-native@0.73.2)(react@18.2.0) + version: 4.8.2(react-native@0.73.6)(react@18.2.0) react-native-screens: specifier: ~3.29.0 - version: 3.29.0(react-native@0.73.2)(react@18.2.0) + version: 3.29.0(react-native@0.73.6)(react@18.2.0) + react-native-svg: + specifier: 14.1.0 + version: 14.1.0(react-native@0.73.6)(react@18.2.0) react-native-web: specifier: ^0.19.10 version: 0.19.10(react-dom@18.2.0)(react@18.2.0) - tailwind-merge: - specifier: ^2.2.1 - version: 2.2.1 + subsrt-ts: + specifier: ^2.1.2 + version: 2.1.2 + tamagui: + specifier: ^1.94.0 + version: 1.94.0(@types/react@18.2.52)(immer@10.0.3)(react-dom@18.2.0)(react-native-web@0.19.10)(react-native@0.73.6)(react@18.2.0) + text-encoding-polyfill: + specifier: ^0.6.7 + version: 0.6.7 + zustand: + specifier: ^4.4.7 + version: 4.4.7(@types/react@18.2.52)(immer@10.0.3)(react@18.2.0) devDependencies: '@babel/core': specifier: ^7.23.9 @@ -113,30 +225,98 @@ importers: '@movie-web/prettier-config': specifier: workspace:^0.1.0 version: link:../../tooling/prettier - '@movie-web/tailwind-config': - specifier: workspace:^0.1.0 - version: link:../../tooling/tailwind '@movie-web/tsconfig': specifier: workspace:^0.1.0 version: link:../../tooling/typescript + '@tanstack/eslint-plugin-query': + specifier: ^5.20.1 + version: 5.20.1(eslint@8.56.0)(typescript@5.4.3) '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 '@types/react': specifier: ^18.2.48 version: 18.2.52 + babel-plugin-module-resolver: + specifier: ^5.0.0 + version: 5.0.0 eslint: specifier: ^8.56.0 version: 8.56.0 prettier: specifier: ^3.1.1 version: 3.2.4 - tailwindcss: - specifier: ^3.4.0 - version: 3.4.1 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: ^5.4.3 + version: 5.4.3 + + packages/api: + dependencies: + '@noble/hashes': + specifier: ^1.4.0 + version: 1.4.0 + '@scure/bip39': + specifier: ^1.3.0 + version: 1.3.0 + node-forge: + specifier: ^1.3.1 + version: 1.3.1 + devDependencies: + '@movie-web/eslint-config': + specifier: workspace:^0.2.0 + version: link:../../tooling/eslint + '@movie-web/prettier-config': + specifier: workspace:^0.1.0 + version: link:../../tooling/prettier + '@movie-web/tsconfig': + specifier: workspace:^0.1.0 + version: link:../../tooling/typescript + '@types/node-forge': + specifier: ^1.3.11 + version: 1.3.11 + eslint: + specifier: ^8.56.0 + version: 8.56.0 + prettier: + specifier: ^3.1.1 + version: 3.2.4 + typescript: + specifier: ^5.4.3 + version: 5.4.3 + + packages/provider-utils: + dependencies: + '@movie-web/providers': + specifier: ^2.3.0 + version: 2.3.0 + parse-hls: + specifier: ^1.0.7 + version: 1.0.7 + srt-webvtt: + specifier: ^2.0.0 + version: 2.0.0 + tmdb-ts: + specifier: ^1.6.1 + version: 1.6.1 + devDependencies: + '@movie-web/eslint-config': + specifier: workspace:^0.2.0 + version: link:../../tooling/eslint + '@movie-web/prettier-config': + specifier: workspace:^0.1.0 + version: link:../../tooling/prettier + '@movie-web/tsconfig': + specifier: workspace:^0.1.0 + version: link:../../tooling/typescript + eslint: + specifier: ^8.56.0 + version: 8.56.0 + prettier: + specifier: ^3.1.1 + version: 3.2.4 + typescript: + specifier: ^5.4.3 + version: 5.4.3 packages/tmdb: dependencies: @@ -160,17 +340,38 @@ importers: specifier: ^3.1.1 version: 3.2.4 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: ^5.4.3 + version: 5.4.3 + + tooling/colors: + devDependencies: + '@movie-web/eslint-config': + specifier: workspace:^0.2.0 + version: link:../eslint + '@movie-web/prettier-config': + specifier: workspace:^0.1.0 + version: link:../prettier + '@movie-web/tsconfig': + specifier: workspace:^0.1.0 + version: link:../typescript + eslint: + specifier: ^8.56.0 + version: 8.56.0 + prettier: + specifier: ^3.1.1 + version: 3.2.4 + typescript: + specifier: ^5.4.3 + version: 5.4.3 tooling/eslint: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^6.19.1 - version: 6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3) + version: 6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.4.3) '@typescript-eslint/parser': specifier: ^6.19.1 - version: 6.20.0(eslint@8.56.0)(typescript@5.3.3) + version: 6.20.0(eslint@8.56.0)(typescript@5.4.3) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.56.0) @@ -206,8 +407,8 @@ importers: specifier: ^3.1.1 version: 3.2.4 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: ^5.4.3 + version: 5.4.3 tooling/github: {} @@ -227,42 +428,8 @@ importers: specifier: workspace:^0.1.0 version: link:../typescript typescript: - specifier: ^5.3.3 - version: 5.3.3 - - tooling/tailwind: - dependencies: - autoprefixer: - specifier: ^10.4.17 - version: 10.4.17(postcss@8.4.33) - postcss: - specifier: ^8.4.32 - version: 8.4.33 - tailwindcss: - specifier: ^3.4.0 - version: 3.4.1 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.1) - devDependencies: - '@movie-web/eslint-config': - specifier: workspace:^0.2.0 - version: link:../eslint - '@movie-web/prettier-config': - specifier: workspace:^0.1.0 - version: link:../prettier - '@movie-web/tsconfig': - specifier: workspace:^0.1.0 - version: link:../typescript - eslint: - specifier: ^8.56.0 - version: 8.56.0 - prettier: - specifier: ^3.1.1 - version: 3.2.4 - typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: ^5.4.3 + version: 5.4.3 tooling/typescript: {} @@ -275,6 +442,7 @@ packages: /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} + dev: false /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} @@ -388,7 +556,7 @@ packages: dependencies: '@babel/core': 7.23.9 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -403,7 +571,7 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.23.9 + '@babel/template': 7.24.0 '@babel/types': 7.23.9 /@babel/helper-hoist-variables@7.22.5: @@ -416,7 +584,7 @@ packages: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} @@ -441,12 +609,16 @@ packages: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} + /@babel/helper-plugin-utils@7.24.0: + resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} + engines: {node: '>=6.9.0'} + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.9): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} @@ -504,8 +676,8 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 /@babel/helpers@7.23.9: resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} @@ -532,6 +704,13 @@ packages: dependencies: '@babel/types': 7.23.9 + /@babel/parser@7.24.0: + resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.24.0 + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} @@ -571,7 +750,7 @@ packages: dependencies: '@babel/core': 7.23.9 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) dev: false @@ -585,7 +764,7 @@ packages: dependencies: '@babel/core': 7.23.9 '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: false /@babel/plugin-proposal-decorators@7.23.9(@babel/core@7.23.9): @@ -596,7 +775,7 @@ packages: dependencies: '@babel/core': 7.23.9 '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.23.9) dev: false @@ -607,7 +786,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.23.9) dev: false @@ -619,7 +798,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) dev: false @@ -631,7 +810,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) dev: false @@ -645,7 +824,7 @@ packages: '@babel/compat-data': 7.23.5 '@babel/core': 7.23.9 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) dev: false @@ -658,7 +837,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) dev: false @@ -670,7 +849,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) dev: false @@ -715,7 +894,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: false /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.9): @@ -733,7 +912,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: false /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.9): @@ -751,7 +930,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: false /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.9): @@ -795,7 +974,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: false /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9): @@ -871,7 +1050,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: false /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.9): @@ -893,6 +1072,16 @@ packages: '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.23.9): resolution: {integrity: sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==} engines: {node: '>=6.9.0'} @@ -1046,7 +1235,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.9) dev: false @@ -1198,7 +1387,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: false /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.9): @@ -1292,7 +1481,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: false /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.9): @@ -1312,7 +1501,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: false /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.9): @@ -1322,7 +1511,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: false /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.9): @@ -1334,7 +1523,7 @@ packages: '@babel/core': 7.23.9 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) '@babel/types': 7.23.9 dev: false @@ -1347,7 +1536,7 @@ packages: dependencies: '@babel/core': 7.23.9 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: false /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.9): @@ -1369,15 +1558,15 @@ packages: '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-runtime@7.23.9(@babel/core@7.23.9): - resolution: {integrity: sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ==} + /@babel/plugin-transform-runtime@7.24.0(@babel/core@7.23.9): + resolution: {integrity: sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.9) babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.23.9) babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.9) @@ -1395,6 +1584,16 @@ packages: '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} @@ -1423,6 +1622,16 @@ packages: '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} @@ -1441,7 +1650,7 @@ packages: '@babel/core': 7.23.9 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) dev: false @@ -1581,7 +1790,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.9) dev: false @@ -1603,7 +1812,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.9) '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) @@ -1618,7 +1827,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) @@ -1664,6 +1873,14 @@ packages: '@babel/parser': 7.23.9 '@babel/types': 7.23.9 + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 + /@babel/traverse@7.23.9: resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} engines: {node: '>=6.9.0'} @@ -1689,6 +1906,24 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + /@craftzdog/react-native-buffer@6.0.5(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-Av+YqfwA9e7jhgI9GFE/gTpwl/H+dRRLmZyJPOpKTy107j9Oj7oXlm3/YiMNz+C/CEGqcKAOqnXDLs4OL6AAFw==} + dependencies: + ieee754: 1.2.1 + react-native-quick-base64: 2.0.8(react-native@0.73.6)(react@18.2.0) + transitivePeerDependencies: + - react + - react-native + dev: false + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -1703,6 +1938,227 @@ packages: '@types/hammerjs': 2.0.45 dev: false + /@emotion/is-prop-valid@0.8.8: + resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} + requiresBuild: true + dependencies: + '@emotion/memoize': 0.7.4 + dev: false + optional: true + + /@emotion/memoize@0.7.4: + resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + requiresBuild: true + dev: false + optional: true + + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1746,8 +2202,8 @@ packages: safe-json-stringify: 1.2.0 dev: false - /@expo/cli@0.17.4(@react-native/babel-preset@0.73.20)(expo-modules-autolinking@1.10.2): - resolution: {integrity: sha512-6pswecVC9qCBp1qa004D2HjPeXKYDaw/PhyUOsqnF7AUCwunlKa1tJO0Ik8zxzF68kuywIOXUnTJl74Z2aHqiw==} + /@expo/cli@0.17.8(@react-native/babel-preset@0.73.21)(expo-modules-autolinking@1.10.3): + resolution: {integrity: sha512-yfkoghCltbGPDbRI71Qu3puInjXx4wO82+uhW82qbWLvosfIN7ep5Gr0Lq54liJpvlUG6M0IXM1GiGqcCyP12w==} hasBin: true dependencies: '@babel/runtime': 7.23.9 @@ -1755,18 +2211,18 @@ packages: '@expo/config': 8.5.4 '@expo/config-plugins': 7.8.4 '@expo/devcert': 1.1.0 - '@expo/env': 0.2.1 + '@expo/env': 0.2.2 '@expo/image-utils': 0.4.1 '@expo/json-file': 8.3.0 - '@expo/metro-config': 0.17.3(@react-native/babel-preset@0.73.20) + '@expo/metro-config': 0.17.6(@react-native/babel-preset@0.73.21) '@expo/osascript': 2.1.0 '@expo/package-manager': 1.4.2 '@expo/plist': 0.1.0 - '@expo/prebuild-config': 6.7.4(expo-modules-autolinking@1.10.2) + '@expo/prebuild-config': 6.7.4(expo-modules-autolinking@1.10.3) '@expo/rudder-sdk-node': 1.1.1 '@expo/spawn-async': 1.5.0 '@expo/xcpretty': 4.3.1 - '@react-native/dev-middleware': 0.73.7 + '@react-native/dev-middleware': 0.73.8 '@urql/core': 2.3.6(graphql@15.8.0) '@urql/exchange-retry': 0.3.0(graphql@15.8.0) accepts: 1.3.8 @@ -1816,6 +2272,7 @@ packages: send: 0.18.0 slugify: 1.6.6 source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 structured-headers: 0.4.1 tar: 6.2.0 temp-dir: 2.0.0 @@ -1920,6 +2377,18 @@ packages: - supports-color dev: false + /@expo/env@0.2.2: + resolution: {integrity: sha512-m9nGuaSpzdvMzevQ1H60FWgf4PG5s4J0dfKUzdAGnDu7sMUerY/yUeDaA4+OBo3vBwGVQ+UHcQS9vPSMBNaPcg==} + dependencies: + chalk: 4.1.2 + debug: 4.3.4 + dotenv: 16.0.3 + dotenv-expand: 10.0.0 + getenv: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + /@expo/fingerprint@0.6.0: resolution: {integrity: sha512-KfpoVRTMwMNJ/Cf5o+Ou8M/Y0EGSTqK+rbi70M2Y0K2qgWNfMJ1gm6sYO9uc8lcTr7YSYM1Rme3dk7QXhpScNA==} hasBin: true @@ -1960,7 +2429,7 @@ packages: write-file-atomic: 2.4.3 dev: false - /@expo/metro-config@0.17.3(@react-native/babel-preset@0.73.20): + /@expo/metro-config@0.17.3(@react-native/babel-preset@0.73.21): resolution: {integrity: sha512-YW8ixbaz6yL7/Mg1rJJejiAAVQQKjGY1wXvT2Dh487r/r9/j1yE1YRS/oRY1yItYzbnHvO0p0jMnEGfiFYL3Tg==} peerDependencies: '@react-native/babel-preset': '*' @@ -1973,7 +2442,7 @@ packages: '@expo/env': 0.2.1 '@expo/json-file': 8.3.0 '@expo/spawn-async': 1.7.2 - '@react-native/babel-preset': 0.73.20(@babel/core@7.23.9)(@babel/preset-env@7.23.9) + '@react-native/babel-preset': 0.73.21(@babel/core@7.23.9)(@babel/preset-env@7.23.9) babel-preset-fbjs: 3.4.0(@babel/core@7.23.9) chalk: 4.1.2 debug: 4.3.4 @@ -1990,12 +2459,42 @@ packages: - supports-color dev: false - /@expo/metro-runtime@3.1.2(react-native@0.73.2): - resolution: {integrity: sha512-Wekv2AZ3HY0NG9Im8AMB1KHGyHjmALg6xekVK34724I/DLtcocLKtQEP04oI9GcAZBotAhROHH5E4ADhJAEgYg==} + /@expo/metro-config@0.17.6(@react-native/babel-preset@0.73.21): + resolution: {integrity: sha512-WaC1C+sLX/Wa7irwUigLhng3ckmXIEQefZczB8DfYmleV6uhfWWo2kz/HijFBpV7FKs2cW6u8J/aBQpFkxlcqg==} + peerDependencies: + '@react-native/babel-preset': '*' + dependencies: + '@babel/core': 7.23.9 + '@babel/generator': 7.23.6 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 + '@expo/config': 8.5.4 + '@expo/env': 0.2.2 + '@expo/json-file': 8.3.0 + '@expo/spawn-async': 1.7.2 + '@react-native/babel-preset': 0.73.21(@babel/core@7.23.9)(@babel/preset-env@7.23.9) + babel-preset-fbjs: 3.4.0(@babel/core@7.23.9) + chalk: 4.1.2 + debug: 4.3.4 + find-yarn-workspace-root: 2.0.0 + fs-extra: 9.1.0 + getenv: 1.0.0 + glob: 7.2.3 + jsc-safe-url: 0.2.4 + lightningcss: 1.19.0 + postcss: 8.4.36 + resolve-from: 5.0.0 + sucrase: 3.34.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@expo/metro-runtime@3.1.3(react-native@0.73.6): + resolution: {integrity: sha512-u1CaQJJlSgvxBB5NJ6YMVvSDTTRzjT71dHpEBnKPZhpFv5ebVry52FZ2sEeEEA6mHG5zGxWXmHImW3hNKHh8EA==} peerDependencies: react-native: '*' dependencies: - react-native: 0.73.2(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) dev: false /@expo/osascript@2.1.0: @@ -2031,7 +2530,7 @@ packages: xmlbuilder: 14.0.0 dev: false - /@expo/prebuild-config@6.7.4(expo-modules-autolinking@1.10.2): + /@expo/prebuild-config@6.7.4(expo-modules-autolinking@1.10.3): resolution: {integrity: sha512-x8EUdCa8DTMZ/dtEXjHAdlP+ljf6oSeSKNzhycXiHhpMSMG9jEhV28ocCwc6cKsjK5GziweEiHwvrj6+vsBlhA==} peerDependencies: expo-modules-autolinking: '>=0.8.1' @@ -2042,7 +2541,7 @@ packages: '@expo/image-utils': 0.4.1 '@expo/json-file': 8.3.0 debug: 4.3.4 - expo-modules-autolinking: 1.10.2 + expo-modules-autolinking: 1.10.3 fs-extra: 9.1.0 resolve-from: 5.0.0 semver: 7.5.3 @@ -2110,6 +2609,58 @@ packages: js-yaml: 4.1.0 dev: false + /@floating-ui/core@1.6.0: + resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} + dependencies: + '@floating-ui/utils': 0.2.1 + dev: false + + /@floating-ui/dom@1.6.3: + resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==} + dependencies: + '@floating-ui/core': 1.6.0 + '@floating-ui/utils': 0.2.1 + dev: false + + /@floating-ui/react-dom@2.0.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 1.6.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@floating-ui/react-native@0.10.4(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-R0RiZ+XiC+S2Xw11i+HjXj8/ik006edp2SDGKELOlkP55SNE1UMfxackchi/rJfnv+qL9YHQRNySte967+kyVA==} + peerDependencies: + react: '>=16.8.0' + react-native: '>=0.64.0' + dependencies: + '@floating-ui/core': 1.6.0 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@floating-ui/react@0.26.9(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-p86wynZJVEkEq2BBjY/8p2g3biQ6TlgT4o/3KgFKyTWoJLU1GZ8wpctwRqtkEl2tseYA+kw7dBAIDFcednfI5w==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/utils': 0.2.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tabbable: 6.2.0 + dev: false + + /@floating-ui/utils@0.2.1: + resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + dev: false + /@gar/promisify@1.1.3: resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} dev: false @@ -2179,6 +2730,7 @@ packages: strip-ansi-cjs: /strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: false /@isaacs/ttlcache@1.4.1: resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} @@ -2198,7 +2750,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.30 jest-mock: 29.7.0 dev: false @@ -2208,7 +2760,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.11.16 + '@types/node': 20.11.30 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -2227,7 +2779,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.16 + '@types/node': 20.11.30 '@types/yargs': 15.0.19 chalk: 4.1.2 dev: false @@ -2252,19 +2804,38 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.22 + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + dev: false + /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + dev: false + /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + dev: false + /@jridgewell/source-map@0.3.5: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: false /@jridgewell/sourcemap-codec@1.4.15: @@ -2276,6 +2847,13 @@ packages: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: false + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: @@ -2283,6 +2861,73 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@motionone/animation@10.17.0: + resolution: {integrity: sha512-ANfIN9+iq1kGgsZxs+Nz96uiNcPLGTXwfNo2Xz/fcJXniPYpaz/Uyrfa+7I5BPLxCP82sh7quVDudf1GABqHbg==} + dependencies: + '@motionone/easing': 10.17.0 + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + tslib: 2.6.2 + dev: false + + /@motionone/dom@10.12.0: + resolution: {integrity: sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw==} + dependencies: + '@motionone/animation': 10.17.0 + '@motionone/generators': 10.17.0 + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + hey-listen: 1.0.8 + tslib: 2.6.2 + dev: false + + /@motionone/easing@10.17.0: + resolution: {integrity: sha512-Bxe2wSuLu/qxqW4rBFS5m9tMLOw+QBh8v5A7Z5k4Ul4sTj5jAOfZG5R0bn5ywmk+Fs92Ij1feZ5pmC4TeXA8Tg==} + dependencies: + '@motionone/utils': 10.17.0 + tslib: 2.6.2 + dev: false + + /@motionone/generators@10.17.0: + resolution: {integrity: sha512-T6Uo5bDHrZWhIfxG/2Aut7qyWQyJIWehk6OB4qNvr/jwA/SRmixwbd7SOrxZi1z5rH3LIeFFBKK1xHnSbGPZSQ==} + dependencies: + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + tslib: 2.6.2 + dev: false + + /@motionone/types@10.17.0: + resolution: {integrity: sha512-EgeeqOZVdRUTEHq95Z3t8Rsirc7chN5xFAPMYFobx8TPubkEfRSm5xihmMUkbaR2ErKJTUw3347QDPTHIW12IA==} + dev: false + + /@motionone/utils@10.17.0: + resolution: {integrity: sha512-bGwrki4896apMWIj9yp5rAS2m0xyhxblg6gTB/leWDPt+pb410W8lYWsxyurX+DH+gO1zsQsfx2su/c1/LtTpg==} + dependencies: + '@motionone/types': 10.17.0 + hey-listen: 1.0.8 + tslib: 2.6.2 + dev: false + + /@movie-web/providers@2.3.0: + resolution: {integrity: sha512-jr3C9alAODEyxgWSBMZ6LlrubrZCfpraTuunf7sPpY19WcV8rHbfz1kxeLdBXC2BqPfgQmipVr+KsXvCQqKhXw==} + requiresBuild: true + dependencies: + cheerio: 1.0.0-rc.12 + cookie: 0.6.0 + crypto-js: 4.2.0 + form-data: 4.0.0 + iso-639-1: 3.1.2 + nanoid: 3.3.7 + node-fetch: 3.3.2 + set-cookie-parser: 2.6.0 + unpacker: 1.0.1 + dev: false + + /@noble/hashes@1.4.0: + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + dev: false + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2317,10 +2962,114 @@ packages: rimraf: 3.0.2 dev: false + /@octokit/auth-token@4.0.0: + resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} + engines: {node: '>= 18'} + dev: false + + /@octokit/core@5.1.0: + resolution: {integrity: sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==} + engines: {node: '>= 18'} + dependencies: + '@octokit/auth-token': 4.0.0 + '@octokit/graphql': 7.0.2 + '@octokit/request': 8.2.0 + '@octokit/request-error': 5.0.1 + '@octokit/types': 12.6.0 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + dev: false + + /@octokit/endpoint@9.0.4: + resolution: {integrity: sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==} + engines: {node: '>= 18'} + dependencies: + '@octokit/types': 12.6.0 + universal-user-agent: 6.0.1 + dev: false + + /@octokit/graphql@7.0.2: + resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==} + engines: {node: '>= 18'} + dependencies: + '@octokit/request': 8.2.0 + '@octokit/types': 12.6.0 + universal-user-agent: 6.0.1 + dev: false + + /@octokit/openapi-types@20.0.0: + resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} + dev: false + + /@octokit/plugin-paginate-rest@9.2.1(@octokit/core@5.1.0): + resolution: {integrity: sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' + dependencies: + '@octokit/core': 5.1.0 + '@octokit/types': 12.6.0 + dev: false + + /@octokit/plugin-request-log@4.0.1(@octokit/core@5.1.0): + resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' + dependencies: + '@octokit/core': 5.1.0 + dev: false + + /@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.1.0): + resolution: {integrity: sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' + dependencies: + '@octokit/core': 5.1.0 + '@octokit/types': 12.6.0 + dev: false + + /@octokit/request-error@5.0.1: + resolution: {integrity: sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==} + engines: {node: '>= 18'} + dependencies: + '@octokit/types': 12.6.0 + deprecation: 2.3.1 + once: 1.4.0 + dev: false + + /@octokit/request@8.2.0: + resolution: {integrity: sha512-exPif6x5uwLqv1N1irkLG1zZNJkOtj8bZxuVHd71U5Ftuxf2wGNvAJyNBcPbPC+EBzwYEbBDdSFb8EPcjpYxPQ==} + engines: {node: '>= 18'} + dependencies: + '@octokit/endpoint': 9.0.4 + '@octokit/request-error': 5.0.1 + '@octokit/types': 12.6.0 + universal-user-agent: 6.0.1 + dev: false + + /@octokit/rest@20.0.2: + resolution: {integrity: sha512-Ux8NDgEraQ/DMAU1PlAohyfBBXDwhnX2j33Z1nJNziqAfHi70PuxkFYIcIt8aIAxtRE7KVuKp8lSR8pA0J5iOQ==} + engines: {node: '>= 18'} + dependencies: + '@octokit/core': 5.1.0 + '@octokit/plugin-paginate-rest': 9.2.1(@octokit/core@5.1.0) + '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.1.0) + '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.1.0) + dev: false + + /@octokit/types@12.6.0: + resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} + dependencies: + '@octokit/openapi-types': 20.0.0 + dev: false + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} requiresBuild: true + dev: false optional: true /@radix-ui/react-compose-refs@1.0.0(react@18.2.0): @@ -2342,20 +3091,26 @@ packages: react: 18.2.0 dev: false - /@react-native-community/cli-clean@12.3.0: - resolution: {integrity: sha512-iAgLCOWYRGh9ukr+eVQnhkV/OqN3V2EGd/in33Ggn/Mj4uO6+oUncXFwB+yjlyaUNz6FfjudhIz09yYGSF+9sg==} + /@react-native-anywhere/polyfill-base64@0.0.1-alpha.0: + resolution: {integrity: sha512-OF3idcETV622AyFvvK54ot2EG0G43tZTZJyWtFHtrEKUmoUvSuC5DOMeLino0TwBQJn2s26MBnIPVgokBJb/xw==} dependencies: - '@react-native-community/cli-tools': 12.3.0 + base-64: 0.1.0 + dev: false + + /@react-native-community/cli-clean@12.3.6: + resolution: {integrity: sha512-gUU29ep8xM0BbnZjwz9MyID74KKwutq9x5iv4BCr2im6nly4UMf1B1D+V225wR7VcDGzbgWjaezsJShLLhC5ig==} + dependencies: + '@react-native-community/cli-tools': 12.3.6 chalk: 4.1.2 execa: 5.1.1 transitivePeerDependencies: - encoding dev: false - /@react-native-community/cli-config@12.3.0: - resolution: {integrity: sha512-BrTn5ndFD9uOxO8kxBQ32EpbtOvAsQExGPI7SokdI4Zlve70FziLtTq91LTlTUgMq1InVZn/jJb3VIDk6BTInQ==} + /@react-native-community/cli-config@12.3.6: + resolution: {integrity: sha512-JGWSYQ9EAK6m2v0abXwFLEfsqJ1zkhzZ4CV261QZF9MoUNB6h57a274h1MLQR9mG6Tsh38wBUuNfEPUvS1vYew==} dependencies: - '@react-native-community/cli-tools': 12.3.0 + '@react-native-community/cli-tools': 12.3.6 chalk: 4.1.2 cosmiconfig: 5.2.1 deepmerge: 4.3.1 @@ -2365,54 +3120,52 @@ packages: - encoding dev: false - /@react-native-community/cli-debugger-ui@12.3.0: - resolution: {integrity: sha512-w3b0iwjQlk47GhZWHaeTG8kKH09NCMUJO729xSdMBXE8rlbm4kHpKbxQY9qKb6NlfWSJN4noGY+FkNZS2rRwnQ==} + /@react-native-community/cli-debugger-ui@12.3.6: + resolution: {integrity: sha512-SjUKKsx5FmcK9G6Pb6UBFT0s9JexVStK5WInmANw75Hm7YokVvHEgtprQDz2Uvy5znX5g2ujzrkIU//T15KQzA==} dependencies: serve-static: 1.15.0 transitivePeerDependencies: - supports-color dev: false - /@react-native-community/cli-doctor@12.3.0: - resolution: {integrity: sha512-BPCwNNesoQMkKsxB08Ayy6URgGQ8Kndv6mMhIvJSNdST3J1+x3ehBHXzG9B9Vfi+DrTKRb8lmEl/b/7VkDlPkA==} + /@react-native-community/cli-doctor@12.3.6: + resolution: {integrity: sha512-fvBDv2lTthfw4WOQKkdTop2PlE9GtfrlNnpjB818MhcdEnPjfQw5YaTUcnNEGsvGomdCs1MVRMgYXXwPSN6OvQ==} dependencies: - '@react-native-community/cli-config': 12.3.0 - '@react-native-community/cli-platform-android': 12.3.0 - '@react-native-community/cli-platform-ios': 12.3.0 - '@react-native-community/cli-tools': 12.3.0 + '@react-native-community/cli-config': 12.3.6 + '@react-native-community/cli-platform-android': 12.3.6 + '@react-native-community/cli-platform-ios': 12.3.6 + '@react-native-community/cli-tools': 12.3.6 chalk: 4.1.2 command-exists: 1.2.9 deepmerge: 4.3.1 envinfo: 7.11.1 execa: 5.1.1 hermes-profile-transformer: 0.0.6 - ip: 1.1.8 node-stream-zip: 1.15.0 ora: 5.4.1 semver: 7.5.4 strip-ansi: 5.2.0 wcwidth: 1.0.1 - yaml: 2.3.4 + yaml: 2.4.1 transitivePeerDependencies: - encoding dev: false - /@react-native-community/cli-hermes@12.3.0: - resolution: {integrity: sha512-G6FxpeZBO4AimKZwtWR3dpXRqTvsmEqlIkkxgwthdzn3LbVjDVIXKpVYU9PkR5cnT+KuAUxO0WwthrJ6Nmrrlg==} + /@react-native-community/cli-hermes@12.3.6: + resolution: {integrity: sha512-sNGwfOCl8OAIjWCkwuLpP8NZbuO0dhDI/2W7NeOGDzIBsf4/c4MptTrULWtGIH9okVPLSPX0NnRyGQ+mSwWyuQ==} dependencies: - '@react-native-community/cli-platform-android': 12.3.0 - '@react-native-community/cli-tools': 12.3.0 + '@react-native-community/cli-platform-android': 12.3.6 + '@react-native-community/cli-tools': 12.3.6 chalk: 4.1.2 hermes-profile-transformer: 0.0.6 - ip: 1.1.8 transitivePeerDependencies: - encoding dev: false - /@react-native-community/cli-platform-android@12.3.0: - resolution: {integrity: sha512-VU1NZw63+GLU2TnyQ919bEMThpHQ/oMFju9MCfrd3pyPJz4Sn+vc3NfnTDUVA5Z5yfLijFOkHIHr4vo/C9bjnw==} + /@react-native-community/cli-platform-android@12.3.6: + resolution: {integrity: sha512-DeDDAB8lHpuGIAPXeeD9Qu2+/wDTFPo99c8uSW49L0hkmZJixzvvvffbGQAYk32H0TmaI7rzvzH+qzu7z3891g==} dependencies: - '@react-native-community/cli-tools': 12.3.0 + '@react-native-community/cli-tools': 12.3.6 chalk: 4.1.2 execa: 5.1.1 fast-xml-parser: 4.3.4 @@ -2422,10 +3175,10 @@ packages: - encoding dev: false - /@react-native-community/cli-platform-ios@12.3.0: - resolution: {integrity: sha512-H95Sgt3wT7L8V75V0syFJDtv4YgqK5zbu69ko4yrXGv8dv2EBi6qZP0VMmkqXDamoPm9/U7tDTdbcf26ctnLfg==} + /@react-native-community/cli-platform-ios@12.3.6: + resolution: {integrity: sha512-3eZ0jMCkKUO58wzPWlvAPRqezVKm9EPZyaPyHbRPWU8qw7JqkvnRlWIaYDGpjCJgVW4k2hKsEursLtYKb188tg==} dependencies: - '@react-native-community/cli-tools': 12.3.0 + '@react-native-community/cli-tools': 12.3.6 chalk: 4.1.2 execa: 5.1.1 fast-xml-parser: 4.3.4 @@ -2435,15 +3188,15 @@ packages: - encoding dev: false - /@react-native-community/cli-plugin-metro@12.3.0: - resolution: {integrity: sha512-tYNHIYnNmxrBcsqbE2dAnLMzlKI3Cp1p1xUgTrNaOMsGPDN1epzNfa34n6Nps3iwKElSL7Js91CzYNqgTalucA==} + /@react-native-community/cli-plugin-metro@12.3.6: + resolution: {integrity: sha512-3jxSBQt4fkS+KtHCPSyB5auIT+KKIrPCv9Dk14FbvOaEh9erUWEm/5PZWmtboW1z7CYeNbFMeXm9fM2xwtVOpg==} dev: false - /@react-native-community/cli-server-api@12.3.0: - resolution: {integrity: sha512-Rode8NrdyByC+lBKHHn+/W8Zu0c+DajJvLmOWbe2WY/ECvnwcd9MHHbu92hlT2EQaJ9LbLhGrSbQE3cQy9EOCw==} + /@react-native-community/cli-server-api@12.3.6: + resolution: {integrity: sha512-80NIMzo8b2W+PL0Jd7NjiJW9mgaT8Y8wsIT/lh6mAvYH7mK0ecDJUYUTAAv79Tbo1iCGPAr3T295DlVtS8s4yQ==} dependencies: - '@react-native-community/cli-debugger-ui': 12.3.0 - '@react-native-community/cli-tools': 12.3.0 + '@react-native-community/cli-debugger-ui': 12.3.6 + '@react-native-community/cli-tools': 12.3.6 compression: 1.7.4 connect: 3.7.0 errorhandler: 1.5.1 @@ -2458,8 +3211,8 @@ packages: - utf-8-validate dev: false - /@react-native-community/cli-tools@12.3.0: - resolution: {integrity: sha512-2GafnCr8D88VdClwnm9KZfkEb+lzVoFdr/7ybqhdeYM0Vnt/tr2N+fM1EQzwI1DpzXiBzTYemw8GjRq+Utcz2Q==} + /@react-native-community/cli-tools@12.3.6: + resolution: {integrity: sha512-FPEvZn19UTMMXUp/piwKZSh8cMEfO8G3KDtOwo53O347GTcwNrKjgZGtLSPELBX2gr+YlzEft3CoRv2Qmo83fQ==} dependencies: appdirsjs: 1.2.7 chalk: 4.1.2 @@ -2475,26 +3228,26 @@ packages: - encoding dev: false - /@react-native-community/cli-types@12.3.0: - resolution: {integrity: sha512-MgOkmrXH4zsGxhte4YqKL7d+N8ZNEd3w1wo56MZlhu5WabwCJh87wYpU5T8vyfujFLYOFuFK5jjlcbs8F4/WDw==} + /@react-native-community/cli-types@12.3.6: + resolution: {integrity: sha512-xPqTgcUtZowQ8WKOkI9TLGBwH2bGggOC4d2FFaIRST3gTcjrEeGRNeR5aXCzJFIgItIft8sd7p2oKEdy90+01Q==} dependencies: joi: 17.12.1 dev: false - /@react-native-community/cli@12.3.0: - resolution: {integrity: sha512-XeQohi2E+S2+MMSz97QcEZ/bWpi8sfKiQg35XuYeJkc32Til2g0b97jRpn0/+fV0BInHoG1CQYWwHA7opMsrHg==} + /@react-native-community/cli@12.3.6: + resolution: {integrity: sha512-647OSi6xBb8FbwFqX9zsJxOzu685AWtrOUWHfOkbKD+5LOpGORw+GQo0F9rWZnB68rLQyfKUZWJeaD00pGv5fw==} engines: {node: '>=18'} hasBin: true dependencies: - '@react-native-community/cli-clean': 12.3.0 - '@react-native-community/cli-config': 12.3.0 - '@react-native-community/cli-debugger-ui': 12.3.0 - '@react-native-community/cli-doctor': 12.3.0 - '@react-native-community/cli-hermes': 12.3.0 - '@react-native-community/cli-plugin-metro': 12.3.0 - '@react-native-community/cli-server-api': 12.3.0 - '@react-native-community/cli-tools': 12.3.0 - '@react-native-community/cli-types': 12.3.0 + '@react-native-community/cli-clean': 12.3.6 + '@react-native-community/cli-config': 12.3.6 + '@react-native-community/cli-debugger-ui': 12.3.6 + '@react-native-community/cli-doctor': 12.3.6 + '@react-native-community/cli-hermes': 12.3.6 + '@react-native-community/cli-plugin-metro': 12.3.6 + '@react-native-community/cli-server-api': 12.3.6 + '@react-native-community/cli-tools': 12.3.6 + '@react-native-community/cli-types': 12.3.6 chalk: 4.1.2 commander: 9.5.0 deepmerge: 4.3.1 @@ -2516,28 +3269,18 @@ packages: engines: {node: '>=18'} dev: false - /@react-native/babel-plugin-codegen@0.73.2(@babel/preset-env@7.23.9): - resolution: {integrity: sha512-PadyFZWVaWXIBP7Q5dgEL7eAd7tnsgsLjoHJB1hIRZZuVUg1Zqe3nULwC7RFAqOtr5Qx7KXChkFFcKQ3WnZzGw==} + /@react-native/babel-plugin-codegen@0.73.4(@babel/preset-env@7.23.9): + resolution: {integrity: sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==} engines: {node: '>=18'} dependencies: - '@react-native/codegen': 0.73.2(@babel/preset-env@7.23.9) + '@react-native/codegen': 0.73.3(@babel/preset-env@7.23.9) transitivePeerDependencies: - '@babel/preset-env' - supports-color dev: false - /@react-native/babel-plugin-codegen@0.73.3(@babel/preset-env@7.23.9): - resolution: {integrity: sha512-+zQrDDbz6lB48LyzFHxNCgXDCBHH+oTRdXAjikRcBUdeG9St9ABbYFLtb799zSxLOrCqFVyXqhJR2vlgLLEbcg==} - engines: {node: '>=18'} - dependencies: - '@react-native/codegen': 0.73.2(@babel/preset-env@7.23.9) - transitivePeerDependencies: - - '@babel/preset-env' - - supports-color - dev: false - - /@react-native/babel-preset@0.73.19(@babel/core@7.23.9)(@babel/preset-env@7.23.9): - resolution: {integrity: sha512-ujon01uMOREZecIltQxPDmJ6xlVqAUFGI/JCSpeVYdxyXBoBH5dBb0ihj7h6LKH1q1jsnO9z4MxfddtypKkIbg==} + /@react-native/babel-preset@0.73.21(@babel/core@7.23.9)(@babel/preset-env@7.23.9): + resolution: {integrity: sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==} engines: {node: '>=18'} peerDependencies: '@babel/core': '*' @@ -2574,14 +3317,14 @@ packages: '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.9) '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-runtime': 7.23.9(@babel/core@7.23.9) + '@babel/plugin-transform-runtime': 7.24.0(@babel/core@7.23.9) '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.9) '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.9) '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.9) '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.9) '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.9) - '@babel/template': 7.23.9 - '@react-native/babel-plugin-codegen': 0.73.2(@babel/preset-env@7.23.9) + '@babel/template': 7.24.0 + '@react-native/babel-plugin-codegen': 0.73.4(@babel/preset-env@7.23.9) babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.23.9) react-refresh: 0.14.0 transitivePeerDependencies: @@ -2589,66 +3332,13 @@ packages: - supports-color dev: false - /@react-native/babel-preset@0.73.20(@babel/core@7.23.9)(@babel/preset-env@7.23.9): - resolution: {integrity: sha512-fU9NqkusbfFq71l4BWQfqqD/lLcLC0MZ++UYgieA3j8lIEppJTLVauv2RwtD2yltBkjebgYEC5Rwvt1l0MUBXw==} - engines: {node: '>=18'} - peerDependencies: - '@babel/core': '*' - dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.23.9) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-proposal-export-default-from': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.9) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.9) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.9) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-runtime': 7.23.9(@babel/core@7.23.9) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.9) - '@babel/template': 7.23.9 - '@react-native/babel-plugin-codegen': 0.73.3(@babel/preset-env@7.23.9) - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.23.9) - react-refresh: 0.14.0 - transitivePeerDependencies: - - '@babel/preset-env' - - supports-color - dev: false - - /@react-native/codegen@0.73.2(@babel/preset-env@7.23.9): - resolution: {integrity: sha512-lfy8S7umhE3QLQG5ViC4wg5N1Z+E6RnaeIw8w1voroQsXXGPB72IBozh8dAHR3+ceTxIU0KX3A8OpJI8e1+HpQ==} + /@react-native/codegen@0.73.3(@babel/preset-env@7.23.9): + resolution: {integrity: sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==} engines: {node: '>=18'} peerDependencies: '@babel/preset-env': ^7.1.6 dependencies: - '@babel/parser': 7.23.9 + '@babel/parser': 7.24.0 '@babel/preset-env': 7.23.9(@babel/core@7.23.9) flow-parser: 0.206.0 glob: 7.2.3 @@ -2660,14 +3350,14 @@ packages: - supports-color dev: false - /@react-native/community-cli-plugin@0.73.12(@babel/core@7.23.9)(@babel/preset-env@7.23.9): - resolution: {integrity: sha512-xWU06OkC1cX++Duh/cD/Wv+oZ0oSY3yqbtxAqQA2H3Q+MQltNNJM6MqIHt1VOZSabRf/LVlR1JL6U9TXJirkaw==} + /@react-native/community-cli-plugin@0.73.17(@babel/core@7.23.9)(@babel/preset-env@7.23.9): + resolution: {integrity: sha512-F3PXZkcHg+1ARIr6FRQCQiB7ZAA+MQXGmq051metRscoLvgYJwj7dgC8pvgy0kexzUkHu5BNKrZeySzUft3xuQ==} engines: {node: '>=18'} dependencies: - '@react-native-community/cli-server-api': 12.3.0 - '@react-native-community/cli-tools': 12.3.0 - '@react-native/dev-middleware': 0.73.7 - '@react-native/metro-babel-transformer': 0.73.13(@babel/core@7.23.9)(@babel/preset-env@7.23.9) + '@react-native-community/cli-server-api': 12.3.6 + '@react-native-community/cli-tools': 12.3.6 + '@react-native/dev-middleware': 0.73.8 + '@react-native/metro-babel-transformer': 0.73.15(@babel/core@7.23.9)(@babel/preset-env@7.23.9) chalk: 4.1.2 execa: 5.1.1 metro: 0.80.5 @@ -2689,8 +3379,8 @@ packages: engines: {node: '>=18'} dev: false - /@react-native/dev-middleware@0.73.7: - resolution: {integrity: sha512-BZXpn+qKp/dNdr4+TkZxXDttfx8YobDh8MFHsMk9usouLm22pKgFIPkGBV0X8Do4LBkFNPGtrnsKkWk/yuUXKg==} + /@react-native/dev-middleware@0.73.8: + resolution: {integrity: sha512-oph4NamCIxkMfUL/fYtSsE+JbGOnrlawfQ0kKtDQ5xbOjPKotKoXqrs1eGwozNKv7FfQ393stk1by9a6DyASSg==} engines: {node: '>=18'} dependencies: '@isaacs/ttlcache': 1.4.1 @@ -2703,9 +3393,12 @@ packages: open: 7.4.2 serve-static: 1.15.0 temp-dir: 2.0.0 + ws: 6.2.2 transitivePeerDependencies: + - bufferutil - encoding - supports-color + - utf-8-validate dev: false /@react-native/gradle-plugin@0.73.4: @@ -2718,14 +3411,14 @@ packages: engines: {node: '>=18'} dev: false - /@react-native/metro-babel-transformer@0.73.13(@babel/core@7.23.9)(@babel/preset-env@7.23.9): - resolution: {integrity: sha512-k9AQifogQfgUXPlqQSoMtX2KUhniw4XvJl+nZ4hphCH7qiMDAwuP8OmkJbz5E/N+Ro9OFuLE7ax4GlwxaTsAWg==} + /@react-native/metro-babel-transformer@0.73.15(@babel/core@7.23.9)(@babel/preset-env@7.23.9): + resolution: {integrity: sha512-LlkSGaXCz+xdxc9819plmpsl4P4gZndoFtpjN3GMBIu6f7TBV0GVbyJAU4GE8fuAWPVSVL5ArOcdkWKSbI1klw==} engines: {node: '>=18'} peerDependencies: '@babel/core': '*' dependencies: '@babel/core': 7.23.9 - '@react-native/babel-preset': 0.73.19(@babel/core@7.23.9)(@babel/preset-env@7.23.9) + '@react-native/babel-preset': 0.73.21(@babel/core@7.23.9)(@babel/preset-env@7.23.9) hermes-parser: 0.15.0 nullthrows: 1.1.1 transitivePeerDependencies: @@ -2741,7 +3434,7 @@ packages: resolution: {integrity: sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==} dev: false - /@react-native/virtualized-lists@0.73.4(react-native@0.73.2): + /@react-native/virtualized-lists@0.73.4(react-native@0.73.6): resolution: {integrity: sha512-HpmLg1FrEiDtrtAbXiwCgXFYyloK/dOIPIuWW3fsqukwJEWAiTzm1nXGJ7xPU5XTHiWZ4sKup5Ebaj8z7iyWog==} engines: {node: '>=18'} peerDependencies: @@ -2749,10 +3442,10 @@ packages: dependencies: invariant: 2.2.4 nullthrows: 1.1.1 - react-native: 0.73.2(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) dev: false - /@react-navigation/bottom-tabs@6.5.11(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.2)(react@18.2.0): + /@react-navigation/bottom-tabs@6.5.11(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.6)(react@18.2.0): resolution: {integrity: sha512-CBN/NOdxnMvmjw+AJQI1kltOYaClTZmGec5pQ3ZNTPX86ytbIOylDIITKMfTgHZcIEFQDymx1SHeS++PIL3Szw==} peerDependencies: '@react-navigation/native': ^6.0.0 @@ -2761,13 +3454,13 @@ packages: react-native-safe-area-context: '>= 3.0.0' react-native-screens: '>= 3.0.0' dependencies: - '@react-navigation/elements': 1.3.21(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native@0.73.2)(react@18.2.0) - '@react-navigation/native': 6.1.9(react-native@0.73.2)(react@18.2.0) + '@react-navigation/elements': 1.3.21(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native@0.73.6)(react@18.2.0) + '@react-navigation/native': 6.1.9(react-native@0.73.6)(react@18.2.0) color: 4.2.3 react: 18.2.0 - react-native: 0.73.2(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) - react-native-safe-area-context: 4.8.2(react-native@0.73.2)(react@18.2.0) - react-native-screens: 3.29.0(react-native@0.73.2)(react@18.2.0) + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native-safe-area-context: 4.8.2(react-native@0.73.6)(react@18.2.0) + react-native-screens: 3.29.0(react-native@0.73.6)(react@18.2.0) warn-once: 0.1.1 dev: false @@ -2785,7 +3478,7 @@ packages: use-latest-callback: 0.1.9(react@18.2.0) dev: false - /@react-navigation/elements@1.3.21(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native@0.73.2)(react@18.2.0): + /@react-navigation/elements@1.3.21(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native@0.73.6)(react@18.2.0): resolution: {integrity: sha512-eyS2C6McNR8ihUoYfc166O1D8VYVh9KIl0UQPI8/ZJVsStlfSTgeEEh+WXge6+7SFPnZ4ewzEJdSAHH+jzcEfg==} peerDependencies: '@react-navigation/native': ^6.0.0 @@ -2793,13 +3486,13 @@ packages: react-native: '*' react-native-safe-area-context: '>= 3.0.0' dependencies: - '@react-navigation/native': 6.1.9(react-native@0.73.2)(react@18.2.0) + '@react-navigation/native': 6.1.9(react-native@0.73.6)(react@18.2.0) react: 18.2.0 - react-native: 0.73.2(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) - react-native-safe-area-context: 4.8.2(react-native@0.73.2)(react@18.2.0) + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native-safe-area-context: 4.8.2(react-native@0.73.6)(react@18.2.0) dev: false - /@react-navigation/native-stack@6.9.17(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.2)(react@18.2.0): + /@react-navigation/native-stack@6.9.17(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.6)(react@18.2.0): resolution: {integrity: sha512-X8p8aS7JptQq7uZZNFEvfEcPf6tlK4PyVwYDdryRbG98B4bh2wFQYMThxvqa+FGEN7USEuHdv2mF0GhFKfX0ew==} peerDependencies: '@react-navigation/native': ^6.0.0 @@ -2808,16 +3501,16 @@ packages: react-native-safe-area-context: '>= 3.0.0' react-native-screens: '>= 3.0.0' dependencies: - '@react-navigation/elements': 1.3.21(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native@0.73.2)(react@18.2.0) - '@react-navigation/native': 6.1.9(react-native@0.73.2)(react@18.2.0) + '@react-navigation/elements': 1.3.21(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native@0.73.6)(react@18.2.0) + '@react-navigation/native': 6.1.9(react-native@0.73.6)(react@18.2.0) react: 18.2.0 - react-native: 0.73.2(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) - react-native-safe-area-context: 4.8.2(react-native@0.73.2)(react@18.2.0) - react-native-screens: 3.29.0(react-native@0.73.2)(react@18.2.0) + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native-safe-area-context: 4.8.2(react-native@0.73.6)(react@18.2.0) + react-native-screens: 3.29.0(react-native@0.73.6)(react@18.2.0) warn-once: 0.1.1 dev: false - /@react-navigation/native@6.1.9(react-native@0.73.2)(react@18.2.0): + /@react-navigation/native@6.1.9(react-native@0.73.6)(react@18.2.0): resolution: {integrity: sha512-AMuJDpwXE7UlfyhIXaUCCynXmv69Kb8NzKgKJO7v0k0L+u6xUTbt6xvshmJ79vsvaFyaEH9Jg5FMzek5/S5qNw==} peerDependencies: react: '*' @@ -2828,7 +3521,7 @@ packages: fast-deep-equal: 3.1.3 nanoid: 3.3.7 react: 18.2.0 - react-native: 0.73.2(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) dev: false /@react-navigation/routers@6.1.9: @@ -2905,7 +3598,32 @@ packages: /@remix-run/web-stream@1.1.0: resolution: {integrity: sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA==} dependencies: - web-streams-polyfill: 3.3.2 + web-streams-polyfill: 3.3.3 + dev: false + + /@salihgun/react-native-video-processor@0.3.1(ffmpeg-kit-react-native@6.0.2)(react-native-video@5.2.1)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-LBHmH7dp+gxaXZFaVc+OXwLxhHI/zrqyPO7Y7e0NL0k7/hG3ern/y7T4jlSl8lLjz20nqi1BU3sIE+QBEqNJxg==} + peerDependencies: + ffmpeg-kit-react-native: ^5.1.0 + react: '*' + react-native: '*' + react-native-video: ^5.2.1 + dependencies: + ffmpeg-kit-react-native: 6.0.2(react-native@0.73.6)(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native-video: 5.2.1 + dev: false + + /@scure/base@1.1.6: + resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + dev: false + + /@scure/bip39@1.3.0: + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + dependencies: + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.6 dev: false /@segment/loosely-validate-event@2.0.0: @@ -2945,6 +3663,1477 @@ packages: '@sinonjs/commons': 3.0.1 dev: false + /@swc/core-darwin-arm64@1.4.8: + resolution: {integrity: sha512-hhQCffRTgzpTIbngSnC30vV6IJVTI9FFBF954WEsshsecVoCGFiMwazBbrkLG+RwXENTrMhgeREEFh6R3KRgKQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@swc/core-darwin-x64@1.4.8: + resolution: {integrity: sha512-P3ZBw8Jr8rKhY/J8d+6WqWriqngGTgHwtFeJ8MIakQJTbdYbFgXSZxcvDiERg3psbGeFXaUaPI0GO6BXv9k/OQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@swc/core-linux-arm-gnueabihf@1.4.8: + resolution: {integrity: sha512-PP9JIJt19bUWhAGcQW6qMwTjZOcMyzkvZa0/LWSlDm0ORYVLmDXUoeQbGD3e0Zju9UiZxyulnpjEN0ZihJgPTA==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@swc/core-linux-arm64-gnu@1.4.8: + resolution: {integrity: sha512-HvEWnwKHkoVUr5iftWirTApFJ13hGzhAY2CMw4lz9lur2m+zhPviRRED0FCI6T95Knpv7+8eUOr98Z7ctrG6DQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@swc/core-linux-arm64-musl@1.4.8: + resolution: {integrity: sha512-kY8+qa7k/dEeBq9p0Hrta18QnJPpsiJvDQSLNaTIFpdM3aEM9zbkshWz8gaX5VVGUEALowCBUWqmzO4VaqM+2w==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@swc/core-linux-x64-gnu@1.4.8: + resolution: {integrity: sha512-0WWyIw432wpO/zeGblwq4f2YWam4pn8Z/Ig4KzHMgthR/KmiLU3f0Z7eo45eVmq5vcU7Os1zi/Zb65OOt09q/w==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@swc/core-linux-x64-musl@1.4.8: + resolution: {integrity: sha512-p4yxvVS05rBNCrBaSTa20KK88vOwtg8ifTW7ec/yoab0bD5EwzzB8KbDmLLxE6uziFa0sdjF0dfRDwSZPex37Q==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@swc/core-win32-arm64-msvc@1.4.8: + resolution: {integrity: sha512-jKuXihxAaqUnbFfvPxtmxjdJfs87F1GdBf33il+VUmSyWCP4BE6vW+/ReDAe8sRNsKyrZ3UH1vI5q1n64csBUA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@swc/core-win32-ia32-msvc@1.4.8: + resolution: {integrity: sha512-O0wT4AGHrX8aBeH6c2ADMHgagAJc5Kf6W48U5moyYDAkkVnKvtSc4kGhjWhe1Yl0sI0cpYh2In2FxvYsb44eWw==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@swc/core-win32-x64-msvc@1.4.8: + resolution: {integrity: sha512-C2AYc3A2o+ECciqsJWRgIpp83Vk5EaRzHe7ed/xOWzVd0MsWR+fweEsyOjlmzHfpUxJSi46Ak3/BIZJlhZbXbg==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@swc/core@1.4.8(@swc/helpers@0.5.6): + resolution: {integrity: sha512-uY2RSJcFPgNOEg12RQZL197LZX+MunGiKxsbxmh22VfVxrOYGRvh4mPANFlrD1yb38CgmW1wI6YgIi8LkIwmWg==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + '@swc/helpers': ^0.5.0 + peerDependenciesMeta: + '@swc/helpers': + optional: true + dependencies: + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.6 + '@swc/types': 0.1.5 + optionalDependencies: + '@swc/core-darwin-arm64': 1.4.8 + '@swc/core-darwin-x64': 1.4.8 + '@swc/core-linux-arm-gnueabihf': 1.4.8 + '@swc/core-linux-arm64-gnu': 1.4.8 + '@swc/core-linux-arm64-musl': 1.4.8 + '@swc/core-linux-x64-gnu': 1.4.8 + '@swc/core-linux-x64-musl': 1.4.8 + '@swc/core-win32-arm64-msvc': 1.4.8 + '@swc/core-win32-ia32-msvc': 1.4.8 + '@swc/core-win32-x64-msvc': 1.4.8 + dev: false + + /@swc/counter@0.1.3: + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + dev: false + + /@swc/helpers@0.5.6: + resolution: {integrity: sha512-aYX01Ke9hunpoCexYAgQucEpARGQ5w/cqHFrIR+e9gdKb1QWTsVJuTJ2ozQzIAxLyRQe/m+2RqzkyOOGiMKRQA==} + dependencies: + tslib: 2.6.2 + dev: false + + /@swc/types@0.1.5: + resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} + dev: false + + /@tamagui/accordion@1.94.0(react@18.2.0): + resolution: {integrity: sha512-73WnEAqv4d1+HRgk3euZTA4zrsD4vhIfe3Spny292Ef62nvXW8gyOhJe5n+w9RtG3MrMNW1jGaWYoCdTOAXUsg==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/collapsible': 1.94.0(react@18.2.0) + '@tamagui/collection': 1.94.0(react@18.2.0) + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/polyfill-dev': 1.94.0 + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/adapt@1.94.0(react@18.2.0): + resolution: {integrity: sha512-EYPCg1X24CEAs2rmxCYXpoAJK54u12Ycwo/MHxWemcDLi7FwBtaIWyCmzsMjwAF2dDqevrhWQyZFun2RPfC5vg==} + dependencies: + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + transitivePeerDependencies: + - react + dev: false + + /@tamagui/alert-dialog@1.94.0(@types/react@18.2.52)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-y3eItHbnODOBg8dzawyMmonKwiJI6Z1PVEB6/uDXUc9QrCZJefACCCAjgknOZBIFeFDtv+8myFBuqmLnrUjPdA==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/animate-presence': 1.94.0(react@18.2.0) + '@tamagui/aria-hidden': 1.94.0(react@18.2.0) + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/dialog': 1.94.0(@types/react@18.2.52)(react-native@0.73.6)(react@18.2.0) + '@tamagui/dismissable': 1.94.0(react@18.2.0) + '@tamagui/focus-scope': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/polyfill-dev': 1.94.0 + '@tamagui/popper': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/portal': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/remove-scroll': 1.94.0(@types/react@18.2.52)(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/text': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + + /@tamagui/animate-presence@1.94.0(react@18.2.0): + resolution: {integrity: sha512-vdjwMjXBYaTvlzBKdcxPzuf7opSg/ipXH3debtpVpbBgCllC4r5X8P00btYxLKrkI0I7NVTDUMOQRln1OH4IdQ==} + dependencies: + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/use-constant': 1.94.0(react@18.2.0) + '@tamagui/use-force-update': 1.94.0(react@18.2.0) + '@tamagui/use-presence': 1.94.0(react@18.2.0) + '@tamagui/web': 1.94.0 + transitivePeerDependencies: + - react + dev: false + + /@tamagui/animate@1.94.0(react@18.2.0): + resolution: {integrity: sha512-UmA5afxrJzBc3m/oP2ZdoEyfmL/2zIQsJjCs6Nci/W5WLIQbbiaKcgKXUNvvRR5qz3sfAsdl4AMVrjkt9wfH3g==} + dependencies: + '@tamagui/animate-presence': 1.94.0(react@18.2.0) + transitivePeerDependencies: + - react + dev: false + + /@tamagui/animations-css@1.94.0: + resolution: {integrity: sha512-GLa/DQfHi4615ocZhkl3A43jS3v2MR+h7vvjysLcffoqvOqbL6k1FJmOKNI7HlcgZD6cjmC17KoR7KBNwd9TOA==} + dependencies: + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/cubic-bezier-animator': 1.94.0 + '@tamagui/use-presence': 1.94.0(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + dev: false + + /@tamagui/animations-moti@1.94.0(react-dom@18.2.0)(react-native-reanimated@3.6.2): + resolution: {integrity: sha512-TOI/p8tI5NI8wMIMgQic8EabcAvIARkF/Ty4Tk71yYZt7X0mrro7OaljGlpwiXc1sg08zL5hUumWwsZ5s4dKfQ==} + dependencies: + '@tamagui/use-presence': 1.94.0(react@18.2.0) + '@tamagui/web': 1.94.0 + moti: 0.27.5(react-dom@18.2.0)(react-native-reanimated@3.6.2)(react@18.2.0) + react: 18.2.0 + transitivePeerDependencies: + - react-dom + - react-native-reanimated + dev: false + + /@tamagui/animations-react-native@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-SVvyyx8nf++5orMSrREIORKKyHPLRF5wPL+lWo5JcRX9sa4KeeOdSFEcJuQhzVqm89ARk/YHOHRE4GPITUCUug==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/use-presence': 1.94.0(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/aria-hidden@1.94.0(react@18.2.0): + resolution: {integrity: sha512-/IDSMXglUkrXu8tAjRJU/EheRYYLi5uhSDkLOFDZN0b005xlQW5rb45E1oy3gtBTSV2+dbZFZnCmFCYWbzqf6g==} + peerDependencies: + react: '*' + dependencies: + aria-hidden: 1.2.3 + react: 18.2.0 + dev: false + + /@tamagui/avatar@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-wundEccr+HlVNy5NeRSrsVt30MEzFwxflrizbSgHQydMTEgFR3CBXRqMF8ZLhcUUQHv5ZSqVgjjq4YUdWlXDfQ==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/image': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/shapes': 1.94.0(react@18.2.0) + '@tamagui/text': 1.94.0(react-native@0.73.6)(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/babel-plugin@1.94.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): + resolution: {integrity: sha512-hx+EXbx12AKlAhqfNbUQWk+QtlPit0eJBrRZrEZodtFeS1GxwhssbZhKsgsEKJmN3d30p+jhZdbamomLSfnNew==} + dependencies: + '@babel/generator': 7.23.6 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/template': 7.24.0 + '@babel/traverse': 7.23.9 + '@tamagui/static': 1.94.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) + transitivePeerDependencies: + - encoding + - react + - react-dom + - supports-color + - typescript + dev: false + + /@tamagui/build@1.94.0(typescript@5.4.3): + resolution: {integrity: sha512-SrCzg9a6ibu4GfpprLm0r6Gt5txUAUE0qLchaCnhJdmXls0y7y57LgOZkPO6T5IiCjyrVdDmpgxLJqx0+S+/Yg==} + hasBin: true + peerDependencies: + typescript: '*' + dependencies: + '@babel/core': 7.23.9 + '@types/fs-extra': 9.0.13 + babel-plugin-fully-specified: 1.3.0(@babel/core@7.23.9) + chokidar: 3.6.0 + esbuild: 0.20.2 + esbuild-plugin-es5: 2.1.0(esbuild@0.20.2) + esbuild-register: 3.5.0(esbuild@0.20.2) + execa: 5.1.1 + fast-glob: 3.3.2 + fs-extra: 11.2.0 + get-tsconfig: 4.7.3 + lodash.debounce: 4.0.8 + typescript: 5.4.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@tamagui/button@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-1eoYy4GW7kFTEqW7IKYHtO3uayRd1m/yxjybQDnmoE+VT6/oexMXV7AlWR/zbEyAgVLujyfPJa9F0emMzM/RIw==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/font-size': 1.94.0(react@18.2.0) + '@tamagui/get-button-sized': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/helpers-tamagui': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/text': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + transitivePeerDependencies: + - react-native + dev: false + + /@tamagui/card@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-kyq/A+Jr1A9RjBmQBKHJqYypcxeeAOHu9PE3uTqHsbSwoQIY0qlygu5k6cSl5LEpMhk99vTYH+p3WpUue0ky/w==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/checkbox-headless@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-lqXN8V6E72GTtlKCyapw5VH3hsuHpOjbeY9LYCtvOxVasZFtqP1f3Lq2E2TbNEHb0/DofpdWCrwPLcMJpe7yPQ==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/focusable': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/label': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + '@tamagui/use-previous': 1.94.0 + react: 18.2.0 + transitivePeerDependencies: + - react-native + dev: false + + /@tamagui/checkbox@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-URsXT2ndE7KNXMG8TxY0JXSiZlEZORObX8GeVEqJ4JHBffq8jhkKEYHwXLTerodZFG/MIn0N+8D+JwAzbs8UDw==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/checkbox-headless': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/focusable': 1.94.0(react@18.2.0) + '@tamagui/font-size': 1.94.0(react@18.2.0) + '@tamagui/get-token': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/helpers-tamagui': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/label': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + '@tamagui/use-previous': 1.94.0 + react: 18.2.0 + transitivePeerDependencies: + - react-native + dev: false + + /@tamagui/cli-color@1.94.0: + resolution: {integrity: sha512-Htqs79GLfNvlExDSMjFynkV2cmj46NN/j/MVN7YBbAP9GHYwSEllRAJ9QS4y8oN0z9OzJk/0RWctBbRcubMF1Q==} + dev: false + + /@tamagui/collapsible@1.94.0(react@18.2.0): + resolution: {integrity: sha512-SiPi34a2OFDYjaWFPRzzVUVFm/qIwYWQtVpU6rU0gd6FBj+WPTO5fRoUKJJqqB4X92i2yybTBNxZPkgm6emJyQ==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/animate-presence': 1.94.0(react@18.2.0) + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/polyfill-dev': 1.94.0 + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/collection@1.94.0(react@18.2.0): + resolution: {integrity: sha512-+mk3JjUDgKGNxsgU4zBe4Ieu85pFOYhAJxOdL4Gl69IaXxdtpgOC3XD9n4uz4QcKyRX9huVV8OpIUdDyj4bJig==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/polyfill-dev': 1.94.0 + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/colors@1.94.0: + resolution: {integrity: sha512-GrNAf+sQOm9Bxxu9gszvy5bRFEfNN44644MKHbAbSzSP28vEGHcyJe421VtthSjT91FU2O5WmOFmz2zcNj9ZeQ==} + dev: false + + /@tamagui/compose-refs@1.94.0(react@18.2.0): + resolution: {integrity: sha512-acbqt+5PR3AQtfJ1eyxAaRArg+40DXLjyJZou57+vZ2fB4bAY1NHBhsiDp0ytKBWDefZWB5ltie7lL3BImBRBg==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + dev: false + + /@tamagui/config-default@1.94.0(react@18.2.0): + resolution: {integrity: sha512-unJhvES888AEzhd7VMVgY+u57UoEUNOFXL/2yPt1TfyGTpklW04ju/Ph3aiJp2VO057FS/IqfcPtldxC5O7PUQ==} + dependencies: + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/shorthands': 1.94.0 + transitivePeerDependencies: + - react + dev: false + + /@tamagui/config@1.94.0(react-dom@18.2.0)(react-native-reanimated@3.6.2)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-byYwMhcTk4CpLOiQlB+qJjp+uwONmPZPd+dGxXZqLOhbtw2R6iIjpvuJSoSxHOW+NKv4lEq0wU5dW+T1onhYxQ==} + dependencies: + '@tamagui/animations-css': 1.94.0 + '@tamagui/animations-moti': 1.94.0(react-dom@18.2.0)(react-native-reanimated@3.6.2) + '@tamagui/animations-react-native': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/colors': 1.94.0 + '@tamagui/font-inter': 1.94.0(react@18.2.0) + '@tamagui/font-silkscreen': 1.94.0(react@18.2.0) + '@tamagui/react-native-media-driver': 1.94.0(react-native@0.73.6) + '@tamagui/shorthands': 1.94.0 + '@tamagui/themes': 1.94.0 + '@tamagui/web': 1.94.0 + transitivePeerDependencies: + - react + - react-dom + - react-native + - react-native-reanimated + dev: false + + /@tamagui/constants@1.94.0(react@18.2.0): + resolution: {integrity: sha512-2G44sIpoSw7YuK1yIM5dzBg9z5IwYcvnVJ4Tcv2sSPYVvcErZLODTbe3fc4ssXEIVTNPWbhD69LRvq+LW2vV9g==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + dev: false + + /@tamagui/core@1.94.0(react@18.2.0): + resolution: {integrity: sha512-L6QJ5avPXVzozoMwJEvMnYt4xAO59Ht/nv2kf51c0QCP84BbwsNDrTJztjdWQ2J3f3QOczKCzBPsIOU4iEevVw==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/react-native-use-pressable': 1.94.0(react@18.2.0) + '@tamagui/react-native-use-responder-events': 1.94.0(react@18.2.0) + '@tamagui/use-event': 1.94.0(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + dev: false + + /@tamagui/create-context@1.94.0(react@18.2.0): + resolution: {integrity: sha512-WJLbRU2HKppZJBNPvUHBpF6B0sKxG1EQ/0YaQw+H8jIsn3ogSt6NzAR86DkpWg/yahWhz5humcNKwNeNkrIbFA==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + dev: false + + /@tamagui/create-theme@1.94.0: + resolution: {integrity: sha512-xQKfRHpDC6hdrrx9cQzGIZEeMizMAyb9CyvKqOM2qts0xzODhYhUBvP7lFsBoNvS76MD0bHz2P+sRX1orYhx8g==} + dependencies: + '@tamagui/web': 1.94.0 + dev: false + + /@tamagui/cubic-bezier-animator@1.94.0: + resolution: {integrity: sha512-P7FmLli3Va2DslINfWJXzxJOCJ3wr5Im3DkE1tfcoHPeO5ksSKbdq4Yxu+0F848SYz+Qu4iVN+PbGSfTL9gHlw==} + dev: false + + /@tamagui/dialog@1.94.0(@types/react@18.2.52)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-Cg24UgNLmq2rWZDYIY1PFcISzJ3cOw6V0YXSOLkRr48D77KBwWlm4JUiyQkiu8N8KqIDxGOvaiU4VAzSzrLygw==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/adapt': 1.94.0(react@18.2.0) + '@tamagui/animate-presence': 1.94.0(react@18.2.0) + '@tamagui/aria-hidden': 1.94.0(react@18.2.0) + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/dismissable': 1.94.0(react@18.2.0) + '@tamagui/focus-scope': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/polyfill-dev': 1.94.0 + '@tamagui/popper': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/portal': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/remove-scroll': 1.94.0(@types/react@18.2.52)(react@18.2.0) + '@tamagui/sheet': 1.94.0(@types/react@18.2.52)(react-native@0.73.6)(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/text': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + + /@tamagui/dismissable@1.94.0(react@18.2.0): + resolution: {integrity: sha512-jWgB2hQin9evkCqv5/WGvuzAQuRuaIfF+NzL+N/V3rVrV9HaoFwtpoRjKrGZSZNUT98msr1vBjfxS9+3m00/Tw==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/use-escape-keydown': 1.94.0 + '@tamagui/use-event': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/elements@1.94.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-pPIl+bUOsIpbxyPNy4OPDfSQQvjDQXkzsPa98T/t8MdN/rFIXZk+5+XzXWdj5bswCXAwRJLK8lHWYIfyEiK5Hw==} + peerDependencies: + react: '*' + react-dom: '*' + dependencies: + '@tamagui/core': 1.94.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@tamagui/fake-react-native@1.94.0: + resolution: {integrity: sha512-828RRIlOVmnIW0M3gDvFDg9Q10Kv0yBiQ9MC2noB9tsPhAvEbiZbNVDi10t1jZWPwV3Ee5CaPsh29xKnp4groQ==} + dev: false + + /@tamagui/floating@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-QQ5ojfSKn2H9925qPNnHwjqlKmXDO/JdBgivn1f1NLk0IMcU8ayayJGoqCsGoLrVOQIGL+qx+Wdn9Oxrhj59CA==} + peerDependencies: + react: '*' + dependencies: + '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-native': 0.10.4(react-native@0.73.6)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - react-native + dev: false + + /@tamagui/focus-scope@1.94.0(react@18.2.0): + resolution: {integrity: sha512-6paDAuRUHeaLDeiu06m+mD7j3p85xkNS2O5q/7qYAz4pBLD+8iH8sWo/hv7xCOayzQkItGDMMfnI2zyzfE4qWw==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/use-event': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/focusable@1.94.0(react@18.2.0): + resolution: {integrity: sha512-khfJTNe6r+jX2P4GryVOH++DkMtQLgUB+GzCD/XqOvnxt5Y4kE++oJ6QeamMkDqkPuWYVXoqKk9LVRTYUempww==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + dev: false + + /@tamagui/font-inter@1.94.0(react@18.2.0): + resolution: {integrity: sha512-RbsPzicK02DPq9ocPLmfYxUqP6XuAqAFsEH395MLkLLYU6KPkcxrIRpeahX35Zx2mA9PYNJkgv8Y0qUZu8BFtg==} + dependencies: + '@tamagui/core': 1.94.0(react@18.2.0) + transitivePeerDependencies: + - react + dev: false + + /@tamagui/font-silkscreen@1.94.0(react@18.2.0): + resolution: {integrity: sha512-sWPVH/pTBPLlW1rinLfvsWY8Q5nynJp5GZVSaB7QepfVhRBvvTMNUtdEIatMfvBkLmZZaMmKhwXPdrmwy8kYZQ==} + dependencies: + '@tamagui/core': 1.94.0(react@18.2.0) + transitivePeerDependencies: + - react + dev: false + + /@tamagui/font-size@1.94.0(react@18.2.0): + resolution: {integrity: sha512-PuqoBbSefk+ZIidreUSXg4B4tPI3EvqfcqJk2YBmkO9aTaPH+m4bvgNo+oXNCrJl5PZea4r53XNqWtpHGa5AaQ==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/core': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/form@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-v7kqdrQ7OMJP4wFLBtXYFIug5V9V1I55NIyILAkwl+brNhmDVEwOsoJXD3DZfBW+xMjhDQITL7fRsW6AfGU/rg==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/focusable': 1.94.0(react@18.2.0) + '@tamagui/get-button-sized': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/get-font-sized': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/text': 1.94.0(react-native@0.73.6)(react@18.2.0) + react: 18.2.0 + transitivePeerDependencies: + - react-native + dev: false + + /@tamagui/generate-themes@1.94.0(esbuild@0.20.2): + resolution: {integrity: sha512-LTzRKWtc8bUaiI5KNXHZuSt1Xw7LDhbydpuE1gjsJFBRG0qXKHVEHYimVeJ5wVuvkBmGAaRmybd8AAUNFWj4GQ==} + dependencies: + '@tamagui/create-theme': 1.94.0 + '@tamagui/types': 1.94.0 + esbuild-register: 3.5.0(esbuild@0.20.2) + fs-extra: 11.2.0 + transitivePeerDependencies: + - esbuild + - supports-color + dev: false + + /@tamagui/get-button-sized@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-uA3t+HdilpNfhPc/z6h2tGct6zhM8bquC23cEIqj98K9S6XlhfIk5KRsLxh53Vg+Hi07jG+PSah9aErT4+ykUA==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/get-token': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + transitivePeerDependencies: + - react-native + dev: false + + /@tamagui/get-font-sized@1.94.0(react@18.2.0): + resolution: {integrity: sha512-c+Ddga34d4jZ6qnX48XUJ1mDXYkuMysaLoPGg6YFOE5eKdWYpDDbGcwrB8Wwh+0SV2ae/1hYQc0JbxHVSvwbNw==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/core': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/get-token@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-MClb6R/0w6cHyr+RnDIx5qQ1mXlJQx92CRPbinBUisiM435t8IBMg7sGi7BhBbLpbXls4HSMjDWwHUpq0+51AQ==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/web': 1.94.0 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/group@1.94.0(@types/react@18.2.52)(immer@10.0.3)(react@18.2.0): + resolution: {integrity: sha512-BSJ7bwWtz7fgRhazYMIkbmoRquwtaHwSQyVWPhZryegMHcNSesnOIEPQoMTAH6/hiz54Emyaviaw/59YuXIxtw==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + react: 18.2.0 + reforest: 0.13.0(@types/react@18.2.52)(immer@10.0.3)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - immer + dev: false + + /@tamagui/helpers-node@1.94.0: + resolution: {integrity: sha512-BFTLjLpHMJrNKv0IqJLjlfTdZYBJuy1+HU6CHQNOv/FUqGzDTERceoUWSHLn3+QjlOLP7NbO+8tbOQC1IpkmMA==} + dependencies: + '@tamagui/types': 1.94.0 + dev: false + + /@tamagui/helpers-tamagui@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-gVfoRUIs1zZb5zzP87+8slKP/PTHHkIiaLMsVsV3/e4MjegOfDNU9LJDiAAZddQEItu+5kFVCFHgx3Q1ek1r9g==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/helpers@1.94.0(react@18.2.0): + resolution: {integrity: sha512-7GJN2UztmI5hdmcBwhlGqGg2uxr3+S9LhnjjIitmveXchgqv0Zik4pCLagh9SQeTDoEkoZ5X3/PmM25jbTvGcw==} + dependencies: + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/simple-hash': 1.94.0 + transitivePeerDependencies: + - react + dev: false + + /@tamagui/image@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-FH8zDrP6Mk4zKZMZ8/bgSXBT1LmBV7ZGV8qQu1Frl0zg0G2qGMZhMA1w9vzQVdURMAm99CyYkTguR8LSrvHk8A==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/label@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-G4jMLOfOTbMtrPNr2d3MkBAB82Oa6EuwBbUUqD2dHR0OcDIMi66Hq4+GU+ZexwX2AY+/FKQedVsK3xkqkqSACA==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/focusable': 1.94.0(react@18.2.0) + '@tamagui/get-button-sized': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/get-font-sized': 1.94.0(react@18.2.0) + '@tamagui/text': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/linear-gradient@1.94.0(react@18.2.0): + resolution: {integrity: sha512-lMGw3uQuoMa9bqem2plABUPksWqEYiSPQuBOn1oZ3k1iRtdH1RrGrVmm3Yz4PMr6J/NI3UhR2KQznEiXGLtiSw==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/list-item@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-f/oQmcRT8zbZ+OI03qMvM53izaD32aI1x65owt5qV+k9c3LQw8ADjczsSV7pVYuv8WbSCxuZvo6804sK14oF4Q==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/font-size': 1.94.0(react@18.2.0) + '@tamagui/get-font-sized': 1.94.0(react@18.2.0) + '@tamagui/get-token': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/helpers-tamagui': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/text': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + transitivePeerDependencies: + - react-native + dev: false + + /@tamagui/metro-plugin@1.94.0(@babel/core@7.23.9)(react-dom@18.2.0)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native-svg@14.1.0)(react-native@0.73.6)(react@18.2.0)(tailwindcss@3.4.3)(typescript@5.4.3): + resolution: {integrity: sha512-ZBhbnbuXs8ulJXzNDCVij8I5S9hRu6JSGbSFijgMF0YkVx4L/t4JZOjYYbP8PF/KsjZmwq/B2DvqkMBmY55APA==} + dependencies: + '@tamagui/static': 1.94.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) + fs-extra: 11.2.0 + metro-config: 0.80.5 + metro-transform-worker: 0.80.5 + react-native-css-interop: 0.0.35(@babel/core@7.23.9)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native-svg@14.1.0)(react-native@0.73.6)(react@18.2.0)(tailwindcss@3.4.3) + transitivePeerDependencies: + - '@babel/core' + - bufferutil + - encoding + - react + - react-dom + - react-native + - react-native-reanimated + - react-native-safe-area-context + - react-native-svg + - supports-color + - tailwindcss + - typescript + - utf-8-validate + dev: false + + /@tamagui/normalize-css-color@1.94.0: + resolution: {integrity: sha512-Uf65nZneTx6Jvqpq28lGvfMEoXSS4bE3cTlbNbeABwogGd3e5x15NiPkMraq08oPHw/P+rl+844FTEkeMFxv/g==} + dependencies: + '@react-native/normalize-color': 2.1.0 + dev: false + + /@tamagui/polyfill-dev@1.94.0: + resolution: {integrity: sha512-aK2XRxzDIlixyn1n+Os+2gL370nbD/SBXi6vb9hfxZmuJH5DpNCMUuFjTzamhd/CjixLhnLLoOZtp1FIA+reLg==} + dev: false + + /@tamagui/popover@1.94.0(@types/react@18.2.52)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-5PWAKS/7FGhvkhnUr2wbGhYJmpTYq2G+UrRHW+824/c8RYHLBV9vDiSG4KtJAMQdTFOxllVH5vrw4tBJuzvuvA==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@floating-ui/react': 0.26.9(react-dom@18.2.0)(react@18.2.0) + '@tamagui/adapt': 1.94.0(react@18.2.0) + '@tamagui/animate': 1.94.0(react@18.2.0) + '@tamagui/aria-hidden': 1.94.0(react@18.2.0) + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/dismissable': 1.94.0(react@18.2.0) + '@tamagui/floating': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/focus-scope': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/polyfill-dev': 1.94.0 + '@tamagui/popper': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/portal': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/remove-scroll': 1.94.0(@types/react@18.2.52)(react@18.2.0) + '@tamagui/scroll-view': 1.94.0(react@18.2.0) + '@tamagui/sheet': 1.94.0(@types/react@18.2.52)(react-native@0.73.6)(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + react: 18.2.0 + react-freeze: 1.0.3(react@18.2.0) + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react-dom + dev: false + + /@tamagui/popper@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-xVhixAz2aXevY7n7zCVX085/9vY7hpbpGDHF7KA+YpOvzWO8GDmU2wP+N/ioKlWrJQtFEKJaVSSJ2Lih3XFzDQ==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/floating': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/get-token': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/portal@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-ns/fRTL62psU0WnyTR+MEIIGwwp+s90or6zlFe4PsilTKLbW+ZZLA8ovP2F0NOrC7sagBIIYhuD2WxvXprZMXw==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/use-event': 1.94.0(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/progress@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-cDTEWJRCbzi98C+pyOlEoFq0acOFBXc12lEyHnD+/lsOCnXQj8tSujx/gHEXl8tiWZMjtKY6SfP/0lhLFhS87g==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/get-token': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/proxy-worm@1.94.0: + resolution: {integrity: sha512-AfKa6QVjsV/lNU2lpoUniawq/w9v+aTFj1IacB3mpgLvGUr6P2ACuE779Fsyl8bqRlIZbQUxmg94EdBfjUOk8w==} + dev: false + + /@tamagui/radio-group@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-qwHdO/d++/G1rAmGYtcEUF/UiptIuZGz/MoDPPgE9PqKu+iOLvvBdLoL8iK9IcABPf9Fv6YLRVX/PWmGCDPXpg==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/focusable': 1.94.0(react@18.2.0) + '@tamagui/get-token': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/label': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/roving-focus': 1.94.0(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + '@tamagui/use-previous': 1.94.0 + react: 18.2.0 + transitivePeerDependencies: + - react-native + dev: false + + /@tamagui/react-native-media-driver@1.94.0(react-native@0.73.6): + resolution: {integrity: sha512-RKwrgx0Cje+j3VOCqiUDiqrNV3hgxbvYmPAbb5YGsPsIj6MOqHjjT5wf5WCGXlRqF2Oqy3q3wKzUpjwRfwVRNQ==} + peerDependencies: + react-native: '*' + dependencies: + '@tamagui/web': 1.94.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/react-native-use-pressable@1.94.0(react@18.2.0): + resolution: {integrity: sha512-t4jIdBjvoYo8yCF6ja2ggO2jkKznUE6PfZ8sWWhi92Kph9s4zdFEhnYSx1/VCY3GQ5mnWBa8cftrCKFFWkdM5g==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + dev: false + + /@tamagui/react-native-use-responder-events@1.94.0(react@18.2.0): + resolution: {integrity: sha512-G6jsichSB3X5ycqxl++jcPbok7bofXmmFYgLH5Rgleo9k7U2NTlWRzkfNAowJ9hLy6doL9Hky5IN/3Kwtpj3vg==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + dev: false + + /@tamagui/remove-scroll@1.94.0(@types/react@18.2.52)(react@18.2.0): + resolution: {integrity: sha512-jvyv9DiFK66o7U3czDZnRNfbcmQy8kYhFKFukk35VImeurZWKOG3E3kVC2YQhelLJkgzfuUmTcTiWhhwijKFFQ==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + react-remove-scroll: 2.5.5(@types/react@18.2.52)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + + /@tamagui/roving-focus@1.94.0(react@18.2.0): + resolution: {integrity: sha512-q5jz4iakTT3YnAFmqJSIzckCzNCRTL5oSgZWiJSvNK/JPNbrgBJ275t//DKZyO5Ee7nOj9O2xh+LFZPAtAoM8w==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/collection': 1.94.0(react@18.2.0) + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + '@tamagui/use-direction': 1.94.0(react@18.2.0) + '@tamagui/use-event': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/scroll-view@1.94.0(react@18.2.0): + resolution: {integrity: sha512-77LKh3ectAy9kKJCwFf7ixPm5LXbu3XPn13KUPTYli4SDiQp6kcOgsPdiUepWqghg7r70vY2R1yQai6fBXg92A==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + dev: false + + /@tamagui/select@1.94.0(@types/react@18.2.52)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-wFB3wcDPc6CmlyC67NUk0wU/S2DB1Ylcy8+VE+DtwcdCS6M0stbNjPvAIyj8JX97xo/IYcq5V2H3yNE72bAUtg==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@floating-ui/react': 0.26.9(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-native': 0.10.4(react-native@0.73.6)(react@18.2.0) + '@tamagui/adapt': 1.94.0(react@18.2.0) + '@tamagui/animate-presence': 1.94.0(react@18.2.0) + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/dismissable': 1.94.0(react@18.2.0) + '@tamagui/focus-scope': 1.94.0(react@18.2.0) + '@tamagui/get-token': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/list-item': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/portal': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/remove-scroll': 1.94.0(@types/react@18.2.52)(react@18.2.0) + '@tamagui/separator': 1.94.0(react@18.2.0) + '@tamagui/sheet': 1.94.0(@types/react@18.2.52)(react-native@0.73.6)(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/text': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + '@tamagui/use-debounce': 1.94.0(react@18.2.0) + '@tamagui/use-event': 1.94.0(react@18.2.0) + '@tamagui/use-previous': 1.94.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + + /@tamagui/separator@1.94.0(react@18.2.0): + resolution: {integrity: sha512-Tt+A9FsprnG9wtyUfXlUzlW5GI4FvDH9qZKua7pFdDYvbH6+V9MSUGFUeR1NLxO42G5kkIqk0sZnG7j3w+FBpA==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/shapes@1.94.0(react@18.2.0): + resolution: {integrity: sha512-ksp0pVEPAzINYhtbXm8ijdKxVnodisj3iIyowkBHi63j1lHsFG9LDPfMI7FF1o2qEq8kqEqBRNdFCTq11iwRlQ==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + dev: false + + /@tamagui/sheet@1.94.0(@types/react@18.2.52)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-QDzgG/+0wP/OK1SPnBdHw5ihuzhzp/WW58ANn5Suh3fVWoUZUlhlppNrenmN+OGTbNg2CJhR9exddRTspfsFjg==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/animate-presence': 1.94.0(react@18.2.0) + '@tamagui/animations-react-native': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/portal': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/remove-scroll': 1.94.0(@types/react@18.2.52)(react@18.2.0) + '@tamagui/scroll-view': 1.94.0(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/use-constant': 1.94.0(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + '@tamagui/use-keyboard-visible': 1.94.0(react-native@0.73.6)(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + + /@tamagui/shorthands@1.94.0: + resolution: {integrity: sha512-+WXHf7fGOMFI/HtBMOmX9Ep/YgVguxxH5SDYbtpSohw7h9uzJ05si19kxt0tBh2i12gm8qPiKKJqUC9Cvcq3BA==} + dev: false + + /@tamagui/simple-hash@1.94.0: + resolution: {integrity: sha512-r3YeMhrDHo9vcKxgh0KXtWsRaZ2w57MngsL030tH1//pBtu8TcEZRZVbWBrgSsSUFiVBqob7ZEwSBvjnkKxdBQ==} + dev: false + + /@tamagui/slider@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-rUFeJFAUx8o7qV/r01/wudYC3B77AaP5OArJOSuvqQW2YweaVXZAAeBChvKJFXbIfJ6AXFvNtC59b5VIaOdSxw==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/get-token': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + '@tamagui/use-direction': 1.94.0(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/stacks@1.94.0(react@18.2.0): + resolution: {integrity: sha512-oH1P+IUtreKQloVM9aCE9tY9OXjXMdABg0dxFYnkJSZSia025DaOfUzqH0fQJXmDrqOO6+rYWgo3vEnngeLTlg==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/core': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/static@1.94.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): + resolution: {integrity: sha512-OMljTwyW+Vxwj7suUIgwBhveBD2ZKuWnagMLw5kEi+/09/A09ILsXnUtpwIOV9WAnwln5xIagwaX+8C+rRdAUw==} + dependencies: + '@babel/core': 7.23.9 + '@babel/generator': 7.23.6 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/parser': 7.24.0 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) + '@babel/runtime': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.24.0 + '@tamagui/build': 1.94.0(typescript@5.4.3) + '@tamagui/cli-color': 1.94.0 + '@tamagui/config-default': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/fake-react-native': 1.94.0 + '@tamagui/generate-themes': 1.94.0(esbuild@0.20.2) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/helpers-node': 1.94.0 + '@tamagui/proxy-worm': 1.94.0 + '@tamagui/shorthands': 1.94.0 + '@tamagui/types': 1.94.0 + babel-literal-to-ast: 2.1.0(@babel/core@7.23.9) + browserslist: 4.22.3 + check-dependency-version-consistency: 4.1.0 + esbuild: 0.20.2 + esbuild-register: 3.5.0(esbuild@0.20.2) + find-cache-dir: 3.3.2 + find-root: 1.1.0 + fs-extra: 11.2.0 + invariant: 2.2.4 + lodash: 4.17.21 + react-native-web: 0.19.10(react-dom@18.2.0)(react@18.2.0) + react-native-web-internals: 1.94.0 + react-native-web-lite: 1.94.0(react-dom@18.2.0)(react@18.2.0) + transitivePeerDependencies: + - encoding + - react + - react-dom + - supports-color + - typescript + dev: false + + /@tamagui/switch-headless@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-s3EcAGYfmRdy3TIChBX/Meuy4par4BYmkYJKUakpFPxRtXXR30RgHgGjwmFYMgMH8adQxpnWzVpX+jMxql4OEA==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/label': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/use-previous': 1.94.0 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/switch@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-JXCGWR5GJJr/7jUGuxj3hn6mWNm+j5sB+bvSivdYmYODiDA7JR6YukUu7S/oI+zovAugDtJRHRjUEt4aERjEJQ==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/focusable': 1.94.0(react@18.2.0) + '@tamagui/get-token': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/label': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/switch-headless': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + '@tamagui/use-previous': 1.94.0 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/tabs@1.94.0(@types/react@18.2.52)(immer@10.0.3)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-hHR48xqmGEWcLkTanBs076zAvN4lJuLVgAi57Hk1WMJOQNDTuSUrBn6i2hSYHV7zlkYK7zY8R9iYZ9faC6lDcg==} + peerDependencies: + react: '*' + react-dom: '*' + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/get-button-sized': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/group': 1.94.0(@types/react@18.2.52)(immer@10.0.3)(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/roving-focus': 1.94.0(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + '@tamagui/use-direction': 1.94.0(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - immer + - react-native + dev: false + + /@tamagui/text@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-CGkjuwSHl+PF3HoZ/LDQfQH+NuzX2FN4AQzUFxoCZuf34Jafmbi31P1pbE2lY1+LdGE/joRBeZ3GwkJJU16M9A==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/get-font-sized': 1.94.0(react@18.2.0) + '@tamagui/helpers-tamagui': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + transitivePeerDependencies: + - react-native + dev: false + + /@tamagui/theme-builder@1.94.0: + resolution: {integrity: sha512-S/TwOCcgvSazmfnDjcz1wWsEVFQRxT8yQvy2bA7UON6CdADs5TURBGNx5ytrxKrEMFArR2GMKWZXl2XX+9ezqw==} + dependencies: + '@tamagui/create-theme': 1.94.0 + color2k: 2.0.3 + dev: false + + /@tamagui/theme@1.94.0(react@18.2.0): + resolution: {integrity: sha512-q7hCdNNsXanw0qkibMQnDaFG5SLj8/eCdP6phg3+KmtNrmeRNe4BVYunrDWXqLM8zE07ZqLjZRnrgTZX+4hBAg==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + dev: false + + /@tamagui/themes@1.94.0: + resolution: {integrity: sha512-s7aMgSm8CCEBw/r4PiLsSqM73DhiKNsx4t1buIqRjqzlYjsQJihQp5RtK6DoRsb2CoLB0o50g/Yc6XpO/FIAbg==} + dependencies: + '@tamagui/colors': 1.94.0 + '@tamagui/create-theme': 1.94.0 + '@tamagui/theme-builder': 1.94.0 + '@tamagui/web': 1.94.0 + dev: false + + /@tamagui/timer@1.94.0: + resolution: {integrity: sha512-YNmripupVw06ZPccuuEBBEvWhZFHasZ0G2fYM4Pu4jWlUFt+ZhlRRs3BOZsANHH8xVSqE+KKTL0XSfcBbJMPnw==} + dev: false + + /@tamagui/toast@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-4+0bw+NzvlXRAK19BUy6AIxsVXW7pXmNxDszZPu5Jax1gEunNgTzhLaSeBkFq9oIJNuer9i8E4m3I9P5XBV7tw==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/animate-presence': 1.94.0(react@18.2.0) + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/dismissable': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/polyfill-dev': 1.94.0 + '@tamagui/portal': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/text': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + '@tamagui/visually-hidden': 1.94.0(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/toggle-group@1.94.0(@types/react@18.2.52)(immer@10.0.3)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-4+UkqnaldjJCWjcQ05vG1HMn+32TsTj3L9o8tSNtbDjfbM6DoWMHtPbTeudUtGmJ/EWQw62jMB3JVkV8Ekw0RQ==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/focusable': 1.94.0(react@18.2.0) + '@tamagui/font-size': 1.94.0(react@18.2.0) + '@tamagui/get-token': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/group': 1.94.0(@types/react@18.2.52)(immer@10.0.3)(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/helpers-tamagui': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/roving-focus': 1.94.0(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + '@tamagui/use-direction': 1.94.0(react@18.2.0) + '@tamagui/web': 1.94.0 + react: 18.2.0 + transitivePeerDependencies: + - '@types/react' + - immer + - react-native + dev: false + + /@tamagui/tooltip@1.94.0(@types/react@18.2.52)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-TLfaYXWbD6MM+M5dmnFoW/mpdAr1vpwx+ZyCkaVphodS7FgLSgbKhlnLIbQunFqgG4LIsT/xqi3YYWoldwyk4Q==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@floating-ui/react': 0.26.9(react-dom@18.2.0)(react@18.2.0) + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/floating': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/get-token': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/polyfill-dev': 1.94.0 + '@tamagui/popover': 1.94.0(@types/react@18.2.52)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0) + '@tamagui/popper': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/text': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react-dom + dev: false + + /@tamagui/types@1.94.0: + resolution: {integrity: sha512-xPkJqf9EVtcUkiw9+08PKkanl/fNY+PFgskcqn7LkmgrG28ekueEnVBV8t5EXvByaK7oo5r+zyAPXjgb18gJHQ==} + dev: false + + /@tamagui/use-callback-ref@1.94.0: + resolution: {integrity: sha512-R++Xk2K9zWGPHdJV0T4mbrKVG3bNmCZleIlWyEIwAkzhXiDVD0vMFRyToAv6mJWbCcqe+2YVOUmoVFmGfS/QEA==} + dev: false + + /@tamagui/use-constant@1.94.0(react@18.2.0): + resolution: {integrity: sha512-Ufd4GbyKljLtwG6y1j8oufAuM+wjeGHmCSC690IGrZY/yREYG/6DoSZaTt3ToDfo7P5HG/6SSLd0IwcMg1h8ig==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + dev: false + + /@tamagui/use-controllable-state@1.94.0(react@18.2.0): + resolution: {integrity: sha512-DnTbjx1zfJMyzWzZ8mnWdbe3bRTyIBkFFEZXYiFEDDEbaOREKO2wDZRrA8jsvR+AYixAHWpIREPfk75X0lXy9A==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/use-event': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/use-debounce@1.94.0(react@18.2.0): + resolution: {integrity: sha512-yfbDMmd+pcafpFCyw8vcmF6pfEARIYWCTaEaBh7wB2+wdRpzNqMm4KTdiQNqHEq09IdoIY2iQGTYt/88Nhkuvw==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + dev: false + + /@tamagui/use-did-finish-ssr@1.94.0(react@18.2.0): + resolution: {integrity: sha512-QX3i5nN4FulFXlrN3S792B2r67fz0GkOu7rkqDJj3hDmJTFFK2BMMDR0TS2zeZI1Lhf3NRW4V5QvadTZ05uRaQ==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/constants': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/use-direction@1.94.0(react@18.2.0): + resolution: {integrity: sha512-CMEyGSt0sZnSPHfKXFZq7blLUxGyzI2hHeIEgNG6HY5SVE3sGq+7AgKI5skL6uf9ENLiJgdOOitfjOMYSPBKUQ==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + dev: false + + /@tamagui/use-escape-keydown@1.94.0: + resolution: {integrity: sha512-Oqmhh8kb3UcUlSZvMB7B1MGiHah5zfeCQYO6KyxfStQcIvScChCYOsjNsBRdnElB4l679pelS5TKrjsnG8s8/Q==} + dependencies: + '@tamagui/use-callback-ref': 1.94.0 + dev: false + + /@tamagui/use-event@1.94.0(react@18.2.0): + resolution: {integrity: sha512-1oXVBHksOtGnk1znzunVTUywGYCjTnOoMbwgxB2qyXJOiKeMKULb1h3oNIJ3sliA0Vf4W6CdG3nX16RqrikvSw==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/constants': 1.94.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@tamagui/use-force-update@1.94.0(react@18.2.0): + resolution: {integrity: sha512-8sYdNDssnKJhZ/2UTVpO9364Ml4HAMXz8rajKo88r3Y6IU8qGJ9VK9fFYre6X5mWcBewHK9FS7lk/ivpk65QhA==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + dev: false + + /@tamagui/use-keyboard-visible@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-Tyn5bQRu8Q82Q4psm9UgOTrUuXJ0bKacybaOIr1PIaC5AwsYPB3Qzxut2lpg87RK05xmsRrwTcgwlDVlGJIXqw==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/use-presence@1.94.0(react@18.2.0): + resolution: {integrity: sha512-kGrysrGYYm4teL+P3tFHopvb2Q8cYqSpsbBZ0WZgadS3Ne6UaMzhjyPXz3ASOVGWiSTLJtrkmW9rPfywELzUPg==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/web': 1.94.0 + react: 18.2.0 + dev: false + + /@tamagui/use-previous@1.94.0: + resolution: {integrity: sha512-Mo+tHM4uy6SnSiA0EPSQc7vD8hOwD2qNfyAjx6PT47r10dzi+0cC3xbYM/6zpvZrcSl8ugT5HbS6FpYeveC/jg==} + dev: false + + /@tamagui/use-window-dimensions@1.94.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-6yewGpv2lTRbicGglDss171bCdFFeKjWybOR2CgE+Uu37rIUCZmeWYqgtcBBS30plcMaOpy5fQC3LOwxFvC05A==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@tamagui/constants': 1.94.0(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /@tamagui/visually-hidden@1.94.0(react@18.2.0): + resolution: {integrity: sha512-YmmNOfiJTkCx4EE25RyHBxDuDSiVyShBBNNtPSgZRs3zqjY7NT/UZyseGk/g+aYbW5L27stYa5aNNRFLKqSwlQ==} + peerDependencies: + react: '*' + dependencies: + '@tamagui/web': 1.94.0 + react: 18.2.0 + dev: false + + /@tamagui/web@1.94.0: + resolution: {integrity: sha512-Mwv/JLks46FoXncv2h6RI4AUYdEXJlnOZog450ZwDEgn13JQJLS8VEZsAgVOK5sc4zt/WzeS7pEvquS9DEridg==} + dependencies: + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/helpers': 1.94.0(react@18.2.0) + '@tamagui/normalize-css-color': 1.94.0 + '@tamagui/timer': 1.94.0 + '@tamagui/types': 1.94.0 + '@tamagui/use-did-finish-ssr': 1.94.0(react@18.2.0) + '@tamagui/use-event': 1.94.0(react@18.2.0) + '@tamagui/use-force-update': 1.94.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@tanstack/eslint-plugin-query@5.20.1(eslint@8.56.0)(typescript@5.4.3): + resolution: {integrity: sha512-oIp7Wh90KHOm1FKCvcv87fiD2H96xo/crFrlhbvqBzR2f0tMEGOK/ANKMGNFQprd6BT6lyZhQPlOEkFdezsjIg==} + peerDependencies: + eslint: ^8.0.0 + dependencies: + '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.4.3) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@tanstack/query-core@5.22.2: + resolution: {integrity: sha512-z3PwKFUFACMUqe1eyesCIKg3Jv1mysSrYfrEW5ww5DCDUD4zlpTKBvUDaEjsfZzL3ULrFLDM9yVUxI/fega1Qg==} + dev: false + + /@tanstack/react-query@5.22.2(react@18.2.0): + resolution: {integrity: sha512-TaxJDRzJ8/NWRT4lY2jguKCrNI6MRN+67dELzPjNUlvqzTxGANlMp68l7aC7hG8Bd1uHNxHl7ihv7MT50i/43A==} + peerDependencies: + react: ^18.0.0 + dependencies: + '@tanstack/query-core': 5.22.2 + react: 18.2.0 + dev: false + /@tootallnate/quickjs-emscripten@0.23.0: resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} dev: true @@ -2965,7 +5154,7 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@turbo/gen@1.12.2(@types/node@20.11.16)(typescript@5.3.3): + /@turbo/gen@1.12.2(@types/node@20.12.7)(typescript@5.4.3): resolution: {integrity: sha512-XmdaB4J3JvDs6/L+JkCHTf/s74+O4xKZC0HDQxvV+cyicvYocPcR5NTOuH5gdG81roR9tVQWhkAza2hgGOlSyw==} hasBin: true dependencies: @@ -2977,7 +5166,7 @@ packages: minimatch: 9.0.3 node-plop: 0.26.3 proxy-agent: 6.3.1 - ts-node: 10.9.2(@types/node@20.11.16)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.3) update-check: 1.5.4 validate-npm-package-name: 5.0.0 transitivePeerDependencies: @@ -3050,6 +5239,12 @@ packages: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true + /@types/fs-extra@9.0.13: + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + dependencies: + '@types/node': 20.11.30 + dev: false + /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: @@ -3084,6 +5279,10 @@ packages: '@types/istanbul-lib-report': 3.0.3 dev: false + /@types/js-yaml@4.0.9: + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + dev: false + /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -3095,14 +5294,41 @@ packages: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true + /@types/node-forge@1.3.11: + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + dependencies: + '@types/node': 20.12.7 + dev: true + + /@types/node@17.0.45: + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + dev: false + /@types/node@20.11.16: resolution: {integrity: sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==} dependencies: undici-types: 5.26.5 + /@types/node@20.11.24: + resolution: {integrity: sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==} + dependencies: + undici-types: 5.26.5 + dev: false + + /@types/node@20.11.30: + resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} + dependencies: + undici-types: 5.26.5 + dev: false + + /@types/node@20.12.7: + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + dependencies: + undici-types: 5.26.5 + dev: true + /@types/prop-types@15.7.11: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - dev: true /@types/react@18.2.52: resolution: {integrity: sha512-E/YjWh3tH+qsLKaUzgpZb5AY0ChVa+ZJzF7ogehVILrFpdQk6nC/WXOv0bfFEABbXbgNxLBGU7IIZByPKb6eBw==} @@ -3110,15 +5336,12 @@ packages: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 csstype: 3.1.3 - dev: true /@types/scheduler@0.16.8: resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} - dev: true /@types/semver@7.5.6: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - dev: false /@types/stack-utils@2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -3150,7 +5373,7 @@ packages: '@types/yargs-parser': 21.0.3 dev: false - /@typescript-eslint/eslint-plugin@6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/eslint-plugin@6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.4.3): resolution: {integrity: sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3162,10 +5385,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.4.3) '@typescript-eslint/scope-manager': 6.20.0 - '@typescript-eslint/type-utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 6.20.0(eslint@8.56.0)(typescript@5.4.3) + '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.4.3) '@typescript-eslint/visitor-keys': 6.20.0 debug: 4.3.4 eslint: 8.56.0 @@ -3173,13 +5396,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.3) + typescript: 5.4.3 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.4.3): resolution: {integrity: sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3191,11 +5414,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.20.0 '@typescript-eslint/types': 6.20.0 - '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.4.3) '@typescript-eslint/visitor-keys': 6.20.0 debug: 4.3.4 eslint: 8.56.0 - typescript: 5.3.3 + typescript: 5.4.3 transitivePeerDependencies: - supports-color dev: false @@ -3206,9 +5429,8 @@ packages: dependencies: '@typescript-eslint/types': 6.20.0 '@typescript-eslint/visitor-keys': 6.20.0 - dev: false - /@typescript-eslint/type-utils@6.20.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/type-utils@6.20.0(eslint@8.56.0)(typescript@5.4.3): resolution: {integrity: sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3218,12 +5440,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.4.3) + '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.4.3) debug: 4.3.4 eslint: 8.56.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.3) + typescript: 5.4.3 transitivePeerDependencies: - supports-color dev: false @@ -3231,9 +5453,8 @@ packages: /@typescript-eslint/types@6.20.0: resolution: {integrity: sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==} engines: {node: ^16.0.0 || >=18.0.0} - dev: false - /@typescript-eslint/typescript-estree@6.20.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@6.20.0(typescript@5.4.3): resolution: {integrity: sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3249,13 +5470,12 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.3) + typescript: 5.4.3 transitivePeerDependencies: - supports-color - dev: false - /@typescript-eslint/utils@6.20.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/utils@6.20.0(eslint@8.56.0)(typescript@5.4.3): resolution: {integrity: sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3266,13 +5486,12 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 6.20.0 '@typescript-eslint/types': 6.20.0 - '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.4.3) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript - dev: false /@typescript-eslint/visitor-keys@6.20.0: resolution: {integrity: sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==} @@ -3280,7 +5499,6 @@ packages: dependencies: '@typescript-eslint/types': 6.20.0 eslint-visitor-keys: 3.4.3 - dev: false /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -3449,6 +5667,7 @@ packages: /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} + dev: false /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -3470,9 +5689,11 @@ packages: /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + dev: false /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: false /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -3480,6 +5701,7 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 + dev: false /appdirsjs@1.2.7: resolution: {integrity: sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==} @@ -3495,6 +5717,7 @@ packages: /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: false /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -3505,6 +5728,13 @@ packages: /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + /aria-hidden@1.2.3: + resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} + engines: {node: '>=10'} + dependencies: + tslib: 2.6.2 + dev: false + /aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} dependencies: @@ -3591,6 +5821,15 @@ packages: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: false + /asn1.js@5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + dev: false + /ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: false @@ -3614,6 +5853,11 @@ packages: engines: {node: '>=4'} dev: false + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: false + /async-limiter@1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} dev: false @@ -3633,22 +5877,6 @@ packages: engines: {node: '>= 4.0.0'} dev: false - /autoprefixer@10.4.17(postcss@8.4.33): - resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.22.3 - caniuse-lite: 1.0.30001583 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - dev: false - /available-typed-arrays@1.0.6: resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} engines: {node: '>= 0.4'} @@ -3673,6 +5901,38 @@ packages: '@babel/core': 7.23.9 dev: false + /babel-literal-to-ast@2.1.0(@babel/core@7.23.9): + resolution: {integrity: sha512-CxfpQ0ysQ0bZOhlaPgcWjl79Em16Rhqc6++UAFn0A3duiXmuyhhj8yyl9PYbj0I0CyjrHovdDbp2QEKT7uIMxw==} + peerDependencies: + '@babel/core': ^7.1.2 + dependencies: + '@babel/core': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/traverse': 7.23.9 + '@babel/types': 7.24.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-fully-specified@1.3.0(@babel/core@7.23.9): + resolution: {integrity: sha512-STW+rXLxwCB839gmwBizuipaDBb/iGZ5Vg0bmfynYLyXRTWgofXDrePuW5VvBJq2x8yB6xvT+3J7Z0U79uQYNw==} + peerDependencies: + '@babel/core': '*' + dependencies: + '@babel/core': 7.23.9 + dev: false + + /babel-plugin-module-resolver@5.0.0: + resolution: {integrity: sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q==} + engines: {node: '>= 16'} + dependencies: + find-babel-config: 2.0.0 + glob: 8.1.0 + pkg-up: 3.1.0 + reselect: 4.1.8 + resolve: 1.22.8 + dev: true + /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.9): resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} peerDependencies: @@ -3721,7 +5981,7 @@ packages: '@babel/core': '>=7.11.6' dependencies: '@babel/core': 7.23.9 - core-js: 3.35.1 + core-js: 3.36.0 debug: 4.3.4 lodash.mergewith: 4.6.2 prettier: 2.8.8 @@ -3747,7 +6007,7 @@ packages: '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) '@babel/preset-env': 7.23.9(@babel/core@7.23.9) '@babel/preset-react': 7.23.3(@babel/core@7.23.9) - '@react-native/babel-preset': 0.73.20(@babel/core@7.23.9)(@babel/preset-env@7.23.9) + '@react-native/babel-preset': 0.73.21(@babel/core@7.23.9)(@babel/preset-env@7.23.9) babel-plugin-react-native-web: 0.18.12 react-refresh: 0.14.0 transitivePeerDependencies: @@ -3793,6 +6053,10 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /base-64@0.1.0: + resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} + dev: false + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3801,6 +6065,10 @@ packages: engines: {node: '>=10.0.0'} dev: true + /before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + dev: false + /better-opn@3.0.2: resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} engines: {node: '>=12.0.0'} @@ -3816,6 +6084,7 @@ packages: /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} + dev: false /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -3828,6 +6097,18 @@ packages: resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} dev: false + /bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + dev: false + + /bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: false + + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: false + /bplist-creator@0.1.0: resolution: {integrity: sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==} dependencies: @@ -3865,6 +6146,60 @@ packages: dependencies: fill-range: 7.0.1 + /brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: false + + /browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /browserify-cipher@1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + dev: false + + /browserify-des@1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + dependencies: + cipher-base: 1.0.4 + des.js: 1.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /browserify-rsa@4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + dependencies: + bn.js: 5.2.1 + randombytes: 2.1.0 + dev: false + + /browserify-sign@4.2.2: + resolution: {integrity: sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==} + engines: {node: '>= 4'} + dependencies: + bn.js: 5.2.1 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.4 + inherits: 2.0.4 + parse-asn1: 5.1.6 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: false + /browserslist@4.22.3: resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -3900,6 +6235,10 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: false + /buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: false + /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: @@ -3916,6 +6255,22 @@ packages: semver: 7.5.4 dev: true + /burnt@0.12.2(expo@50.0.14)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-bbZjGN4Om7dykr8ZcLb0tTO5L2becMR+HIez1ySUGgG/rvK+ePgBEuBA6lMOZqOTsUXhIKFUBH0sCXQ25fq5SA==} + peerDependencies: + expo: '*' + react: '*' + react-native: '*' + dependencies: + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + sf-symbols-typescript: 1.0.0 + sonner: 0.3.5(react-dom@18.2.0)(react@18.2.0) + transitivePeerDependencies: + - react-dom + dev: false + /bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} @@ -3988,6 +6343,7 @@ packages: /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} + dev: false /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} @@ -3999,6 +6355,10 @@ packages: engines: {node: '>=10'} dev: false + /camelize@1.0.1: + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + dev: false + /caniuse-lite@1.0.30001583: resolution: {integrity: sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q==} @@ -4025,6 +6385,11 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: false + /change-case@3.1.0: resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} dependencies: @@ -4056,8 +6421,48 @@ packages: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} dev: false - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + /check-dependency-version-consistency@4.1.0: + resolution: {integrity: sha512-xghkzKgMxpAfeP9OJfVrErtv8BU4h5kHYQyheHC0j0RYRVNWti0qI3+HkFgWBKejq2UE2wOnoWZlvDKFj6jFoA==} + engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + '@types/js-yaml': 4.0.9 + chalk: 5.3.0 + commander: 10.0.1 + edit-json-file: 1.8.0 + globby: 13.2.2 + js-yaml: 4.1.0 + semver: 7.5.4 + table: 6.8.1 + type-fest: 3.13.1 + dev: false + + /cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + dev: false + + /cheerio@1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.1.0 + htmlparser2: 8.0.2 + parse5: 7.1.2 + parse5-htmlparser2-tree-adapter: 7.0.0 + dev: false + + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 @@ -4069,6 +6474,7 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 + dev: false /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} @@ -4080,7 +6486,7 @@ packages: engines: {node: '>=12.13.0'} hasBin: true dependencies: - '@types/node': 20.11.16 + '@types/node': 20.11.24 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -4091,7 +6497,7 @@ packages: /chromium-edge-launcher@1.0.0: resolution: {integrity: sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA==} dependencies: - '@types/node': 20.11.16 + '@types/node': 20.11.24 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -4110,6 +6516,13 @@ packages: engines: {node: '>=8'} dev: false + /cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + /class-variance-authority@0.7.0: resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} dependencies: @@ -4182,11 +6595,6 @@ packages: engines: {node: '>=6'} dev: false - /clsx@2.1.0: - resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} - engines: {node: '>=6'} - dev: false - /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -4211,6 +6619,10 @@ packages: simple-swizzle: 0.2.2 dev: false + /color2k@2.0.3: + resolution: {integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==} + dev: false + /color@4.2.3: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} @@ -4237,7 +6649,6 @@ packages: /commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} - dev: true /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -4246,6 +6657,7 @@ packages: /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + dev: false /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} @@ -4329,6 +6741,11 @@ packages: engines: {node: '>= 0.6'} dev: false + /cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + dev: false + /core-js-compat@3.35.1: resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==} dependencies: @@ -4339,8 +6756,8 @@ packages: requiresBuild: true dev: true - /core-js@3.35.1: - resolution: {integrity: sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==} + /core-js@3.36.0: + resolution: {integrity: sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==} requiresBuild: true dev: false @@ -4358,6 +6775,34 @@ packages: parse-json: 4.0.0 dev: false + /create-ecdh@4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + dev: false + + /create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: false + + /create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: false + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true @@ -4393,6 +6838,26 @@ packages: resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} dev: false + /crypto-browserify@3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.2 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.2 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + dev: false + + /crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + dev: false + /crypto-random-string@1.0.0: resolution: {integrity: sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==} engines: {node: '>=4'} @@ -4403,20 +6868,56 @@ packages: engines: {node: '>=8'} dev: false + /css-color-keywords@1.0.0: + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} + dev: false + /css-in-js-utils@3.1.0: resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} dependencies: hyphenate-style-name: 1.0.4 dev: false + /css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + dev: false + + /css-to-react-native@3.2.0: + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + dependencies: + camelize: 1.0.1 + css-color-keywords: 1.0.0 + postcss-value-parser: 4.2.0 + dev: false + + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: false + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: false + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true + dev: false /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: true /dag-map@1.0.2: resolution: {integrity: sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==} @@ -4431,6 +6932,11 @@ packages: engines: {node: '>= 6'} dev: false + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: false + /data-uri-to-buffer@6.0.1: resolution: {integrity: sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==} engines: {node: '>= 14'} @@ -4582,6 +7088,14 @@ packages: engines: {node: '>= 0.8'} dev: false + /deprecated-react-native-prop-types@2.3.0: + resolution: {integrity: sha512-pWD0voFtNYxrVqvBMYf5gq3NA2GCpfodS1yNynTPc93AYA/KEMGeWDqqeUB6R2Z9ZofVhks2aeJXiuQqKNpesA==} + dependencies: + '@react-native/normalize-color': 2.1.0 + invariant: 2.2.4 + prop-types: 15.8.1 + dev: false + /deprecated-react-native-prop-types@5.0.0: resolution: {integrity: sha512-cIK8KYiiGVOFsKdPMmm1L3tA/Gl+JopXL6F5+C7x39MyPsQYnP57Im/D6bNUzcborD7fcMwiwZqcBdBXXZucYQ==} engines: {node: '>=18'} @@ -4591,11 +7105,22 @@ packages: prop-types: 15.8.1 dev: false + /deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + dev: false + /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} dev: false + /des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -4607,14 +7132,27 @@ packages: hasBin: true dev: false + /detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + dev: false + /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: false /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true + /diffie-hellman@5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dependencies: + bn.js: 4.12.0 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dev: false + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -4623,6 +7161,7 @@ packages: /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: false /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} @@ -4637,6 +7176,33 @@ packages: dependencies: esutils: 2.0.3 + /dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + dev: false + + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: false + + /domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: false + + /domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dev: false + /dot-case@2.1.1: resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} dependencies: @@ -4655,6 +7221,17 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: false + + /edit-json-file@1.8.0: + resolution: {integrity: sha512-IBOpbe2aQufNl5oZ4jsr2AmNVUy5bO7jS5hk0cCyWhOLdH59Xv41B3XQObE/JB89Ae5qDY9hVsq13/hgGhFBZg==} + dependencies: + find-value: 1.0.12 + iterate-object: 1.3.4 + r-json: 1.3.0 + set-value: 4.1.0 + w-json: 1.3.10 + dev: false /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -4663,11 +7240,28 @@ packages: /electron-to-chromium@1.4.656: resolution: {integrity: sha512-9AQB5eFTHyR3Gvt2t/NwR0le2jBSUNwCnMbUCejFWHD+so4tH40/dRLgoE+jxlPeWS43XJewyvCv+I8LPMl49Q==} + /elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: false + + /eme-encryption-scheme-polyfill@2.1.1: + resolution: {integrity: sha512-njD17wcUrbqCj0ArpLu5zWXtaiupHb/2fIUQGdInf83GlI+Q6mmqaPGLdrke4savKAu15J/z1Tg/ivDgl14g0g==} + dev: false + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: false /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} @@ -4680,6 +7274,15 @@ packages: once: 1.4.0 dev: false + /entities@2.0.3: + resolution: {integrity: sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==} + dev: false + + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: false + /env-editor@0.4.2: resolution: {integrity: sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==} engines: {node: '>=8'} @@ -4808,10 +7411,69 @@ packages: is-symbol: 1.0.4 dev: false + /esbuild-plugin-es5@2.1.0(esbuild@0.20.2): + resolution: {integrity: sha512-V0rsjIHa/pswTvqM/N+jrhhBAiOdp+Ppwmhk9HQKfpvhYRUKsdeImiHeFP0oWkc+GX7pFxJzmceaPJT1RA7jyQ==} + engines: {node: '>=12.0'} + peerDependencies: + esbuild: ^0.19.0 + dependencies: + '@swc/core': 1.4.8(@swc/helpers@0.5.6) + '@swc/helpers': 0.5.6 + deepmerge: 4.3.1 + esbuild: 0.20.2 + dev: false + + /esbuild-register@3.5.0(esbuild@0.20.2): + resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} + peerDependencies: + esbuild: '>=0.12 <1' + dependencies: + debug: 4.3.4 + esbuild: 0.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: false + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + dev: false + /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: false @@ -4890,7 +7552,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.4.3) debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 @@ -4908,7 +7570,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.4.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -5101,6 +7763,18 @@ packages: engines: {node: '>=6'} dev: false + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + + /evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + dev: false + /exec-async@2.2.0: resolution: {integrity: sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==} dev: false @@ -5132,13 +7806,33 @@ packages: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - /expo-asset@9.0.2(expo@50.0.5): + /expo-alternate-app-icons@0.1.7(expo@50.0.14)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-4hIIGVRaNSedreT2GbujpR+vyz7x+/j8GPfGn/WHFYy8V0lmAOa8KgT2JeXuK1nB6s4Ler4yahrxUhcSI/lmqQ==} + peerDependencies: + expo: '*' + react: '*' + react-native: '*' + dependencies: + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /expo-application@5.8.3(expo@50.0.14): + resolution: {integrity: sha512-IISxzpPX+Xe4ynnwX8yY52T6dm1g9sME1GCj4lvUlrdc5xeTPM6U35x7Wj82V7lLWBaVGe+/Tg9EeKqfylCEwA==} + peerDependencies: + expo: '*' + dependencies: + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + dev: false + + /expo-asset@9.0.2(expo@50.0.14): resolution: {integrity: sha512-PzYKME1MgUOoUvwtdzhAyXkjXOXGiSYqGKG/MsXwWr0Ef5wlBaBm2DCO9V6KYbng5tBPFu6hTjoRNil1tBOSow==} dependencies: '@react-native/assets-registry': 0.73.1 blueimp-md5: 2.19.0 - expo-constants: 15.4.5(expo@50.0.5) - expo-file-system: 16.0.5(expo@50.0.5) + expo-constants: 15.4.5(expo@50.0.14) + expo-file-system: 16.0.8(expo@50.0.14) invariant: 2.2.4 md5-file: 3.2.3 transitivePeerDependencies: @@ -5146,54 +7840,112 @@ packages: - supports-color dev: false - /expo-constants@15.4.5(expo@50.0.5): + /expo-av@13.10.5(expo@50.0.14): + resolution: {integrity: sha512-w45oCoe+8PunDeM0rh/Ut6UaGh7OjEJOCjAiQy3nCxpA8FaXB17KaqpsvkAXIMvceHYWndH8+D29esUTS6wEsA==} + peerDependencies: + expo: '*' + dependencies: + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + dev: false + + /expo-brightness@11.8.0(expo@50.0.14): + resolution: {integrity: sha512-ipQA7s8PvJVhy+Ls6Dsql0veXXV5CdMcbXNPwQuXTbUofRE+8FHO0vasShMZlKYcD9KNgFygjx0U+THi80dtAw==} + peerDependencies: + expo: '*' + dependencies: + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + dev: false + + /expo-build-properties@0.11.1(expo@50.0.14): + resolution: {integrity: sha512-m4j4aEjFaDuBE6KWYMxDhWgLzzSmpE7uHKAwtvXyNmRK+6JKF0gjiXi0sXgI5ngNppDQpsyPFMvqG7uQpRuCuw==} + peerDependencies: + expo: '*' + dependencies: + ajv: 8.12.0 + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + semver: 7.5.4 + dev: false + + /expo-clipboard@5.0.1(expo@50.0.14): + resolution: {integrity: sha512-JH853QJPr5W3h87If3aDTnMK+ESSIrwzU2TdfZrqZttVDY2pMIf/w37mVHHNYodXM4ATHXadtOkjKbAa0DWwUg==} + peerDependencies: + expo: '*' + dependencies: + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + dev: false + + /expo-constants@15.4.5(expo@50.0.14): resolution: {integrity: sha512-1pVVjwk733hbbIjtQcvUFCme540v4gFemdNlaxM2UXKbfRCOh2hzgKN5joHMOysoXQe736TTUrRj7UaZI5Yyhg==} peerDependencies: expo: '*' dependencies: '@expo/config': 8.5.4 - expo: 50.0.5(@babel/core@7.23.9)(@react-native/babel-preset@0.73.20) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) transitivePeerDependencies: - supports-color dev: false - /expo-file-system@16.0.5(expo@50.0.5): - resolution: {integrity: sha512-JpKMbKfwTaMCbwUwq7MwcSbPR7r+IqZEL3RFam3ClPHDtKLnlEoywREeaDsWjSZb7dS25hG3WqXspfTuugCDvg==} + /expo-file-system@16.0.8(expo@50.0.14): + resolution: {integrity: sha512-yDbVT0TUKd7ewQjaY5THum2VRFx2n/biskGhkUmLh3ai21xjIVtaeIzHXyv9ir537eVgt4ReqDNWi7jcXjdUcA==} peerDependencies: expo: '*' dependencies: - expo: 50.0.5(@babel/core@7.23.9)(@react-native/babel-preset@0.73.20) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) dev: false - /expo-font@11.10.2(expo@50.0.5): - resolution: {integrity: sha512-AE0Q0LiWiVosQ/jlKUPoWoob7p3GwYM2xmLoUkuopO9RYh9NL1hZKHiMKcWBZyDG8Gww1GtBQwh7ZREST8+jjQ==} + /expo-font@11.10.3(expo@50.0.14): + resolution: {integrity: sha512-q1Td2zUvmLbCA9GV4OG4nLPw5gJuNY1VrPycsnemN1m8XWTzzs8nyECQQqrcBhgulCgcKZZJJ6U0kC2iuSoQHQ==} peerDependencies: expo: '*' dependencies: - expo: 50.0.5(@babel/core@7.23.9)(@react-native/babel-preset@0.73.20) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) fontfaceobserver: 2.3.0 dev: false - /expo-keep-awake@12.8.2(expo@50.0.5): + /expo-haptics@12.8.1(expo@50.0.14): + resolution: {integrity: sha512-ntLsHkfle8K8w9MW8pZEw92ZN3sguaGUSSIxv30fPKNeQFu7Cq/h47Qv3tONv2MO3wU48N9FbKnant6XlfptpA==} + peerDependencies: + expo: '*' + dependencies: + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + dev: false + + /expo-keep-awake@12.8.2(expo@50.0.14): resolution: {integrity: sha512-uiQdGbSX24Pt8nGbnmBtrKq6xL/Tm3+DuDRGBk/3ZE/HlizzNosGRIufIMJ/4B4FRw4dw8KU81h2RLuTjbay6g==} peerDependencies: expo: '*' dependencies: - expo: 50.0.5(@babel/core@7.23.9)(@react-native/babel-preset@0.73.20) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) dev: false - /expo-linking@6.2.2(expo@50.0.5): + /expo-linear-gradient@12.7.2(expo@50.0.14): + resolution: {integrity: sha512-Wwb2EF18ywgrlTodcXJ6Yt/UEcKitRMdXPNyP/IokmeKh4emoq9DxZJpZdkXm3HUTLlbRpi6/t32jrFVqXB9AQ==} + peerDependencies: + expo: '*' + dependencies: + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + dev: false + + /expo-linking@6.2.2(expo@50.0.14): resolution: {integrity: sha512-FEe6lP4f7xFT/vjoHRG+tt6EPVtkEGaWNK1smpaUevmNdyCJKqW0PDB8o8sfG6y7fly8ULe8qg3HhKh5J7aqUQ==} dependencies: - expo-constants: 15.4.5(expo@50.0.5) + expo-constants: 15.4.5(expo@50.0.14) invariant: 2.2.4 transitivePeerDependencies: - expo - supports-color dev: false - /expo-modules-autolinking@1.10.2: - resolution: {integrity: sha512-OEeoz0+zGx5EJwGtDm9pSywCr+gUCaisZV0mNkK7V3fuRl+EVPBSsI+957JwAc4ZxVps95jy28eLcRRtQ33yVg==} + /expo-media-library@15.9.1(expo@50.0.14): + resolution: {integrity: sha512-Y29uKFJ3qWwNejIrjoCppXp3OgIFs/RYHWXkF9xey6evpNrUlHoP1WHG2jYAMSrss6aIRVt3tO7EtYUCZxz50Q==} + peerDependencies: + expo: '*' + dependencies: + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + dev: false + + /expo-modules-autolinking@1.10.3: + resolution: {integrity: sha512-pn4n2Dl4iRh/zUeiChjRIe1C7EqOw1qhccr85viQV7W6l5vgRpY0osE51ij5LKg/kJmGRcJfs12+PwbdTplbKw==} hasBin: true dependencies: '@expo/config': 8.5.4 @@ -5206,14 +7958,38 @@ packages: - supports-color dev: false - /expo-modules-core@1.11.8: - resolution: {integrity: sha512-rlctE3nCNLCGv3LosGQNaTuwGrr2SyQA+hOgci/0l+VRc0gFNtvl0gskph9C0tnN1jzBeb8rRZQYVj5ih1yxcA==} + /expo-modules-core@1.11.12: + resolution: {integrity: sha512-/e8g4kis0pFLer7C0PLyx98AfmztIM6gU9jLkYnB1pU9JAfQf904XEi3bmszO7uoteBQwSL6FLp1m3TePKhDaA==} dependencies: invariant: 2.2.4 dev: false - /expo-router@3.4.6(expo-constants@15.4.5)(expo-linking@6.2.2)(expo-modules-autolinking@1.10.2)(expo-status-bar@1.11.1)(expo@50.0.5)(react-dom@18.2.0)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.2)(react@18.2.0): - resolution: {integrity: sha512-yxl0QE4KAqLmLyH8AxWsGSV3M34jsAE8X75cOB2oaK0+Pu9VHSUf6w3iRi93IiJ0rOUXm8jKrjhfhZOrrNh7EA==} + /expo-navigation-bar@2.8.1(expo@50.0.14): + resolution: {integrity: sha512-aT5G+7SUsXDVPsRwp8fF940ycka1ABb4g3QKvTZN3YP6kMWvsiYEmRqMIJVy0zUr/i6bxBG1ZergkXimWrFt3w==} + peerDependencies: + expo: '*' + dependencies: + '@react-native/normalize-color': 2.1.0 + debug: 4.3.4 + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + transitivePeerDependencies: + - supports-color + dev: false + + /expo-network@5.8.0(expo@50.0.14): + resolution: {integrity: sha512-mTtyqRgLKvXWB+xCoY5WMtRrpVqYmcXWz3YbyN+X0HRGqXg7a+UYOXeKlxrkwBiadsElhmfMeaj1UpmW79Zw/w==} + peerDependencies: + expo: '*' + dependencies: + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + dev: false + + /expo-pod-pinner@1.0.1: + resolution: {integrity: sha512-UeyCRXrI13tjb+rtQkjBjgs+eS1KntAgTRnLoawFdMp8s1T2bOcm9P4cIrFlLHt9aZBLLMdHra1TY6LiMI3+kw==} + dev: false + + /expo-router@3.4.8(expo-constants@15.4.5)(expo-linking@6.2.2)(expo-modules-autolinking@1.10.3)(expo-status-bar@1.11.1)(expo@50.0.14)(react-dom@18.2.0)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-fOOAWHH4LSPjPFtIZbApxdTNU8xSS8qKvhZ7PfWNMfx9510J1R1Ce/nwENPzcRLHRuVofDsSAEBfi4kV03fJwg==} peerDependencies: '@react-navigation/drawer': ^6.5.8 '@testing-library/jest-native': '*' @@ -5232,21 +8008,21 @@ packages: react-native-reanimated: optional: true dependencies: - '@expo/metro-runtime': 3.1.2(react-native@0.73.2) + '@expo/metro-runtime': 3.1.3(react-native@0.73.6) '@expo/server': 0.3.0 '@radix-ui/react-slot': 1.0.1(react@18.2.0) - '@react-navigation/bottom-tabs': 6.5.11(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.2)(react@18.2.0) - '@react-navigation/native': 6.1.9(react-native@0.73.2)(react@18.2.0) - '@react-navigation/native-stack': 6.9.17(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.2)(react@18.2.0) - expo: 50.0.5(@babel/core@7.23.9)(@react-native/babel-preset@0.73.20) - expo-constants: 15.4.5(expo@50.0.5) - expo-linking: 6.2.2(expo@50.0.5) - expo-splash-screen: 0.26.4(expo-modules-autolinking@1.10.2)(expo@50.0.5) + '@react-navigation/bottom-tabs': 6.5.11(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.6)(react@18.2.0) + '@react-navigation/native': 6.1.9(react-native@0.73.6)(react@18.2.0) + '@react-navigation/native-stack': 6.9.17(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.6)(react@18.2.0) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo-constants: 15.4.5(expo@50.0.14) + expo-linking: 6.2.2(expo@50.0.14) + expo-splash-screen: 0.26.4(expo-modules-autolinking@1.10.3)(expo@50.0.14) expo-status-bar: 1.11.1 react-helmet-async: 1.3.0(react-dom@18.2.0)(react@18.2.0) - react-native-reanimated: 3.6.2(@babel/core@7.23.9)(@babel/plugin-proposal-nullish-coalescing-operator@7.18.6)(@babel/plugin-proposal-optional-chaining@7.21.0)(@babel/plugin-transform-arrow-functions@7.23.3)(@babel/plugin-transform-shorthand-properties@7.23.3)(@babel/plugin-transform-template-literals@7.23.3)(react-native@0.73.2)(react@18.2.0) - react-native-safe-area-context: 4.8.2(react-native@0.73.2)(react@18.2.0) - react-native-screens: 3.29.0(react-native@0.73.2)(react@18.2.0) + react-native-reanimated: 3.6.2(@babel/core@7.23.9)(@babel/plugin-proposal-nullish-coalescing-operator@7.18.6)(@babel/plugin-proposal-optional-chaining@7.21.0)(@babel/plugin-transform-arrow-functions@7.24.1)(@babel/plugin-transform-shorthand-properties@7.24.1)(@babel/plugin-transform-template-literals@7.24.1)(react-native@0.73.6)(react@18.2.0) + react-native-safe-area-context: 4.8.2(react-native@0.73.6)(react@18.2.0) + react-native-screens: 3.29.0(react-native@0.73.6)(react@18.2.0) schema-utils: 4.2.0 transitivePeerDependencies: - encoding @@ -5257,13 +8033,21 @@ packages: - supports-color dev: false - /expo-splash-screen@0.26.4(expo-modules-autolinking@1.10.2)(expo@50.0.5): + /expo-screen-orientation@6.4.1(expo@50.0.14): + resolution: {integrity: sha512-VM0C9ORNL1aT6Dr2OUeryzV519n0FjtXI2m+HlijOMi1QT2bPg4tBkCd7HLgywU4dZ1Esa46ewUudmk+fOqmMQ==} + peerDependencies: + expo: '*' + dependencies: + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + dev: false + + /expo-splash-screen@0.26.4(expo-modules-autolinking@1.10.3)(expo@50.0.14): resolution: {integrity: sha512-2DwofTQ0FFQCsvDysm/msENsbyNsJiAJwK3qK/oXeizECAPqD7bK19J4z9kuEbr7ORPX9MLnTQYKl6kmX3keUg==} peerDependencies: expo: '*' dependencies: - '@expo/prebuild-config': 6.7.4(expo-modules-autolinking@1.10.2) - expo: 50.0.5(@babel/core@7.23.9)(@react-native/babel-preset@0.73.20) + '@expo/prebuild-config': 6.7.4(expo-modules-autolinking@1.10.3) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) transitivePeerDependencies: - encoding - expo-modules-autolinking @@ -5274,33 +8058,45 @@ packages: resolution: {integrity: sha512-ddQEtCOgYHTLlFUe/yH67dDBIoct5VIULthyT3LRJbEwdpzAgueKsX2FYK02ldh440V87PWKCamh7R9evk1rrg==} dev: false - /expo-web-browser@12.8.2(expo@50.0.5): + /expo-system-ui@2.9.3(expo@50.0.14): + resolution: {integrity: sha512-RNFNBLJ9lhnjOGrHhtfDc15Ry/lF+SA4kwulmHzYGqaTeYvsL9q0K0+m9qmxuDdrbKJkuurvzvjVylDNnKNFVg==} + peerDependencies: + expo: '*' + dependencies: + '@react-native/normalize-color': 2.1.0 + debug: 4.3.4 + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + transitivePeerDependencies: + - supports-color + dev: false + + /expo-web-browser@12.8.2(expo@50.0.14): resolution: {integrity: sha512-Mw8WoFMSADecNjtC4PZVsVj1/lYdxIAH1jOVV+F8v8SEWYxORWofoShfXg7oUxRLu0iUG8JETfO5y4m8+fOgdg==} peerDependencies: expo: '*' dependencies: compare-urls: 2.0.0 - expo: 50.0.5(@babel/core@7.23.9)(@react-native/babel-preset@0.73.20) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) url: 0.11.3 dev: false - /expo@50.0.5(@babel/core@7.23.9)(@react-native/babel-preset@0.73.20): - resolution: {integrity: sha512-gfZbJv8eqVG1xX8QqlQHF4Mn6HnLFuE14Kq5FRUVZQWE+IhlrP+mr+un7Zdp/3a63Bp/VkPzHi77G1bVP1pM7A==} + /expo@50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21): + resolution: {integrity: sha512-yLPdxCMVAbmeEIpzzyAuJ79wvr6ToDDtQmuLDMAgWtjqP8x3CGddXxUe07PpKEQgzwJabdHvCLP5Bv94wMFIjQ==} hasBin: true dependencies: '@babel/runtime': 7.23.9 - '@expo/cli': 0.17.4(@react-native/babel-preset@0.73.20)(expo-modules-autolinking@1.10.2) + '@expo/cli': 0.17.8(@react-native/babel-preset@0.73.21)(expo-modules-autolinking@1.10.3) '@expo/config': 8.5.4 '@expo/config-plugins': 7.8.4 - '@expo/metro-config': 0.17.3(@react-native/babel-preset@0.73.20) + '@expo/metro-config': 0.17.6(@react-native/babel-preset@0.73.21) '@expo/vector-icons': 14.0.0 babel-preset-expo: 10.0.1(@babel/core@7.23.9) - expo-asset: 9.0.2(expo@50.0.5) - expo-file-system: 16.0.5(expo@50.0.5) - expo-font: 11.10.2(expo@50.0.5) - expo-keep-awake: 12.8.2(expo@50.0.5) - expo-modules-autolinking: 1.10.2 - expo-modules-core: 1.11.8 + expo-asset: 9.0.2(expo@50.0.14) + expo-file-system: 16.0.8(expo@50.0.14) + expo-font: 11.10.3(expo@50.0.14) + expo-keep-awake: 12.8.2(expo@50.0.14) + expo-modules-autolinking: 1.10.3 + expo-modules-core: 1.11.12 fbemitter: 3.0.0 whatwg-url-without-unicode: 8.0.0-3 transitivePeerDependencies: @@ -5389,10 +8185,28 @@ packages: - encoding dev: false + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + dev: false + /fetch-retry@4.1.1: resolution: {integrity: sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==} dev: false + /ffmpeg-kit-react-native@6.0.2(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-r9uSmahq8TeyIb7fXf3ft+uUXyoeWRFa99+khjo0TAzWO9y0z9wU7eGnab9JLw1MmCB9v64o4yojNluJhVm9nQ==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + /figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -5432,6 +8246,14 @@ packages: - supports-color dev: false + /find-babel-config@2.0.0: + resolution: {integrity: sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw==} + engines: {node: '>=16.0.0'} + dependencies: + json5: 2.2.3 + path-exists: 4.0.0 + dev: true + /find-cache-dir@2.1.0: resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} engines: {node: '>=6'} @@ -5441,12 +8263,24 @@ packages: pkg-dir: 3.0.0 dev: false + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: false + + /find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: false + /find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} dependencies: locate-path: 3.0.0 - dev: false /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} @@ -5463,6 +8297,10 @@ packages: locate-path: 6.0.0 path-exists: 4.0.0 + /find-value@1.0.12: + resolution: {integrity: sha512-OCpo8LTk8eZ2sdDCwbU2Lc3ivYsdM6yod6jP2jHcNEFcjPhkgH0+POzTIol7xx1LZgtbI5rkO5jqxsG5MWtPjQ==} + dev: false + /find-yarn-workspace-root@2.0.0: resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} dependencies: @@ -5505,6 +8343,7 @@ packages: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 + dev: false /form-data@3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} @@ -5515,8 +8354,44 @@ packages: mime-types: 2.1.35 dev: false - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 + dev: false + + /framer-motion@6.5.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==} + peerDependencies: + react: '>=16.8 || ^17.0.0 || ^18.0.0' + react-dom: '>=16.8 || ^17.0.0 || ^18.0.0' + dependencies: + '@motionone/dom': 10.12.0 + framesync: 6.0.1 + hey-listen: 1.0.8 + popmotion: 11.0.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + style-value-types: 5.0.0 + tslib: 2.6.2 + optionalDependencies: + '@emotion/is-prop-valid': 0.8.8 + dev: false + + /framesync@6.0.1: + resolution: {integrity: sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==} + dependencies: + tslib: 2.6.2 dev: false /freeport-async@2.0.0: @@ -5538,6 +8413,15 @@ packages: universalify: 2.0.1 dev: true + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: false + /fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} @@ -5581,6 +8465,7 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true + dev: false optional: true /function-bind@1.1.2: @@ -5620,6 +8505,11 @@ packages: hasown: 2.0.0 dev: false + /get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + dev: false + /get-port@3.2.0: resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} engines: {node: '>=4'} @@ -5644,6 +8534,12 @@ packages: get-intrinsic: 1.2.3 dev: false + /get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: false + /get-uri@6.0.2: resolution: {integrity: sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==} engines: {node: '>= 14'} @@ -5673,16 +8569,17 @@ packages: dependencies: is-glob: 4.0.3 - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + /glob@10.3.12: + resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 - minimatch: 9.0.3 + minimatch: 9.0.4 minipass: 7.0.4 - path-scurry: 1.10.1 + path-scurry: 1.10.2 + dev: false /glob@6.0.4: resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==} @@ -5717,6 +8614,17 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: true + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -5758,6 +8666,16 @@ packages: ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 + + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 4.0.0 dev: false /gopd@1.0.1: @@ -5843,6 +8761,22 @@ packages: has-symbols: 1.0.3 dev: false + /hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: false + + /hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + /hasown@2.0.0: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} @@ -5883,6 +8817,18 @@ packages: source-map: 0.7.4 dev: false + /hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + dev: false + + /hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: false + /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: @@ -5896,6 +8842,15 @@ packages: lru-cache: 6.0.0 dev: false + /htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + dev: false + /http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -5967,6 +8922,10 @@ packages: queue: 6.0.2 dev: false + /immer@10.0.3: + resolution: {integrity: sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==} + dev: false + /import-fresh@2.0.0: resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} engines: {node: '>=4'} @@ -6083,6 +9042,7 @@ packages: /ip@1.1.8: resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} + dev: true /ip@2.0.0: resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} @@ -6135,6 +9095,7 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 + dev: false /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -6277,6 +9238,11 @@ packages: isobject: 3.0.1 dev: false + /is-primitive@3.0.1: + resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==} + engines: {node: '>=0.10.0'} + dev: false + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -6387,11 +9353,20 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + /iso-639-1@3.1.2: + resolution: {integrity: sha512-Le7BRl3Jt9URvaiEHJCDEdvPZCfhiQoXnFgLAWNRhzFMwRFdWO7/5tLRQbiPzE394I9xd7KdRCM7S6qdOhwG5A==} + engines: {node: '>=6.0'} + dev: false + /isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} dev: false + /iterate-object@1.3.4: + resolution: {integrity: sha512-4dG1D1x/7g8PwHS9aK6QV5V94+ZvyP4+d19qDv43EzImmrndysIl4prmJ1hWWIGCqrZHyaHBm6BSEWHOLnpoNw==} + dev: false + /iterator.prototype@1.1.2: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: @@ -6409,6 +9384,7 @@ packages: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 + dev: false /jest-environment-node@29.7.0: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} @@ -6417,7 +9393,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.30 jest-mock: 29.7.0 jest-util: 29.7.0 dev: false @@ -6447,7 +9423,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.30 jest-util: 29.7.0 dev: false @@ -6492,6 +9468,7 @@ packages: /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true + dev: false /joi@17.12.1: resolution: {integrity: sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ==} @@ -6539,7 +9516,7 @@ packages: '@babel/preset-env': ^7.1.6 dependencies: '@babel/core': 7.23.9 - '@babel/parser': 7.23.9 + '@babel/parser': 7.24.0 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.9) '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.9) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.9) @@ -6636,6 +9613,10 @@ packages: object.values: 1.1.7 dev: false + /keymirror@0.1.1: + resolution: {integrity: sha512-vIkZAFWoDijgQT/Nvl2AHCMmnegN2ehgTPYuyy2hWQkQSntI0S7ESYqdLkoSe1HyEBFHHkCgSIvVdSEiWwKvCg==} + dev: false + /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: @@ -6872,13 +9853,22 @@ packages: /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} + dev: false - /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + /lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} engines: {node: '>=14'} + dev: false /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: false + + /linkify-it@2.2.0: + resolution: {integrity: sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==} + dependencies: + uc.micro: 1.0.6 + dev: false /locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} @@ -6886,7 +9876,6 @@ packages: dependencies: p-locate: 3.0.0 path-exists: 3.0.0 - dev: false /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} @@ -6919,6 +9908,10 @@ packages: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} dev: false + /lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + dev: false + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -6972,6 +9965,7 @@ packages: /lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} + dev: false /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -6997,6 +9991,13 @@ packages: semver: 5.7.2 dev: false + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: false + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true @@ -7007,6 +10008,17 @@ packages: tmpl: 1.0.5 dev: false + /markdown-it@10.0.0: + resolution: {integrity: sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==} + hasBin: true + dependencies: + argparse: 1.0.10 + entities: 2.0.3 + linkify-it: 2.2.0 + mdurl: 1.0.1 + uc.micro: 1.0.6 + dev: false + /marky@1.2.5: resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} dev: false @@ -7019,6 +10031,14 @@ packages: buffer-alloc: 1.2.0 dev: false + /md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + /md5@2.2.1: resolution: {integrity: sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==} dependencies: @@ -7039,6 +10059,14 @@ packages: resolution: {integrity: sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==} dev: false + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: false + + /mdurl@1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + dev: false + /memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} dev: false @@ -7152,7 +10180,7 @@ packages: engines: {node: '>=18'} dependencies: '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 invariant: 2.2.4 metro-symbolicate: 0.80.5 nullthrows: 1.1.1 @@ -7184,7 +10212,7 @@ packages: dependencies: '@babel/core': 7.23.9 '@babel/generator': 7.23.6 - '@babel/template': 7.23.9 + '@babel/template': 7.24.0 '@babel/traverse': 7.23.9 nullthrows: 1.1.1 transitivePeerDependencies: @@ -7197,8 +10225,8 @@ packages: dependencies: '@babel/core': 7.23.9 '@babel/generator': 7.23.6 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 metro: 0.80.5 metro-babel-transformer: 0.80.5 metro-cache: 0.80.5 @@ -7223,7 +10251,7 @@ packages: '@babel/core': 7.23.9 '@babel/generator': 7.23.6 '@babel/parser': 7.23.9 - '@babel/template': 7.23.9 + '@babel/template': 7.24.0 '@babel/traverse': 7.23.9 '@babel/types': 7.23.9 accepts: 1.3.8 @@ -7276,6 +10304,14 @@ packages: braces: 3.0.2 picomatch: 2.3.1 + /miller-rabin@4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + dev: false + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -7314,17 +10350,39 @@ packages: engines: {node: '>=4'} dev: false + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: false + + /minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: false + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: false + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -7364,6 +10422,7 @@ packages: /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} + dev: false /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} @@ -7385,6 +10444,18 @@ packages: hasBin: true dev: false + /moti@0.27.5(react-dom@18.2.0)(react-native-reanimated@3.6.2)(react@18.2.0): + resolution: {integrity: sha512-6PbHgNTzSyipTon57TBm5w3/cKKMZVugq/Ey2YLbZbMLxsmL4uz6zGO0uBcZWkKaVqm9O8LcK+WdGMyNiR2yrg==} + peerDependencies: + react-native-reanimated: '*' + dependencies: + framer-motion: 6.5.1(react-dom@18.2.0)(react@18.2.0) + react-native-reanimated: 3.6.2(@babel/core@7.23.9)(@babel/plugin-proposal-nullish-coalescing-operator@7.18.6)(@babel/plugin-proposal-optional-chaining@7.21.0)(@babel/plugin-transform-arrow-functions@7.24.1)(@babel/plugin-transform-shorthand-properties@7.24.1)(@babel/plugin-transform-template-literals@7.24.1)(react-native@0.73.6)(react@18.2.0) + transitivePeerDependencies: + - react + - react-dom + dev: false + /mrmime@1.0.1: resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} engines: {node: '>=10'} @@ -7422,30 +10493,13 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 + dev: false /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - - /nativewind@4.0.23(patch_hash=42qwizvrnoqgalbele35lpnaqi)(@babel/core@7.23.9)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native@0.73.2)(react@18.2.0)(tailwindcss@3.4.1): - resolution: {integrity: sha512-7eKMjcdoZMqxmPwJhLwe5VbuwCNTdIXChxV9n4FwdzKTpZX3kNGj95J7fpqpefFPRT6yYp6SqK2n6TG/BSzA+w==} - engines: {node: '>=16'} - peerDependencies: - tailwindcss: '>3.3.0' - dependencies: - react-native-css-interop: 0.0.22(@babel/core@7.23.9)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native@0.73.2)(react@18.2.0)(tailwindcss@3.4.1) - tailwindcss: 3.4.1 - transitivePeerDependencies: - - '@babel/core' - - react - - react-native - - react-native-reanimated - - react-native-safe-area-context - - react-native-svg - - supports-color dev: false - patched: true /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -7500,6 +10554,11 @@ packages: minimatch: 3.1.2 dev: false + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: false + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -7512,6 +10571,15 @@ packages: whatwg-url: 5.0.0 dev: false + /node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: false + /node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -7549,10 +10617,6 @@ packages: /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} dev: false /normalize-url@2.0.1: @@ -7586,6 +10650,12 @@ packages: dependencies: path-key: 3.1.1 + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: false + /nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} dev: false @@ -7598,10 +10668,12 @@ packages: /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + dev: false /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} + dev: false /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} @@ -7803,7 +10875,6 @@ packages: engines: {node: '>=6'} dependencies: p-try: 2.2.0 - dev: false /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} @@ -7816,7 +10887,6 @@ packages: engines: {node: '>=6'} dependencies: p-limit: 2.3.0 - dev: false /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} @@ -7848,7 +10918,6 @@ packages: /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - dev: false /pac-proxy-agent@7.0.1: resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} @@ -7887,6 +10956,20 @@ packages: dependencies: callsites: 3.1.0 + /parse-asn1@5.1.6: + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + dependencies: + asn1.js: 5.4.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.2 + safe-buffer: 5.2.1 + dev: false + + /parse-hls@1.0.7: + resolution: {integrity: sha512-tnAK2nXe8J/Jf66SwY2cUAKKXInLR9hkNhTtcS7t6J4CgkG8LGBfC1GuuXg7kLLbIQLXpVhZrY/tfyhDbqfzwg==} + dev: false + /parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} @@ -7902,6 +10985,19 @@ packages: pngjs: 3.4.0 dev: false + /parse5-htmlparser2-tree-adapter@7.0.0: + resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + dependencies: + domhandler: 5.0.3 + parse5: 7.1.2 + dev: false + + /parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.5.0 + dev: false + /parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -7930,7 +11026,6 @@ packages: /path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} - dev: false /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} @@ -7952,17 +11047,33 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + /path-scurry@1.10.2: + resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: lru-cache: 10.2.0 minipass: 7.0.4 + dev: false /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + /pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: false + + /performant-array-to-tree@1.11.0: + resolution: {integrity: sha512-YwCqIDvnaebXaKuKQhI5yJD6ryDc3FxvoeX/5ougXTKDUWb7s5S2BuBgIyftCa4sBe1+ZU5Kmi4RJy+pjjjrpw==} + dev: false + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -7978,6 +11089,7 @@ packages: /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} + dev: false /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} @@ -7987,6 +11099,7 @@ packages: /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + dev: false /pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} @@ -7995,6 +11108,20 @@ packages: find-up: 3.0.0 dev: false + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: false + + /pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + dependencies: + find-up: 3.0.0 + dev: true + /plist@3.1.0: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} engines: {node: '>=10.4.0'} @@ -8009,27 +11136,38 @@ packages: engines: {node: '>=4.0.0'} dev: false - /postcss-import@15.1.0(postcss@8.4.33): + /popmotion@11.0.3: + resolution: {integrity: sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==} + dependencies: + framesync: 6.0.1 + hey-listen: 1.0.8 + style-value-types: 5.0.0 + tslib: 2.6.2 + dev: false + + /postcss-import@15.1.0(postcss@8.4.38): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.33 + postcss: 8.4.38 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 + dev: false - /postcss-js@4.0.1(postcss@8.4.33): + /postcss-js@4.0.1(postcss@8.4.38): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.33 + postcss: 8.4.38 + dev: false - /postcss-load-config@4.0.2(postcss@8.4.33): + /postcss-load-config@4.0.2(postcss@8.4.38): resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} peerDependencies: @@ -8041,28 +11179,32 @@ packages: ts-node: optional: true dependencies: - lilconfig: 3.0.0 - postcss: 8.4.33 - yaml: 2.3.4 + lilconfig: 3.1.1 + postcss: 8.4.38 + yaml: 2.4.1 + dev: false - /postcss-nested@6.0.1(postcss@8.4.33): + /postcss-nested@6.0.1(postcss@8.4.38): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.33 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: false - /postcss-selector-parser@6.0.15: - resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + /postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 + dev: false /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: false /postcss@8.4.33: resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} @@ -8071,6 +11213,25 @@ packages: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 + dev: false + + /postcss@8.4.36: + resolution: {integrity: sha512-/n7eumA6ZjFHAsbX30yhHup/IMkOmlmvtEi7P+6RMYf+bGJSUHc3geH4a0NSZxAz/RJfiS9tooCTs9LAVYUZKw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.1.0 + dev: false + + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + dev: false /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -8235,6 +11396,17 @@ packages: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true + /public-encrypt@4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + dependencies: + bn.js: 4.12.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + parse-asn1: 5.1.6 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: false + /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: @@ -8290,6 +11462,25 @@ packages: inherits: 2.0.4 dev: false + /r-json@1.3.0: + resolution: {integrity: sha512-xesd+RHCpymPCYd9DvDvUr1w1IieSChkqYF1EpuAYrvCfLXji9NP36DvyYZJZZB5soVDvZ0WUtBoZaU1g5Yt9A==} + dependencies: + w-json: 1.3.10 + dev: false + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: false + /range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -8364,13 +11555,29 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: false - /react-native-css-interop@0.0.22(@babel/core@7.23.9)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native@0.73.2)(react@18.2.0)(tailwindcss@3.4.1): - resolution: {integrity: sha512-JHLYHlLEqM13dy0XSxIPOWvqmQkPrqUt+KHPkbLV0sIiw/4aN6B5TPsNKZFX9bJJaZ//dAECn782R0MqDrTBWQ==} - engines: {node: '>=16'} + /react-native-animatable@1.3.3: + resolution: {integrity: sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w==} + dependencies: + prop-types: 15.8.1 + dev: false + + /react-native-context-menu-view@1.14.1(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-rPtC6RCbEVismTQ6M7WSt1HisNvgbS9bWqWX4RQXNXHKOKsVvXpI+bWRypFAjeBN/P+winn6Dxn1+meLBMrjmQ==} + peerDependencies: + react: ^16.8.1 || ^17.0.0 || ^18.0.0 + react-native: '>=0.60.0-rc.0 <1.0.x' + dependencies: + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /react-native-css-interop@0.0.35(@babel/core@7.23.9)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native-svg@14.1.0)(react-native@0.73.6)(react@18.2.0)(tailwindcss@3.4.3): + resolution: {integrity: sha512-renqiX1UGsOIWUrDBzEaYQ1zapyTg69W7eIFvIYRZyEWPQ/16A+6pM8SkybOMu9pp7qInpUy888xmYhTQhg1UA==} + engines: {node: '>=18'} peerDependencies: react: '>=18' react-native: '*' - react-native-reanimated: '>=3.3.0' + react-native-reanimated: '>=3.6.2' react-native-safe-area-context: '*' react-native-svg: '*' tailwindcss: ~3 @@ -8382,20 +11589,27 @@ packages: dependencies: '@babel/helper-module-imports': 7.22.15 '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 babel-plugin-tester: 11.0.4(@babel/core@7.23.9) lightningcss: 1.22.0 react: 18.2.0 - react-native: 0.73.2(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) - react-native-reanimated: 3.6.2(@babel/core@7.23.9)(@babel/plugin-proposal-nullish-coalescing-operator@7.18.6)(@babel/plugin-proposal-optional-chaining@7.21.0)(@babel/plugin-transform-arrow-functions@7.23.3)(@babel/plugin-transform-shorthand-properties@7.23.3)(@babel/plugin-transform-template-literals@7.23.3)(react-native@0.73.2)(react@18.2.0) - react-native-safe-area-context: 4.8.2(react-native@0.73.2)(react@18.2.0) - tailwindcss: 3.4.1 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native-reanimated: 3.6.2(@babel/core@7.23.9)(@babel/plugin-proposal-nullish-coalescing-operator@7.18.6)(@babel/plugin-proposal-optional-chaining@7.21.0)(@babel/plugin-transform-arrow-functions@7.24.1)(@babel/plugin-transform-shorthand-properties@7.24.1)(@babel/plugin-transform-template-literals@7.24.1)(react-native@0.73.6)(react@18.2.0) + react-native-safe-area-context: 4.8.2(react-native@0.73.6)(react@18.2.0) + react-native-svg: 14.1.0(react-native@0.73.6)(react@18.2.0) + tailwindcss: 3.4.3 transitivePeerDependencies: - '@babel/core' - supports-color dev: false - /react-native-gesture-handler@2.14.1(react-native@0.73.2)(react@18.2.0): + /react-native-fit-image@1.5.5: + resolution: {integrity: sha512-Wl3Vq2DQzxgsWKuW4USfck9zS7YzhvLNPpkwUUCF90bL32e1a0zOVQ3WsJILJOwzmPdHfzZmWasiiAUNBkhNkg==} + dependencies: + prop-types: 15.8.1 + dev: false + + /react-native-gesture-handler@2.14.1(react-native@0.73.6)(react@18.2.0): resolution: {integrity: sha512-YiM1BApV4aKeuwsM6O4C2ufwewYEKk6VMXOt0YqEZFMwABBFWhXLySFZYjBSNRU2USGppJbfHP1q1DfFQpKhdA==} peerDependencies: react: '*' @@ -8407,10 +11621,74 @@ packages: lodash: 4.17.21 prop-types: 15.8.1 react: 18.2.0 - react-native: 0.73.2(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) dev: false - /react-native-reanimated@3.6.2(@babel/core@7.23.9)(@babel/plugin-proposal-nullish-coalescing-operator@7.18.6)(@babel/plugin-proposal-optional-chaining@7.21.0)(@babel/plugin-transform-arrow-functions@7.23.3)(@babel/plugin-transform-shorthand-properties@7.23.3)(@babel/plugin-transform-template-literals@7.23.3)(react-native@0.73.2)(react@18.2.0): + /react-native-markdown-display@7.0.2(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-Mn4wotMvMfLAwbX/huMLt202W5DsdpMO/kblk+6eUs55S57VVNni1gzZCh5qpznYLjIQELNh50VIozEfY6fvaQ==} + peerDependencies: + react: '>=16.2.0' + react-native: '>=0.50.4' + dependencies: + css-to-react-native: 3.2.0 + markdown-it: 10.0.0 + prop-types: 15.8.1 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native-fit-image: 1.5.5 + dev: false + + /react-native-mmkv@2.12.2(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-6058Aq0p57chPrUutLGe9fYoiDVDNMU2PKV+lLFUJ3GhoHvUrLdsS1PDSCLr00yqzL4WJQ7TTzH+V8cpyrNcfg==} + peerDependencies: + react: '*' + react-native: '>=0.71.0' + dependencies: + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /react-native-modal@13.0.1(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-UB+mjmUtf+miaG/sDhOikRfBOv0gJdBU2ZE1HtFWp6UixW9jCk/bhGdHUgmZljbPpp0RaO/6YiMmQSSK3kkMaw==} + peerDependencies: + react: '*' + react-native: '>=0.65.0' + dependencies: + prop-types: 15.8.1 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native-animatable: 1.3.3 + dev: false + + /react-native-quick-base64@2.0.8(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-2kMlnLSy0qz4NA0KXMGugd3qNB5EAizxZ6ghEVNGIxAOlc9CGvC8miv35wgpFbSKeiaBRfcPfkdTM/5Erb/6SQ==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + base64-js: 1.5.1 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /react-native-quick-crypto@0.6.1(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-s6uFo7tcI3syo8/y5j+t6Rf+KVSuRKDp6tH04A0vjaHptJC6Iu7DVgkNYO7aqtfrYn8ZUgQ/Kqaq+m4i9TxgIQ==} + peerDependencies: + react: '*' + react-native: '>=0.71.0' + dependencies: + '@craftzdog/react-native-buffer': 6.0.5(react-native@0.73.6)(react@18.2.0) + '@types/node': 17.0.45 + crypto-browserify: 3.12.0 + events: 3.3.0 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native-quick-base64: 2.0.8(react-native@0.73.6)(react@18.2.0) + stream-browserify: 3.0.0 + string_decoder: 1.3.0 + dev: false + + /react-native-reanimated@3.6.2(@babel/core@7.23.9)(@babel/plugin-proposal-nullish-coalescing-operator@7.18.6)(@babel/plugin-proposal-optional-chaining@7.21.0)(@babel/plugin-transform-arrow-functions@7.24.1)(@babel/plugin-transform-shorthand-properties@7.24.1)(@babel/plugin-transform-template-literals@7.24.1)(react-native@0.73.6)(react@18.2.0): resolution: {integrity: sha512-IIMREMOrxhtK35drfpzh2UhxNqAOHnuvGgtMofj7yHcMj16tmWZR2zFvMUf6z2MfmXv+aVgFQ6TRZ6yKYf7LNA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -8425,28 +11703,28 @@ packages: '@babel/core': 7.23.9 '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.9) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.9) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.23.9) '@babel/plugin-transform-object-assign': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.23.9) '@babel/preset-typescript': 7.23.3(@babel/core@7.23.9) convert-source-map: 2.0.0 invariant: 2.2.4 react: 18.2.0 - react-native: 0.73.2(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) dev: false - /react-native-safe-area-context@4.8.2(react-native@0.73.2)(react@18.2.0): + /react-native-safe-area-context@4.8.2(react-native@0.73.6)(react@18.2.0): resolution: {integrity: sha512-ffUOv8BJQ6RqO3nLml5gxJ6ab3EestPiyWekxdzO/1MQ7NF8fW1Mzh1C5QE9yq573Xefnc7FuzGXjtesZGv7cQ==} peerDependencies: react: '*' react-native: '*' dependencies: react: 18.2.0 - react-native: 0.73.2(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) dev: false - /react-native-screens@3.29.0(react-native@0.73.2)(react@18.2.0): + /react-native-screens@3.29.0(react-native@0.73.6)(react@18.2.0): resolution: {integrity: sha512-yB1GoAMamFAcYf4ku94uBPn0/ani9QG7NdI98beJ5cet2YFESYYzuEIuU+kt+CNRcO8qqKeugxlfgAa3HyTqlg==} peerDependencies: react: '*' @@ -8454,10 +11732,56 @@ packages: dependencies: react: 18.2.0 react-freeze: 1.0.3(react@18.2.0) - react-native: 0.73.2(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) warn-once: 0.1.1 dev: false + /react-native-svg@14.1.0(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-HeseElmEk+AXGwFZl3h56s0LtYD9HyGdrpg8yd9QM26X+d7kjETrRQ9vCjtxuT5dCZEIQ5uggU1dQhzasnsCWA==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + css-select: 5.1.0 + css-tree: 1.1.3 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + dev: false + + /react-native-video@5.2.1: + resolution: {integrity: sha512-aJlr9MeTuQ0LpZ4n+EC9RvhoKeiPbLtI2Rxy8u7zo/wzGevbRpWHSBj9xZ5YDBXnAVXzuqyNIkGhdw7bfdIBZw==} + dependencies: + deprecated-react-native-prop-types: 2.3.0 + keymirror: 0.1.1 + prop-types: 15.8.1 + shaka-player: 2.5.23 + dev: false + + /react-native-web-internals@1.94.0: + resolution: {integrity: sha512-olyjQ3b9cEHsIriFp69dDzwR9pKeNkrfQOpWoSl9aoYA9/NZmee5GdL6mP4QQt127dknJVGo9gijEvgh7UxIaw==} + dependencies: + '@tamagui/normalize-css-color': 1.94.0 + '@tamagui/react-native-use-pressable': 1.94.0(react@18.2.0) + '@tamagui/react-native-use-responder-events': 1.94.0(react@18.2.0) + '@tamagui/simple-hash': 1.94.0 + react: 18.2.0 + styleq: 0.1.3 + dev: false + + /react-native-web-lite@1.94.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-DfHy6gCHlaDaBvLIberaWEbTr1L6WAFMY3MB3oAq9fuFSm2OWFupovy63sRW2cVyvu0OYc6z3sUKpZviLKSnqw==} + peerDependencies: + react: '*' + react-dom: '*' + dependencies: + '@tamagui/normalize-css-color': 1.94.0 + invariant: 2.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-native-web-internals: 1.94.0 + styleq: 0.1.3 + dev: false + /react-native-web@0.19.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-IQoHiTQq8egBCVVwmTrYcFLgEFyb4LMZYEktHn4k22JMk9+QTCEz5WTfvr+jdNoeqj/7rtE81xgowKbfGO74qg==} peerDependencies: @@ -8478,28 +11802,29 @@ packages: - encoding dev: false - /react-native@0.73.2(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0): - resolution: {integrity: sha512-7zj9tcUYpJUBdOdXY6cM8RcXYWkyql4kMyGZflW99E5EuFPoC7Ti+ZQSl7LP9ZPzGD0vMfslwyDW0I4tPWUCFw==} + /react-native@0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0): + resolution: {integrity: sha512-oqmZe8D2/VolIzSPZw+oUd6j/bEmeRHwsLn1xLA5wllEYsZ5zNuMsDus235ONOnCRwexqof/J3aztyQswSmiaA==} engines: {node: '>=18'} hasBin: true peerDependencies: react: 18.2.0 dependencies: '@jest/create-cache-key-function': 29.7.0 - '@react-native-community/cli': 12.3.0 - '@react-native-community/cli-platform-android': 12.3.0 - '@react-native-community/cli-platform-ios': 12.3.0 + '@react-native-community/cli': 12.3.6 + '@react-native-community/cli-platform-android': 12.3.6 + '@react-native-community/cli-platform-ios': 12.3.6 '@react-native/assets-registry': 0.73.1 - '@react-native/codegen': 0.73.2(@babel/preset-env@7.23.9) - '@react-native/community-cli-plugin': 0.73.12(@babel/core@7.23.9)(@babel/preset-env@7.23.9) + '@react-native/codegen': 0.73.3(@babel/preset-env@7.23.9) + '@react-native/community-cli-plugin': 0.73.17(@babel/core@7.23.9)(@babel/preset-env@7.23.9) '@react-native/gradle-plugin': 0.73.4 '@react-native/js-polyfills': 0.73.1 '@react-native/normalize-colors': 0.73.2 - '@react-native/virtualized-lists': 0.73.4(react-native@0.73.2) + '@react-native/virtualized-lists': 0.73.4(react-native@0.73.6) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 base64-js: 1.5.1 + chalk: 4.1.2 deprecated-react-native-prop-types: 5.0.0 event-target-shim: 5.0.1 flow-enums-runtime: 0.0.6 @@ -8537,6 +11862,41 @@ packages: engines: {node: '>=0.10.0'} dev: false + /react-remove-scroll-bar@2.3.6(@types/react@18.2.52)(react@18.2.0): + resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.52 + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.2.52)(react@18.2.0) + tslib: 2.6.2 + dev: false + + /react-remove-scroll@2.5.5(@types/react@18.2.52)(react@18.2.0): + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.52 + react: 18.2.0 + react-remove-scroll-bar: 2.3.6(@types/react@18.2.52)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.52)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.1(@types/react@18.2.52)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.52)(react@18.2.0) + dev: false + /react-shallow-renderer@16.15.0(react@18.2.0): resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} peerDependencies: @@ -8547,6 +11907,23 @@ packages: react-is: 18.2.0 dev: false + /react-style-singleton@2.2.1(@types/react@18.2.52)(react@18.2.0): + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.52 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.2.0 + tslib: 2.6.2 + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -8558,6 +11935,7 @@ packages: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 + dev: false /readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -8584,6 +11962,7 @@ packages: engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 + dev: false /readline@1.3.0: resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} @@ -8611,6 +11990,19 @@ packages: which-builtin-type: 1.1.3 dev: false + /reforest@0.13.0(@types/react@18.2.52)(immer@10.0.3)(react@18.2.0): + resolution: {integrity: sha512-f0It/s51f1UWCCCni0viULALDBhxWBPFnLmZRYtKcz4zYeNWqeNTdcnU/OpBry9tk+jyMQcH3MLK8UdzsAvA5w==} + peerDependencies: + react: '>=16.8' + dependencies: + performant-array-to-tree: 1.11.0 + react: 18.2.0 + zustand: 4.4.7(@types/react@18.2.52)(immer@10.0.3)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - immer + dev: false + /regenerate-unicode-properties@10.1.1: resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} engines: {node: '>=4'} @@ -8699,6 +12091,10 @@ packages: resolve: 1.7.1 dev: false + /reselect@4.1.8: + resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} + dev: true + /resolve-from@3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} engines: {node: '>=4'} @@ -8713,6 +12109,10 @@ packages: engines: {node: '>=8'} dev: false + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: false + /resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} @@ -8789,6 +12189,13 @@ packages: dependencies: glob: 7.2.3 + /ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: false + /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -8846,7 +12253,6 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true /sax@1.3.0: resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} @@ -8977,6 +12383,14 @@ packages: has-property-descriptors: 1.0.1 dev: false + /set-value@4.1.0: + resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==} + engines: {node: '>=11.0'} + dependencies: + is-plain-object: 2.0.4 + is-primitive: 3.0.1 + dev: false + /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: false @@ -8985,6 +12399,26 @@ packages: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: false + /sf-symbols-typescript@1.0.0: + resolution: {integrity: sha512-DkS7q3nN68dEMb4E18HFPDAvyrjDZK9YAQQF2QxeFu9gp2xRDXFMF8qLJ1EmQ/qeEGQmop4lmMM1WtYJTIcCMw==} + engines: {node: '>=10'} + dev: false + + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /shaka-player@2.5.23: + resolution: {integrity: sha512-3MC9k0OXJGw8AZ4n/ZNCZS2yDxx+3as5KgH6Tx4Q5TRboTBBCu6dYPI5vp1DxKeyU12MBN1Zcbs7AKzXv2EnCg==} + deprecated: Shaka Player < v4.2 is no longer supported. + dependencies: + eme-encryption-scheme-polyfill: 2.1.1 + dev: false + /shallow-clone@3.0.1: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} @@ -9036,6 +12470,7 @@ packages: /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + dev: false /simple-plist@1.3.1: resolution: {integrity: sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==} @@ -9059,6 +12494,11 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: false + /slice-ansi@2.1.0: resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} engines: {node: '>=6'} @@ -9068,6 +12508,15 @@ packages: is-fullwidth-code-point: 2.0.0 dev: false + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: false + /slugify@1.6.6: resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} engines: {node: '>=8.0.0'} @@ -9103,6 +12552,16 @@ packages: smart-buffer: 4.2.0 dev: true + /sonner@0.3.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-yIwaQ4dftMvFApuruto2t7wGyyaPRpj5qYBWYJIz4Z7uGcVn0IfqI/hWN0JyJN4izNbZFuCYZISf3fOGnvSlNQ==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /sort-keys@2.0.0: resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==} engines: {node: '>=4'} @@ -9113,6 +12572,17 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + dev: false + + /source-map-js@1.1.0: + resolution: {integrity: sha512-9vC2SfsJzlej6MAaMPLu8HiBSHGdRAJ9hVFYN1ibZoNkeanmDmLUcIrj6G9DGL7XMJ54AKg/G75akXl1/izTOw==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + dev: false /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -9150,6 +12620,10 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: false + /srt-webvtt@2.0.0: + resolution: {integrity: sha512-G2Z7/Jf2NRKrmLYNSIhSYZZYE6OFlKXFp9Au2/zJBKgrioUzmrAys1x7GT01dwl6d2sEnqr5uahEIOd0JW/Rbw==} + dev: false + /ssri@8.0.1: resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} engines: {node: '>= 8'} @@ -9185,6 +12659,13 @@ packages: engines: {node: '>= 0.8'} dev: false + /stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + /stream-buffers@2.2.0: resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} engines: {node: '>= 0.10.0'} @@ -9219,6 +12700,7 @@ packages: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 + dev: false /string.prototype.matchall@4.0.10: resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} @@ -9288,6 +12770,7 @@ packages: engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 + dev: false /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} @@ -9326,10 +12809,22 @@ packages: resolution: {integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==} dev: false + /style-value-types@5.0.0: + resolution: {integrity: sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==} + dependencies: + hey-listen: 1.0.8 + tslib: 2.6.2 + dev: false + /styleq@0.1.3: resolution: {integrity: sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA==} dev: false + /subsrt-ts@2.1.2: + resolution: {integrity: sha512-45yNlK42Z0pz4lAaNYbR5P60M2jmHl+gfAaiJxDIXsXXqoE7TkDCzl/00HgWyZXKkdIU6s8FiNtRvrlOZb+5Qg==} + hasBin: true + dev: false + /sucrase@3.34.0: resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} engines: {node: '>=8'} @@ -9349,13 +12844,14 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: - '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.3.10 + glob: 10.3.12 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 + dev: false /sudo-prompt@8.2.5: resolution: {integrity: sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==} @@ -9407,28 +12903,29 @@ packages: upper-case: 1.1.3 dev: true - /tailwind-merge@2.2.1: - resolution: {integrity: sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==} - dependencies: - '@babel/runtime': 7.23.9 + /tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} dev: false - /tailwindcss-animate@1.0.7(tailwindcss@3.4.1): - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' + /table@6.8.1: + resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + engines: {node: '>=10.0.0'} dependencies: - tailwindcss: 3.4.1 + ajv: 8.12.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 dev: false - /tailwindcss@3.4.1: - resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} + /tailwindcss@3.4.3: + resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} engines: {node: '>=14.0.0'} hasBin: true dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 - chokidar: 3.5.3 + chokidar: 3.6.0 didyoumean: 1.2.2 dlv: 1.1.3 fast-glob: 3.3.2 @@ -9440,16 +12937,85 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.33 - postcss-import: 15.1.0(postcss@8.4.33) - postcss-js: 4.0.1(postcss@8.4.33) - postcss-load-config: 4.0.2(postcss@8.4.33) - postcss-nested: 6.0.1(postcss@8.4.33) - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-import: 15.1.0(postcss@8.4.38) + postcss-js: 4.0.1(postcss@8.4.38) + postcss-load-config: 4.0.2(postcss@8.4.38) + postcss-nested: 6.0.1(postcss@8.4.38) + postcss-selector-parser: 6.0.16 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: - ts-node + dev: false + + /tamagui@1.94.0(@types/react@18.2.52)(immer@10.0.3)(react-dom@18.2.0)(react-native-web@0.19.10)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-n+5GGfNiOa2nDY8WQPZSblBrM8tRAyD7rCu1wSTrMMvswJhshUbxaLu7UbNEMlYTFdAHsEtRYugQCwgkYRn6Mw==} + peerDependencies: + react: '*' + react-native: '*' + react-native-web: '*' + dependencies: + '@tamagui/accordion': 1.94.0(react@18.2.0) + '@tamagui/adapt': 1.94.0(react@18.2.0) + '@tamagui/alert-dialog': 1.94.0(@types/react@18.2.52)(react-native@0.73.6)(react@18.2.0) + '@tamagui/animate-presence': 1.94.0(react@18.2.0) + '@tamagui/avatar': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/button': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/card': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/checkbox': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/compose-refs': 1.94.0(react@18.2.0) + '@tamagui/constants': 1.94.0(react@18.2.0) + '@tamagui/core': 1.94.0(react@18.2.0) + '@tamagui/create-context': 1.94.0(react@18.2.0) + '@tamagui/dialog': 1.94.0(@types/react@18.2.52)(react-native@0.73.6)(react@18.2.0) + '@tamagui/elements': 1.94.0(react-dom@18.2.0)(react@18.2.0) + '@tamagui/fake-react-native': 1.94.0 + '@tamagui/focusable': 1.94.0(react@18.2.0) + '@tamagui/font-size': 1.94.0(react@18.2.0) + '@tamagui/form': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/get-button-sized': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/get-font-sized': 1.94.0(react@18.2.0) + '@tamagui/get-token': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/group': 1.94.0(@types/react@18.2.52)(immer@10.0.3)(react@18.2.0) + '@tamagui/helpers-tamagui': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/image': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/label': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/linear-gradient': 1.94.0(react@18.2.0) + '@tamagui/list-item': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/polyfill-dev': 1.94.0 + '@tamagui/popover': 1.94.0(@types/react@18.2.52)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0) + '@tamagui/popper': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/portal': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/progress': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/radio-group': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/react-native-media-driver': 1.94.0(react-native@0.73.6) + '@tamagui/scroll-view': 1.94.0(react@18.2.0) + '@tamagui/select': 1.94.0(@types/react@18.2.52)(react-native@0.73.6)(react@18.2.0) + '@tamagui/separator': 1.94.0(react@18.2.0) + '@tamagui/shapes': 1.94.0(react@18.2.0) + '@tamagui/sheet': 1.94.0(@types/react@18.2.52)(react-native@0.73.6)(react@18.2.0) + '@tamagui/slider': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/stacks': 1.94.0(react@18.2.0) + '@tamagui/switch': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/tabs': 1.94.0(@types/react@18.2.52)(immer@10.0.3)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0) + '@tamagui/text': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/theme': 1.94.0(react@18.2.0) + '@tamagui/toggle-group': 1.94.0(@types/react@18.2.52)(immer@10.0.3)(react-native@0.73.6)(react@18.2.0) + '@tamagui/tooltip': 1.94.0(@types/react@18.2.52)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0) + '@tamagui/use-controllable-state': 1.94.0(react@18.2.0) + '@tamagui/use-debounce': 1.94.0(react@18.2.0) + '@tamagui/use-force-update': 1.94.0(react@18.2.0) + '@tamagui/use-window-dimensions': 1.94.0(react-native@0.73.6)(react@18.2.0) + '@tamagui/visually-hidden': 1.94.0(react@18.2.0) + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) + react-native-web: 0.19.10(react-dom@18.2.0)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - immer + - react-dom + dev: false /tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} @@ -9519,6 +13085,10 @@ packages: source-map-support: 0.5.21 dev: false + /text-encoding-polyfill@0.6.7: + resolution: {integrity: sha512-/DZ1XJqhbqRkCop6s9ZFu8JrFRwmVuHg4quIRm+ziFkR3N3ec6ck6yBvJ1GYeEQZhLVwRW0rZE+C3SSJpy0RTg==} + dev: false + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -9527,11 +13097,13 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 + dev: false /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 + dev: false /throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} @@ -9607,19 +13179,19 @@ packages: engines: {node: '>= 0.4'} dev: false - /ts-api-utils@1.0.3(typescript@5.3.3): + /ts-api-utils@1.0.3(typescript@5.4.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 - dev: false + typescript: 5.4.3 /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: false - /ts-node@10.9.2(@types/node@20.11.16)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -9638,14 +13210,14 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.11.16 + '@types/node': 20.12.7 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.3.3 + typescript: 5.4.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -9760,6 +13332,11 @@ packages: engines: {node: '>=8'} dev: false + /type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + dev: false + /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} @@ -9798,8 +13375,8 @@ packages: is-typed-array: 1.1.13 dev: false - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + /typescript@5.4.3: + resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} hasBin: true @@ -9807,6 +13384,10 @@ packages: resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} dev: false + /uc.micro@1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + dev: false + /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} @@ -9872,6 +13453,10 @@ packages: crypto-random-string: 2.0.0 dev: false + /universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + dev: false + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -9885,6 +13470,10 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + /unpacker@1.0.1: + resolution: {integrity: sha512-0HTljwp8+JBdITpoHcK1LWi7X9U2BspUmWv78UWZh7NshYhbh1nec8baY/iSbe2OQTZ2bhAtVdnr6/BTD0DKVg==} + dev: false + /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -9933,6 +13522,21 @@ packages: qs: 6.11.2 dev: false + /use-callback-ref@1.3.1(@types/react@18.2.52)(react@18.2.0): + resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.52 + react: 18.2.0 + tslib: 2.6.2 + dev: false + /use-latest-callback@0.1.9(react@18.2.0): resolution: {integrity: sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw==} peerDependencies: @@ -9941,6 +13545,30 @@ packages: react: 18.2.0 dev: false + /use-sidecar@1.1.2(@types/react@18.2.52)(react@18.2.0): + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.52 + detect-node-es: 1.1.0 + react: 18.2.0 + tslib: 2.6.2 + dev: false + + /use-sync-external-store@1.2.0(react@18.2.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -9999,6 +13627,10 @@ packages: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} dev: false + /w-json@1.3.10: + resolution: {integrity: sha512-XadVyw0xE+oZ5FGApXsdswv96rOhStzKqL53uSe5UaTadABGkWIg1+DTx8kiZ/VqTZTBneoL0l65RcPe4W3ecw==} + dev: false + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -10022,8 +13654,8 @@ packages: '@zxing/text-encoding': 0.9.0 dev: false - /web-streams-polyfill@3.3.2: - resolution: {integrity: sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==} + /web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} dev: false @@ -10145,6 +13777,7 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: false /wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} @@ -10153,6 +13786,7 @@ packages: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 + dev: false /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -10256,9 +13890,11 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + /yaml@2.4.1: + resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} engines: {node: '>= 14'} + hasBin: true + dev: false /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} @@ -10295,7 +13931,7 @@ packages: engines: {node: '>=12'} dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -10311,3 +13947,24 @@ packages: /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + + /zustand@4.4.7(@types/react@18.2.52)(immer@10.0.3)(react@18.2.0): + resolution: {integrity: sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + dependencies: + '@types/react': 18.2.52 + immer: 10.0.3 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false diff --git a/.github/renovate.json b/renovate.json similarity index 85% rename from .github/renovate.json rename to renovate.json index 9c42d6f..9bf8776 100644 --- a/.github/renovate.json +++ b/renovate.json @@ -4,10 +4,11 @@ "packageRules": [ { "matchPackagePatterns": ["^@movie-web/"], - "enabled": false + "enabled": true } ], "updateInternalDeps": true, "rangeStrategy": "bump", + "includeForks": true, "automerge": true } diff --git a/tooling/tailwind/package.json b/tooling/colors/package.json similarity index 67% rename from tooling/tailwind/package.json rename to tooling/colors/package.json index df4dcc9..1cc50fb 100644 --- a/tooling/tailwind/package.json +++ b/tooling/colors/package.json @@ -1,12 +1,11 @@ { - "name": "@movie-web/tailwind-config", - "version": "0.1.0", + "name": "@movie-web/colors", "private": true, + "version": "0.1.0", "type": "module", + "main": "./src/index.ts", "exports": { - "./native": "./native.ts", - "./web": "./web.ts", - "./colors": "./colors.ts" + ".": "./src/index.ts" }, "license": "MIT", "scripts": { @@ -15,22 +14,15 @@ "lint": "eslint .", "typecheck": "tsc --noEmit" }, - "dependencies": { - "autoprefixer": "^10.4.17", - "postcss": "^8.4.32", - "tailwindcss": "^3.4.0", - "tailwindcss-animate": "^1.0.7" - }, "devDependencies": { "@movie-web/eslint-config": "workspace:^0.2.0", "@movie-web/prettier-config": "workspace:^0.1.0", "@movie-web/tsconfig": "workspace:^0.1.0", "eslint": "^8.56.0", "prettier": "^3.1.1", - "typescript": "^5.3.3" + "typescript": "^5.4.3" }, "eslintConfig": { - "root": true, "extends": [ "@movie-web/eslint-config/base" ] diff --git a/tooling/colors/src/index.ts b/tooling/colors/src/index.ts new file mode 100644 index 0000000..81c90cb --- /dev/null +++ b/tooling/colors/src/index.ts @@ -0,0 +1,93 @@ +import { tokens as blueTokens } from "./list/blue"; +import { tokens as grayTokens } from "./list/gray"; +import { tokens as redTokens } from "./list/red"; +import { tokens as tealTokens } from "./list/teal"; + +export { blueTokens, grayTokens, redTokens, tealTokens }; + +export const name = "colors"; + +export const mainTokens = { + black: "#000000", + white: "#FFFFFF", + semantic: { + red: { + c100: "#F46E6E", + c200: "#E44F4F", + c300: "#D74747", + c400: "#B43434", + }, + green: { + c100: "#60D26A", + c200: "#40B44B", + c300: "#31A33C", + c400: "#237A2B", + }, + silver: { + c100: "#DEDEDE", + c200: "#B6CAD7", + c300: "#8EA3B0", + c400: "#617A8A", + }, + yellow: { + c100: "#FFF599", + c200: "#FCEC61", + c300: "#D8C947", + c400: "#AFA349", + }, + rose: { + c100: "#DB3D61", + c200: "#8A293B", + c300: "#812435", + c400: "#701B2B", + }, + }, + blue: { + c50: "#ADADF5", + c100: "#7979CC", + c200: "#5D5DAE", + c300: "#3B3B8C", + c400: "#2A2A71", + c500: "#1F1F50", + c600: "#1B1B41", + c700: "#171736", + c800: "#101020", + c900: "#0B0B13", + }, + purple: { + c50: "#D5AAFF", + c100: "#C082FF", + c200: "#A359EC", + c300: "#8D44D6", + c400: "#7831BF", + c500: "#572887", + c600: "#411F64", + c700: "#31184A", + c800: "#221134", + c900: "#160B22", + }, + ash: { + c50: "#7F8D9B", + c100: "#5B6B7B", + c200: "#445464", + c300: "#2B3D4E", + c400: "#203242", + c500: "#1C2C3C", + c600: "#172532", + c700: "#131E29", + c800: "#101820", + c900: "#0C1216", + }, + shade: { + c50: "#676790", + c100: "#52527A", + c200: "#3F3F60", + c300: "#32324F", + c400: "#272741", + c500: "#1E1E32", + c600: "#171728", + c700: "#131322", + c800: "#0F0F1B", + c900: "#0A0A12", + }, +}; diff --git a/tooling/colors/src/list/blue.ts b/tooling/colors/src/list/blue.ts new file mode 100644 index 0000000..6b7dac7 --- /dev/null +++ b/tooling/colors/src/list/blue.ts @@ -0,0 +1,84 @@ +export const tokens = { + black: "#000000", + white: "#FFFFFF", + semantic: { + red: { + c100: "#F46E6E", + c200: "#E44F4F", + c300: "#D74747", + c400: "#B43434", + }, + green: { + c100: "#60D26A", + c200: "#40B44B", + c300: "#31A33C", + c400: "#237A2B", + }, + silver: { + c100: "#DEDEDE", + c200: "#B6CAD7", + c300: "#8EA3B0", + c400: "#617A8A", + }, + yellow: { + c100: "#FFF599", + c200: "#FCEC61", + c300: "#D8C947", + c400: "#AFA349", + }, + rose: { + c100: "#DB3D61", + c200: "#8A293B", + c300: "#812435", + c400: "#701B2B", + }, + }, + purple: { + c50: "#aac5ff", + c100: "#82a9ff", + c200: "#4681ff", + c300: "#1a63ff", + c400: "#054eec", + c500: "#083aa7", + c600: "#072c7c", + c700: "#06215d", + c800: "#041741", + c900: "#03102a", + }, + shade: { + c50: "#756790", + c100: "#60527a", + c200: "#4a3f60", + c300: "#3c324f", + c400: "#302741", + c500: "#251e32", + c600: "#1d1728", + c700: "#181322", + c800: "#130f1b", + c900: "#0d0a12", + }, + ash: { + c50: "#7f859b", + c100: "#5b627b", + c200: "#444b64", + c300: "#2b344e", + c400: "#202842", + c500: "#1c243c", + c600: "#171d32", + c700: "#131829", + c800: "#101420", + c900: "#0c0f16", + }, + blue: { + c50: "#adb4f5", + c100: "#7981cc", + c200: "#5d65ae", + c300: "#3b438c", + c400: "#2a3171", + c500: "#1f2450", + c600: "#1b1f41", + c700: "#171b36", + c800: "#101120", + c900: "#0b0c13", + }, +}; diff --git a/tooling/colors/src/list/gray.ts b/tooling/colors/src/list/gray.ts new file mode 100644 index 0000000..12b2cdc --- /dev/null +++ b/tooling/colors/src/list/gray.ts @@ -0,0 +1,84 @@ +export const tokens = { + black: "#000000", + white: "#FFFFFF", + semantic: { + red: { + c100: "#F46E6E", + c200: "#E44F4F", + c300: "#D74747", + c400: "#B43434", + }, + green: { + c100: "#60D26A", + c200: "#40B44B", + c300: "#31A33C", + c400: "#237A2B", + }, + silver: { + c100: "#DEDEDE", + c200: "#B6CAD7", + c300: "#8EA3B0", + c400: "#617A8A", + }, + yellow: { + c100: "#FFF599", + c200: "#FCEC61", + c300: "#D8C947", + c400: "#AFA349", + }, + rose: { + c100: "#DB3D61", + c200: "#8A293B", + c300: "#812435", + c400: "#701B2B", + }, + }, + purple: { + c50: "#aaafff", + c100: "#8288fe", + c200: "#5a62eb", + c300: "#454cd4", + c400: "#333abe", + c500: "#292d86", + c600: "#1f2363", + c700: "#191b4a", + c800: "#111334", + c900: "#0b0d22", + }, + shade: { + c50: "#7c7c7c", + c100: "#666666", + c200: "#4f4f4f", + c300: "#404040", + c400: "#343434", + c500: "#282828", + c600: "#202020", + c700: "#1a1a1a", + c800: "#151515", + c900: "#0e0e0e", + }, + ash: { + c50: "#8d8d8d", + c100: "#6b6b6b", + c200: "#545454", + c300: "#3c3c3c", + c400: "#313131", + c500: "#2c2c2c", + c600: "#252525", + c700: "#1e1e1e", + c800: "#181818", + c900: "#111111", + }, + blue: { + c50: "#ccccd6", + c100: "#a2a2a2", + c200: "#868686", + c300: "#646464", + c400: "#4e4e4e", + c500: "#383838", + c600: "#2e2e2e", + c700: "#272727", + c800: "#181818", + c900: "#0f0f0f", + }, +}; diff --git a/tooling/colors/src/list/red.ts b/tooling/colors/src/list/red.ts new file mode 100644 index 0000000..941839f --- /dev/null +++ b/tooling/colors/src/list/red.ts @@ -0,0 +1,84 @@ +export const tokens = { + black: "#000000", + white: "#FFFFFF", + semantic: { + red: { + c100: "#F46E6E", + c200: "#E44F4F", + c300: "#D74747", + c400: "#B43434", + }, + green: { + c100: "#60D26A", + c200: "#40B44B", + c300: "#31A33C", + c400: "#237A2B", + }, + silver: { + c100: "#DEDEDE", + c200: "#B6CAD7", + c300: "#8EA3B0", + c400: "#617A8A", + }, + yellow: { + c100: "#FFF599", + c200: "#FCEC61", + c300: "#D8C947", + c400: "#AFA349", + }, + rose: { + c100: "#DB3D61", + c200: "#8A293B", + c300: "#812435", + c400: "#701B2B", + }, + }, + purple: { + c50: "#feabac", + c100: "#fe8385", + c200: "#ea5b5e", + c300: "#d34648", + c400: "#bd3436", + c500: "#852a2b", + c600: "#632021", + c700: "#49191a", + c800: "#331112", + c900: "#220c0c", + }, + shade: { + c50: "#9c605c", + c100: "#834d49", + c200: "#673b38", + c300: "#542f2c", + c400: "#452422", + c500: "#361c1a", + c600: "#2b1614", + c700: "#241210", + c800: "#1c0e0d", + c900: "#130909", + }, + ash: { + c50: "#ac6e6f", + c100: "#8b4b4c", + c200: "#703739", + c300: "#572225", + c400: "#49191a", + c500: "#421617", + c600: "#371212", + c700: "#2e0e0f", + c800: "#230c0d", + c900: "#19090b", + }, + blue: { + c50: "#f5adb4", + c100: "#cc7981", + c200: "#ae5d65", + c300: "#8c3b43", + c400: "#712a31", + c500: "#501f24", + c600: "#411b1f", + c700: "#36171b", + c800: "#201011", + c900: "#130b0c", + }, +}; diff --git a/tooling/colors/src/list/teal.ts b/tooling/colors/src/list/teal.ts new file mode 100644 index 0000000..36cfa54 --- /dev/null +++ b/tooling/colors/src/list/teal.ts @@ -0,0 +1,84 @@ +export const tokens = { + black: "#000000", + white: "#FFFFFF", + semantic: { + red: { + c100: "#F46E6E", + c200: "#E44F4F", + c300: "#D74747", + c400: "#B43434", + }, + green: { + c100: "#60D26A", + c200: "#40B44B", + c300: "#31A33C", + c400: "#237A2B", + }, + silver: { + c100: "#DEDEDE", + c200: "#B6CAD7", + c300: "#8EA3B0", + c400: "#617A8A", + }, + yellow: { + c100: "#FFF599", + c200: "#FCEC61", + c300: "#D8C947", + c400: "#AFA349", + }, + rose: { + c100: "#DB3D61", + c200: "#8A293B", + c300: "#812435", + c400: "#701B2B", + }, + }, + purple: { + c50: "#aad7ff", + c100: "#82c4ff", + c200: "#59a8ec", + c300: "#4491d6", + c400: "#317dbf", + c500: "#285b87", + c600: "#1f4464", + c700: "#18334a", + c800: "#112434", + c900: "#0b1822", + }, + shade: { + c50: "#677c90", + c100: "#52667a", + c200: "#3f4f60", + c300: "#32404f", + c400: "#273441", + c500: "#1e2832", + c600: "#172028", + c700: "#131a22", + c800: "#0f151b", + c900: "#0a0e12", + }, + ash: { + c50: "#7f9b9b", + c100: "#5b7b7b", + c200: "#446463", + c300: "#2b4e4d", + c400: "#204241", + c500: "#1c3c3b", + c600: "#173232", + c700: "#132929", + c800: "#102020", + c900: "#0c1615", + }, + blue: { + c50: "#adf5d6", + c100: "#79cca8", + c200: "#5dae8b", + c300: "#3b8c69", + c400: "#2a7152", + c500: "#1f503b", + c600: "#1b4130", + c700: "#173629", + c800: "#102019", + c900: "#0b1310", + }, +}; diff --git a/tooling/colors/tsconfig.json b/tooling/colors/tsconfig.json new file mode 100644 index 0000000..12305a4 --- /dev/null +++ b/tooling/colors/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@movie-web/tsconfig/base.json", + "compilerOptions": { + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json", + }, + "include": ["*.ts", "src"], + "exclude": ["node_modules"], +} diff --git a/tooling/eslint/base.js b/tooling/eslint/base.js index fb6a6f7..f13dbeb 100644 --- a/tooling/eslint/base.js +++ b/tooling/eslint/base.js @@ -29,6 +29,11 @@ const config = { { checksVoidReturn: { attributes: false } }, ], "import/consistent-type-specifier-style": ["error", "prefer-top-level"], + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-enum-comparison": "off", + "@typescript-eslint/no-useless-template-literals": "error", + "prefer-template": "error", }, ignorePatterns: [ "**/*.config.js", @@ -36,8 +41,26 @@ const config = { "**/.eslintrc.cjs", "dist", "pnpm-lock.yaml", + "tamagui-web.css", ], reportUnusedDisableDirectives: true, + // disable all typescript rules for js files + overrides: [ + { + files: ["*.js", "*.cjs", "*.mjs"], + rules: { + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/no-floating-promises": "off", + "@typescript-eslint/require-await": "off", + "@typescript-eslint/no-misused-promises": "off", + }, + }, + ], }; module.exports = config; diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json index f60a845..6cf9d5e 100644 --- a/tooling/eslint/package.json +++ b/tooling/eslint/package.json @@ -29,7 +29,7 @@ "@types/eslint": "^8.56.2", "eslint": "^8.56.0", "prettier": "^3.1.1", - "typescript": "^5.3.3" + "typescript": "^5.4.3" }, "eslintConfig": { "root": true, diff --git a/tooling/eslint/react.js b/tooling/eslint/react.js index 618e181..6c785a3 100644 --- a/tooling/eslint/react.js +++ b/tooling/eslint/react.js @@ -4,9 +4,11 @@ const config = { "plugin:react/recommended", "plugin:react-hooks/recommended", "plugin:jsx-a11y/recommended", + "plugin:@tanstack/eslint-plugin-query/recommended", ], rules: { "react/prop-types": "off", + "@typescript-eslint/unbound-method": "off", }, globals: { React: "writable", diff --git a/tooling/github/setup/action.yml b/tooling/github/setup/action.yml index 9ef92c4..66a4972 100644 --- a/tooling/github/setup/action.yml +++ b/tooling/github/setup/action.yml @@ -4,10 +4,14 @@ description: "Common setup steps for Actions" runs: using: composite steps: - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v3 + name: Install pnpm + with: + version: 9 + run_install: false - uses: actions/setup-node@v4 with: - node-version: 18 + node-version: 21 cache: "pnpm" - shell: bash diff --git a/tooling/prettier/index.js b/tooling/prettier/index.js index 0a02a72..638a16e 100644 --- a/tooling/prettier/index.js +++ b/tooling/prettier/index.js @@ -1,19 +1,9 @@ -import { fileURLToPath } from "url"; - /** @typedef {import("prettier").Config} PrettierConfig */ -/** @typedef {import("prettier-plugin-tailwindcss").PluginOptions} TailwindConfig */ /** @typedef {import("@ianvs/prettier-plugin-sort-imports").PluginConfig} SortImportsConfig */ -/** @type { PrettierConfig | SortImportsConfig | TailwindConfig } */ +/** @type { PrettierConfig | SortImportsConfig } */ const config = { - plugins: [ - "@ianvs/prettier-plugin-sort-imports", - "prettier-plugin-tailwindcss", - ], - tailwindConfig: fileURLToPath( - new URL("../../tooling/tailwind/web.ts", import.meta.url), - ), - tailwindFunctions: ["cn", "cva"], + plugins: ["@ianvs/prettier-plugin-sort-imports"], importOrder: [ "", "^(react/(.*)$)|^(react$)|^(react-native(.*)$)", diff --git a/tooling/prettier/package.json b/tooling/prettier/package.json index 9987a9f..88a2762 100644 --- a/tooling/prettier/package.json +++ b/tooling/prettier/package.json @@ -18,7 +18,7 @@ }, "devDependencies": { "@movie-web/tsconfig": "workspace:^0.1.0", - "typescript": "^5.3.3" + "typescript": "^5.4.3" }, "prettier": "@movie-web/prettier-config" } diff --git a/tooling/tailwind/base.ts b/tooling/tailwind/base.ts deleted file mode 100644 index e703270..0000000 --- a/tooling/tailwind/base.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { Config } from "tailwindcss"; - -import colors from "./colors"; - -export default { - content: ["src/**/*.{ts,tsx}"], - theme: { - extend: { - colors, - }, - }, -} satisfies Config; diff --git a/tooling/tailwind/colors.ts b/tooling/tailwind/colors.ts deleted file mode 100644 index 91235f7..0000000 --- a/tooling/tailwind/colors.ts +++ /dev/null @@ -1,14 +0,0 @@ -export default { - primary: { - 100: "#C082FF", - 300: "#8D44D6", - 400: "#7831BF", - }, - secondary: { - 50: "#676790", - 200: "#3F3F60", - 300: "#32324F", - 700: "#131322", - }, - background: "#0a0a12", -}; diff --git a/tooling/tailwind/native.ts b/tooling/tailwind/native.ts deleted file mode 100644 index 7441221..0000000 --- a/tooling/tailwind/native.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Config } from "tailwindcss"; - -import base from "./base"; - -export default { - content: base.content, - presets: [base], - theme: {}, -} satisfies Config; diff --git a/tooling/tailwind/web.ts b/tooling/tailwind/web.ts deleted file mode 100644 index 0729477..0000000 --- a/tooling/tailwind/web.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { Config } from "tailwindcss"; -import animate from "tailwindcss-animate"; - -import base from "./base"; - -export default { - content: base.content, - presets: [base], - theme: { - container: { - center: true, - padding: "2rem", - screens: { - "2xl": "1400px", - }, - }, - extend: { - borderRadius: { - lg: "var(--radius)", - md: "calc(var(--radius) - 2px)", - sm: "calc(var(--radius) - 4px)", - }, - keyframes: { - "accordion-down": { - from: { height: "0" }, - to: { height: "var(--radix-accordion-content-height)" }, - }, - "accordion-up": { - from: { height: "var(--radix-accordion-content-height)" }, - to: { height: "0" }, - }, - }, - animation: { - "accordion-down": "accordion-down 0.2s ease-out", - "accordion-up": "accordion-up 0.2s ease-out", - }, - }, - }, - plugins: [animate], -} satisfies Config; diff --git a/turbo/generators/templates/package.json.hbs b/turbo/generators/templates/package.json.hbs index 2e143b0..706657f 100644 --- a/turbo/generators/templates/package.json.hbs +++ b/turbo/generators/templates/package.json.hbs @@ -3,6 +3,7 @@ "private": true, "version": "0.1.0", "type": "module", + "main": "./src/index.ts", "exports": { ".": "./src/index.ts" },