├── .all-contributorsrc ├── .changeset ├── README.md └── config.json ├── .github └── workflows │ ├── dart.yml │ ├── deploy_web.yml │ └── publish.yml ├── .gitignore ├── .npmrc ├── .prettierrc.json ├── .run ├── Vyuh Demo.run.xml └── Vyuh Studio.run.xml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── _images ├── example-conference.png ├── example-counter.png ├── example-food.png ├── example-misc.png ├── example-puzzle.png ├── example-settings.png ├── example-tmdb.png ├── example-unsplash.png ├── example-wonderous.png └── logo.png ├── analysis_options.yaml ├── apps ├── content_explorer │ ├── .env │ ├── .gitignore │ ├── README.md │ ├── lib │ │ └── main.dart │ ├── macos │ │ ├── .gitignore │ │ ├── Flutter │ │ │ ├── Flutter-Debug.xcconfig │ │ │ ├── Flutter-Release.xcconfig │ │ │ └── GeneratedPluginRegistrant.swift │ │ ├── Podfile │ │ ├── Runner.xcodeproj │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace │ │ │ │ └── xcshareddata │ │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ └── Runner.xcscheme │ │ ├── Runner.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── Runner │ │ │ ├── AppDelegate.swift │ │ │ ├── Assets.xcassets │ │ │ │ └── AppIcon.appiconset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── app_icon_1024.png │ │ │ │ │ ├── app_icon_128.png │ │ │ │ │ ├── app_icon_16.png │ │ │ │ │ ├── app_icon_256.png │ │ │ │ │ ├── app_icon_32.png │ │ │ │ │ ├── app_icon_512.png │ │ │ │ │ └── app_icon_64.png │ │ │ ├── Base.lproj │ │ │ │ └── MainMenu.xib │ │ │ ├── Configs │ │ │ │ ├── AppInfo.xcconfig │ │ │ │ ├── Debug.xcconfig │ │ │ │ ├── Release.xcconfig │ │ │ │ └── Warnings.xcconfig │ │ │ ├── DebugProfile.entitlements │ │ │ ├── Info.plist │ │ │ ├── MainFlutterWindow.swift │ │ │ └── Release.entitlements │ │ └── RunnerTests │ │ │ └── RunnerTests.swift │ ├── pubspec.yaml │ └── web │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── index.html │ │ └── manifest.json ├── content_widget_demo │ ├── .gitignore │ ├── README.md │ ├── android │ │ ├── .gitignore │ │ ├── app │ │ │ ├── build.gradle │ │ │ └── src │ │ │ │ ├── debug │ │ │ │ └── AndroidManifest.xml │ │ │ │ ├── main │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── kotlin │ │ │ │ │ └── com │ │ │ │ │ │ └── example │ │ │ │ │ │ └── content_widget_demo │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ └── res │ │ │ │ │ ├── drawable-v21 │ │ │ │ │ └── launch_background.xml │ │ │ │ │ ├── drawable │ │ │ │ │ └── launch_background.xml │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── values-night │ │ │ │ │ └── styles.xml │ │ │ │ │ └── values │ │ │ │ │ └── styles.xml │ │ │ │ └── profile │ │ │ │ └── AndroidManifest.xml │ │ ├── build.gradle │ │ ├── gradle.properties │ │ ├── gradle │ │ │ └── wrapper │ │ │ │ └── gradle-wrapper.properties │ │ └── settings.gradle │ ├── ios │ │ ├── .gitignore │ │ ├── Flutter │ │ │ ├── AppFrameworkInfo.plist │ │ │ ├── Debug.xcconfig │ │ │ └── Release.xcconfig │ │ ├── Podfile │ │ ├── Runner.xcodeproj │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ └── xcshareddata │ │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ │ └── WorkspaceSettings.xcsettings │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ └── Runner.xcscheme │ │ ├── Runner.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ └── WorkspaceSettings.xcsettings │ │ ├── Runner │ │ │ ├── AppDelegate.swift │ │ │ ├── Assets.xcassets │ │ │ │ ├── AppIcon.appiconset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ │ │ └── LaunchImage.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── LaunchImage.png │ │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ │ └── README.md │ │ │ ├── Base.lproj │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ └── Runner-Bridging-Header.h │ │ └── RunnerTests │ │ │ └── RunnerTests.swift │ ├── lib │ │ ├── example.dart │ │ ├── examples │ │ │ ├── conferences.dart │ │ │ ├── custom_widget.dart │ │ │ ├── hello_world.dart │ │ │ └── route.dart │ │ └── main.dart │ ├── pubspec.yaml │ ├── test │ │ └── widget_test.dart │ └── web │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── index.html │ │ └── manifest.json ├── demo-studio │ ├── .eslintrc │ ├── .gitignore │ ├── README.md │ ├── package.json │ ├── sanity.cli.ts │ ├── sanity.config.ts │ ├── scripts │ │ └── sanity-script.ts │ ├── static │ │ └── .gitkeep │ └── tsconfig.json └── vyuh_demo │ ├── .gitignore │ ├── README.md │ ├── android │ ├── .gitignore │ ├── app │ │ ├── build.gradle │ │ ├── google-services.json │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── kotlin │ │ │ │ └── run │ │ │ │ │ └── vyuh │ │ │ │ │ └── vyuh_demo │ │ │ │ │ └── MainActivity.kt │ │ │ └── res │ │ │ │ ├── drawable-hdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-mdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-v21 │ │ │ │ ├── background.png │ │ │ │ └── launch_background.xml │ │ │ │ ├── drawable-xhdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-xxhdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-xxxhdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable │ │ │ │ ├── background.png │ │ │ │ └── launch_background.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── values-night-v31 │ │ │ │ └── styles.xml │ │ │ │ ├── values-night │ │ │ │ └── styles.xml │ │ │ │ ├── values-v31 │ │ │ │ └── styles.xml │ │ │ │ └── values │ │ │ │ └── styles.xml │ │ │ └── profile │ │ │ └── AndroidManifest.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ └── settings.gradle │ ├── assets │ ├── app-icon.png │ ├── launchscreen-image.png │ └── routes │ │ └── _tab1.json │ ├── ios │ ├── .gitignore │ ├── Flutter │ │ ├── AppFrameworkInfo.plist │ │ ├── Debug.xcconfig │ │ └── Release.xcconfig │ ├── Podfile │ ├── Podfile.lock │ ├── Runner.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ └── WorkspaceSettings.xcsettings │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ ├── Runner │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ ├── Icon-App-50x50@1x.png │ │ │ │ ├── Icon-App-50x50@2x.png │ │ │ │ ├── Icon-App-57x57@1x.png │ │ │ │ ├── Icon-App-57x57@2x.png │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ ├── Icon-App-72x72@1x.png │ │ │ │ ├── Icon-App-72x72@2x.png │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ │ ├── LaunchBackground.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── background.png │ │ │ └── LaunchImage.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ └── README.md │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── Runner-Bridging-Header.h │ ├── RunnerTests │ │ └── RunnerTests.swift │ └── fastlane │ │ ├── Appfile │ │ ├── Fastfile │ │ └── README.md │ ├── lib │ ├── main.dart │ └── root_feature.dart │ ├── mockoon.json │ ├── pubspec.yaml │ ├── test │ └── widget_test.dart │ └── web │ ├── favicon.png │ ├── icons │ ├── Icon-192.png │ ├── Icon-512.png │ ├── Icon-maskable-192.png │ └── Icon-maskable-512.png │ ├── index.html │ ├── manifest.json │ └── splash │ └── img │ ├── dark-1x.png │ ├── dark-2x.png │ ├── dark-3x.png │ ├── dark-4x.png │ ├── light-1x.png │ ├── light-2x.png │ ├── light-3x.png │ └── light-4x.png ├── examples ├── conference │ ├── feature_conference │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build.yaml │ │ ├── lib │ │ │ ├── api │ │ │ │ └── conference_api.dart │ │ │ ├── content │ │ │ │ ├── conference.dart │ │ │ │ ├── conference.g.dart │ │ │ │ ├── edition.dart │ │ │ │ ├── edition.g.dart │ │ │ │ ├── room.dart │ │ │ │ ├── room.g.dart │ │ │ │ ├── schedule.dart │ │ │ │ ├── schedule.g.dart │ │ │ │ ├── session.dart │ │ │ │ ├── session.g.dart │ │ │ │ ├── speaker.dart │ │ │ │ ├── speaker.g.dart │ │ │ │ ├── sponsor.dart │ │ │ │ ├── sponsor.g.dart │ │ │ │ ├── track.dart │ │ │ │ ├── track.g.dart │ │ │ │ ├── venue.dart │ │ │ │ └── venue.g.dart │ │ │ ├── feature.dart │ │ │ ├── feature_conference.dart │ │ │ ├── layouts │ │ │ │ ├── conference_card_layout.dart │ │ │ │ ├── conference_card_layout.g.dart │ │ │ │ ├── conference_layout.dart │ │ │ │ ├── conference_layout.g.dart │ │ │ │ ├── edition_layout.dart │ │ │ │ ├── edition_layout.g.dart │ │ │ │ ├── edition_summary_layout.dart │ │ │ │ ├── edition_summary_layout.g.dart │ │ │ │ ├── room_layout.dart │ │ │ │ ├── session_layout.dart │ │ │ │ ├── session_layout.g.dart │ │ │ │ ├── session_summary_layout.dart │ │ │ │ ├── session_summary_layout.g.dart │ │ │ │ ├── speaker_chip_layout.dart │ │ │ │ ├── speaker_chip_layout.g.dart │ │ │ │ ├── speaker_layout.dart │ │ │ │ ├── speaker_layout.g.dart │ │ │ │ ├── sponsor_layout.dart │ │ │ │ ├── sponsor_layout.g.dart │ │ │ │ ├── track_chip_layout.dart │ │ │ │ ├── track_chip_layout.g.dart │ │ │ │ ├── track_layout.dart │ │ │ │ ├── track_layout.g.dart │ │ │ │ ├── venue_layout.dart │ │ │ │ └── venue_layout.g.dart │ │ │ ├── pages │ │ │ │ ├── conference_detail_page.dart │ │ │ │ ├── conference_root_page.dart │ │ │ │ ├── edition_detail_page.dart │ │ │ │ ├── edition_shell_page.dart │ │ │ │ ├── session_detail_page.dart │ │ │ │ ├── sessions_page.dart │ │ │ │ ├── speaker_detail_page.dart │ │ │ │ ├── speakers_page.dart │ │ │ │ ├── track_detail_page.dart │ │ │ │ └── tracks_page.dart │ │ │ ├── routes.dart │ │ │ ├── utils.dart │ │ │ └── widgets │ │ │ │ └── conference_route_scaffold.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ └── feature_conference_test.dart │ └── schema │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── RELATIONSHIPS.md │ │ ├── package.json │ │ ├── src │ │ ├── documents │ │ │ ├── conference.ts │ │ │ ├── edition.ts │ │ │ ├── session.ts │ │ │ ├── speaker.ts │ │ │ ├── sponsor.ts │ │ │ ├── track.ts │ │ │ └── venue.ts │ │ ├── index.ts │ │ └── objects │ │ │ ├── room.ts │ │ │ └── schedule.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts ├── feature_counter │ ├── .gitignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── build.yaml │ ├── lib │ │ ├── feature.dart │ │ └── feature_counter.dart │ ├── pubspec.yaml │ └── test │ │ └── feature_counter_test.dart ├── food │ ├── feature_food │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build.yaml │ │ ├── lib │ │ │ ├── action │ │ │ │ ├── select_menu_item.dart │ │ │ │ └── select_menu_item.g.dart │ │ │ ├── api.dart │ │ │ ├── content │ │ │ │ ├── food_item.dart │ │ │ │ ├── food_item.g.dart │ │ │ │ ├── food_item_default_layout.dart │ │ │ │ ├── selected_food_item.dart │ │ │ │ └── selected_food_item.g.dart │ │ │ ├── feature.dart │ │ │ ├── feature_food.dart │ │ │ └── routes.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ └── feature_food_test.dart │ └── food │ │ ├── package.json │ │ ├── pnpm-lock.yaml │ │ ├── src │ │ ├── index.ts │ │ └── menu-item.ts │ │ └── tsconfig.json ├── misc │ ├── feature_misc │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build.yaml │ │ ├── lib │ │ │ ├── action │ │ │ │ ├── show_barcode.dart │ │ │ │ └── show_barcode.g.dart │ │ │ ├── condition │ │ │ │ ├── part_of_day.dart │ │ │ │ └── part_of_day.g.dart │ │ │ ├── content │ │ │ │ ├── api │ │ │ │ │ ├── dummy_json_api_content.dart │ │ │ │ │ ├── dummy_json_api_content.g.dart │ │ │ │ │ ├── model.dart │ │ │ │ │ ├── model.g.dart │ │ │ │ │ └── widgets.dart │ │ │ │ ├── card_layout_di_store.dart │ │ │ │ ├── card_layout_di_store.g.dart │ │ │ │ ├── live_card.dart │ │ │ │ ├── live_card.g.dart │ │ │ │ ├── product │ │ │ │ │ ├── default_layout.dart │ │ │ │ │ ├── default_layout.g.dart │ │ │ │ │ ├── mini_view_layout.dart │ │ │ │ │ ├── mini_view_layout.g.dart │ │ │ │ │ ├── product_card.dart │ │ │ │ │ └── product_card.g.dart │ │ │ │ ├── score_card.dart │ │ │ │ └── score_card.g.dart │ │ │ ├── feature.dart │ │ │ ├── feature_misc.dart │ │ │ └── lifecycle_handlers │ │ │ │ ├── di_registration_lifecycle_handler.dart │ │ │ │ ├── di_registration_lifecycle_handler.g.dart │ │ │ │ ├── simulated_delay_lifecycle_handler.dart │ │ │ │ └── simulated_delay_lifecycle_handler.g.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ └── feature_misc_test.dart │ └── misc │ │ ├── .eslintrc.mjs │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── pnpm-lock.yaml │ │ ├── src │ │ ├── action │ │ │ └── show-barcode.ts │ │ ├── condition │ │ │ └── part-of-day.ts │ │ ├── content │ │ │ ├── diStore-card-layout.ts │ │ │ ├── dummy-json-api.ts │ │ │ ├── live-card.ts │ │ │ ├── missing.ts │ │ │ ├── product-card.ts │ │ │ └── score-card.ts │ │ ├── index.ts │ │ └── lifecycle-handlers │ │ │ ├── diRegistrationLifecycleHandler.ts │ │ │ └── simulatedDelayLifecycleHandler.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts ├── puzzles │ ├── feature_puzzles │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── assets │ │ │ ├── background.jpg │ │ │ ├── boat.png │ │ │ ├── clouds.jpg │ │ │ └── water.jpg │ │ ├── lib │ │ │ ├── action │ │ │ │ ├── select_level.dart │ │ │ │ └── select_level.g.dart │ │ │ ├── api │ │ │ │ ├── model │ │ │ │ │ ├── level.dart │ │ │ │ │ └── level.g.dart │ │ │ │ └── puzzles_client.dart │ │ │ ├── feature.dart │ │ │ ├── feature_puzzles.dart │ │ │ ├── routes.dart │ │ │ ├── ui │ │ │ │ ├── content │ │ │ │ │ ├── level_section.dart │ │ │ │ │ └── level_section.g.dart │ │ │ │ ├── layout │ │ │ │ │ ├── level_layout.dart │ │ │ │ │ └── level_layout.g.dart │ │ │ │ ├── loader │ │ │ │ │ └── level_loader.dart │ │ │ │ ├── river_level │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── dialogs.dart │ │ │ │ │ ├── river_engine.dart │ │ │ │ │ ├── river_level.dart │ │ │ │ │ ├── river_level_store.dart │ │ │ │ │ └── widgets │ │ │ │ │ │ ├── boat_widget.dart │ │ │ │ │ │ ├── character_widget.dart │ │ │ │ │ │ ├── ground_widget.dart │ │ │ │ │ │ ├── level_play_widget.dart │ │ │ │ │ │ ├── menu_widget.dart │ │ │ │ │ │ ├── river_widget.dart │ │ │ │ │ │ └── start_level_widget.dart │ │ │ │ └── widgets │ │ │ │ │ ├── animated_heading_text.dart │ │ │ │ │ ├── puzzle_button.dart │ │ │ │ │ └── scale_effect_button.dart │ │ │ └── utils │ │ │ │ ├── constants.dart │ │ │ │ └── extensions.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ ├── routes_test.dart │ │ │ └── ui │ │ │ └── river_level │ │ │ └── river_engine_test.dart │ └── puzzles │ │ ├── package.json │ │ ├── pnpm-lock.yaml │ │ ├── src │ │ ├── index.ts │ │ ├── level-action.ts │ │ ├── level-layout.ts │ │ ├── puzzle.tsx │ │ └── section.ts │ │ └── tsconfig.json ├── settings │ ├── feature_settings │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── analysis_options.yaml │ │ ├── build.yaml │ │ ├── lib │ │ │ ├── feature_settings.dart │ │ │ ├── settings.dart │ │ │ └── settings.g.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ └── feature_settings_test.dart │ └── settings-sanity-schema │ │ ├── .gitignore │ │ ├── README.md │ │ ├── index.tsx │ │ ├── package.json │ │ ├── pnpm-lock.yaml │ │ └── tsconfig.json ├── shared │ ├── chakra_shared │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── analysis_options.yaml │ │ ├── lib │ │ │ ├── chakra_plugin_auth.dart │ │ │ ├── chakra_shared.dart │ │ │ └── ui │ │ │ │ ├── detail_builder.dart │ │ │ │ ├── floating_app_bar.dart │ │ │ │ └── youtube_video_player.dart │ │ └── pubspec.yaml │ ├── design_system │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── assets │ │ │ └── fonts │ │ │ │ └── poppins │ │ │ │ ├── Poppins-Black.ttf │ │ │ │ ├── Poppins-BlackItalic.ttf │ │ │ │ ├── Poppins-Bold.ttf │ │ │ │ ├── Poppins-BoldItalic.ttf │ │ │ │ ├── Poppins-ExtraBold.ttf │ │ │ │ ├── Poppins-ExtraBoldItalic.ttf │ │ │ │ ├── Poppins-ExtraLight.ttf │ │ │ │ ├── Poppins-ExtraLightItalic.ttf │ │ │ │ ├── Poppins-Italic.ttf │ │ │ │ ├── Poppins-Light.ttf │ │ │ │ ├── Poppins-LightItalic.ttf │ │ │ │ ├── Poppins-Medium.ttf │ │ │ │ ├── Poppins-MediumItalic.ttf │ │ │ │ ├── Poppins-Regular.ttf │ │ │ │ ├── Poppins-SemiBold.ttf │ │ │ │ ├── Poppins-SemiBoldItalic.ttf │ │ │ │ ├── Poppins-Thin.ttf │ │ │ │ └── Poppins-ThinItalic.ttf │ │ ├── example │ │ │ └── main.dart │ │ ├── lib │ │ │ ├── core │ │ │ │ ├── aspect_ratio.dart │ │ │ │ ├── border_radius.dart │ │ │ │ ├── border_width.dart │ │ │ │ ├── gap.dart │ │ │ │ ├── index.dart │ │ │ │ ├── linear_gradient.dart │ │ │ │ ├── sizing.dart │ │ │ │ ├── spacing.dart │ │ │ │ ├── text_theme.dart │ │ │ │ └── tmdb_text_theme.dart │ │ │ ├── design_system.dart │ │ │ ├── generated │ │ │ │ └── theme.dart │ │ │ └── utils │ │ │ │ └── extensions.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ └── vyuh_design_system_test.dart │ └── tmdb_client │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── analysis_options.yaml │ │ ├── build.yaml │ │ ├── lib │ │ ├── model │ │ │ ├── base.dart │ │ │ ├── base.g.dart │ │ │ ├── genre.dart │ │ │ ├── genre.g.dart │ │ │ ├── image.dart │ │ │ ├── image.g.dart │ │ │ ├── movie.dart │ │ │ ├── movie.g.dart │ │ │ ├── person.dart │ │ │ ├── person.g.dart │ │ │ ├── review.dart │ │ │ ├── review.g.dart │ │ │ ├── series.dart │ │ │ ├── series.g.dart │ │ │ ├── trailer.dart │ │ │ └── trailer.g.dart │ │ ├── movies_api.dart │ │ ├── person_api.dart │ │ ├── person_api.g.dart │ │ ├── search_api.dart │ │ ├── series_api.dart │ │ ├── tmdb_client.dart │ │ └── util.dart │ │ ├── pubspec.yaml │ │ └── test │ │ └── tmdb_client_test.dart ├── tmdb │ ├── feature_tmdb │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── assets │ │ │ └── images │ │ │ │ ├── action.png │ │ │ │ ├── adventure.png │ │ │ │ ├── animation.png │ │ │ │ ├── comedy.png │ │ │ │ ├── crime.png │ │ │ │ ├── documentary.png │ │ │ │ ├── drama.png │ │ │ │ ├── family.png │ │ │ │ ├── fantasy.png │ │ │ │ ├── history.png │ │ │ │ ├── horror.png │ │ │ │ ├── kids.png │ │ │ │ ├── music.png │ │ │ │ ├── mystery.png │ │ │ │ ├── news.png │ │ │ │ ├── reality.png │ │ │ │ ├── romance.png │ │ │ │ ├── scienceFiction.png │ │ │ │ ├── soap.png │ │ │ │ ├── talk.png │ │ │ │ ├── thriller.png │ │ │ │ ├── tvMovie.png │ │ │ │ ├── war.png │ │ │ │ └── western.png │ │ ├── build.yaml │ │ ├── lib │ │ │ ├── action │ │ │ │ ├── add_to_watchlist.dart │ │ │ │ ├── add_to_watchlist.g.dart │ │ │ │ ├── drop_down_selection.dart │ │ │ │ └── drop_down_selection.g.dart │ │ │ ├── content │ │ │ │ ├── api_config_genres.dart │ │ │ │ ├── api_config_genres.g.dart │ │ │ │ ├── api_config_movies.dart │ │ │ │ ├── api_config_movies.g.dart │ │ │ │ ├── api_config_series.dart │ │ │ │ ├── api_config_series.g.dart │ │ │ │ ├── dropdown_menu.dart │ │ │ │ ├── dropdown_menu.g.dart │ │ │ │ ├── enums │ │ │ │ │ └── config_enum.dart │ │ │ │ ├── movie_detail_section.dart │ │ │ │ ├── movie_detail_section.g.dart │ │ │ │ ├── movie_watchlist_section.dart │ │ │ │ ├── movie_watchlist_section.g.dart │ │ │ │ ├── person_detail_section.dart │ │ │ │ ├── person_detail_section.g.dart │ │ │ │ ├── search_section.dart │ │ │ │ ├── search_section.g.dart │ │ │ │ ├── series_detail_section.dart │ │ │ │ ├── series_detail_section.g.dart │ │ │ │ ├── series_watchlist_section.dart │ │ │ │ ├── series_watchlist_section.g.dart │ │ │ │ ├── tmdb_list_layout.dart │ │ │ │ ├── tmdb_list_layout.g.dart │ │ │ │ ├── tmdb_media_toggle_layout.dart │ │ │ │ ├── tmdb_media_toggle_layout.g.dart │ │ │ │ ├── tmdb_single_item_layout.dart │ │ │ │ ├── tmdb_single_item_layout.g.dart │ │ │ │ └── watchlist_view.dart │ │ │ ├── feature.dart │ │ │ ├── feature_tmdb.dart │ │ │ ├── routes.dart │ │ │ ├── store │ │ │ │ └── tmdb_search_store.dart │ │ │ ├── tmdb_store.dart │ │ │ ├── ui │ │ │ │ ├── collection_view.dart │ │ │ │ ├── common_widgets │ │ │ │ │ ├── box_widget.dart │ │ │ │ │ └── vote_percentage.dart │ │ │ │ ├── date_and_details_widget.dart │ │ │ │ ├── formatters.dart │ │ │ │ ├── movie_details.dart │ │ │ │ ├── person_details.dart │ │ │ │ ├── popularity_widget.dart │ │ │ │ ├── search_screen.dart │ │ │ │ ├── section_title.dart │ │ │ │ ├── sections │ │ │ │ │ ├── footer.dart │ │ │ │ │ ├── gallery.dart │ │ │ │ │ ├── hero.dart │ │ │ │ │ ├── movie_card.dart │ │ │ │ │ ├── people_card.dart │ │ │ │ │ ├── preview_list.dart │ │ │ │ │ ├── provider.dart │ │ │ │ │ ├── review_card.dart │ │ │ │ │ ├── series_card.dart │ │ │ │ │ ├── statistics.dart │ │ │ │ │ └── trailer.dart │ │ │ │ ├── series_details.dart │ │ │ │ ├── widget │ │ │ │ │ ├── add_to_watchlist_button.dart │ │ │ │ │ ├── carousel_widget.dart │ │ │ │ │ ├── circular_carousel.dart │ │ │ │ │ └── dot_widget.dart │ │ │ │ └── zoomable_image.dart │ │ │ └── utils │ │ │ │ ├── assets.dart │ │ │ │ ├── constants.dart │ │ │ │ └── utils.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ ├── content │ │ │ └── api_config_collection_test.dart │ │ │ ├── feature_tmdb_test.dart │ │ │ ├── routes_test.dart │ │ │ └── routes_test.mocks.dart │ └── tmdb │ │ ├── package.json │ │ ├── pnpm-lock.yaml │ │ ├── src │ │ ├── action │ │ │ ├── addToWatchlist.ts │ │ │ └── drop-down-action.ts │ │ ├── api-config │ │ │ ├── genres-config.ts │ │ │ ├── movies-config.ts │ │ │ └── series-config.ts │ │ ├── dropdown-menu.ts │ │ ├── index.ts │ │ ├── movie-section.ts │ │ ├── movie-watchlist-section.ts │ │ ├── person-detail-section.ts │ │ ├── search-section.ts │ │ ├── series-section.ts │ │ ├── series-watchlist-section.ts │ │ ├── tmdb-list-layout.ts │ │ ├── tmdb-media-toggle-layout.ts │ │ └── tmdb-single-item-layout.ts │ │ └── tsconfig.json ├── unsplash │ └── feature_unsplash │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build.yaml │ │ ├── lib │ │ ├── feature.dart │ │ ├── feature_unsplash.dart │ │ ├── routes.dart │ │ ├── ui │ │ │ ├── collection_detail.dart │ │ │ ├── collection_view.dart │ │ │ ├── home.dart │ │ │ ├── photo_card.dart │ │ │ ├── photo_detail.dart │ │ │ ├── search_view.dart │ │ │ └── topic_detail.dart │ │ └── unsplash_store.dart │ │ ├── pubspec.yaml │ │ └── test │ │ └── feature_unsplash_test.dart └── wonderous │ ├── feature_wonderous │ ├── .gitignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── build.yaml │ ├── lib │ │ ├── api │ │ │ ├── wonder.dart │ │ │ ├── wonder.g.dart │ │ │ └── wonder_client.dart │ │ ├── content │ │ │ ├── query_configurations.dart │ │ │ ├── query_configurations.g.dart │ │ │ ├── section.dart │ │ │ ├── section.g.dart │ │ │ ├── wonder_list_item.dart │ │ │ └── wonder_list_item.g.dart │ │ ├── feature.dart │ │ ├── feature_wonderous.dart │ │ ├── routes.dart │ │ └── ui │ │ │ ├── common.dart │ │ │ ├── formatters.dart │ │ │ ├── page_view_layout.dart │ │ │ ├── page_view_layout.g.dart │ │ │ └── sections │ │ │ ├── construction_section.dart │ │ │ ├── events_section.dart │ │ │ ├── hero_section.dart │ │ │ ├── history_section.dart │ │ │ ├── location_info_section.dart │ │ │ └── photos_section.dart │ ├── pubspec.yaml │ └── test │ │ └── feature_wonderous_test.dart │ └── wonderous │ ├── package.json │ ├── pnpm-lock.yaml │ ├── src │ ├── index.ts │ ├── page-view-group-layout.ts │ ├── query-configurations.ts │ ├── section.ts │ └── wonder.tsx │ └── tsconfig.json ├── justfile ├── melos.yaml ├── package.json ├── packages ├── plugins │ ├── vyuh_plugin_storage_hive │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── lib │ │ │ ├── hive_storage_plugin.dart │ │ │ └── vyuh_plugin_storage_hive.dart │ │ └── pubspec.yaml │ ├── vyuh_plugin_storage_secure │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── example │ │ │ └── README.md │ │ ├── lib │ │ │ ├── secure_storage_plugin.dart │ │ │ └── vyuh_plugin_storage_secure.dart │ │ └── pubspec.yaml │ └── vyuh_plugin_telemetry_provider_console │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── lib │ │ └── vyuh_plugin_telemetry_provider_console.dart │ │ └── pubspec.yaml ├── sanity │ ├── flutter_sanity_portable_text │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build.yaml │ │ ├── example │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── android │ │ │ │ ├── .gitignore │ │ │ │ ├── app │ │ │ │ │ ├── build.gradle │ │ │ │ │ └── src │ │ │ │ │ │ ├── debug │ │ │ │ │ │ └── AndroidManifest.xml │ │ │ │ │ │ ├── main │ │ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ │ │ ├── kotlin │ │ │ │ │ │ │ └── com │ │ │ │ │ │ │ │ └── example │ │ │ │ │ │ │ │ └── example │ │ │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ │ │ └── res │ │ │ │ │ │ │ ├── drawable-v21 │ │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ │ │ ├── drawable │ │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ │ ├── values-night │ │ │ │ │ │ │ └── styles.xml │ │ │ │ │ │ │ └── values │ │ │ │ │ │ │ └── styles.xml │ │ │ │ │ │ └── profile │ │ │ │ │ │ └── AndroidManifest.xml │ │ │ │ ├── build.gradle │ │ │ │ ├── gradle.properties │ │ │ │ ├── gradle │ │ │ │ │ └── wrapper │ │ │ │ │ │ └── gradle-wrapper.properties │ │ │ │ └── settings.gradle │ │ │ ├── ios │ │ │ │ ├── .gitignore │ │ │ │ ├── Flutter │ │ │ │ │ ├── AppFrameworkInfo.plist │ │ │ │ │ ├── Debug.xcconfig │ │ │ │ │ └── Release.xcconfig │ │ │ │ ├── Runner.xcodeproj │ │ │ │ │ ├── project.pbxproj │ │ │ │ │ ├── project.xcworkspace │ │ │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ │ │ └── xcshareddata │ │ │ │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ │ │ │ └── WorkspaceSettings.xcsettings │ │ │ │ │ └── xcshareddata │ │ │ │ │ │ └── xcschemes │ │ │ │ │ │ └── Runner.xcscheme │ │ │ │ ├── Runner.xcworkspace │ │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ │ └── xcshareddata │ │ │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ │ │ └── WorkspaceSettings.xcsettings │ │ │ │ ├── Runner │ │ │ │ │ ├── AppDelegate.swift │ │ │ │ │ ├── Assets.xcassets │ │ │ │ │ │ ├── AppIcon.appiconset │ │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ │ │ │ │ └── LaunchImage.imageset │ │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ │ ├── LaunchImage.png │ │ │ │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ │ │ │ └── README.md │ │ │ │ │ ├── Base.lproj │ │ │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ │ │ └── Main.storyboard │ │ │ │ │ ├── Info.plist │ │ │ │ │ └── Runner-Bridging-Header.h │ │ │ │ └── RunnerTests │ │ │ │ │ └── RunnerTests.swift │ │ │ ├── lib │ │ │ │ └── main.dart │ │ │ ├── pubspec.yaml │ │ │ ├── screenshot.png │ │ │ └── web │ │ │ │ ├── favicon.png │ │ │ │ ├── icons │ │ │ │ ├── Icon-192.png │ │ │ │ ├── Icon-512.png │ │ │ │ ├── Icon-maskable-192.png │ │ │ │ └── Icon-maskable-512.png │ │ │ │ ├── index.html │ │ │ │ └── manifest.json │ │ ├── lib │ │ │ ├── flutter_sanity_portable_text.dart │ │ │ ├── model │ │ │ │ ├── markdef_descriptor.dart │ │ │ │ ├── text_block.dart │ │ │ │ └── text_block.g.dart │ │ │ └── ui │ │ │ │ ├── portable_text_block.dart │ │ │ │ ├── portable_text_config.dart │ │ │ │ └── portable_text_widget.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ ├── custom_test.dart │ │ │ ├── default_styles_test.dart │ │ │ ├── errors_test.dart │ │ │ ├── fundamentals_test.dart │ │ │ ├── markdef_test.dart │ │ │ ├── text_block_test.dart │ │ │ └── util.dart │ ├── sanity_client │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build.yaml │ │ ├── example │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── lib │ │ │ │ ├── example.dart │ │ │ │ └── live_example.dart │ │ │ └── pubspec.yaml │ │ ├── lib │ │ │ ├── client.dart │ │ │ ├── config.dart │ │ │ ├── exceptions.dart │ │ │ ├── live.dart │ │ │ ├── response_types.dart │ │ │ ├── response_types.g.dart │ │ │ ├── sanity_client.dart │ │ │ ├── sanity_request.dart │ │ │ ├── sanity_url_builder.dart │ │ │ └── types.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ ├── dataset_test.dart │ │ │ ├── query_test.dart │ │ │ ├── sanity_config_test.dart │ │ │ ├── url_builder_test.dart │ │ │ └── util.dart │ └── vyuh_plugin_content_provider_sanity │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── lib │ │ ├── exception.dart │ │ ├── live_provider.dart │ │ ├── processor.dart │ │ └── vyuh_plugin_content_provider_sanity.dart │ │ ├── pubspec.yaml │ │ └── test │ │ └── vyuh_plugin_content_provider_sanity_test.dart ├── system │ ├── vyuh_cache │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── example │ │ │ └── main.dart │ │ ├── lib │ │ │ ├── memory_cache_storage.dart │ │ │ └── vyuh_cache.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ └── vyuh_cache_test.dart │ ├── vyuh_content_widget │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build.yaml │ │ ├── example │ │ │ └── README.md │ │ ├── lib │ │ │ ├── document.dart │ │ │ ├── document.g.dart │ │ │ ├── vyuh_content_binding.dart │ │ │ ├── vyuh_content_widget.dart │ │ │ └── widget.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ ├── utils.dart │ │ │ ├── vyuh_content_binding_test.dart │ │ │ ├── vyuh_content_widget_builders_test.dart │ │ │ └── vyuh_content_widget_test.dart │ ├── vyuh_core │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build.yaml │ │ ├── lib │ │ │ ├── asserts.dart │ │ │ ├── extension.dart │ │ │ ├── feature_descriptor.dart │ │ │ ├── plugin │ │ │ │ ├── analytics │ │ │ │ │ ├── analytics_plugin.dart │ │ │ │ │ ├── analytics_provider.dart │ │ │ │ │ ├── content_extension.dart │ │ │ │ │ └── noop_analytics_provider.dart │ │ │ │ ├── auth │ │ │ │ │ ├── anonymous_auth_plugin.dart │ │ │ │ │ ├── auth_plugin.dart │ │ │ │ │ ├── exceptions.dart │ │ │ │ │ └── user.dart │ │ │ │ ├── content │ │ │ │ │ ├── content_item.dart │ │ │ │ │ ├── content_plugin.dart │ │ │ │ │ ├── content_provider.dart │ │ │ │ │ ├── debug_modifier.dart │ │ │ │ │ ├── live_content_provider.dart │ │ │ │ │ ├── noop_content_plugin.dart │ │ │ │ │ ├── noop_content_provider.dart │ │ │ │ │ ├── reference.dart │ │ │ │ │ ├── reference.g.dart │ │ │ │ │ ├── route_base.dart │ │ │ │ │ ├── route_base.g.dart │ │ │ │ │ ├── serialization.dart │ │ │ │ │ ├── type_descriptor.dart │ │ │ │ │ ├── unknown.dart │ │ │ │ │ └── unknown.g.dart │ │ │ │ ├── di │ │ │ │ │ ├── di_plugin.dart │ │ │ │ │ └── plugin_di_get_it.dart │ │ │ │ ├── env │ │ │ │ │ ├── default_env_plugin.dart │ │ │ │ │ ├── env_plugin.dart │ │ │ │ │ └── noop_env_plugin.dart │ │ │ │ ├── event_plugin.dart │ │ │ │ ├── feature_flag.dart │ │ │ │ ├── navigation │ │ │ │ │ ├── default_navigation_plugin.dart │ │ │ │ │ ├── fallback_route_page_builder.dart │ │ │ │ │ └── navigation.dart │ │ │ │ ├── network │ │ │ │ │ ├── http_network_plugin.dart │ │ │ │ │ └── network_plugin.dart │ │ │ │ ├── plugin.dart │ │ │ │ ├── plugin_descriptor.dart │ │ │ │ ├── storage │ │ │ │ │ ├── in_memory_secure_storage_plugin.dart │ │ │ │ │ ├── in_memory_storage_plugin.dart │ │ │ │ │ ├── storage.dart │ │ │ │ │ └── storage_plugin.dart │ │ │ │ └── telemetry │ │ │ │ │ ├── logger.dart │ │ │ │ │ ├── noop_telemetry_provider.dart │ │ │ │ │ ├── telemetry_plugin.dart │ │ │ │ │ └── telemetry_provider.dart │ │ │ ├── runtime │ │ │ │ ├── cms_route.dart │ │ │ │ ├── init_tracker.dart │ │ │ │ ├── platform │ │ │ │ │ ├── default_platform.dart │ │ │ │ │ ├── default_route_loader.dart │ │ │ │ │ ├── error_view.dart │ │ │ │ │ ├── events.dart │ │ │ │ │ ├── framework_init_view.dart │ │ │ │ │ ├── platform_init_tracker.dart │ │ │ │ │ ├── powered_by_widget.dart │ │ │ │ │ ├── uninitialized_platform.dart │ │ │ │ │ └── vyuh_platform.dart │ │ │ │ ├── platform_widget_builder.dart │ │ │ │ ├── run_app.dart │ │ │ │ └── vyuh_binding.dart │ │ │ └── vyuh_core.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ ├── event_plugin_test.dart │ │ │ ├── network_plugin_test.dart │ │ │ ├── telemetry_plugin_test.dart │ │ │ └── vyuh_platform_test.dart │ ├── vyuh_extension_content │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── analysis_options.yaml │ │ ├── build.yaml │ │ ├── lib │ │ │ ├── content │ │ │ │ ├── action.dart │ │ │ │ ├── action.g.dart │ │ │ │ ├── condition.dart │ │ │ │ ├── condition.g.dart │ │ │ │ ├── content_builder.dart │ │ │ │ └── content_descriptor.dart │ │ │ ├── content_extension_builder.dart │ │ │ ├── content_extension_descriptor.dart │ │ │ ├── plugin │ │ │ │ ├── content_plugin.dart │ │ │ │ └── extension.dart │ │ │ ├── preview │ │ │ │ └── preview_context.dart │ │ │ ├── ui │ │ │ │ ├── document_builder.dart │ │ │ │ ├── document_future_builder.dart │ │ │ │ ├── document_stream_builder.dart │ │ │ │ ├── route_builder.dart │ │ │ │ ├── route_builder_proxy.dart │ │ │ │ └── scoped_di_widget.dart │ │ │ └── vyuh_extension_content.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ ├── content_builder_test.dart │ │ │ ├── content_extension_builder_test.dart │ │ │ ├── content_modifier_test.dart │ │ │ ├── content_plugin_test.dart │ │ │ ├── layout_configuration_test.dart │ │ │ ├── utils.dart │ │ │ └── vyuh_extension_content_test.dart │ ├── vyuh_feature_auth │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build.yaml │ │ ├── lib │ │ │ ├── auth_user_card_layout.dart │ │ │ ├── content │ │ │ │ ├── email_password_form.dart │ │ │ │ ├── email_password_form.g.dart │ │ │ │ ├── email_password_form_layout.dart │ │ │ │ ├── email_password_form_layout.g.dart │ │ │ │ ├── forgot_password_form.dart │ │ │ │ ├── forgot_password_form.g.dart │ │ │ │ ├── forgot_password_form_layout.dart │ │ │ │ ├── forgot_password_form_layout.g.dart │ │ │ │ ├── hint_action_text.dart │ │ │ │ ├── hint_action_text.g.dart │ │ │ │ ├── oauth_signin.dart │ │ │ │ ├── oauth_signin.g.dart │ │ │ │ ├── oauth_signin_layout.dart │ │ │ │ ├── oauth_signin_layout.g.dart │ │ │ │ ├── phone_otp_form.dart │ │ │ │ ├── phone_otp_form.g.dart │ │ │ │ ├── phone_otp_form_layout.dart │ │ │ │ ├── phone_otp_form_layout.g.dart │ │ │ │ ├── profile_card.dart │ │ │ │ ├── profile_card.g.dart │ │ │ │ ├── profile_form_layout.dart │ │ │ │ └── profile_form_layout.g.dart │ │ │ ├── feature.dart │ │ │ ├── ui │ │ │ │ ├── auth_form_builder.dart │ │ │ │ ├── auth_state_widget.dart │ │ │ │ ├── email_password_view.dart │ │ │ │ ├── forgot_password_view.dart │ │ │ │ ├── form_fields.dart │ │ │ │ ├── oauth_sign_in_view.dart │ │ │ │ ├── phone_otp_view.dart │ │ │ │ └── social_icons.dart │ │ │ └── vyuh_feature_auth.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ └── vyuh_feature_firebase_auth_test.dart │ ├── vyuh_feature_developer │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── example │ │ │ └── main.dart │ │ ├── lib │ │ │ ├── components │ │ │ │ ├── items.dart │ │ │ │ ├── route_list.dart │ │ │ │ ├── standard_plugin_view.dart │ │ │ │ └── sticky_section.dart │ │ │ ├── pages │ │ │ │ ├── analytics_plugin_detail.dart │ │ │ │ ├── content_extension_detail.dart │ │ │ │ ├── content_plugin_detail.dart │ │ │ │ ├── feature_detail.dart │ │ │ │ ├── playground │ │ │ │ │ ├── content_playground.dart │ │ │ │ │ └── widgets │ │ │ │ │ │ ├── content_list.dart │ │ │ │ │ │ ├── content_list_item.dart │ │ │ │ │ │ ├── feature_item.dart │ │ │ │ │ │ ├── no_preview_card.dart │ │ │ │ │ │ ├── preview.dart │ │ │ │ │ │ ├── preview_panel.dart │ │ │ │ │ │ └── widgets.dart │ │ │ │ ├── plugin_and_feature_list.dart │ │ │ │ ├── plugin_detail.dart │ │ │ │ └── telemetry_plugin_detail.dart │ │ │ ├── routes.dart │ │ │ └── vyuh_feature_developer.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ └── vyuh_feature_developer_test.dart │ ├── vyuh_feature_onboarding │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build.yaml │ │ ├── lib │ │ │ ├── default_layout.dart │ │ │ ├── default_layout.g.dart │ │ │ ├── feature.dart │ │ │ ├── onboarding.dart │ │ │ ├── onboarding.g.dart │ │ │ └── vyuh_feature_onboarding.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ └── vyuh_feature_onboarding_test.dart │ ├── vyuh_feature_system │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build.yaml │ │ ├── lib │ │ │ ├── action │ │ │ │ ├── alert.dart │ │ │ │ ├── alert.g.dart │ │ │ │ ├── conditional_action.dart │ │ │ │ ├── conditional_action.g.dart │ │ │ │ ├── delay.dart │ │ │ │ ├── delay.g.dart │ │ │ │ ├── drawer.dart │ │ │ │ ├── drawer.g.dart │ │ │ │ ├── navigate_back.dart │ │ │ │ ├── navigate_back.g.dart │ │ │ │ ├── navigation.dart │ │ │ │ ├── navigation.g.dart │ │ │ │ ├── open_in_dialog.dart │ │ │ │ ├── open_in_dialog.g.dart │ │ │ │ ├── open_url.dart │ │ │ │ ├── open_url.g.dart │ │ │ │ ├── restart.dart │ │ │ │ ├── restart.g.dart │ │ │ │ ├── route_refresh.dart │ │ │ │ ├── route_refresh.g.dart │ │ │ │ ├── snack_bar.dart │ │ │ │ ├── snack_bar.g.dart │ │ │ │ ├── toggle_theme.dart │ │ │ │ └── toggle_theme.g.dart │ │ │ ├── api_handler │ │ │ │ ├── json_path_api_configuration.dart │ │ │ │ └── json_path_api_configuration.g.dart │ │ │ ├── condition │ │ │ │ ├── boolean.dart │ │ │ │ ├── boolean.g.dart │ │ │ │ ├── current_platform.dart │ │ │ │ ├── current_theme_mode.dart │ │ │ │ ├── feature_flag.dart │ │ │ │ ├── feature_flag.g.dart │ │ │ │ ├── screen_size.dart │ │ │ │ └── user_authenticated.dart │ │ │ ├── content │ │ │ │ ├── accordion.dart │ │ │ │ ├── accordion.g.dart │ │ │ │ ├── api_content.dart │ │ │ │ ├── api_content.g.dart │ │ │ │ ├── card │ │ │ │ │ ├── button_layout.dart │ │ │ │ │ ├── button_layout.g.dart │ │ │ │ │ ├── card.dart │ │ │ │ │ ├── card.g.dart │ │ │ │ │ ├── default_layout.dart │ │ │ │ │ ├── default_layout.g.dart │ │ │ │ │ ├── list_item_layout.dart │ │ │ │ │ └── list_item_layout.g.dart │ │ │ │ ├── conditional.dart │ │ │ │ ├── conditional.g.dart │ │ │ │ ├── conditional_route │ │ │ │ │ ├── conditional_route.dart │ │ │ │ │ ├── conditional_route.g.dart │ │ │ │ │ └── default_layout.dart │ │ │ │ ├── divider.dart │ │ │ │ ├── divider.g.dart │ │ │ │ ├── document_view │ │ │ │ │ ├── document_list.dart │ │ │ │ │ ├── document_list.g.dart │ │ │ │ │ ├── document_list_layout.dart │ │ │ │ │ ├── document_list_layout.g.dart │ │ │ │ │ ├── document_section.dart │ │ │ │ │ ├── document_section.g.dart │ │ │ │ │ ├── document_section_layout.dart │ │ │ │ │ ├── document_section_layout.g.dart │ │ │ │ │ ├── document_view.dart │ │ │ │ │ ├── document_view.g.dart │ │ │ │ │ └── ui │ │ │ │ │ │ ├── document_builder.dart │ │ │ │ │ │ └── document_listview_builder.dart │ │ │ │ ├── empty.dart │ │ │ │ ├── empty.g.dart │ │ │ │ ├── group │ │ │ │ │ ├── carousel_layout.dart │ │ │ │ │ ├── carousel_layout.g.dart │ │ │ │ │ ├── default_layout.dart │ │ │ │ │ ├── default_layout.g.dart │ │ │ │ │ ├── grid_layout.dart │ │ │ │ │ ├── grid_layout.g.dart │ │ │ │ │ ├── group.dart │ │ │ │ │ ├── group.g.dart │ │ │ │ │ ├── list_layout.dart │ │ │ │ │ └── list_layout.g.dart │ │ │ │ ├── index.dart │ │ │ │ ├── portable_text │ │ │ │ │ ├── invoke_action.dart │ │ │ │ │ ├── invoke_action.g.dart │ │ │ │ │ ├── portable_text.dart │ │ │ │ │ └── portable_text.g.dart │ │ │ │ ├── route │ │ │ │ │ ├── default_layout.dart │ │ │ │ │ ├── default_layout.g.dart │ │ │ │ │ ├── route.dart │ │ │ │ │ ├── route.g.dart │ │ │ │ │ ├── route_type.dart │ │ │ │ │ ├── route_type.g.dart │ │ │ │ │ ├── single_item_layout.dart │ │ │ │ │ ├── single_item_layout.g.dart │ │ │ │ │ ├── tabs.dart │ │ │ │ │ └── tabs.g.dart │ │ │ │ ├── unknown.dart │ │ │ │ ├── video_player.dart │ │ │ │ └── video_player.g.dart │ │ │ ├── content_modifiers │ │ │ │ ├── theme_modifier.dart │ │ │ │ └── theme_modifier.g.dart │ │ │ ├── feature.dart │ │ │ ├── service │ │ │ │ ├── breakpoint_service.dart │ │ │ │ └── theme_service.dart │ │ │ ├── ui │ │ │ │ ├── carousel.dart │ │ │ │ ├── conditional_layout.dart │ │ │ │ ├── conditional_layout.g.dart │ │ │ │ ├── content_image.dart │ │ │ │ ├── content_items_scrollview.dart │ │ │ │ ├── default_page_route_layout.dart │ │ │ │ ├── dialog_page.dart │ │ │ │ ├── press_effect.dart │ │ │ │ ├── route_scaffold.dart │ │ │ │ ├── single_item_route_scaffold.dart │ │ │ │ ├── text.dart │ │ │ │ └── web_view.dart │ │ │ └── vyuh_feature_system.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ └── vyuh_feature_essentials_test.dart │ ├── vyuh_test │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── lib │ │ │ ├── ready_check.dart │ │ │ ├── test_utils.dart │ │ │ └── vyuh_test.dart │ │ ├── pubspec.yaml │ │ └── test │ │ │ └── vyuh_test_test.dart │ └── vyuh_widgetbook │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── doc │ │ └── images │ │ │ └── widgetbook.png │ │ ├── example │ │ └── example.md │ │ ├── lib │ │ ├── shell.dart │ │ ├── ui │ │ │ └── no_preview_card.dart │ │ └── vyuh_widgetbook.dart │ │ └── pubspec.yaml └── vyuh_cli │ ├── .gitignore │ ├── .pubignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── _images │ ├── vyuh_cli.png │ └── vyuh_cli_doctor.png │ ├── bin │ └── vyuh.dart │ ├── bricks │ ├── vyuh_feature │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __brick__ │ │ │ └── {{ name.snakeCase() }} │ │ │ │ ├── .gitignore │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── build.yaml │ │ │ │ ├── lib │ │ │ │ ├── feature.dart │ │ │ │ └── {{ name.snakeCase() }}.dart │ │ │ │ ├── pubspec.yaml │ │ │ │ └── test │ │ │ │ └── {{ name.snakeCase() }}_test.dart │ │ ├── brick.yaml │ │ └── hooks │ │ │ ├── post_gen.dart │ │ │ └── pubspec.yaml │ ├── vyuh_feature_sanity_schema │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __brick__ │ │ │ └── {{ name.paramCase() }} │ │ │ │ ├── .gitignore │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── README.md │ │ │ │ ├── package.json │ │ │ │ ├── src │ │ │ │ ├── index.ts │ │ │ │ └── simple-content.ts │ │ │ │ ├── tsconfig.json │ │ │ │ └── tsup.config.ts │ │ ├── brick.yaml │ │ └── hooks │ │ │ ├── post_gen.dart │ │ │ └── pubspec.yaml │ ├── vyuh_item │ │ ├── README.md │ │ ├── __brick__ │ │ │ ├── layouts │ │ │ │ ├── {{item_name.snakeCase()}}_layout.dart │ │ │ │ └── {{item_name.snakeCase()}}_layout.g.dart │ │ │ ├── {{item_name.snakeCase()}}.dart │ │ │ └── {{item_name.snakeCase()}}.g.dart │ │ └── brick.yaml │ └── vyuh_project │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __brick__ │ │ └── {{ name.snakeCase() }} │ │ │ ├── .gitignore │ │ │ ├── .npmrc │ │ │ ├── .prettierrc.json │ │ │ ├── README.md │ │ │ ├── analysis_options.yaml │ │ │ ├── apps │ │ │ └── README.md │ │ │ ├── features │ │ │ ├── README.md │ │ │ └── counter │ │ │ │ └── feature_counter │ │ │ │ ├── .gitignore │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── build.yaml │ │ │ │ ├── lib │ │ │ │ ├── feature.dart │ │ │ │ └── feature_counter.dart │ │ │ │ ├── pubspec.yaml │ │ │ │ └── test │ │ │ │ └── feature_counter_test.dart │ │ │ ├── justfile │ │ │ ├── melos.yaml │ │ │ ├── overrides │ │ │ ├── .env │ │ │ ├── assets │ │ │ │ ├── app-icon.png │ │ │ │ └── launchscreen-image.png │ │ │ └── lib │ │ │ │ └── main.dart │ │ │ ├── package.json │ │ │ ├── packages │ │ │ └── README.md │ │ │ ├── plugins │ │ │ └── README.md │ │ │ ├── pnpm-workspace.yaml │ │ │ └── pubspec.yaml │ │ ├── brick.yaml │ │ └── hooks │ │ ├── commands │ │ ├── cli_command.dart │ │ ├── flutter_command.dart │ │ ├── melos_command.dart │ │ ├── preconditions_check_command.dart │ │ └── sanity_command.dart │ │ ├── post_gen.dart │ │ └── pubspec.yaml │ ├── dart_test.yaml │ ├── example │ └── README.md │ ├── justfile │ ├── lib │ ├── command_runner.dart │ ├── commands │ │ ├── create │ │ │ ├── base_create_command.dart │ │ │ ├── command.dart │ │ │ ├── feature │ │ │ │ ├── command.dart │ │ │ │ ├── template.dart │ │ │ │ └── vyuh_feature_bundle.dart │ │ │ ├── item │ │ │ │ ├── command.dart │ │ │ │ ├── template.dart │ │ │ │ └── vyuh_item_bundle.dart │ │ │ ├── project │ │ │ │ ├── command.dart │ │ │ │ ├── template.dart │ │ │ │ └── vyuh_project_bundle.dart │ │ │ └── schema │ │ │ │ ├── command.dart │ │ │ │ ├── template.dart │ │ │ │ └── vyuh_feature_sanity_schema_bundle.dart │ │ ├── doctor │ │ │ ├── command.dart │ │ │ └── src │ │ │ │ ├── doctor.dart │ │ │ │ ├── utils │ │ │ │ ├── comand_version_validator.dart │ │ │ │ ├── doctor_validator.dart │ │ │ │ ├── user_messages.dart │ │ │ │ └── utils.dart │ │ │ │ └── validators │ │ │ │ ├── dart_validator.dart │ │ │ │ ├── flutter_validator.dart │ │ │ │ ├── melos_validator.dart │ │ │ │ ├── node_validator.dart │ │ │ │ ├── pnpm_validator.dart │ │ │ │ ├── sanity_validator.dart │ │ │ │ └── validators.dart │ │ └── update │ │ │ └── command.dart │ ├── template.dart │ ├── utils │ │ ├── logger_extension.dart │ │ └── utils.dart │ ├── version.dart │ └── vyuh_cli.dart │ ├── pubspec.yaml │ └── test │ ├── ensure_build_test.dart │ └── src │ ├── command_runner_test.dart │ └── commands │ └── update_command_test.dart ├── pnpm-workspace.yaml ├── pubspec.lock ├── pubspec.yaml ├── schemas ├── vyuh-sanity-schema-auth │ ├── .eslintrc.mjs │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src │ │ ├── card.layout.authUser.tsx │ │ ├── content │ │ │ ├── email-password-form.ts │ │ │ ├── forgot-password-form.ts │ │ │ ├── hint-action-text.ts │ │ │ ├── oauth-signin.ts │ │ │ ├── phone-otp-form.ts │ │ │ └── util.ts │ │ ├── feature.ts │ │ └── index.ts │ ├── tsconfig.json │ └── tsup.config.ts └── vyuh-sanity-schema-onboarding │ ├── .eslintrc.mjs │ ├── .gitignore │ ├── .npmignore │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src │ ├── index.ts │ └── onboarding-content.ts │ ├── tsconfig.json │ └── tsup.config.ts └── tools └── update_version.dart /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [["@vyuh/*"]], 6 | "linked": [], 7 | "access": "public", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": ["*-sanity-schema", "demo-studio"] 11 | } 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/node_modules 2 | *.log 3 | build 4 | dist 5 | .sanity 6 | .DS_Store 7 | .idea 8 | coverage 9 | .metadata 10 | .dart_tool 11 | pubspec_overrides.yaml 12 | .flutter-plugins 13 | .flutter-plugins-dependencies 14 | *.iml 15 | mason-lock.json 16 | .mason 17 | *.lock 18 | devtools_options.yaml 19 | pnpm-lock.yaml 20 | 21 | # windsurf rules 22 | .windsurfrules 23 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | link-workspace-packages=deep 2 | save-workspace-protocol=false 3 | save-prefix='^' 4 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "printWidth": 80, 4 | "proseWrap": "always", 5 | "bracketSpacing": true, 6 | "singleQuote": true, 7 | "trailingComma": "all" 8 | } 9 | -------------------------------------------------------------------------------- /.run/Vyuh Demo.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /.run/Vyuh Studio.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |