diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 614d5eb36..da76d385f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,76 +1,76 @@
-name: Create Build Artifacts
-on:
- push:
-
-jobs:
- buildStarter:
- name: Build Starter App
- runs-on: ubuntu-latest
-
- strategy:
- matrix:
- flutter-version: ["3.38.7"]
- platform: ["web", "android"]
-
- steps:
- - name: Checkout Code
- uses: actions/checkout@v3
-
- - name: Setup Java
- uses: actions/setup-java@v4
- with:
- distribution: 'temurin'
- java-version: '17'
-
- - name: Setup Flutter SDK
- uses: subosito/flutter-action@v2
- with:
- flutter-version: ${{ matrix.flutter-version }}
- cache: true
-
- - name: Install Melos
- run: dart pub global activate melos
-
- - name: Bootstrap Melos
- run: melos bootstrap
-
- - name: Create temporary keystore for Android signing
- if: matrix.platform == 'android'
- run: |
- cd starter/android
- # Create a temporary keystore for CI builds
- keytool -genkey -v -keystore ci-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias ci-key \
- -dname "CN=CI Build, OU=CI, O=Ensemble, L=City, S=State, C=US" \
- -storepass ci-password -keypass ci-password
-
- # Create key.properties file with absolute path
- cat > key.properties << EOF
- storePassword=ci-password
- keyPassword=ci-password
- keyAlias=ci-key
- storeFile=$(pwd)/ci-release-key.jks
- EOF
-
- # Verify files were created
- ls -la ci-release-key.jks key.properties
-
- - name: Build for ${{ matrix.platform }}
- run: |
- cd starter
- case "${{ matrix.platform }}" in
- web)
- flutter build web --release --no-tree-shake-icons
- ;;
- android)
- flutter build apk --release --no-tree-shake-icons
- ;;
- esac
-
- - name: Upload Build Artifacts
- uses: actions/upload-artifact@v4
- with:
- name: starter-build-${{ matrix.platform }}-flutter-${{ matrix.flutter-version }}
- path: |
- starter/build/web/**
- starter/build/app/outputs/flutter-apk/*-release.apk
- retention-days: 7
+name: Create Build Artifacts
+on:
+ push:
+
+jobs:
+ buildStarter:
+ name: Build Starter App
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ flutter-version: ["3.38.7"]
+ platform: ["web", "android"]
+
+ steps:
+ - name: Checkout Code
+ uses: actions/checkout@v3
+
+ - name: Setup Java
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'temurin'
+ java-version: '17'
+
+ - name: Setup Flutter SDK
+ uses: subosito/flutter-action@v2
+ with:
+ flutter-version: ${{ matrix.flutter-version }}
+ cache: true
+
+ - name: Install Melos
+ run: dart pub global activate melos
+
+ - name: Bootstrap Melos
+ run: melos bootstrap
+
+ - name: Create temporary keystore for Android signing
+ if: matrix.platform == 'android'
+ run: |
+ cd starter/android
+ # Create a temporary keystore for CI builds
+ keytool -genkey -v -keystore ci-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias ci-key \
+ -dname "CN=CI Build, OU=CI, O=Ensemble, L=City, S=State, C=US" \
+ -storepass ci-password -keypass ci-password
+
+ # Create key.properties file with absolute path
+ cat > key.properties << EOF
+ storePassword=ci-password
+ keyPassword=ci-password
+ keyAlias=ci-key
+ storeFile=$(pwd)/ci-release-key.jks
+ EOF
+
+ # Verify files were created
+ ls -la ci-release-key.jks key.properties
+
+ - name: Build for ${{ matrix.platform }}
+ run: |
+ cd starter
+ case "${{ matrix.platform }}" in
+ web)
+ flutter build web --release --no-tree-shake-icons
+ ;;
+ android)
+ flutter build apk --release --no-tree-shake-icons
+ ;;
+ esac
+
+ - name: Upload Build Artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: starter-build-${{ matrix.platform }}-flutter-${{ matrix.flutter-version }}
+ path: |
+ starter/build/web/**
+ starter/build/app/outputs/flutter-apk/*-release.apk
+ retention-days: 7
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index 0f1289202..ac2692130 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -1,38 +1,38 @@
-name: Execute Tests on PR
-on:
- push:
- pull_request:
- branches: [main]
-
-jobs:
- runUnitTest:
- name: Execute Unit/Widget tests
-
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout Code
- uses: actions/checkout@v3
-
- - name: Setup Flutter SDK
- uses: subosito/flutter-action@v2
- with:
- flutter-version: '3.32.5'
- cache: true
-
- - name: Install Melos
- run: dart pub global activate melos
-
- # - name: Lint
- # run: melos exec -- "dart format --output=none --set-exit-if-changed ."
-
- - name: Pub Upgrade
- run: melos bootstrap
-
-# - name: Run Unit Tests / Widget Tests
-# run: melos exec -- "flutter test"
-
- - name: Run Auth Tests
- run: |
- cd modules/auth
- flutter test
+name: Execute Tests on PR
+on:
+ push:
+ pull_request:
+ branches: [main]
+
+jobs:
+ runUnitTest:
+ name: Execute Unit/Widget tests
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout Code
+ uses: actions/checkout@v3
+
+ - name: Setup Flutter SDK
+ uses: subosito/flutter-action@v2
+ with:
+ flutter-version: '3.32.5'
+ cache: true
+
+ - name: Install Melos
+ run: dart pub global activate melos
+
+ # - name: Lint
+ # run: melos exec -- "dart format --output=none --set-exit-if-changed ."
+
+ - name: Pub Upgrade
+ run: melos bootstrap
+
+# - name: Run Unit Tests / Widget Tests
+# run: melos exec -- "flutter test"
+
+ - name: Run Auth Tests
+ run: |
+ cd modules/auth
+ flutter test
diff --git a/.github/workflows/publish-ensemble-pubdev.yml b/.github/workflows/publish-ensemble-pubdev.yml
index 3101a66c8..0bba67adc 100644
--- a/.github/workflows/publish-ensemble-pubdev.yml
+++ b/.github/workflows/publish-ensemble-pubdev.yml
@@ -1,309 +1,309 @@
-name: Publish Ensemble to pub.dev
-
-on:
- push:
- tags:
- - "ensemble-v*"
-
-concurrency:
- group: pubdev-ensemble-${{ github.ref_name }}
- cancel-in-progress: false
-
-permissions:
- contents: read
- id-token: write
-
-jobs:
- publish:
- name: Publish ensemble runtime
- runs-on: ubuntu-latest
- outputs:
- version: ${{ steps.validate-release-tag.outputs.version }}
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- with:
- ref: ${{ github.ref_name }}
- fetch-depth: 0
-
- # pub.dev only trusts publishes from a workflow run that a genuine git
- # tag push triggered, so a beta's opt-in can't be passed through as a
- # workflow input -- it has to travel on the tag itself. A beta tag
- # only proceeds if release-beta-version.yml annotated it with the
- # [publish-to-pubdev] marker; stable tags always proceed.
- - name: Validate release tag
- id: validate-release-tag
- run: |
- set -euo pipefail
-
- TAG="${GITHUB_REF_NAME}"
-
- if [[ "$TAG" =~ ^ensemble-v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
- echo "should_publish=true" >> "$GITHUB_OUTPUT"
- elif [[ "$TAG" =~ ^ensemble-v[0-9]+\.[0-9]+\.[0-9]+-beta\.[0-9]+$ ]]; then
- message="$(git tag -l -n1 --format='%(contents)' "$TAG")"
- if [[ "$message" == *"[publish-to-pubdev]"* ]]; then
- echo "should_publish=true" >> "$GITHUB_OUTPUT"
- else
- echo "Beta tag not opted in to pub.dev publishing; skipping."
- echo "should_publish=false" >> "$GITHUB_OUTPUT"
- fi
- else
- echo "::error::Unexpected tag '$TAG'."
- exit 1
- fi
-
- echo "version=${TAG#ensemble-v}" >> "$GITHUB_OUTPUT"
-
- - name: Setup Flutter SDK
- if: steps.validate-release-tag.outputs.should_publish == 'true'
- uses: subosito/flutter-action@v2
- with:
- flutter-version: "3.32.5"
- cache: true
-
- - name: Setup pub.dev credentials
- if: steps.validate-release-tag.outputs.should_publish == 'true'
- uses: dart-lang/setup-dart@v1
-
- - name: Build pub.dev example from starter
- if: steps.validate-release-tag.outputs.should_publish == 'true'
- run: |
- set -euo pipefail
-
- example_dir="modules/ensemble/example"
- rm -rf "$example_dir"
- mkdir -p "$example_dir"
-
- cp -R starter/lib "$example_dir/"
- cp -R starter/ensemble "$example_dir/"
- cp -R starter/web "$example_dir/"
- [ -f starter/analysis_options.yaml ] && cp starter/analysis_options.yaml "$example_dir/"
- [ -f starter/LICENSE ] && cp starter/LICENSE "$example_dir/"
- [ -f starter/custom_http_server.py ] && cp starter/custom_http_server.py "$example_dir/"
-
- python3 <<'PY'
- import re
- from pathlib import Path
-
- example = Path("modules/ensemble/example")
-
- (example / "pubspec.yaml").write_text("""name: ensemble_example
- description: Example app for the Ensemble runtime package.
- publish_to: 'none'
- version: 1.0.0+1
-
- environment:
- sdk: ">=3.5.0 <4.0.0"
- flutter: ">=3.24.0"
-
- dependencies:
- flutter:
- sdk: flutter
- flutter_localizations:
- sdk: flutter
- ensemble:
- path: ../
- firebase_core: ^4.2.0
- get_it: ^8.0.0
-
- dev_dependencies:
- flutter_test:
- sdk: flutter
- flutter_lints: ^2.0.3
-
- flutter:
- uses-material-design: true
- assets:
- - ensemble/
- - ensemble/assets/
- - ensemble/apps/helloApp/
- - ensemble/apps/helloApp/screens/
- - ensemble/apps/helloApp/widgets/
- - ensemble/apps/helloApp/actions/
- - ensemble/apps/helloApp/scripts/
- - ensemble/apps/helloApp/assets/
- - ensemble/apps/helloApp/translations/
- - ensemble/apps/helloApp/config/
- """)
-
- (example / "README.md").write_text("""# Ensemble Runtime Example
-
- This is a curated copy of the Ensemble starter app for the `ensemble`
- package. It keeps the real starter structure and sample YAML
- definitions, while omitting large generated folders such as `build/`,
- `node_modules/`, and platform projects.
-
- ## Run
-
- From this directory:
-
- ```sh
- flutter pub get
- flutter run -d chrome
- ```
-
- The example loads local definitions from `ensemble/apps/helloApp`.
-
- To generate native platform folders for local experimentation, run:
-
- ```sh
- flutter create --platforms=ios,android .
- ```
- """)
-
- main = example / "lib/main.dart"
- main.write_text(main.read_text().replace(
- "package:ensemble_starter/generated/ensemble_modules.dart",
- "package:ensemble_example/generated/ensemble_modules.dart",
- ).replace(
- 'debugPrint("Async Error: " + error.toString());',
- 'debugPrint("Async Error: $error");',
- ))
-
- modules = example / "lib/generated/ensemble_modules.dart"
- modules_text = modules.read_text().replace(
- "import 'package:firebase_messaging/firebase_messaging.dart';\n",
- "",
- ).replace(
- "import 'package:get_it/get_it.dart';",
- "import 'package:flutter/foundation.dart';\nimport 'package:get_it/get_it.dart';",
- ).replace(
- " print(\n",
- " debugPrint(\n",
- )
- modules.write_text(modules_text)
-
- integration = example / "lib/integrate_existing_app_with_Ensemble.dart"
- if integration.exists():
- integration_text = integration.read_text()
- integration_text = integration_text.replace(
- "import 'package:ensemble/util/utils.dart';\n", ""
- ).replace(
- "import 'package:flutter_i18n/flutter_i18n.dart';\n", ""
- ).replace(
- "import 'package:flutter_localizations/flutter_localizations.dart';\n", ""
- )
- (example / "lib/integrate_existing_app_with_ensemble.dart").write_text(integration_text)
- integration.unlink()
-
- config = example / "ensemble/ensemble-config.yaml"
- config_text = config.read_text().replace("from: ensemble", "from: local", 1)
- for key in ("iOSClientId", "androidClientId", "webClientId", "serverClientId", "clientId"):
- config_text = re.sub(
- rf"({key}:\s*).+",
- rf"\1example-{key}",
- config_text,
- )
- config.write_text(config_text)
-
- web_index = example / "web/index.html"
- web_index_text = web_index.read_text()
- web_index_text = re.sub(
- r'()',
- r'\1example-webClientId\2',
- web_index_text,
- )
- web_index_text = re.sub(
- r"(https://maps\.googleapis\.com/maps/api/js\?key=)[^\"']+",
- r"\1example-google-maps-api-key",
- web_index_text,
- )
- web_index.write_text(web_index_text)
- PY
-
- - name: Publish to pub.dev
- if: steps.validate-release-tag.outputs.should_publish == 'true'
- working-directory: modules/ensemble
- run: flutter pub publish --force
-
- publish-modules:
- name: Publish ${{ matrix.package.name }}
- runs-on: ubuntu-latest
- needs: publish
- if: "!contains(github.ref_name, '-beta')"
- strategy:
- fail-fast: false
- matrix:
- package:
- - { name: "ensemble_network_info", path: "modules/ensemble_network_info" }
- - { name: "ensemble_stripe", path: "modules/ensemble_stripe" }
- - { name: "ensemble_file_manager", path: "modules/file_manager" }
- - { name: "ensemble_chat", path: "modules/chat" }
- - { name: "ensemble_auth", path: "modules/auth" }
- - { name: "ensemble_bluetooth", path: "modules/ensemble_bluetooth" }
- - { name: "ensemble_wifi", path: "modules/ensemble_wifi" }
- - { name: "ensemble_face_camera", path: "modules/face_camera" }
- - { name: "ensemble_connect", path: "modules/connect" }
- - { name: "ensemble_contacts", path: "modules/contacts" }
- - { name: "ensemble_location", path: "modules/location" }
- - { name: "ensemble_camera", path: "modules/camera" }
- - { name: "ensemble_deeplink", path: "modules/deeplink" }
- - { name: "ensemble_remote_config", path: "modules/ensemble_remote_config" }
- - { name: "ensemble_firebase_analytics", path: "modules/firebase_analytics" }
- - { name: "ensemble_qr_scanner", path: "modules/qr_scanner" }
- - { name: "ensemble_adobe_analytics", path: "modules/adobe_analytics" }
- - { name: "ensemble_moengage", path: "modules/moengage" }
- - { name: "ensemble_bracket", path: "modules/bracket" }
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- with:
- ref: ${{ matrix.package.name }}-v${{ needs.publish.outputs.version }}
-
- - name: Setup Flutter SDK
- uses: subosito/flutter-action@v2
- with:
- flutter-version: "3.32.5"
- cache: true
-
- - name: Setup pub.dev credentials
- uses: dart-lang/setup-dart@v1
-
- - name: Prepare package for pub.dev
- env:
- RELEASE_VERSION: ${{ needs.publish.outputs.version }}
- PACKAGE_PATH: ${{ matrix.package.path }}
- run: |
- set -euo pipefail
-
- rm -f "${PACKAGE_PATH}/pubspec_overrides.yaml" "${PACKAGE_PATH}/pubspec.lock"
-
- python3 <<'PY'
- import os
- import re
- from pathlib import Path
-
- version = os.environ["RELEASE_VERSION"]
- path = os.environ["PACKAGE_PATH"]
- pubspec = Path(path) / "pubspec.yaml"
- text = pubspec.read_text()
-
- # Replace local/git dependencies on any versioned ensemble module with the release version
- pattern = r"(\n ensemble[_a-zA-Z0-9]*:)\s*\n\s+git:\s*\n\s+url:\s*https://github\.com/EnsembleUI/ensemble\.git\s*\n\s+ref:[^\n]+\n\s+path:[^\n]+"
- text = re.sub(pattern, rf"\1 ^{version}", text)
-
- pubspec.write_text(text)
- PY
-
- - name: Resolve dependencies
- working-directory: ${{ matrix.package.path }}
- run: |
- set -euo pipefail
-
- for attempt in {1..60}; do
- if flutter pub get; then
- exit 0
- fi
-
- echo "Waiting for dependencies of ${{ matrix.package.name }} to resolve from pub.dev..."
- sleep 10
- done
-
- flutter pub get
-
- - name: Publish ${{ matrix.package.name }} to pub.dev
- working-directory: ${{ matrix.package.path }}
- run: flutter pub publish --force
+name: Publish Ensemble to pub.dev
+
+on:
+ push:
+ tags:
+ - "ensemble-v*"
+
+concurrency:
+ group: pubdev-ensemble-${{ github.ref_name }}
+ cancel-in-progress: false
+
+permissions:
+ contents: read
+ id-token: write
+
+jobs:
+ publish:
+ name: Publish ensemble runtime
+ runs-on: ubuntu-latest
+ outputs:
+ version: ${{ steps.validate-release-tag.outputs.version }}
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.ref_name }}
+ fetch-depth: 0
+
+ # pub.dev only trusts publishes from a workflow run that a genuine git
+ # tag push triggered, so a beta's opt-in can't be passed through as a
+ # workflow input -- it has to travel on the tag itself. A beta tag
+ # only proceeds if release-beta-version.yml annotated it with the
+ # [publish-to-pubdev] marker; stable tags always proceed.
+ - name: Validate release tag
+ id: validate-release-tag
+ run: |
+ set -euo pipefail
+
+ TAG="${GITHUB_REF_NAME}"
+
+ if [[ "$TAG" =~ ^ensemble-v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+ echo "should_publish=true" >> "$GITHUB_OUTPUT"
+ elif [[ "$TAG" =~ ^ensemble-v[0-9]+\.[0-9]+\.[0-9]+-beta\.[0-9]+$ ]]; then
+ message="$(git tag -l -n1 --format='%(contents)' "$TAG")"
+ if [[ "$message" == *"[publish-to-pubdev]"* ]]; then
+ echo "should_publish=true" >> "$GITHUB_OUTPUT"
+ else
+ echo "Beta tag not opted in to pub.dev publishing; skipping."
+ echo "should_publish=false" >> "$GITHUB_OUTPUT"
+ fi
+ else
+ echo "::error::Unexpected tag '$TAG'."
+ exit 1
+ fi
+
+ echo "version=${TAG#ensemble-v}" >> "$GITHUB_OUTPUT"
+
+ - name: Setup Flutter SDK
+ if: steps.validate-release-tag.outputs.should_publish == 'true'
+ uses: subosito/flutter-action@v2
+ with:
+ flutter-version: "3.32.5"
+ cache: true
+
+ - name: Setup pub.dev credentials
+ if: steps.validate-release-tag.outputs.should_publish == 'true'
+ uses: dart-lang/setup-dart@v1
+
+ - name: Build pub.dev example from starter
+ if: steps.validate-release-tag.outputs.should_publish == 'true'
+ run: |
+ set -euo pipefail
+
+ example_dir="modules/ensemble/example"
+ rm -rf "$example_dir"
+ mkdir -p "$example_dir"
+
+ cp -R starter/lib "$example_dir/"
+ cp -R starter/ensemble "$example_dir/"
+ cp -R starter/web "$example_dir/"
+ [ -f starter/analysis_options.yaml ] && cp starter/analysis_options.yaml "$example_dir/"
+ [ -f starter/LICENSE ] && cp starter/LICENSE "$example_dir/"
+ [ -f starter/custom_http_server.py ] && cp starter/custom_http_server.py "$example_dir/"
+
+ python3 <<'PY'
+ import re
+ from pathlib import Path
+
+ example = Path("modules/ensemble/example")
+
+ (example / "pubspec.yaml").write_text("""name: ensemble_example
+ description: Example app for the Ensemble runtime package.
+ publish_to: 'none'
+ version: 1.0.0+1
+
+ environment:
+ sdk: ">=3.5.0 <4.0.0"
+ flutter: ">=3.24.0"
+
+ dependencies:
+ flutter:
+ sdk: flutter
+ flutter_localizations:
+ sdk: flutter
+ ensemble:
+ path: ../
+ firebase_core: ^4.2.0
+ get_it: ^8.0.0
+
+ dev_dependencies:
+ flutter_test:
+ sdk: flutter
+ flutter_lints: ^2.0.3
+
+ flutter:
+ uses-material-design: true
+ assets:
+ - ensemble/
+ - ensemble/assets/
+ - ensemble/apps/helloApp/
+ - ensemble/apps/helloApp/screens/
+ - ensemble/apps/helloApp/widgets/
+ - ensemble/apps/helloApp/actions/
+ - ensemble/apps/helloApp/scripts/
+ - ensemble/apps/helloApp/assets/
+ - ensemble/apps/helloApp/translations/
+ - ensemble/apps/helloApp/config/
+ """)
+
+ (example / "README.md").write_text("""# Ensemble Runtime Example
+
+ This is a curated copy of the Ensemble starter app for the `ensemble`
+ package. It keeps the real starter structure and sample YAML
+ definitions, while omitting large generated folders such as `build/`,
+ `node_modules/`, and platform projects.
+
+ ## Run
+
+ From this directory:
+
+ ```sh
+ flutter pub get
+ flutter run -d chrome
+ ```
+
+ The example loads local definitions from `ensemble/apps/helloApp`.
+
+ To generate native platform folders for local experimentation, run:
+
+ ```sh
+ flutter create --platforms=ios,android .
+ ```
+ """)
+
+ main = example / "lib/main.dart"
+ main.write_text(main.read_text().replace(
+ "package:ensemble_starter/generated/ensemble_modules.dart",
+ "package:ensemble_example/generated/ensemble_modules.dart",
+ ).replace(
+ 'debugPrint("Async Error: " + error.toString());',
+ 'debugPrint("Async Error: $error");',
+ ))
+
+ modules = example / "lib/generated/ensemble_modules.dart"
+ modules_text = modules.read_text().replace(
+ "import 'package:firebase_messaging/firebase_messaging.dart';\n",
+ "",
+ ).replace(
+ "import 'package:get_it/get_it.dart';",
+ "import 'package:flutter/foundation.dart';\nimport 'package:get_it/get_it.dart';",
+ ).replace(
+ " print(\n",
+ " debugPrint(\n",
+ )
+ modules.write_text(modules_text)
+
+ integration = example / "lib/integrate_existing_app_with_Ensemble.dart"
+ if integration.exists():
+ integration_text = integration.read_text()
+ integration_text = integration_text.replace(
+ "import 'package:ensemble/util/utils.dart';\n", ""
+ ).replace(
+ "import 'package:flutter_i18n/flutter_i18n.dart';\n", ""
+ ).replace(
+ "import 'package:flutter_localizations/flutter_localizations.dart';\n", ""
+ )
+ (example / "lib/integrate_existing_app_with_ensemble.dart").write_text(integration_text)
+ integration.unlink()
+
+ config = example / "ensemble/ensemble-config.yaml"
+ config_text = config.read_text().replace("from: ensemble", "from: local", 1)
+ for key in ("iOSClientId", "androidClientId", "webClientId", "serverClientId", "clientId"):
+ config_text = re.sub(
+ rf"({key}:\s*).+",
+ rf"\1example-{key}",
+ config_text,
+ )
+ config.write_text(config_text)
+
+ web_index = example / "web/index.html"
+ web_index_text = web_index.read_text()
+ web_index_text = re.sub(
+ r'()',
+ r'\1example-webClientId\2',
+ web_index_text,
+ )
+ web_index_text = re.sub(
+ r"(https://maps\.googleapis\.com/maps/api/js\?key=)[^\"']+",
+ r"\1example-google-maps-api-key",
+ web_index_text,
+ )
+ web_index.write_text(web_index_text)
+ PY
+
+ - name: Publish to pub.dev
+ if: steps.validate-release-tag.outputs.should_publish == 'true'
+ working-directory: modules/ensemble
+ run: flutter pub publish --force
+
+ publish-modules:
+ name: Publish ${{ matrix.package.name }}
+ runs-on: ubuntu-latest
+ needs: publish
+ if: "!contains(github.ref_name, '-beta')"
+ strategy:
+ fail-fast: false
+ matrix:
+ package:
+ - { name: "ensemble_network_info", path: "modules/ensemble_network_info" }
+ - { name: "ensemble_stripe", path: "modules/ensemble_stripe" }
+ - { name: "ensemble_file_manager", path: "modules/file_manager" }
+ - { name: "ensemble_chat", path: "modules/chat" }
+ - { name: "ensemble_auth", path: "modules/auth" }
+ - { name: "ensemble_bluetooth", path: "modules/ensemble_bluetooth" }
+ - { name: "ensemble_wifi", path: "modules/ensemble_wifi" }
+ - { name: "ensemble_face_camera", path: "modules/face_camera" }
+ - { name: "ensemble_connect", path: "modules/connect" }
+ - { name: "ensemble_contacts", path: "modules/contacts" }
+ - { name: "ensemble_location", path: "modules/location" }
+ - { name: "ensemble_camera", path: "modules/camera" }
+ - { name: "ensemble_deeplink", path: "modules/deeplink" }
+ - { name: "ensemble_remote_config", path: "modules/ensemble_remote_config" }
+ - { name: "ensemble_firebase_analytics", path: "modules/firebase_analytics" }
+ - { name: "ensemble_qr_scanner", path: "modules/qr_scanner" }
+ - { name: "ensemble_adobe_analytics", path: "modules/adobe_analytics" }
+ - { name: "ensemble_moengage", path: "modules/moengage" }
+ - { name: "ensemble_bracket", path: "modules/bracket" }
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ matrix.package.name }}-v${{ needs.publish.outputs.version }}
+
+ - name: Setup Flutter SDK
+ uses: subosito/flutter-action@v2
+ with:
+ flutter-version: "3.32.5"
+ cache: true
+
+ - name: Setup pub.dev credentials
+ uses: dart-lang/setup-dart@v1
+
+ - name: Prepare package for pub.dev
+ env:
+ RELEASE_VERSION: ${{ needs.publish.outputs.version }}
+ PACKAGE_PATH: ${{ matrix.package.path }}
+ run: |
+ set -euo pipefail
+
+ rm -f "${PACKAGE_PATH}/pubspec_overrides.yaml" "${PACKAGE_PATH}/pubspec.lock"
+
+ python3 <<'PY'
+ import os
+ import re
+ from pathlib import Path
+
+ version = os.environ["RELEASE_VERSION"]
+ path = os.environ["PACKAGE_PATH"]
+ pubspec = Path(path) / "pubspec.yaml"
+ text = pubspec.read_text()
+
+ # Replace local/git dependencies on any versioned ensemble module with the release version
+ pattern = r"(\n ensemble[_a-zA-Z0-9]*:)\s*\n\s+git:\s*\n\s+url:\s*https://github\.com/EnsembleUI/ensemble\.git\s*\n\s+ref:[^\n]+\n\s+path:[^\n]+"
+ text = re.sub(pattern, rf"\1 ^{version}", text)
+
+ pubspec.write_text(text)
+ PY
+
+ - name: Resolve dependencies
+ working-directory: ${{ matrix.package.path }}
+ run: |
+ set -euo pipefail
+
+ for attempt in {1..60}; do
+ if flutter pub get; then
+ exit 0
+ fi
+
+ echo "Waiting for dependencies of ${{ matrix.package.name }} to resolve from pub.dev..."
+ sleep 10
+ done
+
+ flutter pub get
+
+ - name: Publish ${{ matrix.package.name }} to pub.dev
+ working-directory: ${{ matrix.package.path }}
+ run: flutter pub publish --force
diff --git a/.github/workflows/publish-standalone-pubdev.yml b/.github/workflows/publish-standalone-pubdev.yml
index 7257229d8..78cf2917a 100644
--- a/.github/workflows/publish-standalone-pubdev.yml
+++ b/.github/workflows/publish-standalone-pubdev.yml
@@ -1,138 +1,138 @@
-# Publishes a standalone package to pub.dev when its version tag is pushed.
-# Tags are created by release-standalone-package.yml:
-# -vX.Y.Z (e.g. ensemble_date-v1.6.3)
-
-name: Publish Standalone Package to pub.dev
-
-on:
- push:
- tags:
- - "ensemble_date-v*"
- - "parsejs_null_safety-v*"
- - "ensemble_ts_interpreter-v*"
- - "ensemble_device_preview-v*"
- - "ensemble_test_runner-v*"
- - "ensemble_icons-v*"
- - "ensemble_otp-v*"
- - "ensemble_dropdown-v*"
- - "ensemble_table_calendar-v*"
- - "ensemble_app_badger-v*"
- - "ensemble_walletconnect-v*"
- - "flutter_share_receiver-v*"
- - "js_widget-v*"
-
-concurrency:
- group: pubdev-standalone-${{ github.ref_name }}
- cancel-in-progress: false
-
-permissions:
- contents: read
- id-token: write
-
-jobs:
- publish:
- name: Publish ${{ github.ref_name }}
- runs-on: ubuntu-latest
- if: "!contains(github.ref_name, '-beta')"
-
- steps:
- - name: Resolve package from tag
- id: resolve
- run: |
- set -euo pipefail
-
- tag="${{ github.ref_name }}"
-
- if [[ ! "$tag" =~ ^([a-z0-9_]+)-v([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then
- echo "::error::Expected a stable package tag like ensemble_date-v1.6.3 (got: $tag)"
- exit 1
- fi
-
- package="${BASH_REMATCH[1]}"
- version="${BASH_REMATCH[2]}"
-
- case "$package" in
- ensemble_date) path="packages/ensemble_date" ;;
- parsejs_null_safety) path="packages/parsejs_null_safety" ;;
- ensemble_ts_interpreter) path="packages/ensemble_ts_interpreter" ;;
- ensemble_device_preview) path="packages/ensemble_device_preview" ;;
- ensemble_test_runner) path="tools/ensemble_test_runner" ;;
- ensemble_icons) path="packages/ensemble_icons" ;;
- ensemble_otp) path="packages/ensemble_otp" ;;
- ensemble_dropdown) path="packages/ensemble_dropdown" ;;
- ensemble_table_calendar) path="packages/ensemble_table_calendar" ;;
- ensemble_app_badger) path="packages/ensemble_app_badger" ;;
- ensemble_walletconnect) path="packages/ensemble_walletconnect" ;;
- flutter_share_receiver) path="packages/flutter_share_receiver" ;;
- js_widget) path="packages/js_widget" ;;
- *)
- echo "::error::Tag $tag is not in the standalone publish allowlist."
- exit 1
- ;;
- esac
-
- echo "package=$package" >> "$GITHUB_OUTPUT"
- echo "version=$version" >> "$GITHUB_OUTPUT"
- echo "path=$path" >> "$GITHUB_OUTPUT"
- echo "Publishing $package@$version from $path"
-
- - name: Checkout
- uses: actions/checkout@v4
- with:
- ref: ${{ github.ref_name }}
-
- - name: Setup Flutter SDK
- uses: subosito/flutter-action@v2
- with:
- flutter-version: "3.32.5"
- cache: true
-
- - name: Setup pub.dev credentials
- uses: dart-lang/setup-dart@v1
-
- - name: Validate pubspec version matches tag
- working-directory: ${{ steps.resolve.outputs.path }}
- run: |
- set -euo pipefail
-
- pubspec_version="$(python3 - <<'PY'
- from pathlib import Path
- import re
- text = Path("pubspec.yaml").read_text()
- match = re.search(r"^version:\s*([^\s#+]+)", text, re.M)
- if not match:
- raise SystemExit("Could not read version from pubspec.yaml")
- print(match.group(1))
- PY
- )"
-
- if [ "$pubspec_version" != "${{ steps.resolve.outputs.version }}" ]; then
- echo "::error::pubspec version ($pubspec_version) does not match tag version (${{ steps.resolve.outputs.version }})"
- exit 1
- fi
-
- - name: Prepare package for pub.dev
- working-directory: ${{ steps.resolve.outputs.path }}
- run: |
- set -euo pipefail
- rm -f pubspec_overrides.yaml pubspec.lock
-
- - name: Resolve dependencies
- working-directory: ${{ steps.resolve.outputs.path }}
- run: |
- set -euo pipefail
-
- for attempt in {1..60}; do
- if flutter pub get; then
- exit 0
- fi
-
- echo "Waiting for dependencies of ${{ steps.resolve.outputs.package }} to resolve from pub.dev..."
- sleep 10
- done
-
- flutter pub get
-
- - name: Publish ${{ steps.resolve.outputs.package }} to pub.dev
- working-directory: ${{ steps.resolve.outputs.path }}
- run: flutter pub publish --force
+# Publishes a standalone package to pub.dev when its version tag is pushed.
+# Tags are created by release-standalone-package.yml:
+# -vX.Y.Z (e.g. ensemble_date-v1.6.3)
+
+name: Publish Standalone Package to pub.dev
+
+on:
+ push:
+ tags:
+ - "ensemble_date-v*"
+ - "parsejs_null_safety-v*"
+ - "ensemble_ts_interpreter-v*"
+ - "ensemble_device_preview-v*"
+ - "ensemble_test_runner-v*"
+ - "ensemble_icons-v*"
+ - "ensemble_otp-v*"
+ - "ensemble_dropdown-v*"
+ - "ensemble_table_calendar-v*"
+ - "ensemble_app_badger-v*"
+ - "ensemble_walletconnect-v*"
+ - "flutter_share_receiver-v*"
+ - "js_widget-v*"
+
+concurrency:
+ group: pubdev-standalone-${{ github.ref_name }}
+ cancel-in-progress: false
+
+permissions:
+ contents: read
+ id-token: write
+
+jobs:
+ publish:
+ name: Publish ${{ github.ref_name }}
+ runs-on: ubuntu-latest
+ if: "!contains(github.ref_name, '-beta')"
+
+ steps:
+ - name: Resolve package from tag
+ id: resolve
+ run: |
+ set -euo pipefail
+
+ tag="${{ github.ref_name }}"
+
+ if [[ ! "$tag" =~ ^([a-z0-9_]+)-v([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then
+ echo "::error::Expected a stable package tag like ensemble_date-v1.6.3 (got: $tag)"
+ exit 1
+ fi
+
+ package="${BASH_REMATCH[1]}"
+ version="${BASH_REMATCH[2]}"
+
+ case "$package" in
+ ensemble_date) path="packages/ensemble_date" ;;
+ parsejs_null_safety) path="packages/parsejs_null_safety" ;;
+ ensemble_ts_interpreter) path="packages/ensemble_ts_interpreter" ;;
+ ensemble_device_preview) path="packages/ensemble_device_preview" ;;
+ ensemble_test_runner) path="tools/ensemble_test_runner" ;;
+ ensemble_icons) path="packages/ensemble_icons" ;;
+ ensemble_otp) path="packages/ensemble_otp" ;;
+ ensemble_dropdown) path="packages/ensemble_dropdown" ;;
+ ensemble_table_calendar) path="packages/ensemble_table_calendar" ;;
+ ensemble_app_badger) path="packages/ensemble_app_badger" ;;
+ ensemble_walletconnect) path="packages/ensemble_walletconnect" ;;
+ flutter_share_receiver) path="packages/flutter_share_receiver" ;;
+ js_widget) path="packages/js_widget" ;;
+ *)
+ echo "::error::Tag $tag is not in the standalone publish allowlist."
+ exit 1
+ ;;
+ esac
+
+ echo "package=$package" >> "$GITHUB_OUTPUT"
+ echo "version=$version" >> "$GITHUB_OUTPUT"
+ echo "path=$path" >> "$GITHUB_OUTPUT"
+ echo "Publishing $package@$version from $path"
+
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.ref_name }}
+
+ - name: Setup Flutter SDK
+ uses: subosito/flutter-action@v2
+ with:
+ flutter-version: "3.32.5"
+ cache: true
+
+ - name: Setup pub.dev credentials
+ uses: dart-lang/setup-dart@v1
+
+ - name: Validate pubspec version matches tag
+ working-directory: ${{ steps.resolve.outputs.path }}
+ run: |
+ set -euo pipefail
+
+ pubspec_version="$(python3 - <<'PY'
+ from pathlib import Path
+ import re
+ text = Path("pubspec.yaml").read_text()
+ match = re.search(r"^version:\s*([^\s#+]+)", text, re.M)
+ if not match:
+ raise SystemExit("Could not read version from pubspec.yaml")
+ print(match.group(1))
+ PY
+ )"
+
+ if [ "$pubspec_version" != "${{ steps.resolve.outputs.version }}" ]; then
+ echo "::error::pubspec version ($pubspec_version) does not match tag version (${{ steps.resolve.outputs.version }})"
+ exit 1
+ fi
+
+ - name: Prepare package for pub.dev
+ working-directory: ${{ steps.resolve.outputs.path }}
+ run: |
+ set -euo pipefail
+ rm -f pubspec_overrides.yaml pubspec.lock
+
+ - name: Resolve dependencies
+ working-directory: ${{ steps.resolve.outputs.path }}
+ run: |
+ set -euo pipefail
+
+ for attempt in {1..60}; do
+ if flutter pub get; then
+ exit 0
+ fi
+
+ echo "Waiting for dependencies of ${{ steps.resolve.outputs.package }} to resolve from pub.dev..."
+ sleep 10
+ done
+
+ flutter pub get
+
+ - name: Publish ${{ steps.resolve.outputs.package }} to pub.dev
+ working-directory: ${{ steps.resolve.outputs.path }}
+ run: flutter pub publish --force
diff --git a/.github/workflows/release-beta-version.yml b/.github/workflows/release-beta-version.yml
index 17431630e..479a9a0e5 100644
--- a/.github/workflows/release-beta-version.yml
+++ b/.github/workflows/release-beta-version.yml
@@ -1,135 +1,135 @@
-# Automates Releasing a Beta Version on a Feature Branch
-#
-# Creates a version commit and tag WITHOUT modifying the branch.
-# Uses detached HEAD so the branch stays clean - only the tag is pushed.
-#
-# Flow:
-# 1. Checkout branch, detach HEAD
-# 2. melos version creates commit + tags on detached HEAD
-# 3. Repair and re-tag (.github/scripts/repair_and_retag.sh)
-# 4. If publish_to_pubdev, mark the tag with [publish-to-pubdev] so
-# publish-ensemble-pubdev.yml's native tag-push trigger knows to publish
-# 5. Push only the ensemble-v tag (branch unchanged)
-
-name: Release Beta Version
-
-on:
- workflow_dispatch:
- inputs:
- branch:
- description: "Branch to release from (cannot be main/master)"
- required: true
- type: string
- default: "feature/my-branch"
- version:
- description: "Beta version (must be X.Y.Z-beta.N format)"
- required: true
- type: string
- default: "1.2.47-beta.1"
- publish_to_pubdev:
- description: "Also publish this beta to pub.dev as a prerelease"
- required: false
- type: boolean
- default: false
-
-concurrency:
- group: melos-beta-release-${{ github.repository }}-${{ inputs.branch }}
- cancel-in-progress: false
-
-permissions:
- contents: write
-
-jobs:
- version-and-push:
- runs-on: ubuntu-latest
- steps:
- - name: Validate inputs
- run: |
- set -euo pipefail
-
- branch="${{ inputs.branch }}"
- version="${{ inputs.version }}"
-
- # Block main/master branches
- if [[ "$branch" == "main" || "$branch" == "master" ]]; then
- echo "::error::Cannot release beta to main/master. Use 'Release Ensemble Version' workflow instead."
- exit 1
- fi
-
- # Validate beta version format
- if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+-beta\.[0-9]+$ ]]; then
- echo "::error::Version must be in format X.Y.Z-beta.N (e.g., 1.2.47-beta.1)"
- exit 1
- fi
-
- echo "Branch: $branch"
- echo "Version: $version"
-
- - name: Check branch exists
- run: |
- set -euo pipefail
-
- branch="${{ inputs.branch }}"
-
- if ! git ls-remote --heads "https://github.com/${{ github.repository }}.git" "$branch" | grep -q "$branch"; then
- echo "::error::Branch '$branch' does not exist on remote."
- exit 1
- fi
-
- echo "Branch '$branch' exists."
-
- - name: Checkout
- uses: actions/checkout@v4
- with:
- ref: ${{ inputs.branch }}
- fetch-depth: 0
- token: ${{ secrets.RELEASE_TOKEN }}
-
- # inputs.branch may lack these files or have a stale copy; pull both
- # from wherever this workflow file itself came from (github.sha).
- - name: Use release scripts from this workflow's own ref
- run: |
- git fetch origin ${{ github.sha }} --depth=1
- git checkout ${{ github.sha }} -- .github/scripts .github/workflows/publish-ensemble-pubdev.yml
-
- - name: Configure Git
- run: |
- git config user.name "github-actions[bot]"
- git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
-
- - name: Setup Flutter SDK
- uses: subosito/flutter-action@v2
- with:
- flutter-version: "3.32.5"
- cache: true
-
- - name: Install Melos
- run: dart pub global activate melos
-
- - name: Bootstrap
- run: melos bootstrap
-
- - name: Version packages on detached HEAD
- run: |
- # Detach HEAD so branch ref won't move when melos commits
- # Not strictly necessary since we only push the tag, but keeps intent clear
- git checkout --detach HEAD
-
- melos version ensemble "${{ inputs.version }}" --yes
-
- - name: Repair melos dependency-constraint rewrite
- run: .github/scripts/repair_and_retag.sh
-
- # pub.dev only trusts a publish triggered by a genuine tag push, so the
- # opt-in can't be passed as a workflow input to that workflow -- it has
- # to travel on the tag itself. publish-ensemble-pubdev.yml checks for
- # this marker before publishing a beta.
- - name: Mark tag for pub.dev publishing
- if: inputs.publish_to_pubdev
- run: git tag -f -a "ensemble-v${{ inputs.version }}" -m "[publish-to-pubdev]" HEAD
-
- - name: Push tag only
- run: |
- # Push only the tag - branch remains unchanged
- # 'tag' keyword ensures we push a tag, not a branch
- git push origin tag ensemble-v${{ inputs.version }}
+# Automates Releasing a Beta Version on a Feature Branch
+#
+# Creates a version commit and tag WITHOUT modifying the branch.
+# Uses detached HEAD so the branch stays clean - only the tag is pushed.
+#
+# Flow:
+# 1. Checkout branch, detach HEAD
+# 2. melos version creates commit + tags on detached HEAD
+# 3. Repair and re-tag (.github/scripts/repair_and_retag.sh)
+# 4. If publish_to_pubdev, mark the tag with [publish-to-pubdev] so
+# publish-ensemble-pubdev.yml's native tag-push trigger knows to publish
+# 5. Push only the ensemble-v tag (branch unchanged)
+
+name: Release Beta Version
+
+on:
+ workflow_dispatch:
+ inputs:
+ branch:
+ description: "Branch to release from (cannot be main/master)"
+ required: true
+ type: string
+ default: "feature/my-branch"
+ version:
+ description: "Beta version (must be X.Y.Z-beta.N format)"
+ required: true
+ type: string
+ default: "1.2.47-beta.1"
+ publish_to_pubdev:
+ description: "Also publish this beta to pub.dev as a prerelease"
+ required: false
+ type: boolean
+ default: false
+
+concurrency:
+ group: melos-beta-release-${{ github.repository }}-${{ inputs.branch }}
+ cancel-in-progress: false
+
+permissions:
+ contents: write
+
+jobs:
+ version-and-push:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Validate inputs
+ run: |
+ set -euo pipefail
+
+ branch="${{ inputs.branch }}"
+ version="${{ inputs.version }}"
+
+ # Block main/master branches
+ if [[ "$branch" == "main" || "$branch" == "master" ]]; then
+ echo "::error::Cannot release beta to main/master. Use 'Release Ensemble Version' workflow instead."
+ exit 1
+ fi
+
+ # Validate beta version format
+ if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+-beta\.[0-9]+$ ]]; then
+ echo "::error::Version must be in format X.Y.Z-beta.N (e.g., 1.2.47-beta.1)"
+ exit 1
+ fi
+
+ echo "Branch: $branch"
+ echo "Version: $version"
+
+ - name: Check branch exists
+ run: |
+ set -euo pipefail
+
+ branch="${{ inputs.branch }}"
+
+ if ! git ls-remote --heads "https://github.com/${{ github.repository }}.git" "$branch" | grep -q "$branch"; then
+ echo "::error::Branch '$branch' does not exist on remote."
+ exit 1
+ fi
+
+ echo "Branch '$branch' exists."
+
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.branch }}
+ fetch-depth: 0
+ token: ${{ secrets.RELEASE_TOKEN }}
+
+ # inputs.branch may lack these files or have a stale copy; pull both
+ # from wherever this workflow file itself came from (github.sha).
+ - name: Use release scripts from this workflow's own ref
+ run: |
+ git fetch origin ${{ github.sha }} --depth=1
+ git checkout ${{ github.sha }} -- .github/scripts .github/workflows/publish-ensemble-pubdev.yml
+
+ - name: Configure Git
+ run: |
+ git config user.name "github-actions[bot]"
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+
+ - name: Setup Flutter SDK
+ uses: subosito/flutter-action@v2
+ with:
+ flutter-version: "3.32.5"
+ cache: true
+
+ - name: Install Melos
+ run: dart pub global activate melos
+
+ - name: Bootstrap
+ run: melos bootstrap
+
+ - name: Version packages on detached HEAD
+ run: |
+ # Detach HEAD so branch ref won't move when melos commits
+ # Not strictly necessary since we only push the tag, but keeps intent clear
+ git checkout --detach HEAD
+
+ melos version ensemble "${{ inputs.version }}" --yes
+
+ - name: Repair melos dependency-constraint rewrite
+ run: .github/scripts/repair_and_retag.sh
+
+ # pub.dev only trusts a publish triggered by a genuine tag push, so the
+ # opt-in can't be passed as a workflow input to that workflow -- it has
+ # to travel on the tag itself. publish-ensemble-pubdev.yml checks for
+ # this marker before publishing a beta.
+ - name: Mark tag for pub.dev publishing
+ if: inputs.publish_to_pubdev
+ run: git tag -f -a "ensemble-v${{ inputs.version }}" -m "[publish-to-pubdev]" HEAD
+
+ - name: Push tag only
+ run: |
+ # Push only the tag - branch remains unchanged
+ # 'tag' keyword ensures we push a tag, not a branch
+ git push origin tag ensemble-v${{ inputs.version }}
diff --git a/.github/workflows/release-melos-version.yml b/.github/workflows/release-melos-version.yml
index a8888252c..aaae1a107 100644
--- a/.github/workflows/release-melos-version.yml
+++ b/.github/workflows/release-melos-version.yml
@@ -1,152 +1,152 @@
-# Automates Releasing a New Version
-# melos version -> repair and re-tag (.github/scripts/repair_and_retag.sh)
-# -> push main + tags
-
-name: Release Ensemble Version
-
-on:
- workflow_dispatch:
- inputs:
- version:
- description: Optional new semver (e.g. 1.2.39). Defaults to latest release + patch bump.
- required: false
- type: string
-
-concurrency:
- group: melos-release-${{ github.repository }}
- cancel-in-progress: false
-
-permissions:
- contents: write
-
-jobs:
- version-and-push:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- with:
- ref: main
- fetch-depth: 0
- token: ${{ secrets.RELEASE_TOKEN }}
-
- # Only overlay files from github.sha if it's ahead of main -- otherwise
- # a stale dispatch ref would silently revert main's own release files.
- - name: Use release scripts from this workflow's own ref
- run: |
- set -euo pipefail
- # Full history, not --depth=1: merge-base --is-ancestor can't
- # correctly resolve ancestry across a shallow fetch boundary.
- git fetch origin ${{ github.sha }}
- if git merge-base --is-ancestor HEAD ${{ github.sha }}; then
- git checkout ${{ github.sha }} -- .github/scripts .github/workflows/publish-ensemble-pubdev.yml
- else
- echo "::warning::Dispatched ref is not ahead of main; keeping main's own release files."
- fi
-
- - name: Configure Git
- run: |
- git config user.name "github-actions[bot]"
- git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
-
- - name: Setup Flutter SDK
- uses: subosito/flutter-action@v2
- with:
- flutter-version: "3.32.5"
- cache: true
-
- - name: Install Melos
- run: dart pub global activate melos
-
- - name: Bootstrap
- run: melos bootstrap
-
- - name: Resolve version
- id: resolve-version
- env:
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: |
- set -euo pipefail
-
- version="${{ inputs.version }}"
-
- if [ -z "$version" ]; then
- latest_tag="$(gh release list \
- --repo "$GITHUB_REPOSITORY" \
- --limit 100 \
- --json tagName,isDraft \
- --jq '[.[] | select(.isDraft | not) | .tagName | select(test("^ensemble-v[0-9]+\\.[0-9]+\\.[0-9]+$"))][0] // ""')"
-
- if [ -z "$latest_tag" ]; then
- latest_tag="$(git tag --list 'ensemble-v[0-9]*' --sort=-v:refname | sed -n '1p')"
- fi
-
- if [[ ! "$latest_tag" =~ ^ensemble-v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
- echo "::error::Could not find a latest ensemble release/tag to bump."
- exit 1
- fi
-
- version="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.$((BASH_REMATCH[3] + 1))"
- fi
-
- if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
- echo "::error::Version must be a stable semver value like 1.2.39. For beta releases, use 'Release Beta Version' workflow."
- exit 1
- fi
-
- echo "version=$version" >> "$GITHUB_OUTPUT"
- echo "Resolved ensemble version: $version"
-
- - name: Version packages
- run: |
- melos version \
- --scope=ensemble \
- --scope=ensemble_network_info \
- --scope=ensemble_stripe \
- --scope=ensemble_file_manager \
- --scope=ensemble_chat \
- --scope=ensemble_auth \
- --scope=ensemble_bluetooth \
- --scope=ensemble_wifi \
- --scope=ensemble_face_camera \
- --scope=ensemble_connect \
- --scope=ensemble_contacts \
- --scope=ensemble_location \
- --scope=ensemble_camera \
- --scope=ensemble_deeplink \
- --scope=ensemble_remote_config \
- --scope=ensemble_firebase_analytics \
- --scope=ensemble_qr_scanner \
- --scope=ensemble_adobe_analytics \
- --scope=ensemble_moengage \
- --scope=ensemble_bracket \
- --manual-version ensemble:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_network_info:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_stripe:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_file_manager:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_chat:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_auth:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_bluetooth:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_wifi:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_face_camera:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_connect:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_contacts:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_location:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_camera:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_deeplink:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_remote_config:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_firebase_analytics:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_qr_scanner:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_adobe_analytics:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_moengage:${{ steps.resolve-version.outputs.version }} \
- --manual-version ensemble_bracket:${{ steps.resolve-version.outputs.version }} \
- --yes
-
- - name: Repair melos dependency-constraint rewrite
- run: .github/scripts/repair_and_retag.sh
-
- - name: Push branch and tags
- run: |
- git push origin main
- git push origin ensemble-v${{ steps.resolve-version.outputs.version }}
- git push origin --tags
+# Automates Releasing a New Version
+# melos version -> repair and re-tag (.github/scripts/repair_and_retag.sh)
+# -> push main + tags
+
+name: Release Ensemble Version
+
+on:
+ workflow_dispatch:
+ inputs:
+ version:
+ description: Optional new semver (e.g. 1.2.39). Defaults to latest release + patch bump.
+ required: false
+ type: string
+
+concurrency:
+ group: melos-release-${{ github.repository }}
+ cancel-in-progress: false
+
+permissions:
+ contents: write
+
+jobs:
+ version-and-push:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ ref: main
+ fetch-depth: 0
+ token: ${{ secrets.RELEASE_TOKEN }}
+
+ # Only overlay files from github.sha if it's ahead of main -- otherwise
+ # a stale dispatch ref would silently revert main's own release files.
+ - name: Use release scripts from this workflow's own ref
+ run: |
+ set -euo pipefail
+ # Full history, not --depth=1: merge-base --is-ancestor can't
+ # correctly resolve ancestry across a shallow fetch boundary.
+ git fetch origin ${{ github.sha }}
+ if git merge-base --is-ancestor HEAD ${{ github.sha }}; then
+ git checkout ${{ github.sha }} -- .github/scripts .github/workflows/publish-ensemble-pubdev.yml
+ else
+ echo "::warning::Dispatched ref is not ahead of main; keeping main's own release files."
+ fi
+
+ - name: Configure Git
+ run: |
+ git config user.name "github-actions[bot]"
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+
+ - name: Setup Flutter SDK
+ uses: subosito/flutter-action@v2
+ with:
+ flutter-version: "3.32.5"
+ cache: true
+
+ - name: Install Melos
+ run: dart pub global activate melos
+
+ - name: Bootstrap
+ run: melos bootstrap
+
+ - name: Resolve version
+ id: resolve-version
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ set -euo pipefail
+
+ version="${{ inputs.version }}"
+
+ if [ -z "$version" ]; then
+ latest_tag="$(gh release list \
+ --repo "$GITHUB_REPOSITORY" \
+ --limit 100 \
+ --json tagName,isDraft \
+ --jq '[.[] | select(.isDraft | not) | .tagName | select(test("^ensemble-v[0-9]+\\.[0-9]+\\.[0-9]+$"))][0] // ""')"
+
+ if [ -z "$latest_tag" ]; then
+ latest_tag="$(git tag --list 'ensemble-v[0-9]*' --sort=-v:refname | sed -n '1p')"
+ fi
+
+ if [[ ! "$latest_tag" =~ ^ensemble-v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
+ echo "::error::Could not find a latest ensemble release/tag to bump."
+ exit 1
+ fi
+
+ version="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.$((BASH_REMATCH[3] + 1))"
+ fi
+
+ if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+ echo "::error::Version must be a stable semver value like 1.2.39. For beta releases, use 'Release Beta Version' workflow."
+ exit 1
+ fi
+
+ echo "version=$version" >> "$GITHUB_OUTPUT"
+ echo "Resolved ensemble version: $version"
+
+ - name: Version packages
+ run: |
+ melos version \
+ --scope=ensemble \
+ --scope=ensemble_network_info \
+ --scope=ensemble_stripe \
+ --scope=ensemble_file_manager \
+ --scope=ensemble_chat \
+ --scope=ensemble_auth \
+ --scope=ensemble_bluetooth \
+ --scope=ensemble_wifi \
+ --scope=ensemble_face_camera \
+ --scope=ensemble_connect \
+ --scope=ensemble_contacts \
+ --scope=ensemble_location \
+ --scope=ensemble_camera \
+ --scope=ensemble_deeplink \
+ --scope=ensemble_remote_config \
+ --scope=ensemble_firebase_analytics \
+ --scope=ensemble_qr_scanner \
+ --scope=ensemble_adobe_analytics \
+ --scope=ensemble_moengage \
+ --scope=ensemble_bracket \
+ --manual-version ensemble:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_network_info:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_stripe:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_file_manager:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_chat:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_auth:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_bluetooth:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_wifi:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_face_camera:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_connect:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_contacts:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_location:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_camera:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_deeplink:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_remote_config:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_firebase_analytics:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_qr_scanner:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_adobe_analytics:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_moengage:${{ steps.resolve-version.outputs.version }} \
+ --manual-version ensemble_bracket:${{ steps.resolve-version.outputs.version }} \
+ --yes
+
+ - name: Repair melos dependency-constraint rewrite
+ run: .github/scripts/repair_and_retag.sh
+
+ - name: Push branch and tags
+ run: |
+ git push origin main
+ git push origin ensemble-v${{ steps.resolve-version.outputs.version }}
+ git push origin --tags
diff --git a/.github/workflows/release-standalone-package.yml b/.github/workflows/release-standalone-package.yml
index b70c71440..667b25429 100644
--- a/.github/workflows/release-standalone-package.yml
+++ b/.github/workflows/release-standalone-package.yml
@@ -1,152 +1,152 @@
-# Versions and tags a single standalone package (packages/* or tools/*).
-# Publishing is handled by publish-standalone-pubdev.yml on the resulting tag.
-#
-# melos version --scope= --manual-version : --yes
-# git push origin main && git push origin -v
-
-name: Release Standalone Package
-
-on:
- workflow_dispatch:
- inputs:
- package:
- description: Package to version and tag
- required: true
- type: choice
- options:
- - ensemble_date
- - parsejs_null_safety
- - ensemble_ts_interpreter
- - ensemble_device_preview
- - ensemble_test_runner
- - ensemble_icons
- - ensemble_otp
- - ensemble_dropdown
- - ensemble_table_calendar
- - ensemble_app_badger
- - ensemble_walletconnect
- - flutter_share_receiver
- - js_widget
- bump:
- description: Semver bump to apply to the current package version
- required: true
- type: choice
- default: patch
- options:
- - patch
- - minor
- - major
-
-concurrency:
- group: standalone-release-${{ github.repository }}-${{ inputs.package }}
- cancel-in-progress: false
-
-permissions:
- contents: write
-
-jobs:
- version-and-push:
- name: Version ${{ inputs.package }}
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- with:
- ref: main
- fetch-depth: 0
- token: ${{ secrets.RELEASE_TOKEN }}
-
- - name: Configure Git
- run: |
- git config user.name "github-actions[bot]"
- git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
-
- - name: Setup Flutter SDK
- uses: subosito/flutter-action@v2
- with:
- flutter-version: "3.32.5"
- cache: true
-
- - name: Install Melos
- run: dart pub global activate melos
-
- - name: Bootstrap
- run: melos bootstrap
-
- - name: Resolve package path and version
- id: resolve
- env:
- PACKAGE: ${{ inputs.package }}
- BUMP: ${{ inputs.bump }}
- run: |
- set -euo pipefail
-
- case "$PACKAGE" in
- ensemble_date) path="packages/ensemble_date" ;;
- parsejs_null_safety) path="packages/parsejs_null_safety" ;;
- ensemble_ts_interpreter) path="packages/ensemble_ts_interpreter" ;;
- ensemble_device_preview) path="packages/ensemble_device_preview" ;;
- ensemble_test_runner) path="tools/ensemble_test_runner" ;;
- ensemble_icons) path="packages/ensemble_icons" ;;
- ensemble_otp) path="packages/ensemble_otp" ;;
- ensemble_dropdown) path="packages/ensemble_dropdown" ;;
- ensemble_table_calendar) path="packages/ensemble_table_calendar" ;;
- ensemble_app_badger) path="packages/ensemble_app_badger" ;;
- ensemble_walletconnect) path="packages/ensemble_walletconnect" ;;
- flutter_share_receiver) path="packages/flutter_share_receiver" ;;
- js_widget) path="packages/js_widget" ;;
- *)
- echo "::error::Unknown package: $PACKAGE"
- exit 1
- ;;
- esac
-
- current="$(python3 - </dev/null; then
- echo "::error::Tag ${tag} already exists."
- exit 1
- fi
-
- echo "package=$PACKAGE" >> "$GITHUB_OUTPUT"
- echo "path=$path" >> "$GITHUB_OUTPUT"
- echo "current=$current" >> "$GITHUB_OUTPUT"
- echo "version=$version" >> "$GITHUB_OUTPUT"
- echo "tag=$tag" >> "$GITHUB_OUTPUT"
- echo "Resolved $PACKAGE: $current -> $version (tag $tag)"
-
- - name: Version package
- run: |
- melos version \
- --scope=${{ steps.resolve.outputs.package }} \
- --manual-version ${{ steps.resolve.outputs.package }}:${{ steps.resolve.outputs.version }} \
- --no-dependent-versions \
- --yes
-
- - name: Push branch and tag
- run: |
- set -euo pipefail
-
- git push origin main
- git push origin "${{ steps.resolve.outputs.tag }}"
+# Versions and tags a single standalone package (packages/* or tools/*).
+# Publishing is handled by publish-standalone-pubdev.yml on the resulting tag.
+#
+# melos version --scope= --manual-version : --yes
+# git push origin main && git push origin -v
+
+name: Release Standalone Package
+
+on:
+ workflow_dispatch:
+ inputs:
+ package:
+ description: Package to version and tag
+ required: true
+ type: choice
+ options:
+ - ensemble_date
+ - parsejs_null_safety
+ - ensemble_ts_interpreter
+ - ensemble_device_preview
+ - ensemble_test_runner
+ - ensemble_icons
+ - ensemble_otp
+ - ensemble_dropdown
+ - ensemble_table_calendar
+ - ensemble_app_badger
+ - ensemble_walletconnect
+ - flutter_share_receiver
+ - js_widget
+ bump:
+ description: Semver bump to apply to the current package version
+ required: true
+ type: choice
+ default: patch
+ options:
+ - patch
+ - minor
+ - major
+
+concurrency:
+ group: standalone-release-${{ github.repository }}-${{ inputs.package }}
+ cancel-in-progress: false
+
+permissions:
+ contents: write
+
+jobs:
+ version-and-push:
+ name: Version ${{ inputs.package }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ ref: main
+ fetch-depth: 0
+ token: ${{ secrets.RELEASE_TOKEN }}
+
+ - name: Configure Git
+ run: |
+ git config user.name "github-actions[bot]"
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+
+ - name: Setup Flutter SDK
+ uses: subosito/flutter-action@v2
+ with:
+ flutter-version: "3.32.5"
+ cache: true
+
+ - name: Install Melos
+ run: dart pub global activate melos
+
+ - name: Bootstrap
+ run: melos bootstrap
+
+ - name: Resolve package path and version
+ id: resolve
+ env:
+ PACKAGE: ${{ inputs.package }}
+ BUMP: ${{ inputs.bump }}
+ run: |
+ set -euo pipefail
+
+ case "$PACKAGE" in
+ ensemble_date) path="packages/ensemble_date" ;;
+ parsejs_null_safety) path="packages/parsejs_null_safety" ;;
+ ensemble_ts_interpreter) path="packages/ensemble_ts_interpreter" ;;
+ ensemble_device_preview) path="packages/ensemble_device_preview" ;;
+ ensemble_test_runner) path="tools/ensemble_test_runner" ;;
+ ensemble_icons) path="packages/ensemble_icons" ;;
+ ensemble_otp) path="packages/ensemble_otp" ;;
+ ensemble_dropdown) path="packages/ensemble_dropdown" ;;
+ ensemble_table_calendar) path="packages/ensemble_table_calendar" ;;
+ ensemble_app_badger) path="packages/ensemble_app_badger" ;;
+ ensemble_walletconnect) path="packages/ensemble_walletconnect" ;;
+ flutter_share_receiver) path="packages/flutter_share_receiver" ;;
+ js_widget) path="packages/js_widget" ;;
+ *)
+ echo "::error::Unknown package: $PACKAGE"
+ exit 1
+ ;;
+ esac
+
+ current="$(python3 - </dev/null; then
+ echo "::error::Tag ${tag} already exists."
+ exit 1
+ fi
+
+ echo "package=$PACKAGE" >> "$GITHUB_OUTPUT"
+ echo "path=$path" >> "$GITHUB_OUTPUT"
+ echo "current=$current" >> "$GITHUB_OUTPUT"
+ echo "version=$version" >> "$GITHUB_OUTPUT"
+ echo "tag=$tag" >> "$GITHUB_OUTPUT"
+ echo "Resolved $PACKAGE: $current -> $version (tag $tag)"
+
+ - name: Version package
+ run: |
+ melos version \
+ --scope=${{ steps.resolve.outputs.package }} \
+ --manual-version ${{ steps.resolve.outputs.package }}:${{ steps.resolve.outputs.version }} \
+ --no-dependent-versions \
+ --yes
+
+ - name: Push branch and tag
+ run: |
+ set -euo pipefail
+
+ git push origin main
+ git push origin "${{ steps.resolve.outputs.tag }}"
diff --git a/.github/workflows/starter-commands.yml b/.github/workflows/starter-commands.yml
index e1dd7b058..fe36ab7db 100644
--- a/.github/workflows/starter-commands.yml
+++ b/.github/workflows/starter-commands.yml
@@ -1,49 +1,49 @@
-name: Test Commands in Starter
-
-on:
- pull_request:
- branches:
- - main
-
-jobs:
- test-modules:
- runs-on: ubuntu-latest
- timeout-minutes: 20
- defaults:
- run:
- working-directory: starter
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Set up Flutter SDK
- uses: subosito/flutter-action@v2
- with:
- channel: 'stable'
-
- - name: Set up Node.js
- uses: actions/setup-node@v2
-
- - name: Install dependencies
- run: npm install
-
- - name: Run hasCamera command
- run: npm run hasCamera platform="ios,android" cameraDescription="Hello world"
- continue-on-error: false
-
- - name: Run hasFileManager command
- run: npm run hasFileManager platform="ios,android" photoLibraryDescription="Hello" musicDescription="world"
- continue-on-error: false
-
- - name: Run hasContacts command
- run: npm run hasContacts contactsDescription="Hello world" platform="ios,android"
- continue-on-error: false
-
- - name: Run hasConnect command
- run: npm run hasConnect platform="ios,android" cameraDescription="Hello world" contactsDescription="Hello world"
- continue-on-error: false
-
- - name: Run hasLocation command
- run: npm run hasLocation platform="ios,android" locationDescription="Hello world" alwaysUseLocationDescription="Hello world" inUseLocationDescription="Hello world"
- continue-on-error: false
+name: Test Commands in Starter
+
+on:
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ test-modules:
+ runs-on: ubuntu-latest
+ timeout-minutes: 20
+ defaults:
+ run:
+ working-directory: starter
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Set up Flutter SDK
+ uses: subosito/flutter-action@v2
+ with:
+ channel: 'stable'
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v2
+
+ - name: Install dependencies
+ run: npm install
+
+ - name: Run hasCamera command
+ run: npm run hasCamera platform="ios,android" cameraDescription="Hello world"
+ continue-on-error: false
+
+ - name: Run hasFileManager command
+ run: npm run hasFileManager platform="ios,android" photoLibraryDescription="Hello" musicDescription="world"
+ continue-on-error: false
+
+ - name: Run hasContacts command
+ run: npm run hasContacts contactsDescription="Hello world" platform="ios,android"
+ continue-on-error: false
+
+ - name: Run hasConnect command
+ run: npm run hasConnect platform="ios,android" cameraDescription="Hello world" contactsDescription="Hello world"
+ continue-on-error: false
+
+ - name: Run hasLocation command
+ run: npm run hasLocation platform="ios,android" locationDescription="Hello world" alwaysUseLocationDescription="Hello world" inUseLocationDescription="Hello world"
+ continue-on-error: false
diff --git a/.gitignore b/.gitignore
index 61429a6fa..a8ad2a95b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,52 +1,53 @@
-\.*
-!**/.pubignore
-build
-pubspec.lock
-analysis_options.yaml
-pubspec_overrides.yaml
-**/android/local.properties
-/starter/android/app/src/main/kotlin
-/starter/ios/Flutter
-starter/ios/Runner.xcodeproj/project.pbxproj
-/node_modules
-starter/node_modules
-starter/package-lock.json
-
-# IntelliJ / Android Studio module files (generated by Melos / IDE)
-*.iml
-
-# FVM Version Cache
-.fvm/
-
-# Allow GitHub workflows (override ".*" ignore rule)
-!.github/
-!.github/**
-
-# Flutter generated files in example apps
-**/example/**/Flutter/ephemeral/
-**/ios/Flutter/Generated.xcconfig
-**/ios/Flutter/flutter_export_environment.sh
-**/example/**/GeneratedPluginRegistrant.h
-**/example/**/GeneratedPluginRegistrant.m
-**/example/**/GeneratedPluginRegistrant.java
-**/example/android/app/src/main/java/io/
-
-# Starter app generated files
-starter/android/app/src/main/java/io/
-starter/ios/Runner/GeneratedPluginRegistrant.h
-starter/ios/Runner/GeneratedPluginRegistrant.m
-starter/macos/Flutter/ephemeral/Flutter-Generated.xcconfig
-starter/macos/Flutter/ephemeral/flutter_export_environment.sh
-
-# GetStorage local persistence (runtime-generated when running starter)
-starter/GetStorage.gs
-starter/GetStorage.bak
-starter/system.gs
-starter/system.bak
-
-# remove molos .iml files
-**/melos_*.iml
-
-generated_failed_sheet.png
-generated_passed_sheet.png
-generated_multidevice_sheet.png
\ No newline at end of file
+\.*
+!**/.pubignore
+build
+pubspec.lock
+analysis_options.yaml
+pubspec_overrides.yaml
+**/android/local.properties
+/starter/android/app/src/main/kotlin
+/starter/ios/Flutter
+starter/ios/Runner.xcodeproj/project.pbxproj
+/node_modules
+starter/node_modules
+starter/package-lock.json
+
+# IntelliJ / Android Studio module files (generated by Melos / IDE)
+*.iml
+
+# FVM Version Cache
+.fvm/
+
+# Allow GitHub workflows (override ".*" ignore rule)
+!.github/
+!.github/**
+
+# Flutter generated files in example apps
+**/example/**/Flutter/ephemeral/
+**/ios/Flutter/Generated.xcconfig
+**/ios/Flutter/flutter_export_environment.sh
+**/example/**/GeneratedPluginRegistrant.h
+**/example/**/GeneratedPluginRegistrant.m
+**/example/**/GeneratedPluginRegistrant.java
+**/example/android/app/src/main/java/io/
+
+# Starter app generated files
+starter/android/app/src/main/java/io/
+starter/ios/Runner/GeneratedPluginRegistrant.h
+starter/ios/Runner/GeneratedPluginRegistrant.m
+starter/macos/Flutter/ephemeral/Flutter-Generated.xcconfig
+starter/macos/Flutter/ephemeral/flutter_export_environment.sh
+
+# GetStorage local persistence (runtime-generated when running starter)
+starter/GetStorage.gs
+starter/GetStorage.bak
+starter/system.gs
+starter/system.bak
+
+# remove molos .iml files
+**/melos_*.iml
+
+generated_failed_sheet.png
+generated_passed_sheet.png
+generated_multidevice_sheet.png
+config.bat
diff --git a/AGENTS.md b/AGENTS.md
index b0984c4ed..8eb2d26ee 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,32 +1,32 @@
-# AGENTS.md
-
-## Cursor Cloud specific instructions
-
-### Project overview
-Ensemble is a Flutter/Dart monorepo (managed by Melos) that provides a runtime for building native apps from declarative YAML definitions. The starter app (`/starter`) is the primary runnable application.
-
-### Prerequisites
-- **Flutter SDK 3.38.7** must be installed at `/opt/flutter` with `/opt/flutter/bin` on `PATH`.
-- **Melos** must be globally activated (`dart pub global activate melos`).
-- `PATH` must include both `/opt/flutter/bin` and `$HOME/.pub-cache/bin`.
-
-### Key commands
-
-| Task | Command | Working directory |
-|------|---------|-------------------|
-| Bootstrap monorepo | `melos bootstrap` | `/workspace` |
-| Lint (core module) | `flutter analyze` | `/workspace/modules/ensemble` |
-| Lint (starter) | `flutter analyze` | `/workspace/starter` |
-| Unit tests (core) | `flutter test` | `/workspace/modules/ensemble` |
-| Unit tests (auth) | `flutter test` | `/workspace/modules/auth` |
-| Build web | `flutter build web --no-tree-shake-icons` | `/workspace/starter` |
-| Run web dev server | `flutter run -d web-server --web-port=8080 --web-hostname=0.0.0.0` | `/workspace/starter` |
-
-### Non-obvious gotchas
-- The starter's `pubspec.yaml` points the `ensemble` dependency to a git URL, but `melos bootstrap` overrides this with a local path reference. Always run `melos bootstrap` from the repo root before building.
-- The default `ensemble-config.yaml` uses `from: ensemble` which fetches app definitions from Ensemble's cloud (Firestore). This works without any local Firebase setup since it reads from a public Kitchen Sink demo app (`appId: e24402cb-75e2-404c-866c-29e6c3dd7992`).
-- To use local YAML definitions instead, change `from: ensemble` to `from: local` in `starter/ensemble/ensemble-config.yaml`.
-- `flutter analyze` will report ~520 pre-existing warnings in `modules/ensemble` (mostly unused imports and `must_be_immutable`). These are not regressions.
-- Web builds produce Wasm compatibility warnings for packages using `dart:html` — these are informational and do not block the JS build.
-- The Chrome device (`-d chrome`) opens a browser window; use `-d web-server` for headless/CI environments.
-- After changing dependencies in any module's `pubspec.yaml`, re-run `melos bootstrap` from the repo root.
+# AGENTS.md
+
+## Cursor Cloud specific instructions
+
+### Project overview
+Ensemble is a Flutter/Dart monorepo (managed by Melos) that provides a runtime for building native apps from declarative YAML definitions. The starter app (`/starter`) is the primary runnable application.
+
+### Prerequisites
+- **Flutter SDK 3.38.7** must be installed at `/opt/flutter` with `/opt/flutter/bin` on `PATH`.
+- **Melos** must be globally activated (`dart pub global activate melos`).
+- `PATH` must include both `/opt/flutter/bin` and `$HOME/.pub-cache/bin`.
+
+### Key commands
+
+| Task | Command | Working directory |
+|------|---------|-------------------|
+| Bootstrap monorepo | `melos bootstrap` | `/workspace` |
+| Lint (core module) | `flutter analyze` | `/workspace/modules/ensemble` |
+| Lint (starter) | `flutter analyze` | `/workspace/starter` |
+| Unit tests (core) | `flutter test` | `/workspace/modules/ensemble` |
+| Unit tests (auth) | `flutter test` | `/workspace/modules/auth` |
+| Build web | `flutter build web --no-tree-shake-icons` | `/workspace/starter` |
+| Run web dev server | `flutter run -d web-server --web-port=8080 --web-hostname=0.0.0.0` | `/workspace/starter` |
+
+### Non-obvious gotchas
+- The starter's `pubspec.yaml` points the `ensemble` dependency to a git URL, but `melos bootstrap` overrides this with a local path reference. Always run `melos bootstrap` from the repo root before building.
+- The default `ensemble-config.yaml` uses `from: ensemble` which fetches app definitions from Ensemble's cloud (Firestore). This works without any local Firebase setup since it reads from a public Kitchen Sink demo app (`appId: e24402cb-75e2-404c-866c-29e6c3dd7992`).
+- To use local YAML definitions instead, change `from: ensemble` to `from: local` in `starter/ensemble/ensemble-config.yaml`.
+- `flutter analyze` will report ~520 pre-existing warnings in `modules/ensemble` (mostly unused imports and `must_be_immutable`). These are not regressions.
+- Web builds produce Wasm compatibility warnings for packages using `dart:html` — these are informational and do not block the JS build.
+- The Chrome device (`-d chrome`) opens a browser window; use `-d web-server` for headless/CI environments.
+- After changing dependencies in any module's `pubspec.yaml`, re-run `melos bootstrap` from the repo root.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 342c6a8c0..d7dc01fe8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7694 +1,7694 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## 2026-08-31
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.53`](#ensemble---v1253)
- - [`ensemble_network_info` - `v1.2.53`](#ensemble_network_info---v1253)
- - [`ensemble_stripe` - `v1.2.53`](#ensemble_stripe---v1253)
- - [`ensemble_file_manager` - `v1.2.53`](#ensemble_file_manager---v1253)
- - [`ensemble_chat` - `v1.2.53`](#ensemble_chat---v1253)
- - [`ensemble_auth` - `v1.2.53`](#ensemble_auth---v1253)
- - [`ensemble_bluetooth` - `v1.2.53`](#ensemble_bluetooth---v1253)
- - [`ensemble_wifi` - `v1.2.53`](#ensemble_wifi---v1253)
- - [`ensemble_face_camera` - `v1.2.53`](#ensemble_face_camera---v1253)
- - [`ensemble_connect` - `v1.2.53`](#ensemble_connect---v1253)
- - [`ensemble_contacts` - `v1.2.53`](#ensemble_contacts---v1253)
- - [`ensemble_location` - `v1.2.53`](#ensemble_location---v1253)
- - [`ensemble_camera` - `v1.2.53`](#ensemble_camera---v1253)
- - [`ensemble_deeplink` - `v1.2.53`](#ensemble_deeplink---v1253)
- - [`ensemble_remote_config` - `v1.2.53`](#ensemble_remote_config---v1253)
- - [`ensemble_firebase_analytics` - `v1.2.53`](#ensemble_firebase_analytics---v1253)
- - [`ensemble_qr_scanner` - `v1.2.53`](#ensemble_qr_scanner---v1253)
- - [`ensemble_adobe_analytics` - `v1.2.53`](#ensemble_adobe_analytics---v1253)
- - [`ensemble_moengage` - `v1.2.53`](#ensemble_moengage---v1253)
- - [`ensemble_bracket` - `v1.2.53`](#ensemble_bracket---v1253)
- - [`ensemble_test_runner` - `v1.3.5`](#ensemble_test_runner---v135)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_test_runner` - `v1.3.5`
-
----
-
-#### `ensemble` - `v1.2.53`
-
- - **FIX**(dependencies): pin html package version to avoid breaking changes with flutter_html. ([01d1dba0](https://github.com/ensembleUI/ensemble/commit/01d1dba0fe0d9935690257bd00d2d92b3dd7e9d5))
- - **FEAT**(wifi): enhance error handling for Wi-Fi connection failures ([#2355](https://github.com/ensembleUI/ensemble/issues/2355)). ([91e71af2](https://github.com/ensembleUI/ensemble/commit/91e71af2d404b793f11318682453efe782e5b8a1))
- - **FEAT**(border): add dashed and dotted borderStyle for container widgets ([#2356](https://github.com/ensembleUI/ensemble/issues/2356)). ([26d747ed](https://github.com/ensembleUI/ensemble/commit/26d747ed23a14d5138aa35d5833255ae337a6655))
-
-#### `ensemble_network_info` - `v1.2.53`
-
- - Bump "ensemble_network_info" to `1.2.53`.
-
-#### `ensemble_stripe` - `v1.2.53`
-
- - Bump "ensemble_stripe" to `1.2.53`.
-
-#### `ensemble_file_manager` - `v1.2.53`
-
- - Bump "ensemble_file_manager" to `1.2.53`.
-
-#### `ensemble_chat` - `v1.2.53`
-
- - Bump "ensemble_chat" to `1.2.53`.
-
-#### `ensemble_auth` - `v1.2.53`
-
- - Bump "ensemble_auth" to `1.2.53`.
-
-#### `ensemble_bluetooth` - `v1.2.53`
-
- - Bump "ensemble_bluetooth" to `1.2.53`.
-
-#### `ensemble_wifi` - `v1.2.53`
-
- - **FEAT**(wifi): enhance error handling for Wi-Fi connection failures ([#2355](https://github.com/ensembleUI/ensemble/issues/2355)). ([91e71af2](https://github.com/ensembleUI/ensemble/commit/91e71af2d404b793f11318682453efe782e5b8a1))
-
-#### `ensemble_face_camera` - `v1.2.53`
-
- - Bump "ensemble_face_camera" to `1.2.53`.
-
-#### `ensemble_connect` - `v1.2.53`
-
- - Bump "ensemble_connect" to `1.2.53`.
-
-#### `ensemble_contacts` - `v1.2.53`
-
- - Bump "ensemble_contacts" to `1.2.53`.
-
-#### `ensemble_location` - `v1.2.53`
-
- - Bump "ensemble_location" to `1.2.53`.
-
-#### `ensemble_camera` - `v1.2.53`
-
- - Bump "ensemble_camera" to `1.2.53`.
-
-#### `ensemble_deeplink` - `v1.2.53`
-
- - Bump "ensemble_deeplink" to `1.2.53`.
-
-#### `ensemble_remote_config` - `v1.2.53`
-
- - Bump "ensemble_remote_config" to `1.2.53`.
-
-#### `ensemble_firebase_analytics` - `v1.2.53`
-
- - **FEAT**(licenses): add LICENSES.md generation script and update melos.yaml. ([64735d84](https://github.com/ensembleUI/ensemble/commit/64735d84fa81058de00d4d393fff7dbfb4eadbc7))
-
-#### `ensemble_qr_scanner` - `v1.2.53`
-
- - Bump "ensemble_qr_scanner" to `1.2.53`.
-
-#### `ensemble_adobe_analytics` - `v1.2.53`
-
- - Bump "ensemble_adobe_analytics" to `1.2.53`.
-
-#### `ensemble_moengage` - `v1.2.53`
-
- - Bump "ensemble_moengage" to `1.2.53`.
-
-#### `ensemble_bracket` - `v1.2.53`
-
- - Bump "ensemble_bracket" to `1.2.53`.
-
-
-## 2026-08-26
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.52`](#ensemble---v1252)
- - [`ensemble_network_info` - `v1.2.52`](#ensemble_network_info---v1252)
- - [`ensemble_stripe` - `v1.2.52`](#ensemble_stripe---v1252)
- - [`ensemble_file_manager` - `v1.2.52`](#ensemble_file_manager---v1252)
- - [`ensemble_chat` - `v1.2.52`](#ensemble_chat---v1252)
- - [`ensemble_auth` - `v1.2.52`](#ensemble_auth---v1252)
- - [`ensemble_bluetooth` - `v1.2.52`](#ensemble_bluetooth---v1252)
- - [`ensemble_wifi` - `v1.2.52`](#ensemble_wifi---v1252)
- - [`ensemble_face_camera` - `v1.2.52`](#ensemble_face_camera---v1252)
- - [`ensemble_connect` - `v1.2.52`](#ensemble_connect---v1252)
- - [`ensemble_contacts` - `v1.2.52`](#ensemble_contacts---v1252)
- - [`ensemble_location` - `v1.2.52`](#ensemble_location---v1252)
- - [`ensemble_camera` - `v1.2.52`](#ensemble_camera---v1252)
- - [`ensemble_deeplink` - `v1.2.52`](#ensemble_deeplink---v1252)
- - [`ensemble_remote_config` - `v1.2.52`](#ensemble_remote_config---v1252)
- - [`ensemble_firebase_analytics` - `v1.2.52`](#ensemble_firebase_analytics---v1252)
- - [`ensemble_qr_scanner` - `v1.2.52`](#ensemble_qr_scanner---v1252)
- - [`ensemble_adobe_analytics` - `v1.2.52`](#ensemble_adobe_analytics---v1252)
- - [`ensemble_moengage` - `v1.2.52`](#ensemble_moengage---v1252)
- - [`ensemble_bracket` - `v1.2.52`](#ensemble_bracket---v1252)
- - [`ensemble_test_runner` - `v1.3.4`](#ensemble_test_runner---v134)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_test_runner` - `v1.3.4`
-
----
-
-#### `ensemble` - `v1.2.52`
-
- - **FEAT**(navigation): add declarative navigation stack support ([#2351](https://github.com/ensembleUI/ensemble/issues/2351)). ([6e58cfb5](https://github.com/ensembleUI/ensemble/commit/6e58cfb5a211b513423056babee9ae32fcfb4cbf))
-
-#### `ensemble_network_info` - `v1.2.52`
-
- - Bump "ensemble_network_info" to `1.2.52`.
-
-#### `ensemble_stripe` - `v1.2.52`
-
- - Bump "ensemble_stripe" to `1.2.52`.
-
-#### `ensemble_file_manager` - `v1.2.52`
-
- - Bump "ensemble_file_manager" to `1.2.52`.
-
-#### `ensemble_chat` - `v1.2.52`
-
- - Bump "ensemble_chat" to `1.2.52`.
-
-#### `ensemble_auth` - `v1.2.52`
-
- - Bump "ensemble_auth" to `1.2.52`.
-
-#### `ensemble_bluetooth` - `v1.2.52`
-
- - Bump "ensemble_bluetooth" to `1.2.52`.
-
-#### `ensemble_wifi` - `v1.2.52`
-
- - Bump "ensemble_wifi" to `1.2.52`.
-
-#### `ensemble_face_camera` - `v1.2.52`
-
- - Bump "ensemble_face_camera" to `1.2.52`.
-
-#### `ensemble_connect` - `v1.2.52`
-
- - Bump "ensemble_connect" to `1.2.52`.
-
-#### `ensemble_contacts` - `v1.2.52`
-
- - Bump "ensemble_contacts" to `1.2.52`.
-
-#### `ensemble_location` - `v1.2.52`
-
- - Bump "ensemble_location" to `1.2.52`.
-
-#### `ensemble_camera` - `v1.2.52`
-
- - Bump "ensemble_camera" to `1.2.52`.
-
-#### `ensemble_deeplink` - `v1.2.52`
-
- - Bump "ensemble_deeplink" to `1.2.52`.
-
-#### `ensemble_remote_config` - `v1.2.52`
-
- - Bump "ensemble_remote_config" to `1.2.52`.
-
-#### `ensemble_firebase_analytics` - `v1.2.52`
-
- - Bump "ensemble_firebase_analytics" to `1.2.52`.
-
-#### `ensemble_qr_scanner` - `v1.2.52`
-
- - Bump "ensemble_qr_scanner" to `1.2.52`.
-
-#### `ensemble_adobe_analytics` - `v1.2.52`
-
- - Bump "ensemble_adobe_analytics" to `1.2.52`.
-
-#### `ensemble_moengage` - `v1.2.52`
-
- - Bump "ensemble_moengage" to `1.2.52`.
-
-#### `ensemble_bracket` - `v1.2.52`
-
- - Bump "ensemble_bracket" to `1.2.52`.
-
-
-## 2026-08-25
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.51`](#ensemble---v1251)
- - [`ensemble_network_info` - `v1.2.51`](#ensemble_network_info---v1251)
- - [`ensemble_stripe` - `v1.2.51`](#ensemble_stripe---v1251)
- - [`ensemble_file_manager` - `v1.2.51`](#ensemble_file_manager---v1251)
- - [`ensemble_chat` - `v1.2.51`](#ensemble_chat---v1251)
- - [`ensemble_auth` - `v1.2.51`](#ensemble_auth---v1251)
- - [`ensemble_bluetooth` - `v1.2.51`](#ensemble_bluetooth---v1251)
- - [`ensemble_wifi` - `v1.2.51`](#ensemble_wifi---v1251)
- - [`ensemble_face_camera` - `v1.2.51`](#ensemble_face_camera---v1251)
- - [`ensemble_connect` - `v1.2.51`](#ensemble_connect---v1251)
- - [`ensemble_contacts` - `v1.2.51`](#ensemble_contacts---v1251)
- - [`ensemble_location` - `v1.2.51`](#ensemble_location---v1251)
- - [`ensemble_camera` - `v1.2.51`](#ensemble_camera---v1251)
- - [`ensemble_deeplink` - `v1.2.51`](#ensemble_deeplink---v1251)
- - [`ensemble_remote_config` - `v1.2.51`](#ensemble_remote_config---v1251)
- - [`ensemble_firebase_analytics` - `v1.2.51`](#ensemble_firebase_analytics---v1251)
- - [`ensemble_qr_scanner` - `v1.2.51`](#ensemble_qr_scanner---v1251)
- - [`ensemble_adobe_analytics` - `v1.2.51`](#ensemble_adobe_analytics---v1251)
- - [`ensemble_moengage` - `v1.2.51`](#ensemble_moengage---v1251)
- - [`ensemble_bracket` - `v1.2.51`](#ensemble_bracket---v1251)
- - [`ensemble_test_runner` - `v1.3.3`](#ensemble_test_runner---v133)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_test_runner` - `v1.3.3`
-
----
-
-#### `ensemble` - `v1.2.51`
-
- - **REFACTOR**: simplify modal detection logic in screen tracking ([#2339](https://github.com/ensembleUI/ensemble/issues/2339)). ([3f35c3cf](https://github.com/ensembleUI/ensemble/commit/3f35c3cf9c23009b343fa771d12193cb1ce04d85))
- - **FEAT**(action_scope): enhance event handler registration and scope prep… ([#2344](https://github.com/ensembleUI/ensemble/issues/2344)). ([33dce9cd](https://github.com/ensembleUI/ensemble/commit/33dce9cd35a82410ec2e7ed042ac238745679c02))
-
-#### `ensemble_network_info` - `v1.2.51`
-
- - Bump "ensemble_network_info" to `1.2.51`.
-
-#### `ensemble_stripe` - `v1.2.51`
-
- - Bump "ensemble_stripe" to `1.2.51`.
-
-#### `ensemble_file_manager` - `v1.2.51`
-
- - Bump "ensemble_file_manager" to `1.2.51`.
-
-#### `ensemble_chat` - `v1.2.51`
-
- - Bump "ensemble_chat" to `1.2.51`.
-
-#### `ensemble_auth` - `v1.2.51`
-
- - **FEAT**(auth_manager): enhance user session management by storing provid… ([#2340](https://github.com/ensembleUI/ensemble/issues/2340)). ([82c0da1a](https://github.com/ensembleUI/ensemble/commit/82c0da1a075a44e055a2aeaafb50dce5f798e850))
-
-#### `ensemble_bluetooth` - `v1.2.51`
-
- - Bump "ensemble_bluetooth" to `1.2.51`.
-
-#### `ensemble_wifi` - `v1.2.51`
-
- - Bump "ensemble_wifi" to `1.2.51`.
-
-#### `ensemble_face_camera` - `v1.2.51`
-
- - Bump "ensemble_face_camera" to `1.2.51`.
-
-#### `ensemble_connect` - `v1.2.51`
-
- - Bump "ensemble_connect" to `1.2.51`.
-
-#### `ensemble_contacts` - `v1.2.51`
-
- - Bump "ensemble_contacts" to `1.2.51`.
-
-#### `ensemble_location` - `v1.2.51`
-
- - Bump "ensemble_location" to `1.2.51`.
-
-#### `ensemble_camera` - `v1.2.51`
-
- - Bump "ensemble_camera" to `1.2.51`.
-
-#### `ensemble_deeplink` - `v1.2.51`
-
- - Bump "ensemble_deeplink" to `1.2.51`.
-
-#### `ensemble_remote_config` - `v1.2.51`
-
- - Bump "ensemble_remote_config" to `1.2.51`.
-
-#### `ensemble_firebase_analytics` - `v1.2.51`
-
- - Bump "ensemble_firebase_analytics" to `1.2.51`.
-
-#### `ensemble_qr_scanner` - `v1.2.51`
-
- - Bump "ensemble_qr_scanner" to `1.2.51`.
-
-#### `ensemble_adobe_analytics` - `v1.2.51`
-
- - Bump "ensemble_adobe_analytics" to `1.2.51`.
-
-#### `ensemble_moengage` - `v1.2.51`
-
- - Bump "ensemble_moengage" to `1.2.51`.
-
-#### `ensemble_bracket` - `v1.2.51`
-
- - Bump "ensemble_bracket" to `1.2.51`.
-
-
-## 2026-08-04
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble_test_runner` - `v1.3.2`](#ensemble_test_runner---v132)
-
----
-
-#### `ensemble_test_runner` - `v1.3.2`
-
- - **FEAT**(ensemble_test_runner): add secure storage and keychain support i… ([#2335](https://github.com/ensembleUI/ensemble/issues/2335)). ([462e8dd1](https://github.com/ensembleUI/ensemble/commit/462e8dd126db4f8235397807bc04bb79c7cda640))
-
-
-## 2026-08-04
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble_test_runner` - `v1.3.1`](#ensemble_test_runner---v131)
-
----
-
-#### `ensemble_test_runner` - `v1.3.1`
-
- - **FIX**(ensemble_test_runner): update test report to display branch instead of commit hash. ([2e2de9b0](https://github.com/ensembleUI/ensemble/commit/2e2de9b0351957cc5792963e5d8abff32a140f73))
- - **FEAT**(ensemble_test_runner): implement dynamic worker count calculatio… ([#2334](https://github.com/ensembleUI/ensemble/issues/2334)). ([2041975e](https://github.com/ensembleUI/ensemble/commit/2041975e55bcf916649a21702dd689b711760dd0))
-
-
-## 2026-08-03
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble_test_runner` - `v1.3.0`](#ensemble_test_runner---v130)
-
----
-
-#### `ensemble_test_runner` - `v1.3.0`
-
- - **FEAT**(ensemble_test_runner): enhance error reporting with concise hints for missing widgets and texts ([#2333](https://github.com/ensembleUI/ensemble/issues/2333)). ([7fbd0e07](https://github.com/ensembleUI/ensemble/commit/7fbd0e07c3fadd3d35243df33efd2cd7a33bc318))
-
-
-## 2026-08-01
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble_test_runner` - `v1.2.56`](#ensemble_test_runner---v1256)
-
----
-
-#### `ensemble_test_runner` - `v1.2.56`
-
- - **FEAT**(ensemble_test_runner): improve screenshot handling and text matching logic ([#2332](https://github.com/ensembleUI/ensemble/issues/2332)). ([c1ab83bf](https://github.com/ensembleUI/ensemble/commit/c1ab83bf4d021cab239a7bf14dbb497b83d22b03))
-
-
-## 2026-07-30
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble_test_runner` - `v1.2.55`](#ensemble_test_runner---v1255)
-
----
-
-#### `ensemble_test_runner` - `v1.2.55`
-
- - **FEAT**(ensemble_test_runner): enhance test execution with single test p… ([#2330](https://github.com/ensembleUI/ensemble/issues/2330)). ([f9aef972](https://github.com/ensembleUI/ensemble/commit/f9aef9729791f1cf5e1b4c760fd28068045b214d))
-
-
-## 2026-07-29
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble_test_runner` - `v1.2.54`](#ensemble_test_runner---v1254)
-
----
-
-#### `ensemble_test_runner` - `v1.2.54`
-
- - **FEAT**(ensemble_test_runner): add profile support for test execution an… ([#2328](https://github.com/ensembleUI/ensemble/issues/2328)). ([14193802](https://github.com/ensembleUI/ensemble/commit/14193802e982a590513c86b0bf663402907101f9))
-
-
-## 2026-07-29
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble_test_runner` - `v1.2.53`](#ensemble_test_runner---v1253)
-
----
-
-#### `ensemble_test_runner` - `v1.2.53`
-
-
-## 2026-07-23
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.50`](#ensemble---v1250)
- - [`ensemble_network_info` - `v1.2.50`](#ensemble_network_info---v1250)
- - [`ensemble_stripe` - `v1.2.50`](#ensemble_stripe---v1250)
- - [`ensemble_file_manager` - `v1.2.50`](#ensemble_file_manager---v1250)
- - [`ensemble_chat` - `v1.2.50`](#ensemble_chat---v1250)
- - [`ensemble_auth` - `v1.2.50`](#ensemble_auth---v1250)
- - [`ensemble_bluetooth` - `v1.2.50`](#ensemble_bluetooth---v1250)
- - [`ensemble_wifi` - `v1.2.50`](#ensemble_wifi---v1250)
- - [`ensemble_face_camera` - `v1.2.50`](#ensemble_face_camera---v1250)
- - [`ensemble_connect` - `v1.2.50`](#ensemble_connect---v1250)
- - [`ensemble_contacts` - `v1.2.50`](#ensemble_contacts---v1250)
- - [`ensemble_location` - `v1.2.50`](#ensemble_location---v1250)
- - [`ensemble_camera` - `v1.2.50`](#ensemble_camera---v1250)
- - [`ensemble_deeplink` - `v1.2.50`](#ensemble_deeplink---v1250)
- - [`ensemble_remote_config` - `v1.2.50`](#ensemble_remote_config---v1250)
- - [`ensemble_firebase_analytics` - `v1.2.50`](#ensemble_firebase_analytics---v1250)
- - [`ensemble_qr_scanner` - `v1.2.50`](#ensemble_qr_scanner---v1250)
- - [`ensemble_adobe_analytics` - `v1.2.50`](#ensemble_adobe_analytics---v1250)
- - [`ensemble_moengage` - `v1.2.50`](#ensemble_moengage---v1250)
- - [`ensemble_bracket` - `v1.2.50`](#ensemble_bracket---v1250)
- - [`ensemble_test_runner` - `v1.2.50`](#ensemble_test_runner---v1250)
-
----
-
-#### `ensemble` - `v1.2.50`
-
- - **FIX**(firestore): dedupe listenForChanges subscriptions to prevent crash ([#2257](https://github.com/ensembleUI/ensemble/issues/2257)). ([3e7a0416](https://github.com/ensembleUI/ensemble/commit/3e7a0416c04e30d24af593eabcf9a49c16d0458a))
- - **FIX**(webview): set cookies for inline HTML on native ([#2298](https://github.com/ensembleUI/ensemble/issues/2298)). ([79519031](https://github.com/ensembleUI/ensemble/commit/79519031e370abe7aa146cadd523f2c83d58da3d))
- - **FEAT**(test_runner): support live Firebase and HTTP under flutter test ([#2321](https://github.com/ensembleUI/ensemble/issues/2321)). ([9ffe6994](https://github.com/ensembleUI/ensemble/commit/9ffe6994322370ca32a79f1ce75eb06bee251018))
- - **FEAT**: Add ES6 parser and interpreter runtime support ([#2320](https://github.com/ensembleUI/ensemble/issues/2320)). ([8902b10f](https://github.com/ensembleUI/ensemble/commit/8902b10f0d842dc8a1d99ffd87f05d4ed92db8b3))
-
-#### `ensemble_network_info` - `v1.2.50`
-
- - Bump "ensemble_network_info" to `1.2.50`.
-
-#### `ensemble_stripe` - `v1.2.50`
-
- - Bump "ensemble_stripe" to `1.2.50`.
-
-#### `ensemble_file_manager` - `v1.2.50`
-
- - Bump "ensemble_file_manager" to `1.2.50`.
-
-#### `ensemble_chat` - `v1.2.50`
-
- - Bump "ensemble_chat" to `1.2.50`.
-
-#### `ensemble_auth` - `v1.2.50`
-
- - **FEAT**(test_runner): support live Firebase and HTTP under flutter test ([#2321](https://github.com/ensembleUI/ensemble/issues/2321)). ([9ffe6994](https://github.com/ensembleUI/ensemble/commit/9ffe6994322370ca32a79f1ce75eb06bee251018))
-
-#### `ensemble_bluetooth` - `v1.2.50`
-
- - Bump "ensemble_bluetooth" to `1.2.50`.
-
-#### `ensemble_wifi` - `v1.2.50`
-
- - Bump "ensemble_wifi" to `1.2.50`.
-
-#### `ensemble_face_camera` - `v1.2.50`
-
- - Bump "ensemble_face_camera" to `1.2.50`.
-
-#### `ensemble_connect` - `v1.2.50`
-
- - Bump "ensemble_connect" to `1.2.50`.
-
-#### `ensemble_contacts` - `v1.2.50`
-
- - Bump "ensemble_contacts" to `1.2.50`.
-
-#### `ensemble_location` - `v1.2.50`
-
- - Bump "ensemble_location" to `1.2.50`.
-
-#### `ensemble_camera` - `v1.2.50`
-
- - Bump "ensemble_camera" to `1.2.50`.
-
-#### `ensemble_deeplink` - `v1.2.50`
-
- - Bump "ensemble_deeplink" to `1.2.50`.
-
-#### `ensemble_remote_config` - `v1.2.50`
-
- - Bump "ensemble_remote_config" to `1.2.50`.
-
-#### `ensemble_firebase_analytics` - `v1.2.50`
-
- - Bump "ensemble_firebase_analytics" to `1.2.50`.
-
-#### `ensemble_qr_scanner` - `v1.2.50`
-
- - Bump "ensemble_qr_scanner" to `1.2.50`.
-
-#### `ensemble_adobe_analytics` - `v1.2.50`
-
- - Bump "ensemble_adobe_analytics" to `1.2.50`.
-
-#### `ensemble_moengage` - `v1.2.50`
-
- - Bump "ensemble_moengage" to `1.2.50`.
-
-#### `ensemble_bracket` - `v1.2.50`
-
- - Bump "ensemble_bracket" to `1.2.50`.
-
-#### `ensemble_test_runner` - `v1.2.50`
-
- - **FEAT**(test_runner): support live Firebase and HTTP under flutter test ([#2321](https://github.com/ensembleUI/ensemble/issues/2321)). ([9ffe6994](https://github.com/ensembleUI/ensemble/commit/9ffe6994322370ca32a79f1ce75eb06bee251018))
-
-
-## 2026-07-02
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.49`](#ensemble---v1249)
- - [`ensemble_network_info` - `v1.2.49`](#ensemble_network_info---v1249)
- - [`ensemble_stripe` - `v1.2.49`](#ensemble_stripe---v1249)
- - [`ensemble_file_manager` - `v1.2.49`](#ensemble_file_manager---v1249)
- - [`ensemble_chat` - `v1.2.49`](#ensemble_chat---v1249)
- - [`ensemble_auth` - `v1.2.49`](#ensemble_auth---v1249)
- - [`ensemble_bluetooth` - `v1.2.49`](#ensemble_bluetooth---v1249)
- - [`ensemble_wifi` - `v1.2.49`](#ensemble_wifi---v1249)
- - [`ensemble_face_camera` - `v1.2.49`](#ensemble_face_camera---v1249)
- - [`ensemble_connect` - `v1.2.49`](#ensemble_connect---v1249)
- - [`ensemble_contacts` - `v1.2.49`](#ensemble_contacts---v1249)
- - [`ensemble_location` - `v1.2.49`](#ensemble_location---v1249)
- - [`ensemble_camera` - `v1.2.49`](#ensemble_camera---v1249)
- - [`ensemble_deeplink` - `v1.2.49`](#ensemble_deeplink---v1249)
- - [`ensemble_remote_config` - `v1.2.49`](#ensemble_remote_config---v1249)
- - [`ensemble_firebase_analytics` - `v1.2.49`](#ensemble_firebase_analytics---v1249)
- - [`ensemble_qr_scanner` - `v1.2.49`](#ensemble_qr_scanner---v1249)
- - [`ensemble_adobe_analytics` - `v1.2.49`](#ensemble_adobe_analytics---v1249)
- - [`ensemble_moengage` - `v1.2.49`](#ensemble_moengage---v1249)
- - [`ensemble_bracket` - `v1.2.49`](#ensemble_bracket---v1249)
- - [`ensemble_test_runner` - `v1.2.49`](#ensemble_test_runner---v1249)
-
----
-
-#### `ensemble` - `v1.2.49`
-
- - **REFACTOR**: Remove unused imports across various files to clean up code… ([#2317](https://github.com/ensembleUI/ensemble/issues/2317)). ([e68b584c](https://github.com/ensembleUI/ensemble/commit/e68b584c5d8ac9c6ecb2e014027512481c2193dd))
-
-#### `ensemble_network_info` - `v1.2.49`
-
- - Bump "ensemble_network_info" to `1.2.49`.
-
-#### `ensemble_stripe` - `v1.2.49`
-
- - Bump "ensemble_stripe" to `1.2.49`.
-
-#### `ensemble_file_manager` - `v1.2.49`
-
- - Bump "ensemble_file_manager" to `1.2.49`.
-
-#### `ensemble_chat` - `v1.2.49`
-
- - Bump "ensemble_chat" to `1.2.49`.
-
-#### `ensemble_auth` - `v1.2.49`
-
- - Bump "ensemble_auth" to `1.2.49`.
-
-#### `ensemble_bluetooth` - `v1.2.49`
-
- - Bump "ensemble_bluetooth" to `1.2.49`.
-
-#### `ensemble_wifi` - `v1.2.49`
-
- - Bump "ensemble_wifi" to `1.2.49`.
-
-#### `ensemble_face_camera` - `v1.2.49`
-
- - Bump "ensemble_face_camera" to `1.2.49`.
-
-#### `ensemble_connect` - `v1.2.49`
-
- - Bump "ensemble_connect" to `1.2.49`.
-
-#### `ensemble_contacts` - `v1.2.49`
-
- - Bump "ensemble_contacts" to `1.2.49`.
-
-#### `ensemble_location` - `v1.2.49`
-
- - Bump "ensemble_location" to `1.2.49`.
-
-#### `ensemble_camera` - `v1.2.49`
-
- - Bump "ensemble_camera" to `1.2.49`.
-
-#### `ensemble_deeplink` - `v1.2.49`
-
- - Bump "ensemble_deeplink" to `1.2.49`.
-
-#### `ensemble_remote_config` - `v1.2.49`
-
- - Bump "ensemble_remote_config" to `1.2.49`.
-
-#### `ensemble_firebase_analytics` - `v1.2.49`
-
- - Bump "ensemble_firebase_analytics" to `1.2.49`.
-
-#### `ensemble_qr_scanner` - `v1.2.49`
-
- - Bump "ensemble_qr_scanner" to `1.2.49`.
-
-#### `ensemble_adobe_analytics` - `v1.2.49`
-
- - Bump "ensemble_adobe_analytics" to `1.2.49`.
-
-#### `ensemble_moengage` - `v1.2.49`
-
- - Bump "ensemble_moengage" to `1.2.49`.
-
-#### `ensemble_bracket` - `v1.2.49`
-
- - Bump "ensemble_bracket" to `1.2.49`.
-
-#### `ensemble_test_runner` - `v1.2.49`
-
- - Bump "ensemble_test_runner" to `1.2.49`.
-
-
-## 2026-06-28
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.48`](#ensemble---v1248)
- - [`ensemble_network_info` - `v1.2.48`](#ensemble_network_info---v1248)
- - [`ensemble_stripe` - `v1.2.48`](#ensemble_stripe---v1248)
- - [`ensemble_file_manager` - `v1.2.48`](#ensemble_file_manager---v1248)
- - [`ensemble_chat` - `v1.2.48`](#ensemble_chat---v1248)
- - [`ensemble_auth` - `v1.2.48`](#ensemble_auth---v1248)
- - [`ensemble_bluetooth` - `v1.2.48`](#ensemble_bluetooth---v1248)
- - [`ensemble_wifi` - `v1.2.48`](#ensemble_wifi---v1248)
- - [`ensemble_face_camera` - `v1.2.48`](#ensemble_face_camera---v1248)
- - [`ensemble_connect` - `v1.2.48`](#ensemble_connect---v1248)
- - [`ensemble_contacts` - `v1.2.48`](#ensemble_contacts---v1248)
- - [`ensemble_location` - `v1.2.48`](#ensemble_location---v1248)
- - [`ensemble_camera` - `v1.2.48`](#ensemble_camera---v1248)
- - [`ensemble_deeplink` - `v1.2.48`](#ensemble_deeplink---v1248)
- - [`ensemble_remote_config` - `v1.2.48`](#ensemble_remote_config---v1248)
- - [`ensemble_firebase_analytics` - `v1.2.48`](#ensemble_firebase_analytics---v1248)
- - [`ensemble_qr_scanner` - `v1.2.48`](#ensemble_qr_scanner---v1248)
- - [`ensemble_adobe_analytics` - `v1.2.48`](#ensemble_adobe_analytics---v1248)
- - [`ensemble_moengage` - `v1.2.48`](#ensemble_moengage---v1248)
- - [`ensemble_bracket` - `v1.2.48`](#ensemble_bracket---v1248)
-
----
-
-#### `ensemble` - `v1.2.48`
-
- - Bump "ensemble" to `1.2.48`.
-
-#### `ensemble_network_info` - `v1.2.48`
-
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-#### `ensemble_stripe` - `v1.2.48`
-
- - **REFACTOR**(stripe): rename onComplete to onSuccess in ShowPaymentSheetAction. ([deddd07c](https://github.com/ensembleUI/ensemble/commit/deddd07cd498d249aca5b15f33319b981adace47))
- - **FEAT**(stripe): add initializeStripe action and update payment sheet functionality. ([5622bd40](https://github.com/ensembleUI/ensemble/commit/5622bd40b4b21a21b55154444e2dbe2802b1dc68))
- - **FEAT**(stripe): add automated Stripe module installation script and update README. ([b43f82cf](https://github.com/ensembleUI/ensemble/commit/b43f82cfa2c158ac4964880e3e763c679cbd05f8))
- - **FEAT**(stripe): add Stripe payment integration module. ([1f29b783](https://github.com/ensembleUI/ensemble/commit/1f29b783f640e4cd6227c8bd36fd328b0b3f3f57))
- - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
- - **DOCS**(ensemble_stripe): update iOS and Android configuration instructions in README. ([eb0dfce4](https://github.com/ensembleUI/ensemble/commit/eb0dfce4dc839b978f3d1e75c449c74b2f800d9a))
-
-#### `ensemble_file_manager` - `v1.2.48`
-
- - **DOCS**: document file manager module. ([6bd21d86](https://github.com/ensembleUI/ensemble/commit/6bd21d860c4d0d5c98371cefb2ce9a51d27fca3f))
-
-#### `ensemble_chat` - `v1.2.48`
-
- - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-#### `ensemble_auth` - `v1.2.48`
-
- - Bump "ensemble_auth" to `1.2.48`.
-
-#### `ensemble_bluetooth` - `v1.2.48`
-
- - **FIX**(security): JSON-encode BLE data passed into global script handler. ([0bebe7ba](https://github.com/ensembleUI/ensemble/commit/0bebe7baafb1e66ff97a5652221c401695d32ff4))
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-#### `ensemble_wifi` - `v1.2.48`
-
- - **REFACTOR**(wifi): simplify WiFi operations and update permissions. ([628d9b1a](https://github.com/ensembleUI/ensemble/commit/628d9b1a52efd6312f04ab49a1f298c8dcaf4e9f))
- - **FEAT**(wifi): add WiFi connection capabilities. ([b4194289](https://github.com/ensembleUI/ensemble/commit/b41942890e2c1ea15a804eadf183b9b81d779948))
- - **DOCS**(ensemble_wifi): update README and enable script for Android permissions. ([bd1a791f](https://github.com/ensembleUI/ensemble/commit/bd1a791fea3be6be224ca7b7d5e5fe7dfce4aaff))
-
-#### `ensemble_face_camera` - `v1.2.48`
-
- - **FEAT**(face_camera): separate face detection from ensemble_camera into separate module. ([9857c3cc](https://github.com/ensembleUI/ensemble/commit/9857c3cc3048f2c8879feeb07d77b084181010cd))
- - **DOCS**: update package and module READMEs. ([2f7e2dec](https://github.com/ensembleUI/ensemble/commit/2f7e2deccf3110badc169d78c22afb64870897f6))
-
-#### `ensemble_connect` - `v1.2.48`
-
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-#### `ensemble_contacts` - `v1.2.48`
-
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-#### `ensemble_location` - `v1.2.48`
-
- - **FEAT**(maps): add draggable marker functionality. ([6da646ea](https://github.com/ensembleUI/ensemble/commit/6da646ea344a54a9434c0bcb20b3ba70e38de84b))
- - **FEAT**(maps): add fixed marker functionality to EnsembleMapWidget. ([cd7d0301](https://github.com/ensembleUI/ensemble/commit/cd7d0301221343fce148b515a017dfa35139b5eb))
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-#### `ensemble_camera` - `v1.2.48`
-
- - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
- - **FIX**: face detection camera build issues. ([cafd193e](https://github.com/ensembleUI/ensemble/commit/cafd193e78760ccb38efc42e7ee10cbd436a4bfb))
- - **FIX**: dispose existing camera controller before initializing a new one. ([762ddd4a](https://github.com/ensembleUI/ensemble/commit/762ddd4a84009eeb92be61d66b3e93d1da70e53e))
- - **FIX**: repaint issue. ([8cc4e00d](https://github.com/ensembleUI/ensemble/commit/8cc4e00d781ced5bb538e7053304388f02e4af85))
- - **FIX**: camera mobile browser. ([8e676c90](https://github.com/ensembleUI/ensemble/commit/8e676c90d1cbae022acb0bf86c364aa258e9bc74))
- - **FIX**: unreliable showpreview. ([2365d35e](https://github.com/ensembleUI/ensemble/commit/2365d35e5b44743d1924ce5c6e7875676858296b))
- - **FIX**: camera model dismiss. ([4827df14](https://github.com/ensembleUI/ensemble/commit/4827df1439f901dc8c852fdebf26ba4319a66ab3))
- - **FEAT**(face_camera): separate face detection from ensemble_camera into separate module. ([9857c3cc](https://github.com/ensembleUI/ensemble/commit/9857c3cc3048f2c8879feeb07d77b084181010cd))
- - **FEAT**: implement web face detection functionality. ([994eba49](https://github.com/ensembleUI/ensemble/commit/994eba49cd648349a5a1b1319829fc244b168627))
- - **DOCS**: update README to reflect QR code scanning module relocation. ([3a6eeb80](https://github.com/ensembleUI/ensemble/commit/3a6eeb80bbddb9561c0c64de455c2b4a981feb08))
- - **DOCS**: update package and module READMEs. ([2f7e2dec](https://github.com/ensembleUI/ensemble/commit/2f7e2deccf3110badc169d78c22afb64870897f6))
- - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-#### `ensemble_deeplink` - `v1.2.48`
-
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-#### `ensemble_remote_config` - `v1.2.48`
-
- - **FEAT**(remote_config): enhance environment variable support for Remote Config. ([4e1f5dfe](https://github.com/ensembleUI/ensemble/commit/4e1f5dfe0cad4c19fe65667cc1139b022079ed67))
- - **FEAT**(remote_config): add Firebase Remote Config integration. ([906f0133](https://github.com/ensembleUI/ensemble/commit/906f013322dcda45a1740db24b5e21f63ea372e5))
-
-#### `ensemble_firebase_analytics` - `v1.2.48`
-
- - **FIX**: revert the name to logEvent. ([e2b4abe3](https://github.com/ensembleUI/ensemble/commit/e2b4abe3744c313dbcaeb69861518348a39dd600))
- - **FEAT**: added firebase analytics rest of unsupported functions. ([04f34898](https://github.com/ensembleUI/ensemble/commit/04f34898dd4a033a130084c0656b769de99e20f1))
- - **FEAT**: implement intelligent error handling in FirebaseAnalyticsProvider. ([a8cabc2f](https://github.com/ensembleUI/ensemble/commit/a8cabc2fb2c63630045f07d0d5cb4a533c14ef3a))
- - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
-
-#### `ensemble_qr_scanner` - `v1.2.48`
-
- - **REFACTOR**(qr_scanner): improve scan window handling and layout for QR code scanner. ([a54f86b0](https://github.com/ensembleUI/ensemble/commit/a54f86b03c2d8255fad5dfb50c35d452be1a4e64))
- - **FIX**(qr_scanner): upgrade mobile_scanner dependency in qr_scanner. ([ec22c726](https://github.com/ensembleUI/ensemble/commit/ec22c726dc6b1ec5a9c687d7dfeef9aa8f7c882c))
- - **DOCS**: update package and module READMEs. ([2f7e2dec](https://github.com/ensembleUI/ensemble/commit/2f7e2deccf3110badc169d78c22afb64870897f6))
-
-#### `ensemble_adobe_analytics` - `v1.2.48`
-
- - **REFACTOR**(adobe_analytics): streamline initialization and remove redundant checks. ([5714a3fc](https://github.com/ensembleUI/ensemble/commit/5714a3fc1820bb7522f3f08183d46dc727c300df))
- - **REFACTOR**: simplify event creation in AdobeAnalyticsImpl by using concise syntax. ([6a35cafb](https://github.com/ensembleUI/ensemble/commit/6a35cafb770e709eb3c3d66c289f7f547fb867ed))
- - **REFACTOR**: streamline Adobe Analytics event tracking and remove unused methods. ([d22e3aa8](https://github.com/ensembleUI/ensemble/commit/d22e3aa818a96b8b836ca88fde991b687eb2248c))
- - **FIX**: update Assurance session handling in AdobeAnalyticsImpl. ([e65d1793](https://github.com/ensembleUI/ensemble/commit/e65d1793a313ca97bc3a714008e068dd22ab46b1))
- - **FEAT**: add module configuration for Adobe Analytics. ([056c09d1](https://github.com/ensembleUI/ensemble/commit/056c09d1cf3bb504ab63554ef10ce8285180ed68))
- - **FEAT**: enhance README and core functionalities for Adobe Analytics module. ([0fa3b02f](https://github.com/ensembleUI/ensemble/commit/0fa3b02ff0e1d84b0feec9159d03bac78822113e))
- - **FEAT**: enforce initialization checks in Adobe Analytics methods. ([575d3eca](https://github.com/ensembleUI/ensemble/commit/575d3eca7c4d14578425ef961d92c670e6d2832f))
- - **FEAT**: add LICENSE and enhance README for Adobe Analytics module. ([10ceb7e2](https://github.com/ensembleUI/ensemble/commit/10ceb7e283496513067b76361f7f5dd3d1a4912e))
- - **FEAT**: enhance identity management in Adobe Analytics module. ([e8e4fed5](https://github.com/ensembleUI/ensemble/commit/e8e4fed59cbfb164c08148ed8c42a15e5a2d5cf0))
- - **FEAT**: integrate Assurance functionality into Adobe Analytics module. ([7e16c4e9](https://github.com/ensembleUI/ensemble/commit/7e16c4e9e7b7795e3b9517f264096601c32c1f69))
- - **FEAT**: integrate user profile management into Adobe Analytics module. ([e30660ee](https://github.com/ensembleUI/ensemble/commit/e30660ee8f201db10ad1a30e5c3e94c7a08e585b))
- - **FEAT**: add consent management to Adobe Analytics module. ([9a8a750f](https://github.com/ensembleUI/ensemble/commit/9a8a750f94699a20ada3d1606184df57dbee3720))
- - **FEAT**: enhance Adobe Analytics module with core, edge, and identity functionalities. ([a49e1224](https://github.com/ensembleUI/ensemble/commit/a49e1224f322b4780467d6e9b794e3896a0958fa))
- - **FEAT**: update Adobe Analytics methods to return dynamic results. ([3a9caf08](https://github.com/ensembleUI/ensemble/commit/3a9caf08fa37c03484ff3c04be4bf18bb6bd4d68))
- - **FEAT**: add setupAssurance method to Adobe Analytics module for session management. ([9d01e220](https://github.com/ensembleUI/ensemble/commit/9d01e2201f97baf1320ace14271ee70ceae3255e))
- - **FEAT**: enhance Adobe Analytics event tracking with timeout handling and parameter type adjustments. ([48d4880c](https://github.com/ensembleUI/ensemble/commit/48d4880c3138e463665b704681eec3d5f57188b7))
- - **FEAT**: add Adobe Analytics module for Ensemble integration. ([77fadddb](https://github.com/ensembleUI/ensemble/commit/77fadddb913ed20834f977db0fe78ee79c93005b))
- - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
-
-#### `ensemble_moengage` - `v1.2.48`
-
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-#### `ensemble_bracket` - `v1.2.48`
-
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-
-## 2026-06-27
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble_auth` - `v1.2.47`](#ensemble_auth---v1247)
-
----
-
-#### `ensemble_auth` - `v1.2.47`
-
- - **REVERT**: downgrade Google Sign-In and Apple Sign-In dependencies to support Flutter 3.27.2. ([a9e183e6](https://github.com/ensembleUI/ensemble/commit/a9e183e62df683760de2e24a31e8bb4c1b6d2e1c))
- - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
- - **REFACTOR**: remove logging statements from SignInWithVerificationCode class. ([84d402c7](https://github.com/ensembleUI/ensemble/commit/84d402c72a1ccd7408a74b2b91607eb51c312d61))
- - **REFACTOR**: rename otp verification methods. ([7e3408e0](https://github.com/ensembleUI/ensemble/commit/7e3408e01a1006700be01e1f4403395eebd13f32))
- - **FEAT**: update validateVerificationCode to return user and idToken, enhance onSuccess callback. ([33abb106](https://github.com/ensembleUI/ensemble/commit/33abb10689de2fcb5328194a44097a6757e0298d))
- - **FEAT**: add onVerificationFailure callback to handle verification errors more effectively. ([08bc0ac6](https://github.com/ensembleUI/ensemble/commit/08bc0ac676139b543e24694f290df58dd57d4f13))
- - **FEAT**: add method parameter to verification code actions for improved method handling. ([976adb71](https://github.com/ensembleUI/ensemble/commit/976adb7154ac3a8007828a6bf74e8d9c6c7d5a3c))
- - **FEAT**: add provider parameter to verification code actions for enhanced flexibility. ([440e1f32](https://github.com/ensembleUI/ensemble/commit/440e1f323706ac47243950cdceef441cc00b8694))
- - **FEAT**: add unit tests for phone sign-in functionality with mock FirebaseAuth. ([09770e6b](https://github.com/ensembleUI/ensemble/commit/09770e6ba012de025547b54803e443a02460659a))
- - **FEAT**: implement phone verification actions with firebase phone auth. ([5927c37c](https://github.com/ensembleUI/ensemble/commit/5927c37c9b636f7acf7c480d26db9c8d0217c90e))
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-
-## 2026-06-27
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.47`](#ensemble---v1247)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.2.47`](#ensemble_auth---v1247)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_wifi` - `v0.0.1+1`](#ensemble_wifi---v0011)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.2.47`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_wifi` - `v0.0.1+1`
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.47`
-
- - **REFACTOR**: update dependencies and improve import statements. ([712e0bb8](https://github.com/ensembleUI/ensemble/commit/712e0bb8e2c42b0cef55b2dd93d5df76ef029ad0))
- - **REFACTOR**: remove font_awesome_flutter dependency and update icon usage. ([a5d66023](https://github.com/ensembleUI/ensemble/commit/a5d66023cff5da18f5390682cfe2ee1e536572b6))
- - **FEAT**: update .gitignore and enhance ensemble module structure. ([5ec1b8eb](https://github.com/ensembleUI/ensemble/commit/5ec1b8eb926b00d2d0de4ea7f922f5f6e7e5ed9e))
- - **FEAT**: enhance LocalAssetsService with environment variable merging and asset loading. ([359793a3](https://github.com/ensembleUI/ensemble/commit/359793a3b6e801e8f97b985da1f1663213e5580b))
- - **FEAT**(cdn): improve asset cache management and cleanup. ([24f09d4c](https://github.com/ensembleUI/ensemble/commit/24f09d4cdefd1746c1700538b103769e20dc0ad4))
- - **FEAT**(cdn): enhance asset key management and prefetching. ([280d35c6](https://github.com/ensembleUI/ensemble/commit/280d35c6c09c8d191892f10d13d0c79de9c99ad2))
- - **FEAT**(cdn): enhance asset cache initialization and cleanup. ([9737308c](https://github.com/ensembleUI/ensemble/commit/9737308cd5442f4b1f489e067048ac50b8a991aa))
- - **FEAT**(cdn): implement CDN asset caching mechanism. ([7cc9f878](https://github.com/ensembleUI/ensemble/commit/7cc9f878591c71d6eb26ec2571e069e427d50e76))
- - **DOCS**: update README.md for Ensemble runtime. ([d6581847](https://github.com/ensembleUI/ensemble/commit/d6581847c621994ba6941023bcb3dc86b0706089))
- - **DOCS**: add comments to clarify asset management methods in LocalAssetsService. ([52ab49bd](https://github.com/ensembleUI/ensemble/commit/52ab49bd0a4a973fc9094393c8872d7e76db9f1a))
-
-
-## 2026-06-27
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble_auth` - `v1.2.46`](#ensemble_auth---v1246)
-
----
-
-#### `ensemble_auth` - `v1.2.46`
-
- - **REVERT**: downgrade Google Sign-In and Apple Sign-In dependencies to support Flutter 3.27.2. ([a9e183e6](https://github.com/ensembleUI/ensemble/commit/a9e183e62df683760de2e24a31e8bb4c1b6d2e1c))
- - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
- - **REFACTOR**: remove logging statements from SignInWithVerificationCode class. ([84d402c7](https://github.com/ensembleUI/ensemble/commit/84d402c72a1ccd7408a74b2b91607eb51c312d61))
- - **REFACTOR**: rename otp verification methods. ([7e3408e0](https://github.com/ensembleUI/ensemble/commit/7e3408e01a1006700be01e1f4403395eebd13f32))
- - **FEAT**: update validateVerificationCode to return user and idToken, enhance onSuccess callback. ([33abb106](https://github.com/ensembleUI/ensemble/commit/33abb10689de2fcb5328194a44097a6757e0298d))
- - **FEAT**: add onVerificationFailure callback to handle verification errors more effectively. ([08bc0ac6](https://github.com/ensembleUI/ensemble/commit/08bc0ac676139b543e24694f290df58dd57d4f13))
- - **FEAT**: add method parameter to verification code actions for improved method handling. ([976adb71](https://github.com/ensembleUI/ensemble/commit/976adb7154ac3a8007828a6bf74e8d9c6c7d5a3c))
- - **FEAT**: add provider parameter to verification code actions for enhanced flexibility. ([440e1f32](https://github.com/ensembleUI/ensemble/commit/440e1f323706ac47243950cdceef441cc00b8694))
- - **FEAT**: add unit tests for phone sign-in functionality with mock FirebaseAuth. ([09770e6b](https://github.com/ensembleUI/ensemble/commit/09770e6ba012de025547b54803e443a02460659a))
- - **FEAT**: implement phone verification actions with firebase phone auth. ([5927c37c](https://github.com/ensembleUI/ensemble/commit/5927c37c9b636f7acf7c480d26db9c8d0217c90e))
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-
-## 2026-06-18
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.46`](#ensemble---v1246)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_wifi` - `v0.0.1+1`](#ensemble_wifi---v0011)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_wifi` - `v0.0.1+1`
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.46`
-
- - **FEAT**(webview): add HTML content and JavaScript injection support. ([b54a3297](https://github.com/ensembleUI/ensemble/commit/b54a3297de9ca1b276542cf76887cf47eecefef7))
-
-
-## 2026-06-18
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.45`](#ensemble---v1245)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_wifi` - `v0.0.1+1`](#ensemble_wifi---v0011)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_wifi` - `v0.0.1+1`
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.45`
-
- - **REFACTOR**(wifi): simplify WiFi operations and update permissions. ([628d9b1a](https://github.com/ensembleUI/ensemble/commit/628d9b1a52efd6312f04ab49a1f298c8dcaf4e9f))
- - **REFACTOR**(api): enhance provider resolution and improve SSE cancellation handling. ([cc167aba](https://github.com/ensembleUI/ensemble/commit/cc167abac6cbe01191c50c2c118ff2464c6d8233))
- - **FIX**(action): restore page apiMap after executeAction completes. ([d1792947](https://github.com/ensembleUI/ensemble/commit/d179294746c602ea42588191365e6ed366d616d3))
- - **FIX**(sse): honor disconnect/dispose and cap error-path reconnects. ([01e667e3](https://github.com/ensembleUI/ensemble/commit/01e667e3ecc44c0e5470b97099742880e9c58de0))
- - **FIX**(security): encode Address widget Places proxy query parameters. ([1718c914](https://github.com/ensembleUI/ensemble/commit/1718c91414c9f961681ff9e6c8bcd8c49832b978))
- - **FIX**(cdn): serialize refresh and snapshot persisted cache metadata. ([4031a3a4](https://github.com/ensembleUI/ensemble/commit/4031a3a42b949d6f35b1b68dcf045b2b110b663a))
- - **FIX**(sse): scope dispose to per-screen provider instance. ([49c0d730](https://github.com/ensembleUI/ensemble/commit/49c0d73006bf82b9f65b3a2911971a3c8ce5ed30))
- - **FEAT**(wifi): add WiFi connection capabilities. ([b4194289](https://github.com/ensembleUI/ensemble/commit/b41942890e2c1ea15a804eadf183b9b81d779948))
- - **FEAT**(cdn): enhance CDN request handling with dynamic headers and versioning. ([f6635c76](https://github.com/ensembleUI/ensemble/commit/f6635c76cced1c921a61ac9e198d4e6bbf4202ea))
- - **FEAT**(ensemble): enhance reusable Actions handling. ([00973129](https://github.com/ensembleUI/ensemble/commit/009731290782caa46ac2bef5e4ec5658714850b2))
-
-
-## 2026-06-03
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.44`](#ensemble---v1244)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.44`
-
- - **FIX**(upload): scope cancelAll to upload Workmanager tags only. ([4d763ac4](https://github.com/ensembleUI/ensemble/commit/4d763ac4c883363a96a6a5b8b3c264bf8fb3f0b3))
- - **FIX**(upload): schedule every background batch with unique Workmanager names. ([33829f9b](https://github.com/ensembleUI/ensemble/commit/33829f9b49da513c587a2e603609cf8d1af49723))
- - **FIX**(navigation): clamp navigateViewGroup index before PageController.jumpToPage. ([0ce6723a](https://github.com/ensembleUI/ensemble/commit/0ce6723a14095823fb5d2f1ba3938c45f76c289d))
- - **FIX**(upload): complete cancelAll when some tasks are already completed. ([93cfc387](https://github.com/ensembleUI/ensemble/commit/93cfc387e700a5a1cb1c327b85f68a8ac56011d2))
- - **FIX**(storage): defer binding dispatches until public storage clear completes. ([8c2a52de](https://github.com/ensembleUI/ensemble/commit/8c2a52de1e84c078ff01905c3bce07428f5dc5ba))
- - **FIX**(listview): sync ListViewCore scroll controller when parent swaps it. ([c792a8a6](https://github.com/ensembleUI/ensemble/commit/c792a8a673196a1ae2eedf92ef488be438644602))
- - **FIX**(page): cancel header timers and dedupe storage event listeners. ([2c45e427](https://github.com/ensembleUI/ensemble/commit/2c45e4273678ff91007d486137e264dedc9c2251))
- - **FIX**(navigation): clamp ViewGroup tab index when payloads shrink. ([2b62b4a2](https://github.com/ensembleUI/ensemble/commit/2b62b4a2072862c27e9292ca0d38cefa1d1d9fad))
- - **DOCS**(ensemble): document storage.clear and multipart upload paths. ([d88fb624](https://github.com/ensembleUI/ensemble/commit/d88fb624b68136d3f006eac5ea7c6bc78752e1e2))
-
-
-## 2026-05-18
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.43`](#ensemble---v1243)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.43`
-
- - **FIX**(security): block path traversal in local bundled screen resolution. ([b317c925](https://github.com/ensembleUI/ensemble/commit/b317c9256d96cd01f3183866d3f5e38bfe9b6ff7))
- - **FIX**(layout): restore scroll controller when leaving footer scope. ([9f20ea43](https://github.com/ensembleUI/ensemble/commit/9f20ea43ddb389d6a718122dc01240fc5d3d3932))
- - **FIX**(listview): dispose owned scroll controller. ([e5d1c101](https://github.com/ensembleUI/ensemble/commit/e5d1c101080f49ac0596f09d93c1d2df4e4dff22))
- - **FIX**(security): reject unsafe screen selectors in remote definition fetches. ([db7de5b2](https://github.com/ensembleUI/ensemble/commit/db7de5b28f45c0dd2438ff7d0e1bea61bba1da6d))
- - **FIX**(security): sanitize saveFile names before writing to storage. ([a3db4674](https://github.com/ensembleUI/ensemble/commit/a3db467427bd473e3b1a02c113369bcdaa75b6a4))
- - **FIX**(security): stop WebView from bypassing TLS and unsafe-browsing defaults. ([a51ba979](https://github.com/ensembleUI/ensemble/commit/a51ba979ddb12fa3cb48af0f436e5a1cb1057fc7))
- - **DOCS**(ensemble): document runtime security and device metric bindings. ([b7087842](https://github.com/ensembleUI/ensemble/commit/b7087842440ae498e11e1f088ddbfcc3f8d7dc5b))
-
-
-## 2026-05-15
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.42`](#ensemble---v1242)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.42`
-
- - **FIX**(device): update screenOrientation to use enum name for clarity. ([41b9dee0](https://github.com/ensembleUI/ensemble/commit/41b9dee0c974a06882db5edbd1219084ad81fc9c))
- - **FIX**(cdn): reset invalid manifest cache state. ([4e060421](https://github.com/ensembleUI/ensemble/commit/4e060421ebf7ba2121284ba93c825db7370b8f2d))
- - **FEAT**(device): streamline MediaQuery capability and add device metric notifications. ([991650b6](https://github.com/ensembleUI/ensemble/commit/991650b6666e615eca2e9b7f8418af847a08d3d0))
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
- - **DOCS**: move layout widget notes out of package readme. ([fc901707](https://github.com/ensembleUI/ensemble/commit/fc9017078bd2147c6486352e886a347a04ef6dcc))
- - **DOCS**: document layout widget scroll and tab behavior. ([ba64173e](https://github.com/ensembleUI/ensemble/commit/ba64173e4433c49d6907c78494970639d5a93748))
-
-
-## 2026-05-04
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.41`](#ensemble---v1241)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.41`
-
- - **REFACTOR**(tabbar): remove useIndexedTab setter duplication from TabBarController. ([faafd299](https://github.com/ensembleUI/ensemble/commit/faafd2996c3f0a9b9609acfba4e3286165e2ca80))
- - **FEAT**(tab): fix persistentTabBar behavior with listview. ([ed51255a](https://github.com/ensembleUI/ensemble/commit/ed51255a0b8456c9ec3654f6ddce1e315cae9d77))
- - **FEAT**(tabbar): add indexed tab mode with on-demand tab building and caching. ([93cd430b](https://github.com/ensembleUI/ensemble/commit/93cd430b0b700ae123ddf378f627ab884067f515))
- - **FEAT**(tab): add persistentTabBar option for keep the tab pinned. ([bbafb0d1](https://github.com/ensembleUI/ensemble/commit/bbafb0d1c3be1f321cbe92f3cc0d8598e476dde0))
-
-
-## 2026-04-28
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.40`](#ensemble---v1240)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.40`
-
- - **REFACTOR**(cdn): improve secret management and artifact handling in CdnDefinitionProvider. ([a2c87792](https://github.com/ensembleUI/ensemble/commit/a2c877925a4d2ac489aab8c5a89f3e66e4dd5a98))
- - **FEAT**(cdn): enhance CdnDefinitionProvider with environment variable handling and secret management. ([42669188](https://github.com/ensembleUI/ensemble/commit/42669188ea423c9dba5beac449ee38853f01b88b))
-
-
-## 2026-04-06
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.39`](#ensemble---v1239)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.39`
-
- - **FIX**(incorrect header format): explicit convertion of header entry into string. ([84ead788](https://github.com/ensembleUI/ensemble/commit/84ead788a7cd0b1aee50292eabf07bc8ae3c490d))
- - **FIX**(invoke_api_action): handle FirestoreResponse in error handling. ([c8cb1c7b](https://github.com/ensembleUI/ensemble/commit/c8cb1c7b1bb97405bc61893338b1aeab53838a8f))
- - **FIX**(phone_contact): replace RuntimeError with debugPrint for missing contact photo. ([b36b399d](https://github.com/ensembleUI/ensemble/commit/b36b399d91fad26e46e14f0845c624a3f8b768c9))
- - **FEAT**(image): enhance header evaluation for dynamic HTTP headers in image requests. ([e24544fe](https://github.com/ensembleUI/ensemble/commit/e24544fe2587a4119f6c4a8242e9b51948eef57c))
- - **FEAT**(image): add support for custom HTTP headers in image requests. ([3a304a2c](https://github.com/ensembleUI/ensemble/commit/3a304a2cd01a2af6046a327a9380cf259cb1e37e))
- - **FEAT**(dotenv): implement dotenv bundle parsing and refactor config loading. ([0a987c94](https://github.com/ensembleUI/ensemble/commit/0a987c94aef06e2b220fca85c1d8f43c707fd506))
- - **FEAT**(action): add ActionType.executeAction to ActionInvokable class. ([b5cc5a4a](https://github.com/ensembleUI/ensemble/commit/b5cc5a4af5ac95b0ed4971349f5cf5ab9a481672))
- - **FEAT**(lottie): add custom Lottie decoder for .lottie file ext support. ([cc73e7cf](https://github.com/ensembleUI/ensemble/commit/cc73e7cf87475a7e538b0c88a099a90c5c63af21))
-
-
-## 2026-03-18
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.38`](#ensemble---v1238)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.38`
-
- - **FEAT**(env): enhance environment variable loading and parsing. ([b7666ceb](https://github.com/ensembleUI/ensemble/commit/b7666ceb292427ad24445cc3080a68e9aca8c47a))
- - **FEAT**(cdn_provider): add runtime translation refresh and testing capabilities. ([c9ba1fd2](https://github.com/ensembleUI/ensemble/commit/c9ba1fd23c34031c96e2248f1b05cf2ba2b4bc88))
-
-
-## 2026-03-15
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.37`](#ensemble---v1237)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.37`
-
- - **FIX**(firestore_types): handle FirestoreTimestamp conversion in EnsembleFieldValue class. ([a4e8dba0](https://github.com/ensembleUI/ensemble/commit/a4e8dba0142250eee12b09fd012ae85e5ac18f2f))
-
-
-## 2026-03-11
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.36`](#ensemble---v1236)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.36`
-
- - **FIX**(page_model): convert keys to strings in merged global actions. ([4dcb7e4a](https://github.com/ensembleUI/ensemble/commit/4dcb7e4a888a6259cb4f1a8daceb6338731ec6c8))
- - **FEAT**(secure_storage): enhance secure storage actions with optional encryption parameters. ([dee0bb57](https://github.com/ensembleUI/ensemble/commit/dee0bb571152e95b4cdc658924b2399c6b4f58b4))
-
-
-## 2026-03-08
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.35`](#ensemble---v1235)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_face_camera` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.35`
-
- - **FIX**(page_model): convert keys to strings in merged global actions. ([4dcb7e4a](https://github.com/ensembleUI/ensemble/commit/4dcb7e4a888a6259cb4f1a8daceb6338731ec6c8))
-
-
-## 2026-03-08
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.35`](#ensemble---v1235)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.35`
-
- - **FIX**(execute_action): update payload key from 'action' to 'body' in ExecuteActionAction class. ([7e1b8466](https://github.com/ensembleUI/ensemble/commit/7e1b846611b4da27f21fa3474d8a6de05b40b768))
- - **FIX**(page_model): add 'Actions' to the list of available types in PageModel. ([6dc07f06](https://github.com/ensembleUI/ensemble/commit/6dc07f06e447c5cdbf49be6f29a54e74fa6987e5))
- - **FEAT**(actions): introduce reusable action execution framework. ([482d7de9](https://github.com/ensembleUI/ensemble/commit/482d7de922433bb41a282cfdd018f13866fe511f))
-
-
-## 2026-03-02
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.34`](#ensemble---v1234)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_face_camera` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.34`
-
- - **FEAT**(remote_config): add Firebase Remote Config integration. ([906f0133](https://github.com/ensembleUI/ensemble/commit/906f013322dcda45a1740db24b5e21f63ea372e5))
-
-
-## 2026-02-27
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.33`](#ensemble---v1233)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_face_camera` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.33`
-
- - **FEAT**(face_camera): separate face detection from ensemble_camera into separate module. ([9857c3cc](https://github.com/ensembleUI/ensemble/commit/9857c3cc3048f2c8879feeb07d77b084181010cd))
-
-
-## 2026-02-21
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.32`](#ensemble---v1232)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.32`
-
- - Upgrading ensemble version to 1.2.32
-
-
-## 2026-02-07
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.31`](#ensemble---v1231)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.31`
-
- - **FEAT**: add spans support to Text widget for inline rich text and widget embedding. ([69f92b19](https://github.com/ensembleUI/ensemble/commit/69f92b19502c9b7db8248123e192f808b64d1869))
-
-
-## 2026-02-05
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.30`](#ensemble---v1230)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.30`
-
- - Bump "ensemble" to `1.2.30`
-
-
-## 2026-01-14
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.29`](#ensemble---v1229)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.29`
-
- - **FIX**(api): correct apiState assignment in HttpResponse class. ([07766dc5](https://github.com/ensembleUI/ensemble/commit/07766dc5d67ebc886b81482fd71fefffadebea15))
- - **FEAT**(navigation): add static navigatorKey to EnsembleApp and update dismissBottomSheet logic. ([4ec3f9b9](https://github.com/ensembleUI/ensemble/commit/4ec3f9b9dd61f99e1eeb42781309452f036b1ab7))
-
-
-## 2025-12-30
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.28`](#ensemble---v1228)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.28`
-
- - Bump "ensemble" to `1.2.28`.
-
-
-## 2025-12-24
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.27`](#ensemble---v1227)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.27`
-
- - **FEAT**(api): implement DisconnectSSEAction and enhance SSE management. ([e75dce32](https://github.com/ensembleUI/ensemble/commit/e75dce323021aaa7797b63222d1fee7f700a8627))
-
-
-## 2025-12-24
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.26`](#ensemble---v1226)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_connect` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.26`
-
- - **FEAT**(api): add Server-Sent Events (SSE) API provider. ([c95b8789](https://github.com/ensembleUI/ensemble/commit/c95b87894108ed32de833fa6d83dc52ba3b0cf1e))
-
-
-## 2025-12-22
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.25`](#ensemble---v1225)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.25`
-
- - Bump "ensemble" to `1.2.25`.
-
-
-## 2025-12-12
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.24`](#ensemble---v1224)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.24`
-
-
-## 2025-12-08
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.23`](#ensemble---v1223)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.23`
-
- - Bump "ensemble" to `1.2.23`.
-
-
-## 2025-12-02
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.22`](#ensemble---v1222)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.22`
-
- - y
-
-
-## 2025-12-01
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.21`](#ensemble---v1221)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.21`
-
-
-## 2025-11-25
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.20`](#ensemble---v1220)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.20`
-
- - Bump "ensemble" to `1.2.20`.
-
-
-## 2025-11-24
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.19`](#ensemble---v1219)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.19`
-
- - Bump "ensemble" to `1.2.19`.
-
-
-## 2025-11-24
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.18`](#ensemble---v1218)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.18`
-
- - Bump "ensemble" to `1.2.18`.
-
-
-## 2025-11-11
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.17`](#ensemble---v1217)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
-
----
-
-#### `ensemble` - `v1.2.17`
-
- - Bump "ensemble" to `1.2.17`.
-
-
-## 2025-11-11
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.16`](#ensemble---v1216)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.16`
-
- - Bump "ensemble" to `1.2.16`.
-
-
-## 2025-11-11
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.16`](#ensemble---v1216)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.16`
-
- - Bump "ensemble" to `1.2.16`.
-
-
-## 2025-11-03
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.15`](#ensemble---v1215)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.15`
-
-
-## 2025-10-21
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.14`](#ensemble---v1214)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.14`
-
- - [Feature] QR scanner module separation
-
-
-## 2025-10-16
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.13`](#ensemble---v1213)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.13`
-
-
-## 2025-10-10
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.12`](#ensemble---v1212)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.12`
-
-
-## 2025-10-08
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.11`](#ensemble---v1211)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.11`
-
-
-## 2025-10-07
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.10`](#ensemble---v1210)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.10`
-
- - **FEAT**: load secrets from .env.secrets file in SecretsStore class. ([16adc60b](https://github.com/ensembleUI/ensemble/commit/16adc60bb426a9a71e146d986d4332107dc4f388))
- - **FEAT**: enhance secrets management by loading from .env.secrets file and refactor getSecrets method in CdnDefinitionProvider. ([2278ce84](https://github.com/ensembleUI/ensemble/commit/2278ce849745495d1c0f0fdae9f96e86624968c8))
-
-
-## 2025-10-06
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.9`](#ensemble---v129)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.9`
-
- - **FIX**: homeScreen mapping for CDN provider. ([d333c165](https://github.com/ensembleUI/ensemble/commit/d333c165f43f8c68dc838fd1a9acfa5041b05b51))
- - **FIX**: updated the ensemble artifacts logic to have presistent storage. ([bd9b5957](https://github.com/ensembleUI/ensemble/commit/bd9b5957fb85c2f6cada8243b25dc499b6f8bc2d))
-
-
-## 2025-10-01
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.8`](#ensemble---v128)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.8`
-
- - **REFACTOR**: enhance navigation logic by evaluating payloads and improving menu item visibility handling. ([9992099b](https://github.com/ensembleUI/ensemble/commit/9992099b36504db84662eb7e2c4e51157b78d105))
- - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
- - **REFACTOR**: update color handling in widget files to use withValues for opacity adjustments. ([562d8e9e](https://github.com/ensembleUI/ensemble/commit/562d8e9e5247d56362a783f6752a3c801016d1a6))
- - **REFACTOR**: replace MaterialState with WidgetState in theme and widget files for improved state management. ([77ece02f](https://github.com/ensembleUI/ensemble/commit/77ece02fecf121320e5f62e042ec993e5f7fd178))
- - **REFACTOR**: streamline caching mechanism in CdnDefinitionProvider by consolidating persistent cache keys and improving state management. ([9be858b0](https://github.com/ensembleUI/ensemble/commit/9be858b0265fc8c197c08d61d269b9bfdbd7a3ce))
-
-
-## 2025-09-28
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.7`](#ensemble---v127)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
-
----
-
-#### `ensemble` - `v1.2.7`
-
- - **REFACTOR**: update CdnDefinitionProvider documentation and clean up comment formatting for improved readability. ([59ae2e98](https://github.com/ensembleUI/ensemble/commit/59ae2e98ffae67e1e3d7d638d9c6fb8a3056a33e))
- - **REFACTOR**: enhance CdnDefinitionProvider by improving error messages, simplifying asset parsing, and refining translation handling. ([f58353c9](https://github.com/ensembleUI/ensemble/commit/f58353c960eedd8eeb1f1edbe14492c54acbc59a))
- - **REFACTOR**: update CdnDefinitionProvider to use a base URL and improve URL construction; change configuration to support CDN hosting. ([3c783cb5](https://github.com/ensembleUI/ensemble/commit/3c783cb5004a2123a8f8e448e30665fd6efa7038))
- - **REFACTOR**: update _parseTheme method to accept a Map and improve theme data handling. ([86110ff9](https://github.com/ensembleUI/ensemble/commit/86110ff9e619e88765b04a31cde0fab2683f0b0e))
- - **REFACTOR**: simplify lastUpdatedAt extraction in CdnDefinitionProvider. ([83f34d09](https://github.com/ensembleUI/ensemble/commit/83f34d097632009811482a2bae70902e991f3d37))
- - **FEAT**: implement XChaCha20-Poly1305 decryption for secrets in CdnDefinitionProvider, enhancing security and payload handling. ([94ec0b19](https://github.com/ensembleUI/ensemble/commit/94ec0b1905ae903d83618c50a828238ba65f6a05))
- - **FEAT**: add CDN definition provider. ([c1746d87](https://github.com/ensembleUI/ensemble/commit/c1746d87bd7886a6a20a087f772c5a5efd363804))
-
-
-## 2025-09-22
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.6`](#ensemble---v126)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.6`
-
- - **FIX**: converted Date objects to Timestamps. ([f59d69d3](https://github.com/ensembleUI/ensemble/commit/f59d69d37154e82a7e195275def76c0f69b19da9))
- - **FEAT**: added firebase analytics rest of unsupported functions. ([04f34898](https://github.com/ensembleUI/ensemble/commit/04f34898dd4a033a130084c0656b769de99e20f1))
-
-
-## 2025-09-05
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.5`](#ensemble---v125)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.5`
-
- - **FIX**: storage updates to page group as well. ([ab6e3c61](https://github.com/ensembleUI/ensemble/commit/ab6e3c613e4e33b7f5f12fe2c4cb517c75cba25c))
-
-
-## 2025-08-27
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.4`](#ensemble---v124)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.4`
-
- - **FEAT**(page): add collapsible header support and dynamic title bar height updates. ([d35eba01](https://github.com/ensembleUI/ensemble/commit/d35eba015c0a26429aa4201504bed7c686ed096b))
-
-
-## 2025-08-21
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.3`](#ensemble---v123)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.3`
-
- - **FIX**(page-group): notify selected page on ViewGroup resume. ([ff4cbfc4](https://github.com/ensembleUI/ensemble/commit/ff4cbfc4321635db54cf70bfc4650005fb9aa1de))
-
-
-## 2025-08-20
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.2`](#ensemble---v122)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.2`
-
-
-## 2025-08-19
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.1`](#ensemble---v121)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.1`
-
- - **FIX**: correct typo in calendar widget tooltip property. ([dc6d7312](https://github.com/ensembleUI/ensemble/commit/dc6d7312fe0712f41b81dd3c0888215146c6d173))
-
-
-## 2025-08-15
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.2.0`](#ensemble---v120)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.2.0`
-
- - **FEAT**(widget): enhance semantics label retrieval logic. ([7ddb5d55](https://github.com/ensembleUI/ensemble/commit/7ddb5d55634fe7aa0c4a3000671e37dc8f9b9e73))
-
-
-## 2025-08-07
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.80`](#ensemble---v1180)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.80`
-
- - Bump "ensemble" to `1.1.80`.
-
-
-## 2025-08-05
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.79`](#ensemble---v1179)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.79`
-
- - **FIX**: evaluating the saveFile action properties. ([dedb9658](https://github.com/ensembleUI/ensemble/commit/dedb9658a8ba16c443de6abce0f3130256f19ad9))
-
-
-## 2025-07-31
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.78`](#ensemble---v1178)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.78`
-
- - **FIX**(stripe): correct onSuccess callback reference in ShowPaymentSheetAction. ([60ce6612](https://github.com/ensembleUI/ensemble/commit/60ce661276fadee0d8ae863680d4a28c603597ca))
-
-
-## 2025-07-31
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.77`](#ensemble---v1177)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
-
----
-
-#### `ensemble` - `v1.1.77`
-
- - **FEAT**(stripe): add initializeStripe action and update payment sheet functionality. ([5622bd40](https://github.com/ensembleUI/ensemble/commit/5622bd40b4b21a21b55154444e2dbe2802b1dc68))
-
-
-## 2025-07-30
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.76`](#ensemble---v1176)
- - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_stripe` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.76`
-
- - **REFACTOR**(stripe): rename onComplete to onSuccess in ShowPaymentSheetAction. ([deddd07c](https://github.com/ensembleUI/ensemble/commit/deddd07cd498d249aca5b15f33319b981adace47))
- - **FEAT**(stripe): add Stripe payment integration module. ([1f29b783](https://github.com/ensembleUI/ensemble/commit/1f29b783f640e4cd6227c8bd36fd328b0b3f3f57))
-
-
-## 2025-07-25
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.75`](#ensemble---v1175)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
-
----
-
-#### `ensemble` - `v1.1.75`
-
- - **FIX**(widget): improve semantics label handling in EWidgetState. ([24fe4bd9](https://github.com/ensembleUI/ensemble/commit/24fe4bd914a98f3cf10bd3113bd2d0fd599f067b))
-
-
-## 2025-07-25
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.74`](#ensemble---v1174)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.74`
-
- - **FIX**(page_group): ensure default value for switchScreen in condition. ([eb222828](https://github.com/ensembleUI/ensemble/commit/eb222828e52f61c144db05a4cdb6c74f8ab52521))
-
-
-## 2025-07-25
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.73`](#ensemble---v1173)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.73`
-
- - **FIX**(page_group): ensure default value for switchScreen in condition. ([eb222828](https://github.com/ensembleUI/ensemble/commit/eb222828e52f61c144db05a4cdb6c74f8ab52521))
-
-
-## 2025-07-25
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.73`](#ensemble---v1173)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.73`
-
- - **FIX**(page_group): ensure default value for switchScreen in condition. ([eb222828](https://github.com/ensembleUI/ensemble/commit/eb222828e52f61c144db05a4cdb6c74f8ab52521))
-
-
-## 2025-07-25
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.73`](#ensemble---v1173)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.73`
-
- - **FIX**: semantics handling for aria-label. ([1ef42542](https://github.com/ensembleUI/ensemble/commit/1ef42542757da00f3f86b449764a94d7badb9eba))
- - **FIX**: refine route change subscription logic in PageGroupState. ([02e03f33](https://github.com/ensembleUI/ensemble/commit/02e03f3321539a01e8dafa776060395f8106a6bd))
-
-
-## 2025-07-24
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.72`](#ensemble---v1172)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.72`
-
- - **FIX**: update ensemble_app_badger dependency to version 1.6.1. ([9df43b5f](https://github.com/ensembleUI/ensemble/commit/9df43b5fb063b9dcafb25d571267b6799980965c))
-
-
-## 2025-07-11
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.71`](#ensemble---v1171)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.71`
-
-
-## 2025-07-01
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.70`](#ensemble---v1170)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.70`
-
- - n
-
-
-## 2025-07-01
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.69`](#ensemble---v1169)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.69`
-
-
-## 2025-07-01
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.68`](#ensemble---v1168)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.68`
-
-
-## 2025-06-29
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.67`](#ensemble---v1167)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.67`
-
- - 1.1.67
-
-
-## 2025-06-16
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.66`](#ensemble---v1166)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.66`
-
- - updating
-
-
-## 2025-06-13
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.65`](#ensemble---v1165)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.65`
-
- - **REFACTOR**(adobe_analytics): streamline initialization and remove redundant checks. ([5714a3fc](https://github.com/ensembleUI/ensemble/commit/5714a3fc1820bb7522f3f08183d46dc727c300df))
-
-
-## 2025-06-13
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.64`](#ensemble---v1164)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.64`
-
- - **REFACTOR**(adobe_analytics): streamline initialization and remove redundant checks. ([5714a3fc](https://github.com/ensembleUI/ensemble/commit/5714a3fc1820bb7522f3f08183d46dc727c300df))
-
-
-## 2025-06-12
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.64`](#ensemble---v1164)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.64`
-
- - version build => enabling adobe analytics for build system
-
-
-## 2025-06-12
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.63`](#ensemble---v1163)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.63`
-
- - **REFACTOR**: remove redundant event name checks in LogEvent class. ([09001583](https://github.com/ensembleUI/ensemble/commit/09001583522736c3c6876500ce24041ef47c8438))
- - **REFACTOR**: streamline Adobe Analytics event tracking and remove unused methods. ([d22e3aa8](https://github.com/ensembleUI/ensemble/commit/d22e3aa818a96b8b836ca88fde991b687eb2248c))
- - **FEAT**: integrate Assurance functionality into Adobe Analytics module. ([7e16c4e9](https://github.com/ensembleUI/ensemble/commit/7e16c4e9e7b7795e3b9517f264096601c32c1f69))
- - **FEAT**: integrate user profile management into Adobe Analytics module. ([e30660ee](https://github.com/ensembleUI/ensemble/commit/e30660ee8f201db10ad1a30e5c3e94c7a08e585b))
- - **FEAT**: add consent management to Adobe Analytics module. ([9a8a750f](https://github.com/ensembleUI/ensemble/commit/9a8a750f94699a20ada3d1606184df57dbee3720))
- - **FEAT**: enhance Adobe Analytics module with core, edge, and identity functionalities. ([a49e1224](https://github.com/ensembleUI/ensemble/commit/a49e1224f322b4780467d6e9b794e3896a0958fa))
- - **FEAT**: update Adobe Analytics methods to return dynamic results. ([3a9caf08](https://github.com/ensembleUI/ensemble/commit/3a9caf08fa37c03484ff3c04be4bf18bb6bd4d68))
- - **FEAT**: add setupAssurance method to Adobe Analytics module for session management. ([9d01e220](https://github.com/ensembleUI/ensemble/commit/9d01e2201f97baf1320ace14271ee70ceae3255e))
- - **FEAT**: enhance Adobe Analytics event tracking with timeout handling and parameter type adjustments. ([48d4880c](https://github.com/ensembleUI/ensemble/commit/48d4880c3138e463665b704681eec3d5f57188b7))
- - **FEAT**: add Adobe Analytics module for Ensemble integration. ([77fadddb](https://github.com/ensembleUI/ensemble/commit/77fadddb913ed20834f977db0fe78ee79c93005b))
-
-
-## 2025-06-11
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.62`](#ensemble---v1162)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.62`
-
-
-## 2025-06-06
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.61`](#ensemble---v1161)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.61`
-
- - Updating ensemble version to 1.1.61
-
-
-## 2025-06-04
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.60`](#ensemble---v1160)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.60`
-
-
-## 2025-06-03
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.59`](#ensemble---v1159)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.59`
-
-
-## 2025-06-02
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.58`](#ensemble---v1158)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.58`
-
- - n
-
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## 2025-06-02
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.57`](#ensemble---v1157)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.57`
-
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## 2025-05-29
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.56`](#ensemble---v1156)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.56`
-
-
-## 2025-05-27
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.55`](#ensemble---v1155)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.55`
-
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## 2025-05-26
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.54`](#ensemble---v1154)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.54`
-
-
-## 2025-05-17
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.53`](#ensemble---v1153)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.53`
-
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## 2025-05-15
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.52`](#ensemble---v1152)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.52`
-
-
-## 2025-05-15
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.51`](#ensemble---v1151)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.51`
-
- - n
-
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## 2025-05-09
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.50`](#ensemble---v1150)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.50`
-
- - **FIX**: add Bluetooth action types to ActionInvokable. ([8e662847](https://github.com/ensembleUI/ensemble/commit/8e662847ced9033b8cdbffebfec14dcb98e55f18))
- - **FIX**: firebase phone auth actions invokable. ([fe94ae21](https://github.com/ensembleUI/ensemble/commit/fe94ae21627c8460028860a8452b71dd99c18cf6))
- - **FIX**: CheckPermission action execution logic. ([b0af7e40](https://github.com/ensembleUI/ensemble/commit/b0af7e406e5504dc45443091a9657723242f363c))
- - **FIX**: add ActionType.getNetworkInfo to ActionInvokable. ([c7091665](https://github.com/ensembleUI/ensemble/commit/c7091665da2b933cab6aca8161c46ca16760c621))
- - **FEAT**: add new action types for badge management. ([71c98763](https://github.com/ensembleUI/ensemble/commit/71c987631dbc0d82f1f206e8607cc9abc5a5df34))
- - **FEAT**: implement PlaidLinkAction execution logic. ([0db8e85a](https://github.com/ensembleUI/ensemble/commit/0db8e85af03ec8275b1d30137789230518a2dedd))
-
-
-## 2025-05-06
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.49`](#ensemble---v1149)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.49`
-
- - CHnaging to 1.1.49
-
-
-## 2025-04-22
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.48`](#ensemble---v1148)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.48`
-
- - **FIX**: enhance package name and signature validation in DeviceSecurity class. ([1cecfd8e](https://github.com/ensembleUI/ensemble/commit/1cecfd8ee3f94f071eb292e1b450166f8244ba22))
-
-
-## 2025-04-22
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.47`](#ensemble---v1147)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.47`
-
- - Ensemble to 1.1.47
-
-
-## 2025-04-18
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.45`](#ensemble---v1145)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.45`
-
-
-## 2025-04-18
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.44`](#ensemble---v1144)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.44`
-
- - **REFACTOR**: replace root_jailbreak_sniffer with safe_device for enhanced device security checks. ([2b873f56](https://github.com/ensembleUI/ensemble/commit/2b873f56083dc7c16e79efabe4addc25e66ea327))
-
-
-## 2025-04-11
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.43`](#ensemble---v1143)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.43`
-
-
-## 2025-04-09
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.42`](#ensemble---v1142)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.42`
-
- - **REFACTOR**: update validateJsCode method to include DataContext parameter. ([cfee0493](https://github.com/ensembleUI/ensemble/commit/cfee049346da5a82528360b37bbbeb4ce0ff9cd2))
- - **REFACTOR**: update validateJsCode method to remove DataContext parameter. ([ab6bc651](https://github.com/ensembleUI/ensemble/commit/ab6bc651ad44cc07954cd408d72a1f19d977f384))
- - **FEAT**: simplify EnsembleStorage method mappings and enhance JSValidator property access error handling. ([05661a5e](https://github.com/ensembleUI/ensemble/commit/05661a5e0d132cbc0342a88f90d8da5521185ec6))
- - **FEAT**: update EnsembleStorage methods to accept dynamic values for setProperty and implement property access checks. ([1e3373a5](https://github.com/ensembleUI/ensemble/commit/1e3373a50185a2732c8468c4f4743da25e72a279))
- - **FEAT**: refactor JSInterpreter validation logic into JSValidator for improved error handling and context-aware checks. ([b47d93ac](https://github.com/ensembleUI/ensemble/commit/b47d93ac1db79e65dc77082c127ca867c5f437a4))
- - **FEAT**: enhance JS code validation in DevMode and add detailed error handling. ([00d0f617](https://github.com/ensembleUI/ensemble/commit/00d0f6172ff96eb2368aca85c6199da12d937db5))
- - **FEAT**: add JS code validation method in DevMode class. ([6006ffcb](https://github.com/ensembleUI/ensemble/commit/6006ffcbd1e10044d25109f0574bd858a1db43dd))
-
-
-## 2025-04-09
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.41`](#ensemble---v1141)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.41`
-
- - Updating Ensemble to 1.1.41
-
-
-## 2025-04-03
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.40`](#ensemble---v1140)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.40`
-
-
-## 2025-03-26
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.39`](#ensemble---v1139)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.39`
-
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## 2025-03-24
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.38`](#ensemble---v1138)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.38`
-
- - Bump "ensemble" to `1.1.38`.
-
-
-## 2025-03-24
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.37`](#ensemble---v1137)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.37`
-
- - Bump "ensemble" to `1.1.37`.
-
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## 2025-03-22
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.36`](#ensemble---v1136)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.36`
-
-
-## 2025-03-14
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.35`](#ensemble---v1135)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.35`
-
-
-## 2025-03-13
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.34`](#ensemble---v1134)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.34`
-
- - Bump "ensemble" to `1.1.34`.
-
-
-## 2025-03-12
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.33`](#ensemble---v1133)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.33`
-
- - **FIX**: keep the focus sensitive field focused on dialog open. ([efc94638](https://github.com/ensembleUI/ensemble/commit/efc94638254ed69c55f8bf8d1192cd5d2c51d6ba))
-
-
-## 2025-03-06
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.31`](#ensemble---v1131)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.31`
-
- - Changing version
-
-
-## 2025-03-03
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.30`](#ensemble---v1130)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.30`
-
-
-## 2025-03-03
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.29`](#ensemble---v1129)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.29`
-
- - **FIX**(notification_manager): initialize message handling on startup. ([9ca35acb](https://github.com/ensembleUI/ensemble/commit/9ca35acbd9b868198acb29fa618841b362ac8d19))
-
-
-## 2025-02-28
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.28`](#ensemble---v1128)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.28`
-
-
-## 2025-02-24
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.27`](#ensemble---v1127)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.27`
-
- - **FIX**: handle exceptions in getLocalAssetFullPath. ([8844d487](https://github.com/ensembleUI/ensemble/commit/8844d4874ddde3e7a3244e663c5cdcf0ee6520b7))
-
-
-## 2025-02-21
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.26`](#ensemble---v1126)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.26`
-
- - **FIX**: ensure EnsembleConfigService is initialized before accessing config. ([1f8df899](https://github.com/ensembleUI/ensemble/commit/1f8df8997f7a9ab2dffae88ad96ac898cb49fa0a))
-
-
-## 2025-02-21
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.25`](#ensemble---v1125)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.25`
-
-
-## 2025-02-20
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.24`](#ensemble---v1124)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.24`
-
- - Bump "ensemble" to `1.1.24`.
-
-
-## 2025-02-19
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.23`](#ensemble---v1123)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.23`
-
-
-## 2025-02-13
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.22`](#ensemble---v1122)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.22`
-
- - **REFACTOR**: remove no internet widget. ([e03359b2](https://github.com/ensembleUI/ensemble/commit/e03359b2dd6b1290bea39c71c69e2a3d5ad27c13))
- - **REFACTOR**: replace offline widget with error screen for no internet connection. ([b0163a1b](https://github.com/ensembleUI/ensemble/commit/b0163a1ba20eb72c7a459afb3dfa59e1729cf9bf))
- - **FIX**: auto complete dropdown selected label. ([80b9c8f5](https://github.com/ensembleUI/ensemble/commit/80b9c8f54c753aca7884fd12ed449c5f019d981b))
- - **FEAT**: reinitialize app state when internet connectivity is restored. ([e914e337](https://github.com/ensembleUI/ensemble/commit/e914e337e54bbe539f08aa192b0a50b118708a00))
- - **FEAT**: implement internet connectivity check in runtime. ([30204d3b](https://github.com/ensembleUI/ensemble/commit/30204d3bb29324d9ae44380fc919b450cf30cfd0))
-
-
-## 2025-02-07
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.21`](#ensemble---v1121)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.21`
-
-
-## 2025-02-07
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.20`](#ensemble---v1120)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.20`
-
- - Bump "ensemble" to `1.1.20`.
-
-
-## 2025-02-06
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.19`](#ensemble---v1119)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.19`
-
-
-## 2025-01-30
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.18`](#ensemble---v1118)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.18`
-
-
-## 2025-01-23
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.17`](#ensemble---v1117)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.17`
-
- - **FIX**: bad state no element on scrollabletabbar. ([f45b71e6](https://github.com/ensembleUI/ensemble/commit/f45b71e67caef2fc7753a837a7c1f27db0eeb4a2))
-
-
-## 2025-01-23
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.16`](#ensemble---v1116)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.16`
-
- - **REFACTOR**: make phoneNumber optional and handle empty values in verification actions. ([49810b31](https://github.com/ensembleUI/ensemble/commit/49810b315fb461964d8839b5b619538611f63cbb))
- - **REFACTOR**: simplify payload handling in verification code actions. ([0441b40c](https://github.com/ensembleUI/ensemble/commit/0441b40c7e355eae9e7960f9ea15b41571d5d19d))
- - **REFACTOR**: rename otp verification methods. ([7e3408e0](https://github.com/ensembleUI/ensemble/commit/7e3408e01a1006700be01e1f4403395eebd13f32))
- - **FEAT**: update validateVerificationCode to return user and idToken, enhance onSuccess callback. ([33abb106](https://github.com/ensembleUI/ensemble/commit/33abb10689de2fcb5328194a44097a6757e0298d))
- - **FEAT**: add onVerificationFailure callback to handle verification errors more effectively. ([08bc0ac6](https://github.com/ensembleUI/ensemble/commit/08bc0ac676139b543e24694f290df58dd57d4f13))
- - **FEAT**: add method parameter to verification code actions for improved method handling. ([976adb71](https://github.com/ensembleUI/ensemble/commit/976adb7154ac3a8007828a6bf74e8d9c6c7d5a3c))
- - **FEAT**: add provider parameter to verification code actions for enhanced flexibility. ([440e1f32](https://github.com/ensembleUI/ensemble/commit/440e1f323706ac47243950cdceef441cc00b8694))
- - **FEAT**: implement phone verification actions with firebase phone auth. ([5927c37c](https://github.com/ensembleUI/ensemble/commit/5927c37c9b636f7acf7c480d26db9c8d0217c90e))
-
-
-## 2025-01-16
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.15`](#ensemble---v1115)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.15`
-
- - **FIX**: type comma. ([f0749e36](https://github.com/ensembleUI/ensemble/commit/f0749e36da3e1f3e39866039b1062bd8f81319ee))
- - **FIX**: typo missing semi-colon. ([76d0d99a](https://github.com/ensembleUI/ensemble/commit/76d0d99a8a7f0a2b0f583cb7888c649cfd0b3282))
-
-
-## 2025-01-07
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.14`](#ensemble---v1114)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.14`
-
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## 2025-01-03
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.13`](#ensemble---v1113)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.13`
-
- - Moengage Module Release
-
- - **FIX**: unreliable showpreview. ([2365d35e](https://github.com/ensembleUI/ensemble/commit/2365d35e5b44743d1924ce5c6e7875676858296b))
-
-
-## 2024-12-16
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.12`](#ensemble---v1112)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.12`
-
- - **FIX**: fluttertoast breaking changes. ([d29696d3](https://github.com/ensembleUI/ensemble/commit/d29696d3a4869ce0837c1f200e5ccfe7aa1449f7))
-
-
-## 2024-12-11
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.11`](#ensemble---v1111)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.11`
-
-
-## 2024-12-09
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.10`](#ensemble---v1110)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.10`
-
- - **FIX**: multiple navigator key. ([7ae53f25](https://github.com/ensembleUI/ensemble/commit/7ae53f2542790c5fe0ec616d98f7aba69f277e3b))
-
-
-## 2024-11-28
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.8`](#ensemble---v118)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.8`
-
- - Bump "ensemble" to `1.1.8`.
-
-
-## 2024-11-27
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.6`](#ensemble---v116)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.6`
-
- - Bump "ensemble" to `1.1.6`.
-
-
-## 2024-11-26
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.5`](#ensemble---v115)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.5`
-
- - **FIX**: uninitialized getIt and handle externalKey properly. ([9b46738a](https://github.com/ensembleUI/ensemble/commit/9b46738a4a9cde57f09db7f40d174baed9e57550))
-
-
-## 2024-11-18
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.4`](#ensemble---v114)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.4`
-
- - Ensemble version with flutter 3.24.3 support
-
-
-## 2024-11-18
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.3`](#ensemble---v113)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.3`
-
- - last ensemble version to support flutter 3.19.5
-
- - **FEAT**: Add reactive orientation support to Device class. ([47fc9314](https://github.com/ensembleUI/ensemble/commit/47fc93148c1eeaea7e87c4eb4131aa368726e9f7))
-
-
-## 2024-11-14
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.2`](#ensemble---v112)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.2`
-
- - last ensemble support for 3.19.5
-
-
-## 2024-11-08
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.1`](#ensemble---v111)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_bluetooth` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.1`
-
-
-## 2024-10-08
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.1.0`](#ensemble---v110)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.1.0`
-
-
-## 2024-10-03
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.0.9`](#ensemble---v109)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.0.9`
-
-
-## 2024-10-01
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.0.8`](#ensemble---v108)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.0.8`
-
-
-## 2024-10-01
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.0.7`](#ensemble---v107)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.0.7`
-
-
-## 2024-10-01
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.0.7`](#ensemble---v107)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.0.7`
-
-
-## 2024-10-01
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.0.7`](#ensemble---v107)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.0.7`
-
- - Bump "ensemble" to `1.0.7`.
-
-
-## 2024-10-01
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.0.7`](#ensemble---v107)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.0.7`
-
- - moving to 1.0.7 to fix the version issue with firebase analytics
-
-
-## 2024-09-28
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.0.6`](#ensemble---v106)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.0.6`
-
-
-## 2024-09-13
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.0.5`](#ensemble---v105)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.0.5`
-
- - Bump "ensemble" to `1.0.5`.
-
-
-## 2024-09-13
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.0.4`](#ensemble---v104)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.0.4`
-
-
-## 2024-08-28
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.0.3`](#ensemble---v103)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.0.3`
-
- - Unified theme
-
-
-## 2024-08-28
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.0.2`](#ensemble---v102)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.0.2`
-
-
-## 2024-08-27
-
-### Changes
-
----
-
-Packages with breaking changes:
-
- - There are no breaking changes in this release.
-
-Packages with other changes:
-
- - [`ensemble` - `v1.0.1`](#ensemble---v101)
- - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
-
-Packages with dependency updates only:
-
-> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
-
- - `ensemble_chat` - `v0.0.1+1`
- - `ensemble_camera` - `v0.0.1+1`
- - `ensemble_auth` - `v1.0.1`
- - `ensemble_location` - `v0.0.1+1`
- - `ensemble_file_manager` - `v0.0.1+1`
- - `ensemble_deeplink` - `v0.0.1+1`
- - `ensemble_contacts` - `v0.0.1+1`
- - `ensemble_network_info` - `v0.0.1+1`
- - `ensemble_connect` - `v0.0.1+1`
-
----
-
-#### `ensemble` - `v1.0.1`
-
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+## 2026-08-31
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.53`](#ensemble---v1253)
+ - [`ensemble_network_info` - `v1.2.53`](#ensemble_network_info---v1253)
+ - [`ensemble_stripe` - `v1.2.53`](#ensemble_stripe---v1253)
+ - [`ensemble_file_manager` - `v1.2.53`](#ensemble_file_manager---v1253)
+ - [`ensemble_chat` - `v1.2.53`](#ensemble_chat---v1253)
+ - [`ensemble_auth` - `v1.2.53`](#ensemble_auth---v1253)
+ - [`ensemble_bluetooth` - `v1.2.53`](#ensemble_bluetooth---v1253)
+ - [`ensemble_wifi` - `v1.2.53`](#ensemble_wifi---v1253)
+ - [`ensemble_face_camera` - `v1.2.53`](#ensemble_face_camera---v1253)
+ - [`ensemble_connect` - `v1.2.53`](#ensemble_connect---v1253)
+ - [`ensemble_contacts` - `v1.2.53`](#ensemble_contacts---v1253)
+ - [`ensemble_location` - `v1.2.53`](#ensemble_location---v1253)
+ - [`ensemble_camera` - `v1.2.53`](#ensemble_camera---v1253)
+ - [`ensemble_deeplink` - `v1.2.53`](#ensemble_deeplink---v1253)
+ - [`ensemble_remote_config` - `v1.2.53`](#ensemble_remote_config---v1253)
+ - [`ensemble_firebase_analytics` - `v1.2.53`](#ensemble_firebase_analytics---v1253)
+ - [`ensemble_qr_scanner` - `v1.2.53`](#ensemble_qr_scanner---v1253)
+ - [`ensemble_adobe_analytics` - `v1.2.53`](#ensemble_adobe_analytics---v1253)
+ - [`ensemble_moengage` - `v1.2.53`](#ensemble_moengage---v1253)
+ - [`ensemble_bracket` - `v1.2.53`](#ensemble_bracket---v1253)
+ - [`ensemble_test_runner` - `v1.3.5`](#ensemble_test_runner---v135)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_test_runner` - `v1.3.5`
+
+---
+
+#### `ensemble` - `v1.2.53`
+
+ - **FIX**(dependencies): pin html package version to avoid breaking changes with flutter_html. ([01d1dba0](https://github.com/ensembleUI/ensemble/commit/01d1dba0fe0d9935690257bd00d2d92b3dd7e9d5))
+ - **FEAT**(wifi): enhance error handling for Wi-Fi connection failures ([#2355](https://github.com/ensembleUI/ensemble/issues/2355)). ([91e71af2](https://github.com/ensembleUI/ensemble/commit/91e71af2d404b793f11318682453efe782e5b8a1))
+ - **FEAT**(border): add dashed and dotted borderStyle for container widgets ([#2356](https://github.com/ensembleUI/ensemble/issues/2356)). ([26d747ed](https://github.com/ensembleUI/ensemble/commit/26d747ed23a14d5138aa35d5833255ae337a6655))
+
+#### `ensemble_network_info` - `v1.2.53`
+
+ - Bump "ensemble_network_info" to `1.2.53`.
+
+#### `ensemble_stripe` - `v1.2.53`
+
+ - Bump "ensemble_stripe" to `1.2.53`.
+
+#### `ensemble_file_manager` - `v1.2.53`
+
+ - Bump "ensemble_file_manager" to `1.2.53`.
+
+#### `ensemble_chat` - `v1.2.53`
+
+ - Bump "ensemble_chat" to `1.2.53`.
+
+#### `ensemble_auth` - `v1.2.53`
+
+ - Bump "ensemble_auth" to `1.2.53`.
+
+#### `ensemble_bluetooth` - `v1.2.53`
+
+ - Bump "ensemble_bluetooth" to `1.2.53`.
+
+#### `ensemble_wifi` - `v1.2.53`
+
+ - **FEAT**(wifi): enhance error handling for Wi-Fi connection failures ([#2355](https://github.com/ensembleUI/ensemble/issues/2355)). ([91e71af2](https://github.com/ensembleUI/ensemble/commit/91e71af2d404b793f11318682453efe782e5b8a1))
+
+#### `ensemble_face_camera` - `v1.2.53`
+
+ - Bump "ensemble_face_camera" to `1.2.53`.
+
+#### `ensemble_connect` - `v1.2.53`
+
+ - Bump "ensemble_connect" to `1.2.53`.
+
+#### `ensemble_contacts` - `v1.2.53`
+
+ - Bump "ensemble_contacts" to `1.2.53`.
+
+#### `ensemble_location` - `v1.2.53`
+
+ - Bump "ensemble_location" to `1.2.53`.
+
+#### `ensemble_camera` - `v1.2.53`
+
+ - Bump "ensemble_camera" to `1.2.53`.
+
+#### `ensemble_deeplink` - `v1.2.53`
+
+ - Bump "ensemble_deeplink" to `1.2.53`.
+
+#### `ensemble_remote_config` - `v1.2.53`
+
+ - Bump "ensemble_remote_config" to `1.2.53`.
+
+#### `ensemble_firebase_analytics` - `v1.2.53`
+
+ - **FEAT**(licenses): add LICENSES.md generation script and update melos.yaml. ([64735d84](https://github.com/ensembleUI/ensemble/commit/64735d84fa81058de00d4d393fff7dbfb4eadbc7))
+
+#### `ensemble_qr_scanner` - `v1.2.53`
+
+ - Bump "ensemble_qr_scanner" to `1.2.53`.
+
+#### `ensemble_adobe_analytics` - `v1.2.53`
+
+ - Bump "ensemble_adobe_analytics" to `1.2.53`.
+
+#### `ensemble_moengage` - `v1.2.53`
+
+ - Bump "ensemble_moengage" to `1.2.53`.
+
+#### `ensemble_bracket` - `v1.2.53`
+
+ - Bump "ensemble_bracket" to `1.2.53`.
+
+
+## 2026-08-26
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.52`](#ensemble---v1252)
+ - [`ensemble_network_info` - `v1.2.52`](#ensemble_network_info---v1252)
+ - [`ensemble_stripe` - `v1.2.52`](#ensemble_stripe---v1252)
+ - [`ensemble_file_manager` - `v1.2.52`](#ensemble_file_manager---v1252)
+ - [`ensemble_chat` - `v1.2.52`](#ensemble_chat---v1252)
+ - [`ensemble_auth` - `v1.2.52`](#ensemble_auth---v1252)
+ - [`ensemble_bluetooth` - `v1.2.52`](#ensemble_bluetooth---v1252)
+ - [`ensemble_wifi` - `v1.2.52`](#ensemble_wifi---v1252)
+ - [`ensemble_face_camera` - `v1.2.52`](#ensemble_face_camera---v1252)
+ - [`ensemble_connect` - `v1.2.52`](#ensemble_connect---v1252)
+ - [`ensemble_contacts` - `v1.2.52`](#ensemble_contacts---v1252)
+ - [`ensemble_location` - `v1.2.52`](#ensemble_location---v1252)
+ - [`ensemble_camera` - `v1.2.52`](#ensemble_camera---v1252)
+ - [`ensemble_deeplink` - `v1.2.52`](#ensemble_deeplink---v1252)
+ - [`ensemble_remote_config` - `v1.2.52`](#ensemble_remote_config---v1252)
+ - [`ensemble_firebase_analytics` - `v1.2.52`](#ensemble_firebase_analytics---v1252)
+ - [`ensemble_qr_scanner` - `v1.2.52`](#ensemble_qr_scanner---v1252)
+ - [`ensemble_adobe_analytics` - `v1.2.52`](#ensemble_adobe_analytics---v1252)
+ - [`ensemble_moengage` - `v1.2.52`](#ensemble_moengage---v1252)
+ - [`ensemble_bracket` - `v1.2.52`](#ensemble_bracket---v1252)
+ - [`ensemble_test_runner` - `v1.3.4`](#ensemble_test_runner---v134)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_test_runner` - `v1.3.4`
+
+---
+
+#### `ensemble` - `v1.2.52`
+
+ - **FEAT**(navigation): add declarative navigation stack support ([#2351](https://github.com/ensembleUI/ensemble/issues/2351)). ([6e58cfb5](https://github.com/ensembleUI/ensemble/commit/6e58cfb5a211b513423056babee9ae32fcfb4cbf))
+
+#### `ensemble_network_info` - `v1.2.52`
+
+ - Bump "ensemble_network_info" to `1.2.52`.
+
+#### `ensemble_stripe` - `v1.2.52`
+
+ - Bump "ensemble_stripe" to `1.2.52`.
+
+#### `ensemble_file_manager` - `v1.2.52`
+
+ - Bump "ensemble_file_manager" to `1.2.52`.
+
+#### `ensemble_chat` - `v1.2.52`
+
+ - Bump "ensemble_chat" to `1.2.52`.
+
+#### `ensemble_auth` - `v1.2.52`
+
+ - Bump "ensemble_auth" to `1.2.52`.
+
+#### `ensemble_bluetooth` - `v1.2.52`
+
+ - Bump "ensemble_bluetooth" to `1.2.52`.
+
+#### `ensemble_wifi` - `v1.2.52`
+
+ - Bump "ensemble_wifi" to `1.2.52`.
+
+#### `ensemble_face_camera` - `v1.2.52`
+
+ - Bump "ensemble_face_camera" to `1.2.52`.
+
+#### `ensemble_connect` - `v1.2.52`
+
+ - Bump "ensemble_connect" to `1.2.52`.
+
+#### `ensemble_contacts` - `v1.2.52`
+
+ - Bump "ensemble_contacts" to `1.2.52`.
+
+#### `ensemble_location` - `v1.2.52`
+
+ - Bump "ensemble_location" to `1.2.52`.
+
+#### `ensemble_camera` - `v1.2.52`
+
+ - Bump "ensemble_camera" to `1.2.52`.
+
+#### `ensemble_deeplink` - `v1.2.52`
+
+ - Bump "ensemble_deeplink" to `1.2.52`.
+
+#### `ensemble_remote_config` - `v1.2.52`
+
+ - Bump "ensemble_remote_config" to `1.2.52`.
+
+#### `ensemble_firebase_analytics` - `v1.2.52`
+
+ - Bump "ensemble_firebase_analytics" to `1.2.52`.
+
+#### `ensemble_qr_scanner` - `v1.2.52`
+
+ - Bump "ensemble_qr_scanner" to `1.2.52`.
+
+#### `ensemble_adobe_analytics` - `v1.2.52`
+
+ - Bump "ensemble_adobe_analytics" to `1.2.52`.
+
+#### `ensemble_moengage` - `v1.2.52`
+
+ - Bump "ensemble_moengage" to `1.2.52`.
+
+#### `ensemble_bracket` - `v1.2.52`
+
+ - Bump "ensemble_bracket" to `1.2.52`.
+
+
+## 2026-08-25
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.51`](#ensemble---v1251)
+ - [`ensemble_network_info` - `v1.2.51`](#ensemble_network_info---v1251)
+ - [`ensemble_stripe` - `v1.2.51`](#ensemble_stripe---v1251)
+ - [`ensemble_file_manager` - `v1.2.51`](#ensemble_file_manager---v1251)
+ - [`ensemble_chat` - `v1.2.51`](#ensemble_chat---v1251)
+ - [`ensemble_auth` - `v1.2.51`](#ensemble_auth---v1251)
+ - [`ensemble_bluetooth` - `v1.2.51`](#ensemble_bluetooth---v1251)
+ - [`ensemble_wifi` - `v1.2.51`](#ensemble_wifi---v1251)
+ - [`ensemble_face_camera` - `v1.2.51`](#ensemble_face_camera---v1251)
+ - [`ensemble_connect` - `v1.2.51`](#ensemble_connect---v1251)
+ - [`ensemble_contacts` - `v1.2.51`](#ensemble_contacts---v1251)
+ - [`ensemble_location` - `v1.2.51`](#ensemble_location---v1251)
+ - [`ensemble_camera` - `v1.2.51`](#ensemble_camera---v1251)
+ - [`ensemble_deeplink` - `v1.2.51`](#ensemble_deeplink---v1251)
+ - [`ensemble_remote_config` - `v1.2.51`](#ensemble_remote_config---v1251)
+ - [`ensemble_firebase_analytics` - `v1.2.51`](#ensemble_firebase_analytics---v1251)
+ - [`ensemble_qr_scanner` - `v1.2.51`](#ensemble_qr_scanner---v1251)
+ - [`ensemble_adobe_analytics` - `v1.2.51`](#ensemble_adobe_analytics---v1251)
+ - [`ensemble_moengage` - `v1.2.51`](#ensemble_moengage---v1251)
+ - [`ensemble_bracket` - `v1.2.51`](#ensemble_bracket---v1251)
+ - [`ensemble_test_runner` - `v1.3.3`](#ensemble_test_runner---v133)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_test_runner` - `v1.3.3`
+
+---
+
+#### `ensemble` - `v1.2.51`
+
+ - **REFACTOR**: simplify modal detection logic in screen tracking ([#2339](https://github.com/ensembleUI/ensemble/issues/2339)). ([3f35c3cf](https://github.com/ensembleUI/ensemble/commit/3f35c3cf9c23009b343fa771d12193cb1ce04d85))
+ - **FEAT**(action_scope): enhance event handler registration and scope prep… ([#2344](https://github.com/ensembleUI/ensemble/issues/2344)). ([33dce9cd](https://github.com/ensembleUI/ensemble/commit/33dce9cd35a82410ec2e7ed042ac238745679c02))
+
+#### `ensemble_network_info` - `v1.2.51`
+
+ - Bump "ensemble_network_info" to `1.2.51`.
+
+#### `ensemble_stripe` - `v1.2.51`
+
+ - Bump "ensemble_stripe" to `1.2.51`.
+
+#### `ensemble_file_manager` - `v1.2.51`
+
+ - Bump "ensemble_file_manager" to `1.2.51`.
+
+#### `ensemble_chat` - `v1.2.51`
+
+ - Bump "ensemble_chat" to `1.2.51`.
+
+#### `ensemble_auth` - `v1.2.51`
+
+ - **FEAT**(auth_manager): enhance user session management by storing provid… ([#2340](https://github.com/ensembleUI/ensemble/issues/2340)). ([82c0da1a](https://github.com/ensembleUI/ensemble/commit/82c0da1a075a44e055a2aeaafb50dce5f798e850))
+
+#### `ensemble_bluetooth` - `v1.2.51`
+
+ - Bump "ensemble_bluetooth" to `1.2.51`.
+
+#### `ensemble_wifi` - `v1.2.51`
+
+ - Bump "ensemble_wifi" to `1.2.51`.
+
+#### `ensemble_face_camera` - `v1.2.51`
+
+ - Bump "ensemble_face_camera" to `1.2.51`.
+
+#### `ensemble_connect` - `v1.2.51`
+
+ - Bump "ensemble_connect" to `1.2.51`.
+
+#### `ensemble_contacts` - `v1.2.51`
+
+ - Bump "ensemble_contacts" to `1.2.51`.
+
+#### `ensemble_location` - `v1.2.51`
+
+ - Bump "ensemble_location" to `1.2.51`.
+
+#### `ensemble_camera` - `v1.2.51`
+
+ - Bump "ensemble_camera" to `1.2.51`.
+
+#### `ensemble_deeplink` - `v1.2.51`
+
+ - Bump "ensemble_deeplink" to `1.2.51`.
+
+#### `ensemble_remote_config` - `v1.2.51`
+
+ - Bump "ensemble_remote_config" to `1.2.51`.
+
+#### `ensemble_firebase_analytics` - `v1.2.51`
+
+ - Bump "ensemble_firebase_analytics" to `1.2.51`.
+
+#### `ensemble_qr_scanner` - `v1.2.51`
+
+ - Bump "ensemble_qr_scanner" to `1.2.51`.
+
+#### `ensemble_adobe_analytics` - `v1.2.51`
+
+ - Bump "ensemble_adobe_analytics" to `1.2.51`.
+
+#### `ensemble_moengage` - `v1.2.51`
+
+ - Bump "ensemble_moengage" to `1.2.51`.
+
+#### `ensemble_bracket` - `v1.2.51`
+
+ - Bump "ensemble_bracket" to `1.2.51`.
+
+
+## 2026-08-04
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble_test_runner` - `v1.3.2`](#ensemble_test_runner---v132)
+
+---
+
+#### `ensemble_test_runner` - `v1.3.2`
+
+ - **FEAT**(ensemble_test_runner): add secure storage and keychain support i… ([#2335](https://github.com/ensembleUI/ensemble/issues/2335)). ([462e8dd1](https://github.com/ensembleUI/ensemble/commit/462e8dd126db4f8235397807bc04bb79c7cda640))
+
+
+## 2026-08-04
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble_test_runner` - `v1.3.1`](#ensemble_test_runner---v131)
+
+---
+
+#### `ensemble_test_runner` - `v1.3.1`
+
+ - **FIX**(ensemble_test_runner): update test report to display branch instead of commit hash. ([2e2de9b0](https://github.com/ensembleUI/ensemble/commit/2e2de9b0351957cc5792963e5d8abff32a140f73))
+ - **FEAT**(ensemble_test_runner): implement dynamic worker count calculatio… ([#2334](https://github.com/ensembleUI/ensemble/issues/2334)). ([2041975e](https://github.com/ensembleUI/ensemble/commit/2041975e55bcf916649a21702dd689b711760dd0))
+
+
+## 2026-08-03
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble_test_runner` - `v1.3.0`](#ensemble_test_runner---v130)
+
+---
+
+#### `ensemble_test_runner` - `v1.3.0`
+
+ - **FEAT**(ensemble_test_runner): enhance error reporting with concise hints for missing widgets and texts ([#2333](https://github.com/ensembleUI/ensemble/issues/2333)). ([7fbd0e07](https://github.com/ensembleUI/ensemble/commit/7fbd0e07c3fadd3d35243df33efd2cd7a33bc318))
+
+
+## 2026-08-01
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble_test_runner` - `v1.2.56`](#ensemble_test_runner---v1256)
+
+---
+
+#### `ensemble_test_runner` - `v1.2.56`
+
+ - **FEAT**(ensemble_test_runner): improve screenshot handling and text matching logic ([#2332](https://github.com/ensembleUI/ensemble/issues/2332)). ([c1ab83bf](https://github.com/ensembleUI/ensemble/commit/c1ab83bf4d021cab239a7bf14dbb497b83d22b03))
+
+
+## 2026-07-30
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble_test_runner` - `v1.2.55`](#ensemble_test_runner---v1255)
+
+---
+
+#### `ensemble_test_runner` - `v1.2.55`
+
+ - **FEAT**(ensemble_test_runner): enhance test execution with single test p… ([#2330](https://github.com/ensembleUI/ensemble/issues/2330)). ([f9aef972](https://github.com/ensembleUI/ensemble/commit/f9aef9729791f1cf5e1b4c760fd28068045b214d))
+
+
+## 2026-07-29
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble_test_runner` - `v1.2.54`](#ensemble_test_runner---v1254)
+
+---
+
+#### `ensemble_test_runner` - `v1.2.54`
+
+ - **FEAT**(ensemble_test_runner): add profile support for test execution an… ([#2328](https://github.com/ensembleUI/ensemble/issues/2328)). ([14193802](https://github.com/ensembleUI/ensemble/commit/14193802e982a590513c86b0bf663402907101f9))
+
+
+## 2026-07-29
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble_test_runner` - `v1.2.53`](#ensemble_test_runner---v1253)
+
+---
+
+#### `ensemble_test_runner` - `v1.2.53`
+
+
+## 2026-07-23
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.50`](#ensemble---v1250)
+ - [`ensemble_network_info` - `v1.2.50`](#ensemble_network_info---v1250)
+ - [`ensemble_stripe` - `v1.2.50`](#ensemble_stripe---v1250)
+ - [`ensemble_file_manager` - `v1.2.50`](#ensemble_file_manager---v1250)
+ - [`ensemble_chat` - `v1.2.50`](#ensemble_chat---v1250)
+ - [`ensemble_auth` - `v1.2.50`](#ensemble_auth---v1250)
+ - [`ensemble_bluetooth` - `v1.2.50`](#ensemble_bluetooth---v1250)
+ - [`ensemble_wifi` - `v1.2.50`](#ensemble_wifi---v1250)
+ - [`ensemble_face_camera` - `v1.2.50`](#ensemble_face_camera---v1250)
+ - [`ensemble_connect` - `v1.2.50`](#ensemble_connect---v1250)
+ - [`ensemble_contacts` - `v1.2.50`](#ensemble_contacts---v1250)
+ - [`ensemble_location` - `v1.2.50`](#ensemble_location---v1250)
+ - [`ensemble_camera` - `v1.2.50`](#ensemble_camera---v1250)
+ - [`ensemble_deeplink` - `v1.2.50`](#ensemble_deeplink---v1250)
+ - [`ensemble_remote_config` - `v1.2.50`](#ensemble_remote_config---v1250)
+ - [`ensemble_firebase_analytics` - `v1.2.50`](#ensemble_firebase_analytics---v1250)
+ - [`ensemble_qr_scanner` - `v1.2.50`](#ensemble_qr_scanner---v1250)
+ - [`ensemble_adobe_analytics` - `v1.2.50`](#ensemble_adobe_analytics---v1250)
+ - [`ensemble_moengage` - `v1.2.50`](#ensemble_moengage---v1250)
+ - [`ensemble_bracket` - `v1.2.50`](#ensemble_bracket---v1250)
+ - [`ensemble_test_runner` - `v1.2.50`](#ensemble_test_runner---v1250)
+
+---
+
+#### `ensemble` - `v1.2.50`
+
+ - **FIX**(firestore): dedupe listenForChanges subscriptions to prevent crash ([#2257](https://github.com/ensembleUI/ensemble/issues/2257)). ([3e7a0416](https://github.com/ensembleUI/ensemble/commit/3e7a0416c04e30d24af593eabcf9a49c16d0458a))
+ - **FIX**(webview): set cookies for inline HTML on native ([#2298](https://github.com/ensembleUI/ensemble/issues/2298)). ([79519031](https://github.com/ensembleUI/ensemble/commit/79519031e370abe7aa146cadd523f2c83d58da3d))
+ - **FEAT**(test_runner): support live Firebase and HTTP under flutter test ([#2321](https://github.com/ensembleUI/ensemble/issues/2321)). ([9ffe6994](https://github.com/ensembleUI/ensemble/commit/9ffe6994322370ca32a79f1ce75eb06bee251018))
+ - **FEAT**: Add ES6 parser and interpreter runtime support ([#2320](https://github.com/ensembleUI/ensemble/issues/2320)). ([8902b10f](https://github.com/ensembleUI/ensemble/commit/8902b10f0d842dc8a1d99ffd87f05d4ed92db8b3))
+
+#### `ensemble_network_info` - `v1.2.50`
+
+ - Bump "ensemble_network_info" to `1.2.50`.
+
+#### `ensemble_stripe` - `v1.2.50`
+
+ - Bump "ensemble_stripe" to `1.2.50`.
+
+#### `ensemble_file_manager` - `v1.2.50`
+
+ - Bump "ensemble_file_manager" to `1.2.50`.
+
+#### `ensemble_chat` - `v1.2.50`
+
+ - Bump "ensemble_chat" to `1.2.50`.
+
+#### `ensemble_auth` - `v1.2.50`
+
+ - **FEAT**(test_runner): support live Firebase and HTTP under flutter test ([#2321](https://github.com/ensembleUI/ensemble/issues/2321)). ([9ffe6994](https://github.com/ensembleUI/ensemble/commit/9ffe6994322370ca32a79f1ce75eb06bee251018))
+
+#### `ensemble_bluetooth` - `v1.2.50`
+
+ - Bump "ensemble_bluetooth" to `1.2.50`.
+
+#### `ensemble_wifi` - `v1.2.50`
+
+ - Bump "ensemble_wifi" to `1.2.50`.
+
+#### `ensemble_face_camera` - `v1.2.50`
+
+ - Bump "ensemble_face_camera" to `1.2.50`.
+
+#### `ensemble_connect` - `v1.2.50`
+
+ - Bump "ensemble_connect" to `1.2.50`.
+
+#### `ensemble_contacts` - `v1.2.50`
+
+ - Bump "ensemble_contacts" to `1.2.50`.
+
+#### `ensemble_location` - `v1.2.50`
+
+ - Bump "ensemble_location" to `1.2.50`.
+
+#### `ensemble_camera` - `v1.2.50`
+
+ - Bump "ensemble_camera" to `1.2.50`.
+
+#### `ensemble_deeplink` - `v1.2.50`
+
+ - Bump "ensemble_deeplink" to `1.2.50`.
+
+#### `ensemble_remote_config` - `v1.2.50`
+
+ - Bump "ensemble_remote_config" to `1.2.50`.
+
+#### `ensemble_firebase_analytics` - `v1.2.50`
+
+ - Bump "ensemble_firebase_analytics" to `1.2.50`.
+
+#### `ensemble_qr_scanner` - `v1.2.50`
+
+ - Bump "ensemble_qr_scanner" to `1.2.50`.
+
+#### `ensemble_adobe_analytics` - `v1.2.50`
+
+ - Bump "ensemble_adobe_analytics" to `1.2.50`.
+
+#### `ensemble_moengage` - `v1.2.50`
+
+ - Bump "ensemble_moengage" to `1.2.50`.
+
+#### `ensemble_bracket` - `v1.2.50`
+
+ - Bump "ensemble_bracket" to `1.2.50`.
+
+#### `ensemble_test_runner` - `v1.2.50`
+
+ - **FEAT**(test_runner): support live Firebase and HTTP under flutter test ([#2321](https://github.com/ensembleUI/ensemble/issues/2321)). ([9ffe6994](https://github.com/ensembleUI/ensemble/commit/9ffe6994322370ca32a79f1ce75eb06bee251018))
+
+
+## 2026-07-02
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.49`](#ensemble---v1249)
+ - [`ensemble_network_info` - `v1.2.49`](#ensemble_network_info---v1249)
+ - [`ensemble_stripe` - `v1.2.49`](#ensemble_stripe---v1249)
+ - [`ensemble_file_manager` - `v1.2.49`](#ensemble_file_manager---v1249)
+ - [`ensemble_chat` - `v1.2.49`](#ensemble_chat---v1249)
+ - [`ensemble_auth` - `v1.2.49`](#ensemble_auth---v1249)
+ - [`ensemble_bluetooth` - `v1.2.49`](#ensemble_bluetooth---v1249)
+ - [`ensemble_wifi` - `v1.2.49`](#ensemble_wifi---v1249)
+ - [`ensemble_face_camera` - `v1.2.49`](#ensemble_face_camera---v1249)
+ - [`ensemble_connect` - `v1.2.49`](#ensemble_connect---v1249)
+ - [`ensemble_contacts` - `v1.2.49`](#ensemble_contacts---v1249)
+ - [`ensemble_location` - `v1.2.49`](#ensemble_location---v1249)
+ - [`ensemble_camera` - `v1.2.49`](#ensemble_camera---v1249)
+ - [`ensemble_deeplink` - `v1.2.49`](#ensemble_deeplink---v1249)
+ - [`ensemble_remote_config` - `v1.2.49`](#ensemble_remote_config---v1249)
+ - [`ensemble_firebase_analytics` - `v1.2.49`](#ensemble_firebase_analytics---v1249)
+ - [`ensemble_qr_scanner` - `v1.2.49`](#ensemble_qr_scanner---v1249)
+ - [`ensemble_adobe_analytics` - `v1.2.49`](#ensemble_adobe_analytics---v1249)
+ - [`ensemble_moengage` - `v1.2.49`](#ensemble_moengage---v1249)
+ - [`ensemble_bracket` - `v1.2.49`](#ensemble_bracket---v1249)
+ - [`ensemble_test_runner` - `v1.2.49`](#ensemble_test_runner---v1249)
+
+---
+
+#### `ensemble` - `v1.2.49`
+
+ - **REFACTOR**: Remove unused imports across various files to clean up code… ([#2317](https://github.com/ensembleUI/ensemble/issues/2317)). ([e68b584c](https://github.com/ensembleUI/ensemble/commit/e68b584c5d8ac9c6ecb2e014027512481c2193dd))
+
+#### `ensemble_network_info` - `v1.2.49`
+
+ - Bump "ensemble_network_info" to `1.2.49`.
+
+#### `ensemble_stripe` - `v1.2.49`
+
+ - Bump "ensemble_stripe" to `1.2.49`.
+
+#### `ensemble_file_manager` - `v1.2.49`
+
+ - Bump "ensemble_file_manager" to `1.2.49`.
+
+#### `ensemble_chat` - `v1.2.49`
+
+ - Bump "ensemble_chat" to `1.2.49`.
+
+#### `ensemble_auth` - `v1.2.49`
+
+ - Bump "ensemble_auth" to `1.2.49`.
+
+#### `ensemble_bluetooth` - `v1.2.49`
+
+ - Bump "ensemble_bluetooth" to `1.2.49`.
+
+#### `ensemble_wifi` - `v1.2.49`
+
+ - Bump "ensemble_wifi" to `1.2.49`.
+
+#### `ensemble_face_camera` - `v1.2.49`
+
+ - Bump "ensemble_face_camera" to `1.2.49`.
+
+#### `ensemble_connect` - `v1.2.49`
+
+ - Bump "ensemble_connect" to `1.2.49`.
+
+#### `ensemble_contacts` - `v1.2.49`
+
+ - Bump "ensemble_contacts" to `1.2.49`.
+
+#### `ensemble_location` - `v1.2.49`
+
+ - Bump "ensemble_location" to `1.2.49`.
+
+#### `ensemble_camera` - `v1.2.49`
+
+ - Bump "ensemble_camera" to `1.2.49`.
+
+#### `ensemble_deeplink` - `v1.2.49`
+
+ - Bump "ensemble_deeplink" to `1.2.49`.
+
+#### `ensemble_remote_config` - `v1.2.49`
+
+ - Bump "ensemble_remote_config" to `1.2.49`.
+
+#### `ensemble_firebase_analytics` - `v1.2.49`
+
+ - Bump "ensemble_firebase_analytics" to `1.2.49`.
+
+#### `ensemble_qr_scanner` - `v1.2.49`
+
+ - Bump "ensemble_qr_scanner" to `1.2.49`.
+
+#### `ensemble_adobe_analytics` - `v1.2.49`
+
+ - Bump "ensemble_adobe_analytics" to `1.2.49`.
+
+#### `ensemble_moengage` - `v1.2.49`
+
+ - Bump "ensemble_moengage" to `1.2.49`.
+
+#### `ensemble_bracket` - `v1.2.49`
+
+ - Bump "ensemble_bracket" to `1.2.49`.
+
+#### `ensemble_test_runner` - `v1.2.49`
+
+ - Bump "ensemble_test_runner" to `1.2.49`.
+
+
+## 2026-06-28
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.48`](#ensemble---v1248)
+ - [`ensemble_network_info` - `v1.2.48`](#ensemble_network_info---v1248)
+ - [`ensemble_stripe` - `v1.2.48`](#ensemble_stripe---v1248)
+ - [`ensemble_file_manager` - `v1.2.48`](#ensemble_file_manager---v1248)
+ - [`ensemble_chat` - `v1.2.48`](#ensemble_chat---v1248)
+ - [`ensemble_auth` - `v1.2.48`](#ensemble_auth---v1248)
+ - [`ensemble_bluetooth` - `v1.2.48`](#ensemble_bluetooth---v1248)
+ - [`ensemble_wifi` - `v1.2.48`](#ensemble_wifi---v1248)
+ - [`ensemble_face_camera` - `v1.2.48`](#ensemble_face_camera---v1248)
+ - [`ensemble_connect` - `v1.2.48`](#ensemble_connect---v1248)
+ - [`ensemble_contacts` - `v1.2.48`](#ensemble_contacts---v1248)
+ - [`ensemble_location` - `v1.2.48`](#ensemble_location---v1248)
+ - [`ensemble_camera` - `v1.2.48`](#ensemble_camera---v1248)
+ - [`ensemble_deeplink` - `v1.2.48`](#ensemble_deeplink---v1248)
+ - [`ensemble_remote_config` - `v1.2.48`](#ensemble_remote_config---v1248)
+ - [`ensemble_firebase_analytics` - `v1.2.48`](#ensemble_firebase_analytics---v1248)
+ - [`ensemble_qr_scanner` - `v1.2.48`](#ensemble_qr_scanner---v1248)
+ - [`ensemble_adobe_analytics` - `v1.2.48`](#ensemble_adobe_analytics---v1248)
+ - [`ensemble_moengage` - `v1.2.48`](#ensemble_moengage---v1248)
+ - [`ensemble_bracket` - `v1.2.48`](#ensemble_bracket---v1248)
+
+---
+
+#### `ensemble` - `v1.2.48`
+
+ - Bump "ensemble" to `1.2.48`.
+
+#### `ensemble_network_info` - `v1.2.48`
+
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+#### `ensemble_stripe` - `v1.2.48`
+
+ - **REFACTOR**(stripe): rename onComplete to onSuccess in ShowPaymentSheetAction. ([deddd07c](https://github.com/ensembleUI/ensemble/commit/deddd07cd498d249aca5b15f33319b981adace47))
+ - **FEAT**(stripe): add initializeStripe action and update payment sheet functionality. ([5622bd40](https://github.com/ensembleUI/ensemble/commit/5622bd40b4b21a21b55154444e2dbe2802b1dc68))
+ - **FEAT**(stripe): add automated Stripe module installation script and update README. ([b43f82cf](https://github.com/ensembleUI/ensemble/commit/b43f82cfa2c158ac4964880e3e763c679cbd05f8))
+ - **FEAT**(stripe): add Stripe payment integration module. ([1f29b783](https://github.com/ensembleUI/ensemble/commit/1f29b783f640e4cd6227c8bd36fd328b0b3f3f57))
+ - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
+ - **DOCS**(ensemble_stripe): update iOS and Android configuration instructions in README. ([eb0dfce4](https://github.com/ensembleUI/ensemble/commit/eb0dfce4dc839b978f3d1e75c449c74b2f800d9a))
+
+#### `ensemble_file_manager` - `v1.2.48`
+
+ - **DOCS**: document file manager module. ([6bd21d86](https://github.com/ensembleUI/ensemble/commit/6bd21d860c4d0d5c98371cefb2ce9a51d27fca3f))
+
+#### `ensemble_chat` - `v1.2.48`
+
+ - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+#### `ensemble_auth` - `v1.2.48`
+
+ - Bump "ensemble_auth" to `1.2.48`.
+
+#### `ensemble_bluetooth` - `v1.2.48`
+
+ - **FIX**(security): JSON-encode BLE data passed into global script handler. ([0bebe7ba](https://github.com/ensembleUI/ensemble/commit/0bebe7baafb1e66ff97a5652221c401695d32ff4))
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+#### `ensemble_wifi` - `v1.2.48`
+
+ - **REFACTOR**(wifi): simplify WiFi operations and update permissions. ([628d9b1a](https://github.com/ensembleUI/ensemble/commit/628d9b1a52efd6312f04ab49a1f298c8dcaf4e9f))
+ - **FEAT**(wifi): add WiFi connection capabilities. ([b4194289](https://github.com/ensembleUI/ensemble/commit/b41942890e2c1ea15a804eadf183b9b81d779948))
+ - **DOCS**(ensemble_wifi): update README and enable script for Android permissions. ([bd1a791f](https://github.com/ensembleUI/ensemble/commit/bd1a791fea3be6be224ca7b7d5e5fe7dfce4aaff))
+
+#### `ensemble_face_camera` - `v1.2.48`
+
+ - **FEAT**(face_camera): separate face detection from ensemble_camera into separate module. ([9857c3cc](https://github.com/ensembleUI/ensemble/commit/9857c3cc3048f2c8879feeb07d77b084181010cd))
+ - **DOCS**: update package and module READMEs. ([2f7e2dec](https://github.com/ensembleUI/ensemble/commit/2f7e2deccf3110badc169d78c22afb64870897f6))
+
+#### `ensemble_connect` - `v1.2.48`
+
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+#### `ensemble_contacts` - `v1.2.48`
+
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+#### `ensemble_location` - `v1.2.48`
+
+ - **FEAT**(maps): add draggable marker functionality. ([6da646ea](https://github.com/ensembleUI/ensemble/commit/6da646ea344a54a9434c0bcb20b3ba70e38de84b))
+ - **FEAT**(maps): add fixed marker functionality to EnsembleMapWidget. ([cd7d0301](https://github.com/ensembleUI/ensemble/commit/cd7d0301221343fce148b515a017dfa35139b5eb))
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+#### `ensemble_camera` - `v1.2.48`
+
+ - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
+ - **FIX**: face detection camera build issues. ([cafd193e](https://github.com/ensembleUI/ensemble/commit/cafd193e78760ccb38efc42e7ee10cbd436a4bfb))
+ - **FIX**: dispose existing camera controller before initializing a new one. ([762ddd4a](https://github.com/ensembleUI/ensemble/commit/762ddd4a84009eeb92be61d66b3e93d1da70e53e))
+ - **FIX**: repaint issue. ([8cc4e00d](https://github.com/ensembleUI/ensemble/commit/8cc4e00d781ced5bb538e7053304388f02e4af85))
+ - **FIX**: camera mobile browser. ([8e676c90](https://github.com/ensembleUI/ensemble/commit/8e676c90d1cbae022acb0bf86c364aa258e9bc74))
+ - **FIX**: unreliable showpreview. ([2365d35e](https://github.com/ensembleUI/ensemble/commit/2365d35e5b44743d1924ce5c6e7875676858296b))
+ - **FIX**: camera model dismiss. ([4827df14](https://github.com/ensembleUI/ensemble/commit/4827df1439f901dc8c852fdebf26ba4319a66ab3))
+ - **FEAT**(face_camera): separate face detection from ensemble_camera into separate module. ([9857c3cc](https://github.com/ensembleUI/ensemble/commit/9857c3cc3048f2c8879feeb07d77b084181010cd))
+ - **FEAT**: implement web face detection functionality. ([994eba49](https://github.com/ensembleUI/ensemble/commit/994eba49cd648349a5a1b1319829fc244b168627))
+ - **DOCS**: update README to reflect QR code scanning module relocation. ([3a6eeb80](https://github.com/ensembleUI/ensemble/commit/3a6eeb80bbddb9561c0c64de455c2b4a981feb08))
+ - **DOCS**: update package and module READMEs. ([2f7e2dec](https://github.com/ensembleUI/ensemble/commit/2f7e2deccf3110badc169d78c22afb64870897f6))
+ - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+#### `ensemble_deeplink` - `v1.2.48`
+
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+#### `ensemble_remote_config` - `v1.2.48`
+
+ - **FEAT**(remote_config): enhance environment variable support for Remote Config. ([4e1f5dfe](https://github.com/ensembleUI/ensemble/commit/4e1f5dfe0cad4c19fe65667cc1139b022079ed67))
+ - **FEAT**(remote_config): add Firebase Remote Config integration. ([906f0133](https://github.com/ensembleUI/ensemble/commit/906f013322dcda45a1740db24b5e21f63ea372e5))
+
+#### `ensemble_firebase_analytics` - `v1.2.48`
+
+ - **FIX**: revert the name to logEvent. ([e2b4abe3](https://github.com/ensembleUI/ensemble/commit/e2b4abe3744c313dbcaeb69861518348a39dd600))
+ - **FEAT**: added firebase analytics rest of unsupported functions. ([04f34898](https://github.com/ensembleUI/ensemble/commit/04f34898dd4a033a130084c0656b769de99e20f1))
+ - **FEAT**: implement intelligent error handling in FirebaseAnalyticsProvider. ([a8cabc2f](https://github.com/ensembleUI/ensemble/commit/a8cabc2fb2c63630045f07d0d5cb4a533c14ef3a))
+ - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
+
+#### `ensemble_qr_scanner` - `v1.2.48`
+
+ - **REFACTOR**(qr_scanner): improve scan window handling and layout for QR code scanner. ([a54f86b0](https://github.com/ensembleUI/ensemble/commit/a54f86b03c2d8255fad5dfb50c35d452be1a4e64))
+ - **FIX**(qr_scanner): upgrade mobile_scanner dependency in qr_scanner. ([ec22c726](https://github.com/ensembleUI/ensemble/commit/ec22c726dc6b1ec5a9c687d7dfeef9aa8f7c882c))
+ - **DOCS**: update package and module READMEs. ([2f7e2dec](https://github.com/ensembleUI/ensemble/commit/2f7e2deccf3110badc169d78c22afb64870897f6))
+
+#### `ensemble_adobe_analytics` - `v1.2.48`
+
+ - **REFACTOR**(adobe_analytics): streamline initialization and remove redundant checks. ([5714a3fc](https://github.com/ensembleUI/ensemble/commit/5714a3fc1820bb7522f3f08183d46dc727c300df))
+ - **REFACTOR**: simplify event creation in AdobeAnalyticsImpl by using concise syntax. ([6a35cafb](https://github.com/ensembleUI/ensemble/commit/6a35cafb770e709eb3c3d66c289f7f547fb867ed))
+ - **REFACTOR**: streamline Adobe Analytics event tracking and remove unused methods. ([d22e3aa8](https://github.com/ensembleUI/ensemble/commit/d22e3aa818a96b8b836ca88fde991b687eb2248c))
+ - **FIX**: update Assurance session handling in AdobeAnalyticsImpl. ([e65d1793](https://github.com/ensembleUI/ensemble/commit/e65d1793a313ca97bc3a714008e068dd22ab46b1))
+ - **FEAT**: add module configuration for Adobe Analytics. ([056c09d1](https://github.com/ensembleUI/ensemble/commit/056c09d1cf3bb504ab63554ef10ce8285180ed68))
+ - **FEAT**: enhance README and core functionalities for Adobe Analytics module. ([0fa3b02f](https://github.com/ensembleUI/ensemble/commit/0fa3b02ff0e1d84b0feec9159d03bac78822113e))
+ - **FEAT**: enforce initialization checks in Adobe Analytics methods. ([575d3eca](https://github.com/ensembleUI/ensemble/commit/575d3eca7c4d14578425ef961d92c670e6d2832f))
+ - **FEAT**: add LICENSE and enhance README for Adobe Analytics module. ([10ceb7e2](https://github.com/ensembleUI/ensemble/commit/10ceb7e283496513067b76361f7f5dd3d1a4912e))
+ - **FEAT**: enhance identity management in Adobe Analytics module. ([e8e4fed5](https://github.com/ensembleUI/ensemble/commit/e8e4fed59cbfb164c08148ed8c42a15e5a2d5cf0))
+ - **FEAT**: integrate Assurance functionality into Adobe Analytics module. ([7e16c4e9](https://github.com/ensembleUI/ensemble/commit/7e16c4e9e7b7795e3b9517f264096601c32c1f69))
+ - **FEAT**: integrate user profile management into Adobe Analytics module. ([e30660ee](https://github.com/ensembleUI/ensemble/commit/e30660ee8f201db10ad1a30e5c3e94c7a08e585b))
+ - **FEAT**: add consent management to Adobe Analytics module. ([9a8a750f](https://github.com/ensembleUI/ensemble/commit/9a8a750f94699a20ada3d1606184df57dbee3720))
+ - **FEAT**: enhance Adobe Analytics module with core, edge, and identity functionalities. ([a49e1224](https://github.com/ensembleUI/ensemble/commit/a49e1224f322b4780467d6e9b794e3896a0958fa))
+ - **FEAT**: update Adobe Analytics methods to return dynamic results. ([3a9caf08](https://github.com/ensembleUI/ensemble/commit/3a9caf08fa37c03484ff3c04be4bf18bb6bd4d68))
+ - **FEAT**: add setupAssurance method to Adobe Analytics module for session management. ([9d01e220](https://github.com/ensembleUI/ensemble/commit/9d01e2201f97baf1320ace14271ee70ceae3255e))
+ - **FEAT**: enhance Adobe Analytics event tracking with timeout handling and parameter type adjustments. ([48d4880c](https://github.com/ensembleUI/ensemble/commit/48d4880c3138e463665b704681eec3d5f57188b7))
+ - **FEAT**: add Adobe Analytics module for Ensemble integration. ([77fadddb](https://github.com/ensembleUI/ensemble/commit/77fadddb913ed20834f977db0fe78ee79c93005b))
+ - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
+
+#### `ensemble_moengage` - `v1.2.48`
+
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+#### `ensemble_bracket` - `v1.2.48`
+
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+
+## 2026-06-27
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble_auth` - `v1.2.47`](#ensemble_auth---v1247)
+
+---
+
+#### `ensemble_auth` - `v1.2.47`
+
+ - **REVERT**: downgrade Google Sign-In and Apple Sign-In dependencies to support Flutter 3.27.2. ([a9e183e6](https://github.com/ensembleUI/ensemble/commit/a9e183e62df683760de2e24a31e8bb4c1b6d2e1c))
+ - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
+ - **REFACTOR**: remove logging statements from SignInWithVerificationCode class. ([84d402c7](https://github.com/ensembleUI/ensemble/commit/84d402c72a1ccd7408a74b2b91607eb51c312d61))
+ - **REFACTOR**: rename otp verification methods. ([7e3408e0](https://github.com/ensembleUI/ensemble/commit/7e3408e01a1006700be01e1f4403395eebd13f32))
+ - **FEAT**: update validateVerificationCode to return user and idToken, enhance onSuccess callback. ([33abb106](https://github.com/ensembleUI/ensemble/commit/33abb10689de2fcb5328194a44097a6757e0298d))
+ - **FEAT**: add onVerificationFailure callback to handle verification errors more effectively. ([08bc0ac6](https://github.com/ensembleUI/ensemble/commit/08bc0ac676139b543e24694f290df58dd57d4f13))
+ - **FEAT**: add method parameter to verification code actions for improved method handling. ([976adb71](https://github.com/ensembleUI/ensemble/commit/976adb7154ac3a8007828a6bf74e8d9c6c7d5a3c))
+ - **FEAT**: add provider parameter to verification code actions for enhanced flexibility. ([440e1f32](https://github.com/ensembleUI/ensemble/commit/440e1f323706ac47243950cdceef441cc00b8694))
+ - **FEAT**: add unit tests for phone sign-in functionality with mock FirebaseAuth. ([09770e6b](https://github.com/ensembleUI/ensemble/commit/09770e6ba012de025547b54803e443a02460659a))
+ - **FEAT**: implement phone verification actions with firebase phone auth. ([5927c37c](https://github.com/ensembleUI/ensemble/commit/5927c37c9b636f7acf7c480d26db9c8d0217c90e))
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+
+## 2026-06-27
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.47`](#ensemble---v1247)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.2.47`](#ensemble_auth---v1247)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_wifi` - `v0.0.1+1`](#ensemble_wifi---v0011)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.2.47`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_wifi` - `v0.0.1+1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.47`
+
+ - **REFACTOR**: update dependencies and improve import statements. ([712e0bb8](https://github.com/ensembleUI/ensemble/commit/712e0bb8e2c42b0cef55b2dd93d5df76ef029ad0))
+ - **REFACTOR**: remove font_awesome_flutter dependency and update icon usage. ([a5d66023](https://github.com/ensembleUI/ensemble/commit/a5d66023cff5da18f5390682cfe2ee1e536572b6))
+ - **FEAT**: update .gitignore and enhance ensemble module structure. ([5ec1b8eb](https://github.com/ensembleUI/ensemble/commit/5ec1b8eb926b00d2d0de4ea7f922f5f6e7e5ed9e))
+ - **FEAT**: enhance LocalAssetsService with environment variable merging and asset loading. ([359793a3](https://github.com/ensembleUI/ensemble/commit/359793a3b6e801e8f97b985da1f1663213e5580b))
+ - **FEAT**(cdn): improve asset cache management and cleanup. ([24f09d4c](https://github.com/ensembleUI/ensemble/commit/24f09d4cdefd1746c1700538b103769e20dc0ad4))
+ - **FEAT**(cdn): enhance asset key management and prefetching. ([280d35c6](https://github.com/ensembleUI/ensemble/commit/280d35c6c09c8d191892f10d13d0c79de9c99ad2))
+ - **FEAT**(cdn): enhance asset cache initialization and cleanup. ([9737308c](https://github.com/ensembleUI/ensemble/commit/9737308cd5442f4b1f489e067048ac50b8a991aa))
+ - **FEAT**(cdn): implement CDN asset caching mechanism. ([7cc9f878](https://github.com/ensembleUI/ensemble/commit/7cc9f878591c71d6eb26ec2571e069e427d50e76))
+ - **DOCS**: update README.md for Ensemble runtime. ([d6581847](https://github.com/ensembleUI/ensemble/commit/d6581847c621994ba6941023bcb3dc86b0706089))
+ - **DOCS**: add comments to clarify asset management methods in LocalAssetsService. ([52ab49bd](https://github.com/ensembleUI/ensemble/commit/52ab49bd0a4a973fc9094393c8872d7e76db9f1a))
+
+
+## 2026-06-27
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble_auth` - `v1.2.46`](#ensemble_auth---v1246)
+
+---
+
+#### `ensemble_auth` - `v1.2.46`
+
+ - **REVERT**: downgrade Google Sign-In and Apple Sign-In dependencies to support Flutter 3.27.2. ([a9e183e6](https://github.com/ensembleUI/ensemble/commit/a9e183e62df683760de2e24a31e8bb4c1b6d2e1c))
+ - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
+ - **REFACTOR**: remove logging statements from SignInWithVerificationCode class. ([84d402c7](https://github.com/ensembleUI/ensemble/commit/84d402c72a1ccd7408a74b2b91607eb51c312d61))
+ - **REFACTOR**: rename otp verification methods. ([7e3408e0](https://github.com/ensembleUI/ensemble/commit/7e3408e01a1006700be01e1f4403395eebd13f32))
+ - **FEAT**: update validateVerificationCode to return user and idToken, enhance onSuccess callback. ([33abb106](https://github.com/ensembleUI/ensemble/commit/33abb10689de2fcb5328194a44097a6757e0298d))
+ - **FEAT**: add onVerificationFailure callback to handle verification errors more effectively. ([08bc0ac6](https://github.com/ensembleUI/ensemble/commit/08bc0ac676139b543e24694f290df58dd57d4f13))
+ - **FEAT**: add method parameter to verification code actions for improved method handling. ([976adb71](https://github.com/ensembleUI/ensemble/commit/976adb7154ac3a8007828a6bf74e8d9c6c7d5a3c))
+ - **FEAT**: add provider parameter to verification code actions for enhanced flexibility. ([440e1f32](https://github.com/ensembleUI/ensemble/commit/440e1f323706ac47243950cdceef441cc00b8694))
+ - **FEAT**: add unit tests for phone sign-in functionality with mock FirebaseAuth. ([09770e6b](https://github.com/ensembleUI/ensemble/commit/09770e6ba012de025547b54803e443a02460659a))
+ - **FEAT**: implement phone verification actions with firebase phone auth. ([5927c37c](https://github.com/ensembleUI/ensemble/commit/5927c37c9b636f7acf7c480d26db9c8d0217c90e))
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+
+## 2026-06-18
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.46`](#ensemble---v1246)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_wifi` - `v0.0.1+1`](#ensemble_wifi---v0011)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_wifi` - `v0.0.1+1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.46`
+
+ - **FEAT**(webview): add HTML content and JavaScript injection support. ([b54a3297](https://github.com/ensembleUI/ensemble/commit/b54a3297de9ca1b276542cf76887cf47eecefef7))
+
+
+## 2026-06-18
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.45`](#ensemble---v1245)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_wifi` - `v0.0.1+1`](#ensemble_wifi---v0011)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_wifi` - `v0.0.1+1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.45`
+
+ - **REFACTOR**(wifi): simplify WiFi operations and update permissions. ([628d9b1a](https://github.com/ensembleUI/ensemble/commit/628d9b1a52efd6312f04ab49a1f298c8dcaf4e9f))
+ - **REFACTOR**(api): enhance provider resolution and improve SSE cancellation handling. ([cc167aba](https://github.com/ensembleUI/ensemble/commit/cc167abac6cbe01191c50c2c118ff2464c6d8233))
+ - **FIX**(action): restore page apiMap after executeAction completes. ([d1792947](https://github.com/ensembleUI/ensemble/commit/d179294746c602ea42588191365e6ed366d616d3))
+ - **FIX**(sse): honor disconnect/dispose and cap error-path reconnects. ([01e667e3](https://github.com/ensembleUI/ensemble/commit/01e667e3ecc44c0e5470b97099742880e9c58de0))
+ - **FIX**(security): encode Address widget Places proxy query parameters. ([1718c914](https://github.com/ensembleUI/ensemble/commit/1718c91414c9f961681ff9e6c8bcd8c49832b978))
+ - **FIX**(cdn): serialize refresh and snapshot persisted cache metadata. ([4031a3a4](https://github.com/ensembleUI/ensemble/commit/4031a3a42b949d6f35b1b68dcf045b2b110b663a))
+ - **FIX**(sse): scope dispose to per-screen provider instance. ([49c0d730](https://github.com/ensembleUI/ensemble/commit/49c0d73006bf82b9f65b3a2911971a3c8ce5ed30))
+ - **FEAT**(wifi): add WiFi connection capabilities. ([b4194289](https://github.com/ensembleUI/ensemble/commit/b41942890e2c1ea15a804eadf183b9b81d779948))
+ - **FEAT**(cdn): enhance CDN request handling with dynamic headers and versioning. ([f6635c76](https://github.com/ensembleUI/ensemble/commit/f6635c76cced1c921a61ac9e198d4e6bbf4202ea))
+ - **FEAT**(ensemble): enhance reusable Actions handling. ([00973129](https://github.com/ensembleUI/ensemble/commit/009731290782caa46ac2bef5e4ec5658714850b2))
+
+
+## 2026-06-03
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.44`](#ensemble---v1244)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.44`
+
+ - **FIX**(upload): scope cancelAll to upload Workmanager tags only. ([4d763ac4](https://github.com/ensembleUI/ensemble/commit/4d763ac4c883363a96a6a5b8b3c264bf8fb3f0b3))
+ - **FIX**(upload): schedule every background batch with unique Workmanager names. ([33829f9b](https://github.com/ensembleUI/ensemble/commit/33829f9b49da513c587a2e603609cf8d1af49723))
+ - **FIX**(navigation): clamp navigateViewGroup index before PageController.jumpToPage. ([0ce6723a](https://github.com/ensembleUI/ensemble/commit/0ce6723a14095823fb5d2f1ba3938c45f76c289d))
+ - **FIX**(upload): complete cancelAll when some tasks are already completed. ([93cfc387](https://github.com/ensembleUI/ensemble/commit/93cfc387e700a5a1cb1c327b85f68a8ac56011d2))
+ - **FIX**(storage): defer binding dispatches until public storage clear completes. ([8c2a52de](https://github.com/ensembleUI/ensemble/commit/8c2a52de1e84c078ff01905c3bce07428f5dc5ba))
+ - **FIX**(listview): sync ListViewCore scroll controller when parent swaps it. ([c792a8a6](https://github.com/ensembleUI/ensemble/commit/c792a8a673196a1ae2eedf92ef488be438644602))
+ - **FIX**(page): cancel header timers and dedupe storage event listeners. ([2c45e427](https://github.com/ensembleUI/ensemble/commit/2c45e4273678ff91007d486137e264dedc9c2251))
+ - **FIX**(navigation): clamp ViewGroup tab index when payloads shrink. ([2b62b4a2](https://github.com/ensembleUI/ensemble/commit/2b62b4a2072862c27e9292ca0d38cefa1d1d9fad))
+ - **DOCS**(ensemble): document storage.clear and multipart upload paths. ([d88fb624](https://github.com/ensembleUI/ensemble/commit/d88fb624b68136d3f006eac5ea7c6bc78752e1e2))
+
+
+## 2026-05-18
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.43`](#ensemble---v1243)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.43`
+
+ - **FIX**(security): block path traversal in local bundled screen resolution. ([b317c925](https://github.com/ensembleUI/ensemble/commit/b317c9256d96cd01f3183866d3f5e38bfe9b6ff7))
+ - **FIX**(layout): restore scroll controller when leaving footer scope. ([9f20ea43](https://github.com/ensembleUI/ensemble/commit/9f20ea43ddb389d6a718122dc01240fc5d3d3932))
+ - **FIX**(listview): dispose owned scroll controller. ([e5d1c101](https://github.com/ensembleUI/ensemble/commit/e5d1c101080f49ac0596f09d93c1d2df4e4dff22))
+ - **FIX**(security): reject unsafe screen selectors in remote definition fetches. ([db7de5b2](https://github.com/ensembleUI/ensemble/commit/db7de5b28f45c0dd2438ff7d0e1bea61bba1da6d))
+ - **FIX**(security): sanitize saveFile names before writing to storage. ([a3db4674](https://github.com/ensembleUI/ensemble/commit/a3db467427bd473e3b1a02c113369bcdaa75b6a4))
+ - **FIX**(security): stop WebView from bypassing TLS and unsafe-browsing defaults. ([a51ba979](https://github.com/ensembleUI/ensemble/commit/a51ba979ddb12fa3cb48af0f436e5a1cb1057fc7))
+ - **DOCS**(ensemble): document runtime security and device metric bindings. ([b7087842](https://github.com/ensembleUI/ensemble/commit/b7087842440ae498e11e1f088ddbfcc3f8d7dc5b))
+
+
+## 2026-05-15
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.42`](#ensemble---v1242)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.42`
+
+ - **FIX**(device): update screenOrientation to use enum name for clarity. ([41b9dee0](https://github.com/ensembleUI/ensemble/commit/41b9dee0c974a06882db5edbd1219084ad81fc9c))
+ - **FIX**(cdn): reset invalid manifest cache state. ([4e060421](https://github.com/ensembleUI/ensemble/commit/4e060421ebf7ba2121284ba93c825db7370b8f2d))
+ - **FEAT**(device): streamline MediaQuery capability and add device metric notifications. ([991650b6](https://github.com/ensembleUI/ensemble/commit/991650b6666e615eca2e9b7f8418af847a08d3d0))
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+ - **DOCS**: move layout widget notes out of package readme. ([fc901707](https://github.com/ensembleUI/ensemble/commit/fc9017078bd2147c6486352e886a347a04ef6dcc))
+ - **DOCS**: document layout widget scroll and tab behavior. ([ba64173e](https://github.com/ensembleUI/ensemble/commit/ba64173e4433c49d6907c78494970639d5a93748))
+
+
+## 2026-05-04
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.41`](#ensemble---v1241)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.41`
+
+ - **REFACTOR**(tabbar): remove useIndexedTab setter duplication from TabBarController. ([faafd299](https://github.com/ensembleUI/ensemble/commit/faafd2996c3f0a9b9609acfba4e3286165e2ca80))
+ - **FEAT**(tab): fix persistentTabBar behavior with listview. ([ed51255a](https://github.com/ensembleUI/ensemble/commit/ed51255a0b8456c9ec3654f6ddce1e315cae9d77))
+ - **FEAT**(tabbar): add indexed tab mode with on-demand tab building and caching. ([93cd430b](https://github.com/ensembleUI/ensemble/commit/93cd430b0b700ae123ddf378f627ab884067f515))
+ - **FEAT**(tab): add persistentTabBar option for keep the tab pinned. ([bbafb0d1](https://github.com/ensembleUI/ensemble/commit/bbafb0d1c3be1f321cbe92f3cc0d8598e476dde0))
+
+
+## 2026-04-28
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.40`](#ensemble---v1240)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.40`
+
+ - **REFACTOR**(cdn): improve secret management and artifact handling in CdnDefinitionProvider. ([a2c87792](https://github.com/ensembleUI/ensemble/commit/a2c877925a4d2ac489aab8c5a89f3e66e4dd5a98))
+ - **FEAT**(cdn): enhance CdnDefinitionProvider with environment variable handling and secret management. ([42669188](https://github.com/ensembleUI/ensemble/commit/42669188ea423c9dba5beac449ee38853f01b88b))
+
+
+## 2026-04-06
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.39`](#ensemble---v1239)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.39`
+
+ - **FIX**(incorrect header format): explicit convertion of header entry into string. ([84ead788](https://github.com/ensembleUI/ensemble/commit/84ead788a7cd0b1aee50292eabf07bc8ae3c490d))
+ - **FIX**(invoke_api_action): handle FirestoreResponse in error handling. ([c8cb1c7b](https://github.com/ensembleUI/ensemble/commit/c8cb1c7b1bb97405bc61893338b1aeab53838a8f))
+ - **FIX**(phone_contact): replace RuntimeError with debugPrint for missing contact photo. ([b36b399d](https://github.com/ensembleUI/ensemble/commit/b36b399d91fad26e46e14f0845c624a3f8b768c9))
+ - **FEAT**(image): enhance header evaluation for dynamic HTTP headers in image requests. ([e24544fe](https://github.com/ensembleUI/ensemble/commit/e24544fe2587a4119f6c4a8242e9b51948eef57c))
+ - **FEAT**(image): add support for custom HTTP headers in image requests. ([3a304a2c](https://github.com/ensembleUI/ensemble/commit/3a304a2cd01a2af6046a327a9380cf259cb1e37e))
+ - **FEAT**(dotenv): implement dotenv bundle parsing and refactor config loading. ([0a987c94](https://github.com/ensembleUI/ensemble/commit/0a987c94aef06e2b220fca85c1d8f43c707fd506))
+ - **FEAT**(action): add ActionType.executeAction to ActionInvokable class. ([b5cc5a4a](https://github.com/ensembleUI/ensemble/commit/b5cc5a4af5ac95b0ed4971349f5cf5ab9a481672))
+ - **FEAT**(lottie): add custom Lottie decoder for .lottie file ext support. ([cc73e7cf](https://github.com/ensembleUI/ensemble/commit/cc73e7cf87475a7e538b0c88a099a90c5c63af21))
+
+
+## 2026-03-18
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.38`](#ensemble---v1238)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.38`
+
+ - **FEAT**(env): enhance environment variable loading and parsing. ([b7666ceb](https://github.com/ensembleUI/ensemble/commit/b7666ceb292427ad24445cc3080a68e9aca8c47a))
+ - **FEAT**(cdn_provider): add runtime translation refresh and testing capabilities. ([c9ba1fd2](https://github.com/ensembleUI/ensemble/commit/c9ba1fd23c34031c96e2248f1b05cf2ba2b4bc88))
+
+
+## 2026-03-15
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.37`](#ensemble---v1237)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.37`
+
+ - **FIX**(firestore_types): handle FirestoreTimestamp conversion in EnsembleFieldValue class. ([a4e8dba0](https://github.com/ensembleUI/ensemble/commit/a4e8dba0142250eee12b09fd012ae85e5ac18f2f))
+
+
+## 2026-03-11
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.36`](#ensemble---v1236)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.36`
+
+ - **FIX**(page_model): convert keys to strings in merged global actions. ([4dcb7e4a](https://github.com/ensembleUI/ensemble/commit/4dcb7e4a888a6259cb4f1a8daceb6338731ec6c8))
+ - **FEAT**(secure_storage): enhance secure storage actions with optional encryption parameters. ([dee0bb57](https://github.com/ensembleUI/ensemble/commit/dee0bb571152e95b4cdc658924b2399c6b4f58b4))
+
+
+## 2026-03-08
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.35`](#ensemble---v1235)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.35`
+
+ - **FIX**(page_model): convert keys to strings in merged global actions. ([4dcb7e4a](https://github.com/ensembleUI/ensemble/commit/4dcb7e4a888a6259cb4f1a8daceb6338731ec6c8))
+
+
+## 2026-03-08
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.35`](#ensemble---v1235)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.35`
+
+ - **FIX**(execute_action): update payload key from 'action' to 'body' in ExecuteActionAction class. ([7e1b8466](https://github.com/ensembleUI/ensemble/commit/7e1b846611b4da27f21fa3474d8a6de05b40b768))
+ - **FIX**(page_model): add 'Actions' to the list of available types in PageModel. ([6dc07f06](https://github.com/ensembleUI/ensemble/commit/6dc07f06e447c5cdbf49be6f29a54e74fa6987e5))
+ - **FEAT**(actions): introduce reusable action execution framework. ([482d7de9](https://github.com/ensembleUI/ensemble/commit/482d7de922433bb41a282cfdd018f13866fe511f))
+
+
+## 2026-03-02
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.34`](#ensemble---v1234)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.34`
+
+ - **FEAT**(remote_config): add Firebase Remote Config integration. ([906f0133](https://github.com/ensembleUI/ensemble/commit/906f013322dcda45a1740db24b5e21f63ea372e5))
+
+
+## 2026-02-27
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.33`](#ensemble---v1233)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_face_camera` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.33`
+
+ - **FEAT**(face_camera): separate face detection from ensemble_camera into separate module. ([9857c3cc](https://github.com/ensembleUI/ensemble/commit/9857c3cc3048f2c8879feeb07d77b084181010cd))
+
+
+## 2026-02-21
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.32`](#ensemble---v1232)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.32`
+
+ - Upgrading ensemble version to 1.2.32
+
+
+## 2026-02-07
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.31`](#ensemble---v1231)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.31`
+
+ - **FEAT**: add spans support to Text widget for inline rich text and widget embedding. ([69f92b19](https://github.com/ensembleUI/ensemble/commit/69f92b19502c9b7db8248123e192f808b64d1869))
+
+
+## 2026-02-05
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.30`](#ensemble---v1230)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.30`
+
+ - Bump "ensemble" to `1.2.30`
+
+
+## 2026-01-14
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.29`](#ensemble---v1229)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.29`
+
+ - **FIX**(api): correct apiState assignment in HttpResponse class. ([07766dc5](https://github.com/ensembleUI/ensemble/commit/07766dc5d67ebc886b81482fd71fefffadebea15))
+ - **FEAT**(navigation): add static navigatorKey to EnsembleApp and update dismissBottomSheet logic. ([4ec3f9b9](https://github.com/ensembleUI/ensemble/commit/4ec3f9b9dd61f99e1eeb42781309452f036b1ab7))
+
+
+## 2025-12-30
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.28`](#ensemble---v1228)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.28`
+
+ - Bump "ensemble" to `1.2.28`.
+
+
+## 2025-12-24
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.27`](#ensemble---v1227)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.27`
+
+ - **FEAT**(api): implement DisconnectSSEAction and enhance SSE management. ([e75dce32](https://github.com/ensembleUI/ensemble/commit/e75dce323021aaa7797b63222d1fee7f700a8627))
+
+
+## 2025-12-24
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.26`](#ensemble---v1226)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_connect` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.26`
+
+ - **FEAT**(api): add Server-Sent Events (SSE) API provider. ([c95b8789](https://github.com/ensembleUI/ensemble/commit/c95b87894108ed32de833fa6d83dc52ba3b0cf1e))
+
+
+## 2025-12-22
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.25`](#ensemble---v1225)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.25`
+
+ - Bump "ensemble" to `1.2.25`.
+
+
+## 2025-12-12
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.24`](#ensemble---v1224)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.24`
+
+
+## 2025-12-08
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.23`](#ensemble---v1223)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.23`
+
+ - Bump "ensemble" to `1.2.23`.
+
+
+## 2025-12-02
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.22`](#ensemble---v1222)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.22`
+
+ - y
+
+
+## 2025-12-01
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.21`](#ensemble---v1221)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.21`
+
+
+## 2025-11-25
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.20`](#ensemble---v1220)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.20`
+
+ - Bump "ensemble" to `1.2.20`.
+
+
+## 2025-11-24
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.19`](#ensemble---v1219)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.19`
+
+ - Bump "ensemble" to `1.2.19`.
+
+
+## 2025-11-24
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.18`](#ensemble---v1218)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.18`
+
+ - Bump "ensemble" to `1.2.18`.
+
+
+## 2025-11-11
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.17`](#ensemble---v1217)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+
+---
+
+#### `ensemble` - `v1.2.17`
+
+ - Bump "ensemble" to `1.2.17`.
+
+
+## 2025-11-11
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.16`](#ensemble---v1216)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.16`
+
+ - Bump "ensemble" to `1.2.16`.
+
+
+## 2025-11-11
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.16`](#ensemble---v1216)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.16`
+
+ - Bump "ensemble" to `1.2.16`.
+
+
+## 2025-11-03
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.15`](#ensemble---v1215)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.15`
+
+
+## 2025-10-21
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.14`](#ensemble---v1214)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.14`
+
+ - [Feature] QR scanner module separation
+
+
+## 2025-10-16
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.13`](#ensemble---v1213)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.13`
+
+
+## 2025-10-10
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.12`](#ensemble---v1212)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.12`
+
+
+## 2025-10-08
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.11`](#ensemble---v1211)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.11`
+
+
+## 2025-10-07
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.10`](#ensemble---v1210)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.10`
+
+ - **FEAT**: load secrets from .env.secrets file in SecretsStore class. ([16adc60b](https://github.com/ensembleUI/ensemble/commit/16adc60bb426a9a71e146d986d4332107dc4f388))
+ - **FEAT**: enhance secrets management by loading from .env.secrets file and refactor getSecrets method in CdnDefinitionProvider. ([2278ce84](https://github.com/ensembleUI/ensemble/commit/2278ce849745495d1c0f0fdae9f96e86624968c8))
+
+
+## 2025-10-06
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.9`](#ensemble---v129)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.9`
+
+ - **FIX**: homeScreen mapping for CDN provider. ([d333c165](https://github.com/ensembleUI/ensemble/commit/d333c165f43f8c68dc838fd1a9acfa5041b05b51))
+ - **FIX**: updated the ensemble artifacts logic to have presistent storage. ([bd9b5957](https://github.com/ensembleUI/ensemble/commit/bd9b5957fb85c2f6cada8243b25dc499b6f8bc2d))
+
+
+## 2025-10-01
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.8`](#ensemble---v128)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.8`
+
+ - **REFACTOR**: enhance navigation logic by evaluating payloads and improving menu item visibility handling. ([9992099b](https://github.com/ensembleUI/ensemble/commit/9992099b36504db84662eb7e2c4e51157b78d105))
+ - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
+ - **REFACTOR**: update color handling in widget files to use withValues for opacity adjustments. ([562d8e9e](https://github.com/ensembleUI/ensemble/commit/562d8e9e5247d56362a783f6752a3c801016d1a6))
+ - **REFACTOR**: replace MaterialState with WidgetState in theme and widget files for improved state management. ([77ece02f](https://github.com/ensembleUI/ensemble/commit/77ece02fecf121320e5f62e042ec993e5f7fd178))
+ - **REFACTOR**: streamline caching mechanism in CdnDefinitionProvider by consolidating persistent cache keys and improving state management. ([9be858b0](https://github.com/ensembleUI/ensemble/commit/9be858b0265fc8c197c08d61d269b9bfdbd7a3ce))
+
+
+## 2025-09-28
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.7`](#ensemble---v127)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+
+---
+
+#### `ensemble` - `v1.2.7`
+
+ - **REFACTOR**: update CdnDefinitionProvider documentation and clean up comment formatting for improved readability. ([59ae2e98](https://github.com/ensembleUI/ensemble/commit/59ae2e98ffae67e1e3d7d638d9c6fb8a3056a33e))
+ - **REFACTOR**: enhance CdnDefinitionProvider by improving error messages, simplifying asset parsing, and refining translation handling. ([f58353c9](https://github.com/ensembleUI/ensemble/commit/f58353c960eedd8eeb1f1edbe14492c54acbc59a))
+ - **REFACTOR**: update CdnDefinitionProvider to use a base URL and improve URL construction; change configuration to support CDN hosting. ([3c783cb5](https://github.com/ensembleUI/ensemble/commit/3c783cb5004a2123a8f8e448e30665fd6efa7038))
+ - **REFACTOR**: update _parseTheme method to accept a Map and improve theme data handling. ([86110ff9](https://github.com/ensembleUI/ensemble/commit/86110ff9e619e88765b04a31cde0fab2683f0b0e))
+ - **REFACTOR**: simplify lastUpdatedAt extraction in CdnDefinitionProvider. ([83f34d09](https://github.com/ensembleUI/ensemble/commit/83f34d097632009811482a2bae70902e991f3d37))
+ - **FEAT**: implement XChaCha20-Poly1305 decryption for secrets in CdnDefinitionProvider, enhancing security and payload handling. ([94ec0b19](https://github.com/ensembleUI/ensemble/commit/94ec0b1905ae903d83618c50a828238ba65f6a05))
+ - **FEAT**: add CDN definition provider. ([c1746d87](https://github.com/ensembleUI/ensemble/commit/c1746d87bd7886a6a20a087f772c5a5efd363804))
+
+
+## 2025-09-22
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.6`](#ensemble---v126)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.6`
+
+ - **FIX**: converted Date objects to Timestamps. ([f59d69d3](https://github.com/ensembleUI/ensemble/commit/f59d69d37154e82a7e195275def76c0f69b19da9))
+ - **FEAT**: added firebase analytics rest of unsupported functions. ([04f34898](https://github.com/ensembleUI/ensemble/commit/04f34898dd4a033a130084c0656b769de99e20f1))
+
+
+## 2025-09-05
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.5`](#ensemble---v125)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.5`
+
+ - **FIX**: storage updates to page group as well. ([ab6e3c61](https://github.com/ensembleUI/ensemble/commit/ab6e3c613e4e33b7f5f12fe2c4cb517c75cba25c))
+
+
+## 2025-08-27
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.4`](#ensemble---v124)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.4`
+
+ - **FEAT**(page): add collapsible header support and dynamic title bar height updates. ([d35eba01](https://github.com/ensembleUI/ensemble/commit/d35eba015c0a26429aa4201504bed7c686ed096b))
+
+
+## 2025-08-21
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.3`](#ensemble---v123)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.3`
+
+ - **FIX**(page-group): notify selected page on ViewGroup resume. ([ff4cbfc4](https://github.com/ensembleUI/ensemble/commit/ff4cbfc4321635db54cf70bfc4650005fb9aa1de))
+
+
+## 2025-08-20
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.2`](#ensemble---v122)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.2`
+
+
+## 2025-08-19
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.1`](#ensemble---v121)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.1`
+
+ - **FIX**: correct typo in calendar widget tooltip property. ([dc6d7312](https://github.com/ensembleUI/ensemble/commit/dc6d7312fe0712f41b81dd3c0888215146c6d173))
+
+
+## 2025-08-15
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.2.0`](#ensemble---v120)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.2.0`
+
+ - **FEAT**(widget): enhance semantics label retrieval logic. ([7ddb5d55](https://github.com/ensembleUI/ensemble/commit/7ddb5d55634fe7aa0c4a3000671e37dc8f9b9e73))
+
+
+## 2025-08-07
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.80`](#ensemble---v1180)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.80`
+
+ - Bump "ensemble" to `1.1.80`.
+
+
+## 2025-08-05
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.79`](#ensemble---v1179)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.79`
+
+ - **FIX**: evaluating the saveFile action properties. ([dedb9658](https://github.com/ensembleUI/ensemble/commit/dedb9658a8ba16c443de6abce0f3130256f19ad9))
+
+
+## 2025-07-31
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.78`](#ensemble---v1178)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.78`
+
+ - **FIX**(stripe): correct onSuccess callback reference in ShowPaymentSheetAction. ([60ce6612](https://github.com/ensembleUI/ensemble/commit/60ce661276fadee0d8ae863680d4a28c603597ca))
+
+
+## 2025-07-31
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.77`](#ensemble---v1177)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+
+---
+
+#### `ensemble` - `v1.1.77`
+
+ - **FEAT**(stripe): add initializeStripe action and update payment sheet functionality. ([5622bd40](https://github.com/ensembleUI/ensemble/commit/5622bd40b4b21a21b55154444e2dbe2802b1dc68))
+
+
+## 2025-07-30
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.76`](#ensemble---v1176)
+ - [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_stripe` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.76`
+
+ - **REFACTOR**(stripe): rename onComplete to onSuccess in ShowPaymentSheetAction. ([deddd07c](https://github.com/ensembleUI/ensemble/commit/deddd07cd498d249aca5b15f33319b981adace47))
+ - **FEAT**(stripe): add Stripe payment integration module. ([1f29b783](https://github.com/ensembleUI/ensemble/commit/1f29b783f640e4cd6227c8bd36fd328b0b3f3f57))
+
+
+## 2025-07-25
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.75`](#ensemble---v1175)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+
+---
+
+#### `ensemble` - `v1.1.75`
+
+ - **FIX**(widget): improve semantics label handling in EWidgetState. ([24fe4bd9](https://github.com/ensembleUI/ensemble/commit/24fe4bd914a98f3cf10bd3113bd2d0fd599f067b))
+
+
+## 2025-07-25
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.74`](#ensemble---v1174)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.74`
+
+ - **FIX**(page_group): ensure default value for switchScreen in condition. ([eb222828](https://github.com/ensembleUI/ensemble/commit/eb222828e52f61c144db05a4cdb6c74f8ab52521))
+
+
+## 2025-07-25
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.73`](#ensemble---v1173)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.73`
+
+ - **FIX**(page_group): ensure default value for switchScreen in condition. ([eb222828](https://github.com/ensembleUI/ensemble/commit/eb222828e52f61c144db05a4cdb6c74f8ab52521))
+
+
+## 2025-07-25
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.73`](#ensemble---v1173)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.73`
+
+ - **FIX**(page_group): ensure default value for switchScreen in condition. ([eb222828](https://github.com/ensembleUI/ensemble/commit/eb222828e52f61c144db05a4cdb6c74f8ab52521))
+
+
+## 2025-07-25
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.73`](#ensemble---v1173)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.73`
+
+ - **FIX**: semantics handling for aria-label. ([1ef42542](https://github.com/ensembleUI/ensemble/commit/1ef42542757da00f3f86b449764a94d7badb9eba))
+ - **FIX**: refine route change subscription logic in PageGroupState. ([02e03f33](https://github.com/ensembleUI/ensemble/commit/02e03f3321539a01e8dafa776060395f8106a6bd))
+
+
+## 2025-07-24
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.72`](#ensemble---v1172)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.72`
+
+ - **FIX**: update ensemble_app_badger dependency to version 1.6.1. ([9df43b5f](https://github.com/ensembleUI/ensemble/commit/9df43b5fb063b9dcafb25d571267b6799980965c))
+
+
+## 2025-07-11
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.71`](#ensemble---v1171)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.71`
+
+
+## 2025-07-01
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.70`](#ensemble---v1170)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.70`
+
+ - n
+
+
+## 2025-07-01
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.69`](#ensemble---v1169)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.69`
+
+
+## 2025-07-01
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.68`](#ensemble---v1168)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.68`
+
+
+## 2025-06-29
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.67`](#ensemble---v1167)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.67`
+
+ - 1.1.67
+
+
+## 2025-06-16
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.66`](#ensemble---v1166)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.66`
+
+ - updating
+
+
+## 2025-06-13
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.65`](#ensemble---v1165)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.65`
+
+ - **REFACTOR**(adobe_analytics): streamline initialization and remove redundant checks. ([5714a3fc](https://github.com/ensembleUI/ensemble/commit/5714a3fc1820bb7522f3f08183d46dc727c300df))
+
+
+## 2025-06-13
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.64`](#ensemble---v1164)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.64`
+
+ - **REFACTOR**(adobe_analytics): streamline initialization and remove redundant checks. ([5714a3fc](https://github.com/ensembleUI/ensemble/commit/5714a3fc1820bb7522f3f08183d46dc727c300df))
+
+
+## 2025-06-12
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.64`](#ensemble---v1164)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.64`
+
+ - version build => enabling adobe analytics for build system
+
+
+## 2025-06-12
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.63`](#ensemble---v1163)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.63`
+
+ - **REFACTOR**: remove redundant event name checks in LogEvent class. ([09001583](https://github.com/ensembleUI/ensemble/commit/09001583522736c3c6876500ce24041ef47c8438))
+ - **REFACTOR**: streamline Adobe Analytics event tracking and remove unused methods. ([d22e3aa8](https://github.com/ensembleUI/ensemble/commit/d22e3aa818a96b8b836ca88fde991b687eb2248c))
+ - **FEAT**: integrate Assurance functionality into Adobe Analytics module. ([7e16c4e9](https://github.com/ensembleUI/ensemble/commit/7e16c4e9e7b7795e3b9517f264096601c32c1f69))
+ - **FEAT**: integrate user profile management into Adobe Analytics module. ([e30660ee](https://github.com/ensembleUI/ensemble/commit/e30660ee8f201db10ad1a30e5c3e94c7a08e585b))
+ - **FEAT**: add consent management to Adobe Analytics module. ([9a8a750f](https://github.com/ensembleUI/ensemble/commit/9a8a750f94699a20ada3d1606184df57dbee3720))
+ - **FEAT**: enhance Adobe Analytics module with core, edge, and identity functionalities. ([a49e1224](https://github.com/ensembleUI/ensemble/commit/a49e1224f322b4780467d6e9b794e3896a0958fa))
+ - **FEAT**: update Adobe Analytics methods to return dynamic results. ([3a9caf08](https://github.com/ensembleUI/ensemble/commit/3a9caf08fa37c03484ff3c04be4bf18bb6bd4d68))
+ - **FEAT**: add setupAssurance method to Adobe Analytics module for session management. ([9d01e220](https://github.com/ensembleUI/ensemble/commit/9d01e2201f97baf1320ace14271ee70ceae3255e))
+ - **FEAT**: enhance Adobe Analytics event tracking with timeout handling and parameter type adjustments. ([48d4880c](https://github.com/ensembleUI/ensemble/commit/48d4880c3138e463665b704681eec3d5f57188b7))
+ - **FEAT**: add Adobe Analytics module for Ensemble integration. ([77fadddb](https://github.com/ensembleUI/ensemble/commit/77fadddb913ed20834f977db0fe78ee79c93005b))
+
+
+## 2025-06-11
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.62`](#ensemble---v1162)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.62`
+
+
+## 2025-06-06
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.61`](#ensemble---v1161)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.61`
+
+ - Updating ensemble version to 1.1.61
+
+
+## 2025-06-04
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.60`](#ensemble---v1160)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.60`
+
+
+## 2025-06-03
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.59`](#ensemble---v1159)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.59`
+
+
+## 2025-06-02
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.58`](#ensemble---v1158)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.58`
+
+ - n
+
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+## 2025-06-02
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.57`](#ensemble---v1157)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.57`
+
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+## 2025-05-29
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.56`](#ensemble---v1156)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.56`
+
+
+## 2025-05-27
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.55`](#ensemble---v1155)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.55`
+
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+## 2025-05-26
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.54`](#ensemble---v1154)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.54`
+
+
+## 2025-05-17
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.53`](#ensemble---v1153)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.53`
+
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+## 2025-05-15
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.52`](#ensemble---v1152)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.52`
+
+
+## 2025-05-15
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.51`](#ensemble---v1151)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.51`
+
+ - n
+
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+## 2025-05-09
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.50`](#ensemble---v1150)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.50`
+
+ - **FIX**: add Bluetooth action types to ActionInvokable. ([8e662847](https://github.com/ensembleUI/ensemble/commit/8e662847ced9033b8cdbffebfec14dcb98e55f18))
+ - **FIX**: firebase phone auth actions invokable. ([fe94ae21](https://github.com/ensembleUI/ensemble/commit/fe94ae21627c8460028860a8452b71dd99c18cf6))
+ - **FIX**: CheckPermission action execution logic. ([b0af7e40](https://github.com/ensembleUI/ensemble/commit/b0af7e406e5504dc45443091a9657723242f363c))
+ - **FIX**: add ActionType.getNetworkInfo to ActionInvokable. ([c7091665](https://github.com/ensembleUI/ensemble/commit/c7091665da2b933cab6aca8161c46ca16760c621))
+ - **FEAT**: add new action types for badge management. ([71c98763](https://github.com/ensembleUI/ensemble/commit/71c987631dbc0d82f1f206e8607cc9abc5a5df34))
+ - **FEAT**: implement PlaidLinkAction execution logic. ([0db8e85a](https://github.com/ensembleUI/ensemble/commit/0db8e85af03ec8275b1d30137789230518a2dedd))
+
+
+## 2025-05-06
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.49`](#ensemble---v1149)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.49`
+
+ - CHnaging to 1.1.49
+
+
+## 2025-04-22
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.48`](#ensemble---v1148)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.48`
+
+ - **FIX**: enhance package name and signature validation in DeviceSecurity class. ([1cecfd8e](https://github.com/ensembleUI/ensemble/commit/1cecfd8ee3f94f071eb292e1b450166f8244ba22))
+
+
+## 2025-04-22
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.47`](#ensemble---v1147)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.47`
+
+ - Ensemble to 1.1.47
+
+
+## 2025-04-18
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.45`](#ensemble---v1145)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.45`
+
+
+## 2025-04-18
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.44`](#ensemble---v1144)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.44`
+
+ - **REFACTOR**: replace root_jailbreak_sniffer with safe_device for enhanced device security checks. ([2b873f56](https://github.com/ensembleUI/ensemble/commit/2b873f56083dc7c16e79efabe4addc25e66ea327))
+
+
+## 2025-04-11
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.43`](#ensemble---v1143)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.43`
+
+
+## 2025-04-09
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.42`](#ensemble---v1142)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.42`
+
+ - **REFACTOR**: update validateJsCode method to include DataContext parameter. ([cfee0493](https://github.com/ensembleUI/ensemble/commit/cfee049346da5a82528360b37bbbeb4ce0ff9cd2))
+ - **REFACTOR**: update validateJsCode method to remove DataContext parameter. ([ab6bc651](https://github.com/ensembleUI/ensemble/commit/ab6bc651ad44cc07954cd408d72a1f19d977f384))
+ - **FEAT**: simplify EnsembleStorage method mappings and enhance JSValidator property access error handling. ([05661a5e](https://github.com/ensembleUI/ensemble/commit/05661a5e0d132cbc0342a88f90d8da5521185ec6))
+ - **FEAT**: update EnsembleStorage methods to accept dynamic values for setProperty and implement property access checks. ([1e3373a5](https://github.com/ensembleUI/ensemble/commit/1e3373a50185a2732c8468c4f4743da25e72a279))
+ - **FEAT**: refactor JSInterpreter validation logic into JSValidator for improved error handling and context-aware checks. ([b47d93ac](https://github.com/ensembleUI/ensemble/commit/b47d93ac1db79e65dc77082c127ca867c5f437a4))
+ - **FEAT**: enhance JS code validation in DevMode and add detailed error handling. ([00d0f617](https://github.com/ensembleUI/ensemble/commit/00d0f6172ff96eb2368aca85c6199da12d937db5))
+ - **FEAT**: add JS code validation method in DevMode class. ([6006ffcb](https://github.com/ensembleUI/ensemble/commit/6006ffcbd1e10044d25109f0574bd858a1db43dd))
+
+
+## 2025-04-09
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.41`](#ensemble---v1141)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.41`
+
+ - Updating Ensemble to 1.1.41
+
+
+## 2025-04-03
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.40`](#ensemble---v1140)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.40`
+
+
+## 2025-03-26
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.39`](#ensemble---v1139)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.39`
+
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+## 2025-03-24
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.38`](#ensemble---v1138)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.38`
+
+ - Bump "ensemble" to `1.1.38`.
+
+
+## 2025-03-24
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.37`](#ensemble---v1137)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.37`
+
+ - Bump "ensemble" to `1.1.37`.
+
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+## 2025-03-22
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.36`](#ensemble---v1136)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.36`
+
+
+## 2025-03-14
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.35`](#ensemble---v1135)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.35`
+
+
+## 2025-03-13
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.34`](#ensemble---v1134)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.34`
+
+ - Bump "ensemble" to `1.1.34`.
+
+
+## 2025-03-12
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.33`](#ensemble---v1133)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.33`
+
+ - **FIX**: keep the focus sensitive field focused on dialog open. ([efc94638](https://github.com/ensembleUI/ensemble/commit/efc94638254ed69c55f8bf8d1192cd5d2c51d6ba))
+
+
+## 2025-03-06
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.31`](#ensemble---v1131)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.31`
+
+ - Changing version
+
+
+## 2025-03-03
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.30`](#ensemble---v1130)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.30`
+
+
+## 2025-03-03
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.29`](#ensemble---v1129)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.29`
+
+ - **FIX**(notification_manager): initialize message handling on startup. ([9ca35acb](https://github.com/ensembleUI/ensemble/commit/9ca35acbd9b868198acb29fa618841b362ac8d19))
+
+
+## 2025-02-28
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.28`](#ensemble---v1128)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.28`
+
+
+## 2025-02-24
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.27`](#ensemble---v1127)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.27`
+
+ - **FIX**: handle exceptions in getLocalAssetFullPath. ([8844d487](https://github.com/ensembleUI/ensemble/commit/8844d4874ddde3e7a3244e663c5cdcf0ee6520b7))
+
+
+## 2025-02-21
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.26`](#ensemble---v1126)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.26`
+
+ - **FIX**: ensure EnsembleConfigService is initialized before accessing config. ([1f8df899](https://github.com/ensembleUI/ensemble/commit/1f8df8997f7a9ab2dffae88ad96ac898cb49fa0a))
+
+
+## 2025-02-21
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.25`](#ensemble---v1125)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.25`
+
+
+## 2025-02-20
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.24`](#ensemble---v1124)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.24`
+
+ - Bump "ensemble" to `1.1.24`.
+
+
+## 2025-02-19
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.23`](#ensemble---v1123)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.23`
+
+
+## 2025-02-13
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.22`](#ensemble---v1122)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.22`
+
+ - **REFACTOR**: remove no internet widget. ([e03359b2](https://github.com/ensembleUI/ensemble/commit/e03359b2dd6b1290bea39c71c69e2a3d5ad27c13))
+ - **REFACTOR**: replace offline widget with error screen for no internet connection. ([b0163a1b](https://github.com/ensembleUI/ensemble/commit/b0163a1ba20eb72c7a459afb3dfa59e1729cf9bf))
+ - **FIX**: auto complete dropdown selected label. ([80b9c8f5](https://github.com/ensembleUI/ensemble/commit/80b9c8f54c753aca7884fd12ed449c5f019d981b))
+ - **FEAT**: reinitialize app state when internet connectivity is restored. ([e914e337](https://github.com/ensembleUI/ensemble/commit/e914e337e54bbe539f08aa192b0a50b118708a00))
+ - **FEAT**: implement internet connectivity check in runtime. ([30204d3b](https://github.com/ensembleUI/ensemble/commit/30204d3bb29324d9ae44380fc919b450cf30cfd0))
+
+
+## 2025-02-07
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.21`](#ensemble---v1121)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.21`
+
+
+## 2025-02-07
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.20`](#ensemble---v1120)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.20`
+
+ - Bump "ensemble" to `1.1.20`.
+
+
+## 2025-02-06
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.19`](#ensemble---v1119)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.19`
+
+
+## 2025-01-30
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.18`](#ensemble---v1118)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.18`
+
+
+## 2025-01-23
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.17`](#ensemble---v1117)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.17`
+
+ - **FIX**: bad state no element on scrollabletabbar. ([f45b71e6](https://github.com/ensembleUI/ensemble/commit/f45b71e67caef2fc7753a837a7c1f27db0eeb4a2))
+
+
+## 2025-01-23
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.16`](#ensemble---v1116)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.16`
+
+ - **REFACTOR**: make phoneNumber optional and handle empty values in verification actions. ([49810b31](https://github.com/ensembleUI/ensemble/commit/49810b315fb461964d8839b5b619538611f63cbb))
+ - **REFACTOR**: simplify payload handling in verification code actions. ([0441b40c](https://github.com/ensembleUI/ensemble/commit/0441b40c7e355eae9e7960f9ea15b41571d5d19d))
+ - **REFACTOR**: rename otp verification methods. ([7e3408e0](https://github.com/ensembleUI/ensemble/commit/7e3408e01a1006700be01e1f4403395eebd13f32))
+ - **FEAT**: update validateVerificationCode to return user and idToken, enhance onSuccess callback. ([33abb106](https://github.com/ensembleUI/ensemble/commit/33abb10689de2fcb5328194a44097a6757e0298d))
+ - **FEAT**: add onVerificationFailure callback to handle verification errors more effectively. ([08bc0ac6](https://github.com/ensembleUI/ensemble/commit/08bc0ac676139b543e24694f290df58dd57d4f13))
+ - **FEAT**: add method parameter to verification code actions for improved method handling. ([976adb71](https://github.com/ensembleUI/ensemble/commit/976adb7154ac3a8007828a6bf74e8d9c6c7d5a3c))
+ - **FEAT**: add provider parameter to verification code actions for enhanced flexibility. ([440e1f32](https://github.com/ensembleUI/ensemble/commit/440e1f323706ac47243950cdceef441cc00b8694))
+ - **FEAT**: implement phone verification actions with firebase phone auth. ([5927c37c](https://github.com/ensembleUI/ensemble/commit/5927c37c9b636f7acf7c480d26db9c8d0217c90e))
+
+
+## 2025-01-16
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.15`](#ensemble---v1115)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.15`
+
+ - **FIX**: type comma. ([f0749e36](https://github.com/ensembleUI/ensemble/commit/f0749e36da3e1f3e39866039b1062bd8f81319ee))
+ - **FIX**: typo missing semi-colon. ([76d0d99a](https://github.com/ensembleUI/ensemble/commit/76d0d99a8a7f0a2b0f583cb7888c649cfd0b3282))
+
+
+## 2025-01-07
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.14`](#ensemble---v1114)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.14`
+
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+## 2025-01-03
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.13`](#ensemble---v1113)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.13`
+
+ - Moengage Module Release
+
+ - **FIX**: unreliable showpreview. ([2365d35e](https://github.com/ensembleUI/ensemble/commit/2365d35e5b44743d1924ce5c6e7875676858296b))
+
+
+## 2024-12-16
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.12`](#ensemble---v1112)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.12`
+
+ - **FIX**: fluttertoast breaking changes. ([d29696d3](https://github.com/ensembleUI/ensemble/commit/d29696d3a4869ce0837c1f200e5ccfe7aa1449f7))
+
+
+## 2024-12-11
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.11`](#ensemble---v1111)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.11`
+
+
+## 2024-12-09
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.10`](#ensemble---v1110)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.10`
+
+ - **FIX**: multiple navigator key. ([7ae53f25](https://github.com/ensembleUI/ensemble/commit/7ae53f2542790c5fe0ec616d98f7aba69f277e3b))
+
+
+## 2024-11-28
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.8`](#ensemble---v118)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.8`
+
+ - Bump "ensemble" to `1.1.8`.
+
+
+## 2024-11-27
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.6`](#ensemble---v116)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.6`
+
+ - Bump "ensemble" to `1.1.6`.
+
+
+## 2024-11-26
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.5`](#ensemble---v115)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.5`
+
+ - **FIX**: uninitialized getIt and handle externalKey properly. ([9b46738a](https://github.com/ensembleUI/ensemble/commit/9b46738a4a9cde57f09db7f40d174baed9e57550))
+
+
+## 2024-11-18
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.4`](#ensemble---v114)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.4`
+
+ - Ensemble version with flutter 3.24.3 support
+
+
+## 2024-11-18
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.3`](#ensemble---v113)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.3`
+
+ - last ensemble version to support flutter 3.19.5
+
+ - **FEAT**: Add reactive orientation support to Device class. ([47fc9314](https://github.com/ensembleUI/ensemble/commit/47fc93148c1eeaea7e87c4eb4131aa368726e9f7))
+
+
+## 2024-11-14
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.2`](#ensemble---v112)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.2`
+
+ - last ensemble support for 3.19.5
+
+
+## 2024-11-08
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.1`](#ensemble---v111)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_bluetooth` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.1`
+
+
+## 2024-10-08
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.1.0`](#ensemble---v110)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.1.0`
+
+
+## 2024-10-03
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.0.9`](#ensemble---v109)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.0.9`
+
+
+## 2024-10-01
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.0.8`](#ensemble---v108)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.0.8`
+
+
+## 2024-10-01
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.0.7`](#ensemble---v107)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.0.7`
+
+
+## 2024-10-01
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.0.7`](#ensemble---v107)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.0.7`
+
+
+## 2024-10-01
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.0.7`](#ensemble---v107)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.0.7`
+
+ - Bump "ensemble" to `1.0.7`.
+
+
+## 2024-10-01
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.0.7`](#ensemble---v107)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.0.7`
+
+ - moving to 1.0.7 to fix the version issue with firebase analytics
+
+
+## 2024-09-28
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.0.6`](#ensemble---v106)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.0.6`
+
+
+## 2024-09-13
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.0.5`](#ensemble---v105)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.0.5`
+
+ - Bump "ensemble" to `1.0.5`.
+
+
+## 2024-09-13
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.0.4`](#ensemble---v104)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.0.4`
+
+
+## 2024-08-28
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.0.3`](#ensemble---v103)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.0.3`
+
+ - Unified theme
+
+
+## 2024-08-28
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.0.2`](#ensemble---v102)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.0.2`
+
+
+## 2024-08-27
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`ensemble` - `v1.0.1`](#ensemble---v101)
+ - [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
+ - [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
+ - [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
+ - [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
+ - [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
+ - [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
+ - [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
+ - [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
+ - [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `ensemble_chat` - `v0.0.1+1`
+ - `ensemble_camera` - `v0.0.1+1`
+ - `ensemble_auth` - `v1.0.1`
+ - `ensemble_location` - `v0.0.1+1`
+ - `ensemble_file_manager` - `v0.0.1+1`
+ - `ensemble_deeplink` - `v0.0.1+1`
+ - `ensemble_contacts` - `v0.0.1+1`
+ - `ensemble_network_info` - `v0.0.1+1`
+ - `ensemble_connect` - `v0.0.1+1`
+
+---
+
+#### `ensemble` - `v1.0.1`
+
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 600567ea5..f88cd24d7 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,125 +1,125 @@
-# Contributing to Ensemble
-
-Thank you for your interest in contributing to Ensemble! This document provides guidelines and instructions for contributing to the project.
-
-## Code of Conduct
-
-By participating in this project, you agree to maintain a respectful and inclusive environment for everyone.
-
-## Getting Started
-
-### Prerequisites
-
-- [Flutter](https://docs.flutter.dev/get-started/install) (>= 3.24.0)
-- [Melos](https://melos.invertase.dev/) (>= 3.4.0) — install with `dart pub global activate melos`
-
-### Setting Up the Development Environment
-
-1. Fork and clone the repository:
- ```bash
- git clone https://github.com//ensemble.git
- cd ensemble
- ```
-
-2. Bootstrap the monorepo (installs dependencies and links local packages):
- ```bash
- melos bootstrap
- ```
-
-3. Run the starter app to verify your setup:
- ```bash
- cd starter
- flutter run
- ```
-
-This will launch the Kitchen Sink demo app showcasing the available widgets and features.
-
-## Repository Structure
-
-This is a Dart/Flutter monorepo managed by Melos:
-
-- **`modules/ensemble/`** — Core Ensemble runtime
-- **`modules/`** — Optional feature modules (auth, camera, chat, location, etc.)
-- **`packages/`** — Standalone packages published to pub.dev
-- **`starter/`** — Reference app for running Ensemble-powered apps
-
-## How to Contribute
-
-### Reporting Bugs
-
-- Search [existing issues](https://github.com/EnsembleUI/ensemble/issues) to avoid duplicates.
-- If no existing issue matches, open a new one with:
- - A clear, descriptive title
- - Steps to reproduce the issue
- - Expected vs. actual behavior
- - Flutter version, platform, and any relevant configuration
-
-### Suggesting Features
-
-Open an issue describing the feature, its use case, and any proposed implementation approach. This lets the team discuss the idea before significant effort is invested.
-
-### Contributing Code
-
-#### Widget Development
-
-1. Browse existing widgets in [`modules/ensemble/lib/widget/`](https://github.com/EnsembleUI/ensemble/tree/main/modules/ensemble/lib/widget) to understand patterns.
-2. Run the [Kitchen Sink app](https://studio.ensembleui.com/app/e24402cb-75e2-404c-866c-29e6c3dd7992/screens) to see how YAML definitions map to Flutter widgets.
-3. Create your own app and screens in [Ensemble Studio](https://studio.ensembleui.com/) to prototype and test your widget.
-
-#### Creating a Pull Request
-
-1. Create a branch from `main`:
- ```bash
- git checkout -b feature/my-change
- ```
-
-2. Make your changes, following the conventions in the existing codebase.
-
-3. Run analysis to check for issues:
- ```bash
- cd modules/ensemble
- flutter analyze
- ```
-
-4. Run tests to ensure nothing is broken:
- ```bash
- cd modules/ensemble
- flutter test
- ```
-
-5. If you modified the auth module, run its tests as well:
- ```bash
- cd modules/auth
- flutter test
- ```
-
-6. Commit your changes with a clear, descriptive message.
-
-7. Push your branch and open a pull request against `main`.
-
-8. Verify that all CI status checks are passing.
-
-### Adding or Enabling Modules
-
-The starter app has optional modules disabled by default to keep the app lightweight. To enable a module:
-
-1. Uncomment the corresponding dependency in `starter/pubspec.yaml`.
-2. Run `flutter pub upgrade`.
-3. Enable the service in `starter/lib/generated/ensemble_modules.dart` by uncommenting the relevant imports and registration lines.
-4. Run `flutter run` to verify.
-
-See the [Starter README](https://github.com/EnsembleUI/ensemble/tree/main/starter#readme) for details.
-
-## Style Guidelines
-
-- Follow existing code conventions in the repository.
-- Use `flutter analyze` to catch lint issues before submitting.
-- Keep pull requests focused — one logical change per PR.
-
-## Releasing
-
-See the [Releasing a New Version](README.md#releasing-a-new-version) section in the README.
-
-## License
-
-By contributing to Ensemble, you agree that your contributions will be licensed under the [BSD 3-Clause License](LICENSE).
+# Contributing to Ensemble
+
+Thank you for your interest in contributing to Ensemble! This document provides guidelines and instructions for contributing to the project.
+
+## Code of Conduct
+
+By participating in this project, you agree to maintain a respectful and inclusive environment for everyone.
+
+## Getting Started
+
+### Prerequisites
+
+- [Flutter](https://docs.flutter.dev/get-started/install) (>= 3.24.0)
+- [Melos](https://melos.invertase.dev/) (>= 3.4.0) — install with `dart pub global activate melos`
+
+### Setting Up the Development Environment
+
+1. Fork and clone the repository:
+ ```bash
+ git clone https://github.com//ensemble.git
+ cd ensemble
+ ```
+
+2. Bootstrap the monorepo (installs dependencies and links local packages):
+ ```bash
+ melos bootstrap
+ ```
+
+3. Run the starter app to verify your setup:
+ ```bash
+ cd starter
+ flutter run
+ ```
+
+This will launch the Kitchen Sink demo app showcasing the available widgets and features.
+
+## Repository Structure
+
+This is a Dart/Flutter monorepo managed by Melos:
+
+- **`modules/ensemble/`** — Core Ensemble runtime
+- **`modules/`** — Optional feature modules (auth, camera, chat, location, etc.)
+- **`packages/`** — Standalone packages published to pub.dev
+- **`starter/`** — Reference app for running Ensemble-powered apps
+
+## How to Contribute
+
+### Reporting Bugs
+
+- Search [existing issues](https://github.com/EnsembleUI/ensemble/issues) to avoid duplicates.
+- If no existing issue matches, open a new one with:
+ - A clear, descriptive title
+ - Steps to reproduce the issue
+ - Expected vs. actual behavior
+ - Flutter version, platform, and any relevant configuration
+
+### Suggesting Features
+
+Open an issue describing the feature, its use case, and any proposed implementation approach. This lets the team discuss the idea before significant effort is invested.
+
+### Contributing Code
+
+#### Widget Development
+
+1. Browse existing widgets in [`modules/ensemble/lib/widget/`](https://github.com/EnsembleUI/ensemble/tree/main/modules/ensemble/lib/widget) to understand patterns.
+2. Run the [Kitchen Sink app](https://studio.ensembleui.com/app/e24402cb-75e2-404c-866c-29e6c3dd7992/screens) to see how YAML definitions map to Flutter widgets.
+3. Create your own app and screens in [Ensemble Studio](https://studio.ensembleui.com/) to prototype and test your widget.
+
+#### Creating a Pull Request
+
+1. Create a branch from `main`:
+ ```bash
+ git checkout -b feature/my-change
+ ```
+
+2. Make your changes, following the conventions in the existing codebase.
+
+3. Run analysis to check for issues:
+ ```bash
+ cd modules/ensemble
+ flutter analyze
+ ```
+
+4. Run tests to ensure nothing is broken:
+ ```bash
+ cd modules/ensemble
+ flutter test
+ ```
+
+5. If you modified the auth module, run its tests as well:
+ ```bash
+ cd modules/auth
+ flutter test
+ ```
+
+6. Commit your changes with a clear, descriptive message.
+
+7. Push your branch and open a pull request against `main`.
+
+8. Verify that all CI status checks are passing.
+
+### Adding or Enabling Modules
+
+The starter app has optional modules disabled by default to keep the app lightweight. To enable a module:
+
+1. Uncomment the corresponding dependency in `starter/pubspec.yaml`.
+2. Run `flutter pub upgrade`.
+3. Enable the service in `starter/lib/generated/ensemble_modules.dart` by uncommenting the relevant imports and registration lines.
+4. Run `flutter run` to verify.
+
+See the [Starter README](https://github.com/EnsembleUI/ensemble/tree/main/starter#readme) for details.
+
+## Style Guidelines
+
+- Follow existing code conventions in the repository.
+- Use `flutter analyze` to catch lint issues before submitting.
+- Keep pull requests focused — one logical change per PR.
+
+## Releasing
+
+See the [Releasing a New Version](README.md#releasing-a-new-version) section in the README.
+
+## License
+
+By contributing to Ensemble, you agree that your contributions will be licensed under the [BSD 3-Clause License](LICENSE).
diff --git a/modules/adobe_analytics/CHANGELOG.md b/modules/adobe_analytics/CHANGELOG.md
index 9a590c6f8..162c7c3b1 100644
--- a/modules/adobe_analytics/CHANGELOG.md
+++ b/modules/adobe_analytics/CHANGELOG.md
@@ -1,62 +1,62 @@
-## 1.2.53
-
- - Bump "ensemble_adobe_analytics" to `1.2.53`.
-
-## 1.2.52
-
- - Bump "ensemble_adobe_analytics" to `1.2.52`.
-
-## 1.2.51
-
- - Bump "ensemble_adobe_analytics" to `1.2.51`.
-
-## 1.2.50
-
- - Bump "ensemble_adobe_analytics" to `1.2.50`.
-
-## 1.2.49
-
- - Bump "ensemble_adobe_analytics" to `1.2.49`.
-
-## 1.2.48
-
- - **REFACTOR**(adobe_analytics): streamline initialization and remove redundant checks. ([5714a3fc](https://github.com/ensembleUI/ensemble/commit/5714a3fc1820bb7522f3f08183d46dc727c300df))
- - **REFACTOR**: simplify event creation in AdobeAnalyticsImpl by using concise syntax. ([6a35cafb](https://github.com/ensembleUI/ensemble/commit/6a35cafb770e709eb3c3d66c289f7f547fb867ed))
- - **REFACTOR**: streamline Adobe Analytics event tracking and remove unused methods. ([d22e3aa8](https://github.com/ensembleUI/ensemble/commit/d22e3aa818a96b8b836ca88fde991b687eb2248c))
- - **FIX**: update Assurance session handling in AdobeAnalyticsImpl. ([e65d1793](https://github.com/ensembleUI/ensemble/commit/e65d1793a313ca97bc3a714008e068dd22ab46b1))
- - **FEAT**: add module configuration for Adobe Analytics. ([056c09d1](https://github.com/ensembleUI/ensemble/commit/056c09d1cf3bb504ab63554ef10ce8285180ed68))
- - **FEAT**: enhance README and core functionalities for Adobe Analytics module. ([0fa3b02f](https://github.com/ensembleUI/ensemble/commit/0fa3b02ff0e1d84b0feec9159d03bac78822113e))
- - **FEAT**: enforce initialization checks in Adobe Analytics methods. ([575d3eca](https://github.com/ensembleUI/ensemble/commit/575d3eca7c4d14578425ef961d92c670e6d2832f))
- - **FEAT**: add LICENSE and enhance README for Adobe Analytics module. ([10ceb7e2](https://github.com/ensembleUI/ensemble/commit/10ceb7e283496513067b76361f7f5dd3d1a4912e))
- - **FEAT**: enhance identity management in Adobe Analytics module. ([e8e4fed5](https://github.com/ensembleUI/ensemble/commit/e8e4fed59cbfb164c08148ed8c42a15e5a2d5cf0))
- - **FEAT**: integrate Assurance functionality into Adobe Analytics module. ([7e16c4e9](https://github.com/ensembleUI/ensemble/commit/7e16c4e9e7b7795e3b9517f264096601c32c1f69))
- - **FEAT**: integrate user profile management into Adobe Analytics module. ([e30660ee](https://github.com/ensembleUI/ensemble/commit/e30660ee8f201db10ad1a30e5c3e94c7a08e585b))
- - **FEAT**: add consent management to Adobe Analytics module. ([9a8a750f](https://github.com/ensembleUI/ensemble/commit/9a8a750f94699a20ada3d1606184df57dbee3720))
- - **FEAT**: enhance Adobe Analytics module with core, edge, and identity functionalities. ([a49e1224](https://github.com/ensembleUI/ensemble/commit/a49e1224f322b4780467d6e9b794e3896a0958fa))
- - **FEAT**: update Adobe Analytics methods to return dynamic results. ([3a9caf08](https://github.com/ensembleUI/ensemble/commit/3a9caf08fa37c03484ff3c04be4bf18bb6bd4d68))
- - **FEAT**: add setupAssurance method to Adobe Analytics module for session management. ([9d01e220](https://github.com/ensembleUI/ensemble/commit/9d01e2201f97baf1320ace14271ee70ceae3255e))
- - **FEAT**: enhance Adobe Analytics event tracking with timeout handling and parameter type adjustments. ([48d4880c](https://github.com/ensembleUI/ensemble/commit/48d4880c3138e463665b704681eec3d5f57188b7))
- - **FEAT**: add Adobe Analytics module for Ensemble integration. ([77fadddb](https://github.com/ensembleUI/ensemble/commit/77fadddb913ed20834f977db0fe78ee79c93005b))
- - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
-
-## 1.2.47
-
- - **REFACTOR**(adobe_analytics): streamline initialization and remove redundant checks. ([5714a3fc](https://github.com/ensembleUI/ensemble/commit/5714a3fc1820bb7522f3f08183d46dc727c300df))
- - **REFACTOR**: simplify event creation in AdobeAnalyticsImpl by using concise syntax. ([6a35cafb](https://github.com/ensembleUI/ensemble/commit/6a35cafb770e709eb3c3d66c289f7f547fb867ed))
- - **REFACTOR**: streamline Adobe Analytics event tracking and remove unused methods. ([d22e3aa8](https://github.com/ensembleUI/ensemble/commit/d22e3aa818a96b8b836ca88fde991b687eb2248c))
- - **FIX**: update Assurance session handling in AdobeAnalyticsImpl. ([e65d1793](https://github.com/ensembleUI/ensemble/commit/e65d1793a313ca97bc3a714008e068dd22ab46b1))
- - **FEAT**: add module configuration for Adobe Analytics. ([056c09d1](https://github.com/ensembleUI/ensemble/commit/056c09d1cf3bb504ab63554ef10ce8285180ed68))
- - **FEAT**: enhance README and core functionalities for Adobe Analytics module. ([0fa3b02f](https://github.com/ensembleUI/ensemble/commit/0fa3b02ff0e1d84b0feec9159d03bac78822113e))
- - **FEAT**: enforce initialization checks in Adobe Analytics methods. ([575d3eca](https://github.com/ensembleUI/ensemble/commit/575d3eca7c4d14578425ef961d92c670e6d2832f))
- - **FEAT**: add LICENSE and enhance README for Adobe Analytics module. ([10ceb7e2](https://github.com/ensembleUI/ensemble/commit/10ceb7e283496513067b76361f7f5dd3d1a4912e))
- - **FEAT**: enhance identity management in Adobe Analytics module. ([e8e4fed5](https://github.com/ensembleUI/ensemble/commit/e8e4fed59cbfb164c08148ed8c42a15e5a2d5cf0))
- - **FEAT**: integrate Assurance functionality into Adobe Analytics module. ([7e16c4e9](https://github.com/ensembleUI/ensemble/commit/7e16c4e9e7b7795e3b9517f264096601c32c1f69))
- - **FEAT**: integrate user profile management into Adobe Analytics module. ([e30660ee](https://github.com/ensembleUI/ensemble/commit/e30660ee8f201db10ad1a30e5c3e94c7a08e585b))
- - **FEAT**: add consent management to Adobe Analytics module. ([9a8a750f](https://github.com/ensembleUI/ensemble/commit/9a8a750f94699a20ada3d1606184df57dbee3720))
- - **FEAT**: enhance Adobe Analytics module with core, edge, and identity functionalities. ([a49e1224](https://github.com/ensembleUI/ensemble/commit/a49e1224f322b4780467d6e9b794e3896a0958fa))
- - **FEAT**: update Adobe Analytics methods to return dynamic results. ([3a9caf08](https://github.com/ensembleUI/ensemble/commit/3a9caf08fa37c03484ff3c04be4bf18bb6bd4d68))
- - **FEAT**: add setupAssurance method to Adobe Analytics module for session management. ([9d01e220](https://github.com/ensembleUI/ensemble/commit/9d01e2201f97baf1320ace14271ee70ceae3255e))
- - **FEAT**: enhance Adobe Analytics event tracking with timeout handling and parameter type adjustments. ([48d4880c](https://github.com/ensembleUI/ensemble/commit/48d4880c3138e463665b704681eec3d5f57188b7))
- - **FEAT**: add Adobe Analytics module for Ensemble integration. ([77fadddb](https://github.com/ensembleUI/ensemble/commit/77fadddb913ed20834f977db0fe78ee79c93005b))
- - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
-
+## 1.2.53
+
+ - Bump "ensemble_adobe_analytics" to `1.2.53`.
+
+## 1.2.52
+
+ - Bump "ensemble_adobe_analytics" to `1.2.52`.
+
+## 1.2.51
+
+ - Bump "ensemble_adobe_analytics" to `1.2.51`.
+
+## 1.2.50
+
+ - Bump "ensemble_adobe_analytics" to `1.2.50`.
+
+## 1.2.49
+
+ - Bump "ensemble_adobe_analytics" to `1.2.49`.
+
+## 1.2.48
+
+ - **REFACTOR**(adobe_analytics): streamline initialization and remove redundant checks. ([5714a3fc](https://github.com/ensembleUI/ensemble/commit/5714a3fc1820bb7522f3f08183d46dc727c300df))
+ - **REFACTOR**: simplify event creation in AdobeAnalyticsImpl by using concise syntax. ([6a35cafb](https://github.com/ensembleUI/ensemble/commit/6a35cafb770e709eb3c3d66c289f7f547fb867ed))
+ - **REFACTOR**: streamline Adobe Analytics event tracking and remove unused methods. ([d22e3aa8](https://github.com/ensembleUI/ensemble/commit/d22e3aa818a96b8b836ca88fde991b687eb2248c))
+ - **FIX**: update Assurance session handling in AdobeAnalyticsImpl. ([e65d1793](https://github.com/ensembleUI/ensemble/commit/e65d1793a313ca97bc3a714008e068dd22ab46b1))
+ - **FEAT**: add module configuration for Adobe Analytics. ([056c09d1](https://github.com/ensembleUI/ensemble/commit/056c09d1cf3bb504ab63554ef10ce8285180ed68))
+ - **FEAT**: enhance README and core functionalities for Adobe Analytics module. ([0fa3b02f](https://github.com/ensembleUI/ensemble/commit/0fa3b02ff0e1d84b0feec9159d03bac78822113e))
+ - **FEAT**: enforce initialization checks in Adobe Analytics methods. ([575d3eca](https://github.com/ensembleUI/ensemble/commit/575d3eca7c4d14578425ef961d92c670e6d2832f))
+ - **FEAT**: add LICENSE and enhance README for Adobe Analytics module. ([10ceb7e2](https://github.com/ensembleUI/ensemble/commit/10ceb7e283496513067b76361f7f5dd3d1a4912e))
+ - **FEAT**: enhance identity management in Adobe Analytics module. ([e8e4fed5](https://github.com/ensembleUI/ensemble/commit/e8e4fed59cbfb164c08148ed8c42a15e5a2d5cf0))
+ - **FEAT**: integrate Assurance functionality into Adobe Analytics module. ([7e16c4e9](https://github.com/ensembleUI/ensemble/commit/7e16c4e9e7b7795e3b9517f264096601c32c1f69))
+ - **FEAT**: integrate user profile management into Adobe Analytics module. ([e30660ee](https://github.com/ensembleUI/ensemble/commit/e30660ee8f201db10ad1a30e5c3e94c7a08e585b))
+ - **FEAT**: add consent management to Adobe Analytics module. ([9a8a750f](https://github.com/ensembleUI/ensemble/commit/9a8a750f94699a20ada3d1606184df57dbee3720))
+ - **FEAT**: enhance Adobe Analytics module with core, edge, and identity functionalities. ([a49e1224](https://github.com/ensembleUI/ensemble/commit/a49e1224f322b4780467d6e9b794e3896a0958fa))
+ - **FEAT**: update Adobe Analytics methods to return dynamic results. ([3a9caf08](https://github.com/ensembleUI/ensemble/commit/3a9caf08fa37c03484ff3c04be4bf18bb6bd4d68))
+ - **FEAT**: add setupAssurance method to Adobe Analytics module for session management. ([9d01e220](https://github.com/ensembleUI/ensemble/commit/9d01e2201f97baf1320ace14271ee70ceae3255e))
+ - **FEAT**: enhance Adobe Analytics event tracking with timeout handling and parameter type adjustments. ([48d4880c](https://github.com/ensembleUI/ensemble/commit/48d4880c3138e463665b704681eec3d5f57188b7))
+ - **FEAT**: add Adobe Analytics module for Ensemble integration. ([77fadddb](https://github.com/ensembleUI/ensemble/commit/77fadddb913ed20834f977db0fe78ee79c93005b))
+ - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
+
+## 1.2.47
+
+ - **REFACTOR**(adobe_analytics): streamline initialization and remove redundant checks. ([5714a3fc](https://github.com/ensembleUI/ensemble/commit/5714a3fc1820bb7522f3f08183d46dc727c300df))
+ - **REFACTOR**: simplify event creation in AdobeAnalyticsImpl by using concise syntax. ([6a35cafb](https://github.com/ensembleUI/ensemble/commit/6a35cafb770e709eb3c3d66c289f7f547fb867ed))
+ - **REFACTOR**: streamline Adobe Analytics event tracking and remove unused methods. ([d22e3aa8](https://github.com/ensembleUI/ensemble/commit/d22e3aa818a96b8b836ca88fde991b687eb2248c))
+ - **FIX**: update Assurance session handling in AdobeAnalyticsImpl. ([e65d1793](https://github.com/ensembleUI/ensemble/commit/e65d1793a313ca97bc3a714008e068dd22ab46b1))
+ - **FEAT**: add module configuration for Adobe Analytics. ([056c09d1](https://github.com/ensembleUI/ensemble/commit/056c09d1cf3bb504ab63554ef10ce8285180ed68))
+ - **FEAT**: enhance README and core functionalities for Adobe Analytics module. ([0fa3b02f](https://github.com/ensembleUI/ensemble/commit/0fa3b02ff0e1d84b0feec9159d03bac78822113e))
+ - **FEAT**: enforce initialization checks in Adobe Analytics methods. ([575d3eca](https://github.com/ensembleUI/ensemble/commit/575d3eca7c4d14578425ef961d92c670e6d2832f))
+ - **FEAT**: add LICENSE and enhance README for Adobe Analytics module. ([10ceb7e2](https://github.com/ensembleUI/ensemble/commit/10ceb7e283496513067b76361f7f5dd3d1a4912e))
+ - **FEAT**: enhance identity management in Adobe Analytics module. ([e8e4fed5](https://github.com/ensembleUI/ensemble/commit/e8e4fed59cbfb164c08148ed8c42a15e5a2d5cf0))
+ - **FEAT**: integrate Assurance functionality into Adobe Analytics module. ([7e16c4e9](https://github.com/ensembleUI/ensemble/commit/7e16c4e9e7b7795e3b9517f264096601c32c1f69))
+ - **FEAT**: integrate user profile management into Adobe Analytics module. ([e30660ee](https://github.com/ensembleUI/ensemble/commit/e30660ee8f201db10ad1a30e5c3e94c7a08e585b))
+ - **FEAT**: add consent management to Adobe Analytics module. ([9a8a750f](https://github.com/ensembleUI/ensemble/commit/9a8a750f94699a20ada3d1606184df57dbee3720))
+ - **FEAT**: enhance Adobe Analytics module with core, edge, and identity functionalities. ([a49e1224](https://github.com/ensembleUI/ensemble/commit/a49e1224f322b4780467d6e9b794e3896a0958fa))
+ - **FEAT**: update Adobe Analytics methods to return dynamic results. ([3a9caf08](https://github.com/ensembleUI/ensemble/commit/3a9caf08fa37c03484ff3c04be4bf18bb6bd4d68))
+ - **FEAT**: add setupAssurance method to Adobe Analytics module for session management. ([9d01e220](https://github.com/ensembleUI/ensemble/commit/9d01e2201f97baf1320ace14271ee70ceae3255e))
+ - **FEAT**: enhance Adobe Analytics event tracking with timeout handling and parameter type adjustments. ([48d4880c](https://github.com/ensembleUI/ensemble/commit/48d4880c3138e463665b704681eec3d5f57188b7))
+ - **FEAT**: add Adobe Analytics module for Ensemble integration. ([77fadddb](https://github.com/ensembleUI/ensemble/commit/77fadddb913ed20834f977db0fe78ee79c93005b))
+ - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
+
diff --git a/modules/adobe_analytics/pubspec.yaml b/modules/adobe_analytics/pubspec.yaml
index 7ddc03df8..761835d71 100644
--- a/modules/adobe_analytics/pubspec.yaml
+++ b/modules/adobe_analytics/pubspec.yaml
@@ -1,37 +1,37 @@
-name: ensemble_adobe_analytics
-description: Adobe Analytics integration for Ensemble apps, with tracking, identity, consent, assurance, and user profile APIs.
-homepage: https://ensembleui.com
-repository: https://github.com/EnsembleUI/ensemble/tree/main/modules/adobe_analytics
-issue_tracker: https://github.com/EnsembleUI/ensemble/issues
-documentation: https://github.com/EnsembleUI/ensemble/tree/main/modules/adobe_analytics#readme
-topics:
- - adobe-analytics
- - analytics
- - low-code
- - ensemble
-version: 1.2.53
-
-environment:
- sdk: '>=3.5.0 <4.0.0'
- flutter: '>=3.24.0'
-
-dependencies:
- flutter:
- sdk: flutter
- ensemble:
- git:
- url: https://github.com/EnsembleUI/ensemble.git
- ref: ensemble-v1.2.53
- path: modules/ensemble
-
- flutter_aepcore: ^5.0.0
- flutter_aepedge: ^5.0.0
- flutter_aepassurance: ^5.0.0
- flutter_aepedgeidentity: ^5.0.0
- flutter_aepedgeconsent: ^5.0.0
- flutter_aepuserprofile: ^5.0.0
-
-dev_dependencies:
- flutter_test:
- sdk: flutter
- flutter_lints: ^2.0.0
+name: ensemble_adobe_analytics
+description: Adobe Analytics integration for Ensemble apps, with tracking, identity, consent, assurance, and user profile APIs.
+homepage: https://ensembleui.com
+repository: https://github.com/EnsembleUI/ensemble/tree/main/modules/adobe_analytics
+issue_tracker: https://github.com/EnsembleUI/ensemble/issues
+documentation: https://github.com/EnsembleUI/ensemble/tree/main/modules/adobe_analytics#readme
+topics:
+ - adobe-analytics
+ - analytics
+ - low-code
+ - ensemble
+version: 1.2.53
+
+environment:
+ sdk: '>=3.5.0 <4.0.0'
+ flutter: '>=3.24.0'
+
+dependencies:
+ flutter:
+ sdk: flutter
+ ensemble:
+ git:
+ url: https://github.com/EnsembleUI/ensemble.git
+ ref: ensemble-v1.2.53
+ path: modules/ensemble
+
+ flutter_aepcore: ^5.0.0
+ flutter_aepedge: ^5.0.0
+ flutter_aepassurance: ^5.0.0
+ flutter_aepedgeidentity: ^5.0.0
+ flutter_aepedgeconsent: ^5.0.0
+ flutter_aepuserprofile: ^5.0.0
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+ flutter_lints: ^2.0.0
diff --git a/modules/auth/CHANGELOG.md b/modules/auth/CHANGELOG.md
index 85a23bb19..6f7bd887e 100644
--- a/modules/auth/CHANGELOG.md
+++ b/modules/auth/CHANGELOG.md
@@ -1,52 +1,52 @@
-## 1.2.53
-
- - Bump "ensemble_auth" to `1.2.53`.
-
-## 1.2.52
-
- - Bump "ensemble_auth" to `1.2.52`.
-
-## 1.2.51
-
- - **FEAT**(auth_manager): enhance user session management by storing provid… ([#2340](https://github.com/ensembleUI/ensemble/issues/2340)). ([82c0da1a](https://github.com/ensembleUI/ensemble/commit/82c0da1a075a44e055a2aeaafb50dce5f798e850))
-
-## 1.2.50
-
- - **FEAT**(test_runner): support live Firebase and HTTP under flutter test ([#2321](https://github.com/ensembleUI/ensemble/issues/2321)). ([9ffe6994](https://github.com/ensembleUI/ensemble/commit/9ffe6994322370ca32a79f1ce75eb06bee251018))
-
-## 1.2.49
-
- - Bump "ensemble_auth" to `1.2.49`.
-
-## 1.2.48
-
- - Bump "ensemble_auth" to `1.2.48`.
-
-## 1.2.47
-
- - **REVERT**: downgrade Google Sign-In and Apple Sign-In dependencies to support Flutter 3.27.2. ([a9e183e6](https://github.com/ensembleUI/ensemble/commit/a9e183e62df683760de2e24a31e8bb4c1b6d2e1c))
- - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
- - **REFACTOR**: remove logging statements from SignInWithVerificationCode class. ([84d402c7](https://github.com/ensembleUI/ensemble/commit/84d402c72a1ccd7408a74b2b91607eb51c312d61))
- - **REFACTOR**: rename otp verification methods. ([7e3408e0](https://github.com/ensembleUI/ensemble/commit/7e3408e01a1006700be01e1f4403395eebd13f32))
- - **FEAT**: update validateVerificationCode to return user and idToken, enhance onSuccess callback. ([33abb106](https://github.com/ensembleUI/ensemble/commit/33abb10689de2fcb5328194a44097a6757e0298d))
- - **FEAT**: add onVerificationFailure callback to handle verification errors more effectively. ([08bc0ac6](https://github.com/ensembleUI/ensemble/commit/08bc0ac676139b543e24694f290df58dd57d4f13))
- - **FEAT**: add method parameter to verification code actions for improved method handling. ([976adb71](https://github.com/ensembleUI/ensemble/commit/976adb7154ac3a8007828a6bf74e8d9c6c7d5a3c))
- - **FEAT**: add provider parameter to verification code actions for enhanced flexibility. ([440e1f32](https://github.com/ensembleUI/ensemble/commit/440e1f323706ac47243950cdceef441cc00b8694))
- - **FEAT**: add unit tests for phone sign-in functionality with mock FirebaseAuth. ([09770e6b](https://github.com/ensembleUI/ensemble/commit/09770e6ba012de025547b54803e443a02460659a))
- - **FEAT**: implement phone verification actions with firebase phone auth. ([5927c37c](https://github.com/ensembleUI/ensemble/commit/5927c37c9b636f7acf7c480d26db9c8d0217c90e))
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-## 1.2.46
-
- - **REVERT**: downgrade Google Sign-In and Apple Sign-In dependencies to support Flutter 3.27.2. ([a9e183e6](https://github.com/ensembleUI/ensemble/commit/a9e183e62df683760de2e24a31e8bb4c1b6d2e1c))
- - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
- - **REFACTOR**: remove logging statements from SignInWithVerificationCode class. ([84d402c7](https://github.com/ensembleUI/ensemble/commit/84d402c72a1ccd7408a74b2b91607eb51c312d61))
- - **REFACTOR**: rename otp verification methods. ([7e3408e0](https://github.com/ensembleUI/ensemble/commit/7e3408e01a1006700be01e1f4403395eebd13f32))
- - **FEAT**: update validateVerificationCode to return user and idToken, enhance onSuccess callback. ([33abb106](https://github.com/ensembleUI/ensemble/commit/33abb10689de2fcb5328194a44097a6757e0298d))
- - **FEAT**: add onVerificationFailure callback to handle verification errors more effectively. ([08bc0ac6](https://github.com/ensembleUI/ensemble/commit/08bc0ac676139b543e24694f290df58dd57d4f13))
- - **FEAT**: add method parameter to verification code actions for improved method handling. ([976adb71](https://github.com/ensembleUI/ensemble/commit/976adb7154ac3a8007828a6bf74e8d9c6c7d5a3c))
- - **FEAT**: add provider parameter to verification code actions for enhanced flexibility. ([440e1f32](https://github.com/ensembleUI/ensemble/commit/440e1f323706ac47243950cdceef441cc00b8694))
- - **FEAT**: add unit tests for phone sign-in functionality with mock FirebaseAuth. ([09770e6b](https://github.com/ensembleUI/ensemble/commit/09770e6ba012de025547b54803e443a02460659a))
- - **FEAT**: implement phone verification actions with firebase phone auth. ([5927c37c](https://github.com/ensembleUI/ensemble/commit/5927c37c9b636f7acf7c480d26db9c8d0217c90e))
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
+## 1.2.53
+
+ - Bump "ensemble_auth" to `1.2.53`.
+
+## 1.2.52
+
+ - Bump "ensemble_auth" to `1.2.52`.
+
+## 1.2.51
+
+ - **FEAT**(auth_manager): enhance user session management by storing provid… ([#2340](https://github.com/ensembleUI/ensemble/issues/2340)). ([82c0da1a](https://github.com/ensembleUI/ensemble/commit/82c0da1a075a44e055a2aeaafb50dce5f798e850))
+
+## 1.2.50
+
+ - **FEAT**(test_runner): support live Firebase and HTTP under flutter test ([#2321](https://github.com/ensembleUI/ensemble/issues/2321)). ([9ffe6994](https://github.com/ensembleUI/ensemble/commit/9ffe6994322370ca32a79f1ce75eb06bee251018))
+
+## 1.2.49
+
+ - Bump "ensemble_auth" to `1.2.49`.
+
+## 1.2.48
+
+ - Bump "ensemble_auth" to `1.2.48`.
+
+## 1.2.47
+
+ - **REVERT**: downgrade Google Sign-In and Apple Sign-In dependencies to support Flutter 3.27.2. ([a9e183e6](https://github.com/ensembleUI/ensemble/commit/a9e183e62df683760de2e24a31e8bb4c1b6d2e1c))
+ - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
+ - **REFACTOR**: remove logging statements from SignInWithVerificationCode class. ([84d402c7](https://github.com/ensembleUI/ensemble/commit/84d402c72a1ccd7408a74b2b91607eb51c312d61))
+ - **REFACTOR**: rename otp verification methods. ([7e3408e0](https://github.com/ensembleUI/ensemble/commit/7e3408e01a1006700be01e1f4403395eebd13f32))
+ - **FEAT**: update validateVerificationCode to return user and idToken, enhance onSuccess callback. ([33abb106](https://github.com/ensembleUI/ensemble/commit/33abb10689de2fcb5328194a44097a6757e0298d))
+ - **FEAT**: add onVerificationFailure callback to handle verification errors more effectively. ([08bc0ac6](https://github.com/ensembleUI/ensemble/commit/08bc0ac676139b543e24694f290df58dd57d4f13))
+ - **FEAT**: add method parameter to verification code actions for improved method handling. ([976adb71](https://github.com/ensembleUI/ensemble/commit/976adb7154ac3a8007828a6bf74e8d9c6c7d5a3c))
+ - **FEAT**: add provider parameter to verification code actions for enhanced flexibility. ([440e1f32](https://github.com/ensembleUI/ensemble/commit/440e1f323706ac47243950cdceef441cc00b8694))
+ - **FEAT**: add unit tests for phone sign-in functionality with mock FirebaseAuth. ([09770e6b](https://github.com/ensembleUI/ensemble/commit/09770e6ba012de025547b54803e443a02460659a))
+ - **FEAT**: implement phone verification actions with firebase phone auth. ([5927c37c](https://github.com/ensembleUI/ensemble/commit/5927c37c9b636f7acf7c480d26db9c8d0217c90e))
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+## 1.2.46
+
+ - **REVERT**: downgrade Google Sign-In and Apple Sign-In dependencies to support Flutter 3.27.2. ([a9e183e6](https://github.com/ensembleUI/ensemble/commit/a9e183e62df683760de2e24a31e8bb4c1b6d2e1c))
+ - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
+ - **REFACTOR**: remove logging statements from SignInWithVerificationCode class. ([84d402c7](https://github.com/ensembleUI/ensemble/commit/84d402c72a1ccd7408a74b2b91607eb51c312d61))
+ - **REFACTOR**: rename otp verification methods. ([7e3408e0](https://github.com/ensembleUI/ensemble/commit/7e3408e01a1006700be01e1f4403395eebd13f32))
+ - **FEAT**: update validateVerificationCode to return user and idToken, enhance onSuccess callback. ([33abb106](https://github.com/ensembleUI/ensemble/commit/33abb10689de2fcb5328194a44097a6757e0298d))
+ - **FEAT**: add onVerificationFailure callback to handle verification errors more effectively. ([08bc0ac6](https://github.com/ensembleUI/ensemble/commit/08bc0ac676139b543e24694f290df58dd57d4f13))
+ - **FEAT**: add method parameter to verification code actions for improved method handling. ([976adb71](https://github.com/ensembleUI/ensemble/commit/976adb7154ac3a8007828a6bf74e8d9c6c7d5a3c))
+ - **FEAT**: add provider parameter to verification code actions for enhanced flexibility. ([440e1f32](https://github.com/ensembleUI/ensemble/commit/440e1f323706ac47243950cdceef441cc00b8694))
+ - **FEAT**: add unit tests for phone sign-in functionality with mock FirebaseAuth. ([09770e6b](https://github.com/ensembleUI/ensemble/commit/09770e6ba012de025547b54803e443a02460659a))
+ - **FEAT**: implement phone verification actions with firebase phone auth. ([5927c37c](https://github.com/ensembleUI/ensemble/commit/5927c37c9b636f7acf7c480d26db9c8d0217c90e))
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
diff --git a/modules/auth/lib/signin/auth_manager.dart b/modules/auth/lib/signin/auth_manager.dart
index 9a14f8a1a..88cfedf05 100644
--- a/modules/auth/lib/signin/auth_manager.dart
+++ b/modules/auth/lib/signin/auth_manager.dart
@@ -1,626 +1,626 @@
-import 'dart:async';
-import 'dart:io';
-import 'package:collection/collection.dart';
-
-import 'package:ensemble/action/invoke_api_action.dart';
-import 'package:ensemble/ensemble.dart';
-import 'package:ensemble/framework/apiproviders/api_provider.dart';
-import 'package:ensemble/framework/data_context.dart';
-import 'package:ensemble/framework/error_handling.dart';
-import 'package:ensemble/framework/extensions.dart';
-import 'package:ensemble/framework/scope.dart';
-import 'package:ensemble/framework/storage_manager.dart';
-import 'package:ensemble/framework/stub/auth_context_manager.dart';
-import 'package:ensemble/screen_controller.dart';
-import 'package:ensemble/util/utils.dart';
-import 'package:ensemble_auth/signin/google_auth_manager.dart';
-import 'package:ensemble_auth/signin/sign_in_with_verification_code.dart';
-import 'package:ensemble_auth/signin/sign_in_with_server_api_action.dart';
-import 'package:ensemble_auth/signin/signin_utils.dart';
-import 'package:ensemble_ts_interpreter/invokables/invokable.dart';
-import 'package:firebase_auth/firebase_auth.dart';
-import 'package:flutter/cupertino.dart';
-import 'package:firebase_core/firebase_core.dart';
-import 'package:flutter/foundation.dart';
-
-/// This abstract out different method of Sign In (local, custom, Firebase, Auth0, ...)
-class AuthManager with UserAuthentication {
- static final AuthManager _instance = AuthManager._internal();
-
- AuthManager._internal();
-
- factory AuthManager() {
- return _instance;
- }
-
- FirebaseApp? customFirebaseApp; // custom Firebase App
-
- /// Sign in with credentials from providers (e.g. Google, Apple) or via Firebase
- Future signInWithSocialCredential(BuildContext context,
- {required AuthenticatedUser user,
- required String idToken,
- AuthToken? token,
- /// Optional string but required to complete Firebase Auth Sign-In with Apple flow.
- ///
- /// This is the authorization code returned by Apple Sign In and will be used to authenticate with Firebase as the accessToken.
- ///
- /// Can be `null` since it only applies to Apple Sign In
- /// See [Firebase docs](https://firebase.google.com/docs/auth/ios/apple#sign_in_with_apple_and_authenticate_with_firebase) for more information.
- /// Inspriration from [Mediuam](https://medium.com/@muhammad.fathy/resolving-the-firebase-auth-invalid-credential-invalid-oauth-response-from-apple-com-6bca6b6a8575)
- String? authCode,
- /// Optional string which, if set, will be be embedded in the resulting `identityToken` for Firebase Auth Sign-In with Apple flow.
- ///
- /// This can be used to mitigate replay attacks by using a unique argument per sign-in attempt.
- ///
- /// Can be `null`, in which case no nonce will be passed to the request.
- /// See [Firebase docs](https://firebase.google.com/docs/auth/ios/apple#sign_in_with_apple_and_authenticate_with_firebase) for more information.
- String? rawNonce}) async {
- if (user.provider == null || user.provider == SignInProvider.local) {
- return _signInLocally(context, user: user);
- } else if (user.provider == SignInProvider.firebase) {
- return _signInWithFirebase(context, user: user, idToken: idToken, authCode: authCode, rawNonce: rawNonce);
- }
- // else if (user.provider == SignInProvider.auth0) {
- // return _updateCurrentUser(context, user);
- // }
- return null;
- }
-
- /// After authenticated the user, redirect to a Server API with the idToken
- /// to retrieve Server-specific credentials (bearer, cookies,..). Once completed
- /// we sign the user in, and save the credentials to ${auth.user.data}
- Future signInWithServerCredential(BuildContext context,
- {required AuthenticatedUser user,
- required String idToken,
- required SignInWithServerAPIAction signInAPI}) async {
- Response? response = await InvokeAPIController().executeWithContext(
- context, signInAPI,
- additionalInputs: {'idToken': idToken, 'user': user});
- if (response != null) {
- // eval the server credentials and save to user object
- if (signInAPI.signInCredentials != null) {
- ScopeManager? scopeManager =
- ScreenController().getScopeManager(context);
- if (scopeManager != null) {
- ScopeManager tempScope =
- scopeManager.createChildScope(ephemeral: true);
- tempScope.dataContext
- .addDataContextById('response', APIResponse(response: response));
-
- Map credentials = {};
- signInAPI.signInCredentials!.forEach((key, value) {
- credentials[key] = tempScope.dataContext.eval(value);
- });
- user.setServerCredentials(credentials);
- }
- }
- return await _signInLocally(context, user: user);
- }
- return null;
- }
-
- Future signInAnonymously(
- BuildContext context,
- ) async {
- try {
- customFirebaseApp ??= await _initializeFirebaseSignIn();
- final _auth = FirebaseAuth.instanceFor(app: customFirebaseApp!);
-
- UserCredential userCredential = await _auth.signInAnonymously();
- User? user = userCredential.user;
- if (user == null) {
- print('Sign in anonymous failed');
- return null;
- }
- String? firebaseToken = await user.getIdToken();
-
- updateCurrentFirebaseUser(context, user);
- return firebaseToken;
- } catch (e) {
- print(e.toString());
- return null;
- }
- }
-
- Future signInWithCustomToken(
- BuildContext context,
- {required String jwtToken}
- ) async {
- try {
- // Get the ScopeManager to access DataContext
- // and Evaluate jwtToken from ensemble.storage
- ScopeManager? scopeManager = ScreenController().getScopeManager(context);
- String evaluatedJwtToken = jwtToken;
- if (scopeManager != null) {
- evaluatedJwtToken =
- scopeManager.dataContext.eval(jwtToken)?.toString() ?? jwtToken;
- }
- customFirebaseApp ??= await _initializeFirebaseSignIn();
- final _auth = FirebaseAuth.instanceFor(app: customFirebaseApp!);
-
- UserCredential userCredential = await _signInWithCustomTokenWithRetry(
- _auth,
- evaluatedJwtToken,
- );
- User? user = userCredential.user;
- if (user == null) {
- throw StateError('Firebase sign-in failed. User is null.');
- }
- String? firebaseToken = await user.getIdToken();
-
- updateCurrentFirebaseUser(context, user);
- return firebaseToken;
- } catch (e) {
- debugPrint('Error during Firebase sign-in: $e');
- rethrow;
- }
- }
-
- Future _signInWithCustomTokenWithRetry(
- FirebaseAuth auth,
- String token, {
- int maxAttempts = 4,
- }) async {
- Object? lastError;
- for (var attempt = 1; attempt <= maxAttempts; attempt++) {
- try {
- return await auth.signInWithCustomToken(token);
- } catch (error) {
- lastError = error;
- if (!_isRetryableFirebaseAuthError(error) || attempt >= maxAttempts) {
- rethrow;
- }
- if (kDebugMode) {
- debugPrint(
- 'Retrying Firebase custom-token sign-in after transient error '
- '($attempt/$maxAttempts): $error',
- );
- }
- await Future.delayed(Duration(milliseconds: 300 * attempt));
- }
- }
- throw lastError ?? StateError('Firebase custom-token sign-in failed.');
- }
-
- bool _isRetryableFirebaseAuthError(Object error) {
- if (error is FirebaseAuthException) {
- return error.code == 'network-request-failed';
- }
- if (error is SocketException || error is TimeoutException) {
- return true;
- }
- final message = error.toString().toLowerCase();
- return message.contains('network-request-failed') ||
- message.contains('connection reset') ||
- message.contains('connection closed') ||
- message.contains('timed out') ||
- message.contains('socketexception');
- }
-
- Future updateCurrentFirebaseUser(BuildContext context, User newUser) async {
- await StorageManager()
- .writeToSystemStorage(UserAuthentication._idKey, newUser.uid);
- await StorageManager().writeToSystemStorage(
- UserAuthentication._providerKey, SignInProvider.firebase.name);
- await StorageManager()
- .writeToSystemStorage(UserAuthentication._isAnonymous, newUser.isAnonymous);
- }
-
- Future _signInLocally(BuildContext context,
- {required AuthenticatedUser user, AuthToken? token}) async {
- // update the current user
- await _updateCurrentUser(context, user);
-
- // TODO: think this through a bit
- // save the access token to storage. This will become
- // the bearer token to any API with serviceId = AuthProvider.id
- // if (token != null) {
- // const FlutterSecureStorage().write(
- // key: "${user.provider}_accessToken", value: token.token);
- // }
-
- return token?.token;
- }
-
- Future _signInWithFirebase(BuildContext context,
- {required AuthenticatedUser user,
- required String idToken,
- AuthToken? token,
- String? authCode,
- String? rawNonce}) async {
- // initialize Firebase once
- customFirebaseApp ??= await _initializeFirebaseSignIn();
-
- final credential = _formatCredential(
- client: user.client, idToken: idToken, accessToken: token?.token, authCode: authCode, rawNonce: rawNonce);
- final UserCredential authResult =
- await FirebaseAuth.instanceFor(app: customFirebaseApp!)
- .signInWithCredential(credential);
- final User? firebaseUser = authResult.user;
- if (firebaseUser == null) {
- throw RuntimeError('Unable to Sign In');
- }
-
- _enrichUserFromFirebase(user: user, firebaseInfo: firebaseUser);
- await _updateCurrentUser(context, user);
- return await firebaseUser.getIdToken();
- }
-
- OAuthCredential _formatCredential(
- {SignInClient? client, required String idToken, String? accessToken, String? authCode, String? rawNonce}) {
- if (client == SignInClient.google) {
- return GoogleAuthProvider.credential(
- idToken: idToken, accessToken: accessToken);
- } else if (client == SignInClient.apple) {
- /// Supply rawNonce and authCode as the accessToken to complete the Apple Sign In Flow
- return OAuthProvider('apple.com').credential(idToken: idToken, rawNonce: rawNonce, accessToken: authCode);
- }
- throw RuntimeError("Invalid Sign In Client");
- }
-
- Future _initializeFirebaseSignIn() async {
- String? appId = await SignInUtils.getAppIdFromYaml();
-
- FirebaseOptions? options;
-
- if (kIsWeb) {
- options = Ensemble().getAccount()?.firebaseConfig?.webConfig;
- } else if (Platform.isIOS) {
- options = Ensemble().getAccount()?.firebaseConfig?.iOSConfig;
- } else if (Platform.isAndroid) {
- options = Ensemble().getAccount()?.firebaseConfig?.androidConfig;
- }
- if (options == null || appId == null) {
- throw ConfigError('Firebase is not configured for this platform.');
- }
-
- // if the Firebase app is already initialized by other modules with same options, return it
- FirebaseApp? existingApp = Firebase.apps.firstWhereOrNull(
- (app) => SignInUtils.areFirebaseOptionsEqual(app.options, options!),
- );
-
- return existingApp ??
- await Firebase.initializeApp(name: appId, options: options);
- }
-
- /// enrich the passed in User with information from Firebase
- void _enrichUserFromFirebase(
- {required AuthenticatedUser user, required User firebaseInfo}) {
- // update basic info if not already there
- user.name ??= firebaseInfo.displayName;
- user.email ??= firebaseInfo.email;
- user.photo ??= firebaseInfo.photoURL;
-
- // update new info from Firebase
- user.phoneNumber = firebaseInfo.phoneNumber;
- user.emailLVerified = firebaseInfo.emailVerified;
- user.tenantId = firebaseInfo.tenantId;
- user.creationTime = firebaseInfo.metadata.creationTime;
- user.lastSignInTime = firebaseInfo.metadata.lastSignInTime;
- }
-
- Future signOut(BuildContext context) async {
- AuthenticatedUser? user = getCurrentUser();
- if (user != null) {
- // sign out with the Sign In Providers first
- if (user.provider == SignInProvider.firebase) {
- if (customFirebaseApp != null) {
- await FirebaseAuth.instanceFor(app: customFirebaseApp!).signOut();
- }
- // } else if (user.provider == SignInProvider.auth0) {
- // await Auth0CredentialsManager().signOut();
- } else {
- // If we don't use the provider, sign out with the signIn clients
- if (user.client == SignInClient.google) {
- // TODO: save the instance of recreate the Google Sign In
- //await GoogleSignIn().signOut();
- } else if (user.client == SignInClient.apple) {
- // there is no sign out for Apple
- } else if (user.client == SignInClient.microsoft) {}
- }
-
- // then remove user from storage
- await _clearCurrentUser(context);
- }
- }
-
- /// check if the user is current signed in or not.
- Future isSignedIn() {
- return getSignedInUser().then((user) => user != null);
- }
-
- Future getSignedInUser() async {
- AuthenticatedUser? user = getCurrentUser();
- if (user != null) {
- if (user.client == SignInClient.google) {
- return _getSignedInUserFromGoogle(user.provider);
- }
- // Storage can outlive the Firebase session — confirm Auth still has a user.
- if (user.provider == SignInProvider.firebase ||
- (user.provider == null && user.client == null)) {
- final app = customFirebaseApp ??
- (Firebase.apps.isNotEmpty ? Firebase.apps.first : null);
- if (app == null ||
- FirebaseAuth.instanceFor(app: app).currentUser == null) {
- return null;
- }
- }
- }
- return user;
- }
-
- Future _getSignedInUserFromGoogle(
- SignInProvider? provider) async {
- var account = await GoogleAuthManager().getSignedInUser();
- return account != null
- ? SignInUtils.fromGoogleUser(account, provider: provider)
- : null;
- }
-}
-
-mixin UserAuthentication {
- static const _clientKey = 'user.client';
- static const _providerKey = 'user.provider';
- static const _idKey = 'user.id';
- static const _nameKey = 'user.name';
- static const _emailKey = 'user.email';
- static const _photoKey = 'user.photo';
- static const _dataKey = 'user.data';
-
- static const _phoneNumberKey = 'user.phonenumber';
- static const _emailVerifiedKey = 'user.emailverified';
- static const _tenantIdKey = 'user.tenantId';
- static const _creationTimeKey = 'user.creationTime';
- static const _lastSignInTimeKey = 'user.lastSignInTime';
- static const _isAnonymous = 'user.isAnonymous';
-
- bool hasCurrentUser() => StorageManager().hasDataFromSystemStorage(_idKey);
-
- AuthenticatedUser? getCurrentUser() {
- if (hasCurrentUser()) {
- return AuthenticatedUser(
- client: SignInClient.values
- .from(StorageManager().readFromSystemStorage(_clientKey)),
- provider: SignInProvider.values
- .from(StorageManager().readFromSystemStorage(_providerKey)),
- id: StorageManager().readFromSystemStorage(_idKey),
- name: StorageManager().readFromSystemStorage(_nameKey),
- email: StorageManager().readFromSystemStorage(_emailKey),
- photo: StorageManager().readFromSystemStorage(_photoKey),
- data: StorageManager().readFromSystemStorage(_dataKey),
- phoneNumber: StorageManager().readFromSystemStorage(_phoneNumberKey),
- emailLVerified:
- StorageManager().readFromSystemStorage(_emailVerifiedKey),
- tenantId: StorageManager().readFromSystemStorage(_tenantIdKey),
- creationTime: StorageManager().readFromSystemStorage(_creationTimeKey),
- lastSignInTime:
- StorageManager().readFromSystemStorage(_lastSignInTimeKey),
- isAnonymous:
- StorageManager().readFromSystemStorage(_isAnonymous) ?? false,
- );
- }
- return null;
- }
-
- /// Replace the existing User with a brand new User.
- /// We try to minimize events dispatchers.
- /// TODO: refactor this to dispatch a single User object
- Future _updateCurrentUser(
- BuildContext context, AuthenticatedUser newUser) async {
- await StorageManager().writeToSystemStorage(_idKey, newUser.id);
- await StorageManager()
- .writeToSystemStorage(_clientKey, newUser.client?.name);
- await StorageManager()
- .writeToSystemStorage(_providerKey, newUser.provider?.name);
-
- if (newUser.name != null) {
- await StorageManager().writeToSystemStorage(_nameKey, newUser.name);
- _dispatchUserField(context, 'name', newUser.name);
- } else {
- await StorageManager().removeFromSystemStorage(_nameKey);
- _dispatchUserField(context, 'name', null);
- }
-
- if (newUser.email != null) {
- await StorageManager().writeToSystemStorage(_emailKey, newUser.email);
- _dispatchUserField(context, 'email', newUser.email);
- } else {
- await StorageManager().removeFromSystemStorage(_emailKey);
- _dispatchUserField(context, 'email', null);
- }
-
- if (newUser.photo != null) {
- await StorageManager().writeToSystemStorage(_photoKey, newUser.photo);
- _dispatchUserField(context, 'photo', newUser.photo);
- } else {
- await StorageManager().removeFromSystemStorage(_photoKey);
- _dispatchUserField(context, 'photo', null);
- }
-
- if (newUser.data != null) {
- await StorageManager().writeToSystemStorage(_dataKey, newUser.data);
- _dispatchUserField(context, 'data', newUser.data);
- } else {
- await StorageManager().removeFromSystemStorage(_dataKey);
- _dispatchUserField(context, 'data', null);
- }
- }
-
- Future _clearCurrentUser(BuildContext context) async {
- await StorageManager().removeFromSystemStorage(_idKey);
- await StorageManager().removeFromSystemStorage(_clientKey);
- await StorageManager().removeFromSystemStorage(_providerKey);
-
- await StorageManager().removeFromSystemStorage(_nameKey);
- _dispatchUserField(context, 'name', null);
-
- await StorageManager().removeFromSystemStorage(_emailKey);
- _dispatchUserField(context, 'email', null);
-
- await StorageManager().removeFromSystemStorage(_photoKey);
- _dispatchUserField(context, 'photo', null);
-
- await StorageManager().removeFromSystemStorage(_dataKey);
- _dispatchUserField(context, 'data', null);
- }
-
- void _dispatchUserField(BuildContext context, String key, dynamic value) {
- ScreenController().dispatchSystemStorageChanges(context, key, value,
- storagePrefix: 'user');
- }
-}
-
-/// publicly exposed as Context
-class AuthContextManagerImpl with Invokable implements AuthContextManager {
- @override
- Map getters() {
- return {
- 'user': () => AuthManager().getCurrentUser(),
- };
- }
-
- @override
- Map methods() {
- return {
- // 'isSignedIn': () => AuthManager().isSignedIn(),
- 'signIn': _processSignInFromServer,
- 'signOut': () => signOut(),
- };
- }
-
- // this SignIn is using a Server SignInProvider
- void _processSignInFromServer(dynamic inputs) {
- // TODO Think this through, this is doing the Sign in on the server-side.
- // Server should be sending back:
- // 1. a token that we can append to every server call to tell the server
- // who this person is
- // 2. Basic user information so we can display and bind to. (technically
- // we don't need any but it'll be more consistent with other providers)
- }
-
- @override
- Map setters() {
- return {};
- }
-
- /// this method is exposed to the main module
- @override
- Future getSignedInUser() {
- return AuthManager().getSignedInUser();
- }
-
- /// this method is exposed to the main module
- @override
- Future signOut() {
- return AuthManager().signOut(Utils.globalAppKey.currentContext!);
- }
-
- /// Sends a phone verification code to the given phone number.
- @override
- Future sendVerificationCode({
- required String provider,
- required String method,
- required String phoneNumber,
- required Function(String verificationId, int? resendToken) onSuccess,
- required Function(String error) onError,
- }) async {
- try {
- final SignInWithVerificationCode _signInWithVerificationCode =
- SignInWithVerificationCode();
- await _signInWithVerificationCode.sendVerificationCode(
- provider: provider,
- method: method,
- phoneNumber: phoneNumber,
- onSuccess: (verificationId, resendToken) {
- onSuccess(verificationId, resendToken);
- },
- onError: (e) {
- onError(e.message ?? 'An error occurred while sending code');
- },
- );
- } catch (e) {
- onError('Unexpected error occurred: $e');
- }
- }
-
- /// Verifies a phone code using [smsCode] and [verificationId].
- @override
- Future validateVerificationCode({
- required String provider,
- required String method,
- required String smsCode,
- required String verificationId,
- required Function(AuthenticatedUser, String idToken) onSuccess,
- required Function(String) onError,
- required Function(String) onVerificationFailure,
- }) async {
- try {
- final SignInWithVerificationCode _signInWithVerificationCode =
- SignInWithVerificationCode();
- final response =
- await _signInWithVerificationCode.validateVerificationCode(
- provider: provider,
- method: method,
- smsCode: smsCode,
- verificationId: verificationId,
- );
-
- if (response != null) {
- final user = response['user'];
- final idToken = response['idToken'];
-
- await AuthManager()._updateCurrentUser(
- Utils.globalAppKey.currentContext!,
- user,
- );
-
- onSuccess(user, idToken);
- } else {
- onError('Something went wrong, User not found');
- }
-
- return response?['user'];
- } catch (e) {
- onVerificationFailure('Error verifying phone code: ${e.toString()}');
- return null;
- }
- }
-
- /// Resends the verification code using [resendToken].
- @override
- Future resendVerificationCode({
- required String provider,
- required String method,
- required String phoneNumber,
- required int resendToken,
- required Function(String verificationId, int? resendToken) onSuccess,
- required Function(String error) onError,
- }) {
- final SignInWithVerificationCode _signInWithVerificationCode =
- SignInWithVerificationCode();
- return _signInWithVerificationCode.resendVerificationCode(
- provider: provider,
- method: method,
- phoneNumber: phoneNumber,
- resendToken: resendToken,
- onSuccess: (verificationId, newResendToken) {
- onSuccess(verificationId, newResendToken);
- },
- onError: (e) {
- onError('Error resending phone verification: ${e.message}');
- },
- );
- }
-}
-
-class AuthToken {
- AuthToken({required this.tokenType, required this.token});
-
- TokenType tokenType;
- String token;
-}
-
-enum TokenType {
- token, // Authorization:
- bearerToken // Authorization: Bearer
-}
+import 'dart:async';
+import 'dart:io';
+import 'package:collection/collection.dart';
+
+import 'package:ensemble/action/invoke_api_action.dart';
+import 'package:ensemble/ensemble.dart';
+import 'package:ensemble/framework/apiproviders/api_provider.dart';
+import 'package:ensemble/framework/data_context.dart';
+import 'package:ensemble/framework/error_handling.dart';
+import 'package:ensemble/framework/extensions.dart';
+import 'package:ensemble/framework/scope.dart';
+import 'package:ensemble/framework/storage_manager.dart';
+import 'package:ensemble/framework/stub/auth_context_manager.dart';
+import 'package:ensemble/screen_controller.dart';
+import 'package:ensemble/util/utils.dart';
+import 'package:ensemble_auth/signin/google_auth_manager.dart';
+import 'package:ensemble_auth/signin/sign_in_with_verification_code.dart';
+import 'package:ensemble_auth/signin/sign_in_with_server_api_action.dart';
+import 'package:ensemble_auth/signin/signin_utils.dart';
+import 'package:ensemble_ts_interpreter/invokables/invokable.dart';
+import 'package:firebase_auth/firebase_auth.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:firebase_core/firebase_core.dart';
+import 'package:flutter/foundation.dart';
+
+/// This abstract out different method of Sign In (local, custom, Firebase, Auth0, ...)
+class AuthManager with UserAuthentication {
+ static final AuthManager _instance = AuthManager._internal();
+
+ AuthManager._internal();
+
+ factory AuthManager() {
+ return _instance;
+ }
+
+ FirebaseApp? customFirebaseApp; // custom Firebase App
+
+ /// Sign in with credentials from providers (e.g. Google, Apple) or via Firebase
+ Future signInWithSocialCredential(BuildContext context,
+ {required AuthenticatedUser user,
+ required String idToken,
+ AuthToken? token,
+ /// Optional string but required to complete Firebase Auth Sign-In with Apple flow.
+ ///
+ /// This is the authorization code returned by Apple Sign In and will be used to authenticate with Firebase as the accessToken.
+ ///
+ /// Can be `null` since it only applies to Apple Sign In
+ /// See [Firebase docs](https://firebase.google.com/docs/auth/ios/apple#sign_in_with_apple_and_authenticate_with_firebase) for more information.
+ /// Inspriration from [Mediuam](https://medium.com/@muhammad.fathy/resolving-the-firebase-auth-invalid-credential-invalid-oauth-response-from-apple-com-6bca6b6a8575)
+ String? authCode,
+ /// Optional string which, if set, will be be embedded in the resulting `identityToken` for Firebase Auth Sign-In with Apple flow.
+ ///
+ /// This can be used to mitigate replay attacks by using a unique argument per sign-in attempt.
+ ///
+ /// Can be `null`, in which case no nonce will be passed to the request.
+ /// See [Firebase docs](https://firebase.google.com/docs/auth/ios/apple#sign_in_with_apple_and_authenticate_with_firebase) for more information.
+ String? rawNonce}) async {
+ if (user.provider == null || user.provider == SignInProvider.local) {
+ return _signInLocally(context, user: user);
+ } else if (user.provider == SignInProvider.firebase) {
+ return _signInWithFirebase(context, user: user, idToken: idToken, authCode: authCode, rawNonce: rawNonce);
+ }
+ // else if (user.provider == SignInProvider.auth0) {
+ // return _updateCurrentUser(context, user);
+ // }
+ return null;
+ }
+
+ /// After authenticated the user, redirect to a Server API with the idToken
+ /// to retrieve Server-specific credentials (bearer, cookies,..). Once completed
+ /// we sign the user in, and save the credentials to ${auth.user.data}
+ Future signInWithServerCredential(BuildContext context,
+ {required AuthenticatedUser user,
+ required String idToken,
+ required SignInWithServerAPIAction signInAPI}) async {
+ Response? response = await InvokeAPIController().executeWithContext(
+ context, signInAPI,
+ additionalInputs: {'idToken': idToken, 'user': user});
+ if (response != null) {
+ // eval the server credentials and save to user object
+ if (signInAPI.signInCredentials != null) {
+ ScopeManager? scopeManager =
+ ScreenController().getScopeManager(context);
+ if (scopeManager != null) {
+ ScopeManager tempScope =
+ scopeManager.createChildScope(ephemeral: true);
+ tempScope.dataContext
+ .addDataContextById('response', APIResponse(response: response));
+
+ Map credentials = {};
+ signInAPI.signInCredentials!.forEach((key, value) {
+ credentials[key] = tempScope.dataContext.eval(value);
+ });
+ user.setServerCredentials(credentials);
+ }
+ }
+ return await _signInLocally(context, user: user);
+ }
+ return null;
+ }
+
+ Future signInAnonymously(
+ BuildContext context,
+ ) async {
+ try {
+ customFirebaseApp ??= await _initializeFirebaseSignIn();
+ final _auth = FirebaseAuth.instanceFor(app: customFirebaseApp!);
+
+ UserCredential userCredential = await _auth.signInAnonymously();
+ User? user = userCredential.user;
+ if (user == null) {
+ print('Sign in anonymous failed');
+ return null;
+ }
+ String? firebaseToken = await user.getIdToken();
+
+ updateCurrentFirebaseUser(context, user);
+ return firebaseToken;
+ } catch (e) {
+ print(e.toString());
+ return null;
+ }
+ }
+
+ Future signInWithCustomToken(
+ BuildContext context,
+ {required String jwtToken}
+ ) async {
+ try {
+ // Get the ScopeManager to access DataContext
+ // and Evaluate jwtToken from ensemble.storage
+ ScopeManager? scopeManager = ScreenController().getScopeManager(context);
+ String evaluatedJwtToken = jwtToken;
+ if (scopeManager != null) {
+ evaluatedJwtToken =
+ scopeManager.dataContext.eval(jwtToken)?.toString() ?? jwtToken;
+ }
+ customFirebaseApp ??= await _initializeFirebaseSignIn();
+ final _auth = FirebaseAuth.instanceFor(app: customFirebaseApp!);
+
+ UserCredential userCredential = await _signInWithCustomTokenWithRetry(
+ _auth,
+ evaluatedJwtToken,
+ );
+ User? user = userCredential.user;
+ if (user == null) {
+ throw StateError('Firebase sign-in failed. User is null.');
+ }
+ String? firebaseToken = await user.getIdToken();
+
+ updateCurrentFirebaseUser(context, user);
+ return firebaseToken;
+ } catch (e) {
+ debugPrint('Error during Firebase sign-in: $e');
+ rethrow;
+ }
+ }
+
+ Future _signInWithCustomTokenWithRetry(
+ FirebaseAuth auth,
+ String token, {
+ int maxAttempts = 4,
+ }) async {
+ Object? lastError;
+ for (var attempt = 1; attempt <= maxAttempts; attempt++) {
+ try {
+ return await auth.signInWithCustomToken(token);
+ } catch (error) {
+ lastError = error;
+ if (!_isRetryableFirebaseAuthError(error) || attempt >= maxAttempts) {
+ rethrow;
+ }
+ if (kDebugMode) {
+ debugPrint(
+ 'Retrying Firebase custom-token sign-in after transient error '
+ '($attempt/$maxAttempts): $error',
+ );
+ }
+ await Future.delayed(Duration(milliseconds: 300 * attempt));
+ }
+ }
+ throw lastError ?? StateError('Firebase custom-token sign-in failed.');
+ }
+
+ bool _isRetryableFirebaseAuthError(Object error) {
+ if (error is FirebaseAuthException) {
+ return error.code == 'network-request-failed';
+ }
+ if (error is SocketException || error is TimeoutException) {
+ return true;
+ }
+ final message = error.toString().toLowerCase();
+ return message.contains('network-request-failed') ||
+ message.contains('connection reset') ||
+ message.contains('connection closed') ||
+ message.contains('timed out') ||
+ message.contains('socketexception');
+ }
+
+ Future updateCurrentFirebaseUser(BuildContext context, User newUser) async {
+ await StorageManager()
+ .writeToSystemStorage(UserAuthentication._idKey, newUser.uid);
+ await StorageManager().writeToSystemStorage(
+ UserAuthentication._providerKey, SignInProvider.firebase.name);
+ await StorageManager()
+ .writeToSystemStorage(UserAuthentication._isAnonymous, newUser.isAnonymous);
+ }
+
+ Future _signInLocally(BuildContext context,
+ {required AuthenticatedUser user, AuthToken? token}) async {
+ // update the current user
+ await _updateCurrentUser(context, user);
+
+ // TODO: think this through a bit
+ // save the access token to storage. This will become
+ // the bearer token to any API with serviceId = AuthProvider.id
+ // if (token != null) {
+ // const FlutterSecureStorage().write(
+ // key: "${user.provider}_accessToken", value: token.token);
+ // }
+
+ return token?.token;
+ }
+
+ Future _signInWithFirebase(BuildContext context,
+ {required AuthenticatedUser user,
+ required String idToken,
+ AuthToken? token,
+ String? authCode,
+ String? rawNonce}) async {
+ // initialize Firebase once
+ customFirebaseApp ??= await _initializeFirebaseSignIn();
+
+ final credential = _formatCredential(
+ client: user.client, idToken: idToken, accessToken: token?.token, authCode: authCode, rawNonce: rawNonce);
+ final UserCredential authResult =
+ await FirebaseAuth.instanceFor(app: customFirebaseApp!)
+ .signInWithCredential(credential);
+ final User? firebaseUser = authResult.user;
+ if (firebaseUser == null) {
+ throw RuntimeError('Unable to Sign In');
+ }
+
+ _enrichUserFromFirebase(user: user, firebaseInfo: firebaseUser);
+ await _updateCurrentUser(context, user);
+ return await firebaseUser.getIdToken();
+ }
+
+ OAuthCredential _formatCredential(
+ {SignInClient? client, required String idToken, String? accessToken, String? authCode, String? rawNonce}) {
+ if (client == SignInClient.google) {
+ return GoogleAuthProvider.credential(
+ idToken: idToken, accessToken: accessToken);
+ } else if (client == SignInClient.apple) {
+ /// Supply rawNonce and authCode as the accessToken to complete the Apple Sign In Flow
+ return OAuthProvider('apple.com').credential(idToken: idToken, rawNonce: rawNonce, accessToken: authCode);
+ }
+ throw RuntimeError("Invalid Sign In Client");
+ }
+
+ Future _initializeFirebaseSignIn() async {
+ String? appId = await SignInUtils.getAppIdFromYaml();
+
+ FirebaseOptions? options;
+
+ if (kIsWeb) {
+ options = Ensemble().getAccount()?.firebaseConfig?.webConfig;
+ } else if (Platform.isIOS) {
+ options = Ensemble().getAccount()?.firebaseConfig?.iOSConfig;
+ } else if (Platform.isAndroid) {
+ options = Ensemble().getAccount()?.firebaseConfig?.androidConfig;
+ }
+ if (options == null || appId == null) {
+ throw ConfigError('Firebase is not configured for this platform.');
+ }
+
+ // if the Firebase app is already initialized by other modules with same options, return it
+ FirebaseApp? existingApp = Firebase.apps.firstWhereOrNull(
+ (app) => SignInUtils.areFirebaseOptionsEqual(app.options, options!),
+ );
+
+ return existingApp ??
+ await Firebase.initializeApp(name: appId, options: options);
+ }
+
+ /// enrich the passed in User with information from Firebase
+ void _enrichUserFromFirebase(
+ {required AuthenticatedUser user, required User firebaseInfo}) {
+ // update basic info if not already there
+ user.name ??= firebaseInfo.displayName;
+ user.email ??= firebaseInfo.email;
+ user.photo ??= firebaseInfo.photoURL;
+
+ // update new info from Firebase
+ user.phoneNumber = firebaseInfo.phoneNumber;
+ user.emailLVerified = firebaseInfo.emailVerified;
+ user.tenantId = firebaseInfo.tenantId;
+ user.creationTime = firebaseInfo.metadata.creationTime;
+ user.lastSignInTime = firebaseInfo.metadata.lastSignInTime;
+ }
+
+ Future signOut(BuildContext context) async {
+ AuthenticatedUser? user = getCurrentUser();
+ if (user != null) {
+ // sign out with the Sign In Providers first
+ if (user.provider == SignInProvider.firebase) {
+ if (customFirebaseApp != null) {
+ await FirebaseAuth.instanceFor(app: customFirebaseApp!).signOut();
+ }
+ // } else if (user.provider == SignInProvider.auth0) {
+ // await Auth0CredentialsManager().signOut();
+ } else {
+ // If we don't use the provider, sign out with the signIn clients
+ if (user.client == SignInClient.google) {
+ // TODO: save the instance of recreate the Google Sign In
+ //await GoogleSignIn().signOut();
+ } else if (user.client == SignInClient.apple) {
+ // there is no sign out for Apple
+ } else if (user.client == SignInClient.microsoft) {}
+ }
+
+ // then remove user from storage
+ await _clearCurrentUser(context);
+ }
+ }
+
+ /// check if the user is current signed in or not.
+ Future isSignedIn() {
+ return getSignedInUser().then((user) => user != null);
+ }
+
+ Future getSignedInUser() async {
+ AuthenticatedUser? user = getCurrentUser();
+ if (user != null) {
+ if (user.client == SignInClient.google) {
+ return _getSignedInUserFromGoogle(user.provider);
+ }
+ // Storage can outlive the Firebase session — confirm Auth still has a user.
+ if (user.provider == SignInProvider.firebase ||
+ (user.provider == null && user.client == null)) {
+ final app = customFirebaseApp ??
+ (Firebase.apps.isNotEmpty ? Firebase.apps.first : null);
+ if (app == null ||
+ FirebaseAuth.instanceFor(app: app).currentUser == null) {
+ return null;
+ }
+ }
+ }
+ return user;
+ }
+
+ Future _getSignedInUserFromGoogle(
+ SignInProvider? provider) async {
+ var account = await GoogleAuthManager().getSignedInUser();
+ return account != null
+ ? SignInUtils.fromGoogleUser(account, provider: provider)
+ : null;
+ }
+}
+
+mixin UserAuthentication {
+ static const _clientKey = 'user.client';
+ static const _providerKey = 'user.provider';
+ static const _idKey = 'user.id';
+ static const _nameKey = 'user.name';
+ static const _emailKey = 'user.email';
+ static const _photoKey = 'user.photo';
+ static const _dataKey = 'user.data';
+
+ static const _phoneNumberKey = 'user.phonenumber';
+ static const _emailVerifiedKey = 'user.emailverified';
+ static const _tenantIdKey = 'user.tenantId';
+ static const _creationTimeKey = 'user.creationTime';
+ static const _lastSignInTimeKey = 'user.lastSignInTime';
+ static const _isAnonymous = 'user.isAnonymous';
+
+ bool hasCurrentUser() => StorageManager().hasDataFromSystemStorage(_idKey);
+
+ AuthenticatedUser? getCurrentUser() {
+ if (hasCurrentUser()) {
+ return AuthenticatedUser(
+ client: SignInClient.values
+ .from(StorageManager().readFromSystemStorage(_clientKey)),
+ provider: SignInProvider.values
+ .from(StorageManager().readFromSystemStorage(_providerKey)),
+ id: StorageManager().readFromSystemStorage(_idKey),
+ name: StorageManager().readFromSystemStorage(_nameKey),
+ email: StorageManager().readFromSystemStorage(_emailKey),
+ photo: StorageManager().readFromSystemStorage(_photoKey),
+ data: StorageManager().readFromSystemStorage(_dataKey),
+ phoneNumber: StorageManager().readFromSystemStorage(_phoneNumberKey),
+ emailLVerified:
+ StorageManager().readFromSystemStorage(_emailVerifiedKey),
+ tenantId: StorageManager().readFromSystemStorage(_tenantIdKey),
+ creationTime: StorageManager().readFromSystemStorage(_creationTimeKey),
+ lastSignInTime:
+ StorageManager().readFromSystemStorage(_lastSignInTimeKey),
+ isAnonymous:
+ StorageManager().readFromSystemStorage(_isAnonymous) ?? false,
+ );
+ }
+ return null;
+ }
+
+ /// Replace the existing User with a brand new User.
+ /// We try to minimize events dispatchers.
+ /// TODO: refactor this to dispatch a single User object
+ Future _updateCurrentUser(
+ BuildContext context, AuthenticatedUser newUser) async {
+ await StorageManager().writeToSystemStorage(_idKey, newUser.id);
+ await StorageManager()
+ .writeToSystemStorage(_clientKey, newUser.client?.name);
+ await StorageManager()
+ .writeToSystemStorage(_providerKey, newUser.provider?.name);
+
+ if (newUser.name != null) {
+ await StorageManager().writeToSystemStorage(_nameKey, newUser.name);
+ _dispatchUserField(context, 'name', newUser.name);
+ } else {
+ await StorageManager().removeFromSystemStorage(_nameKey);
+ _dispatchUserField(context, 'name', null);
+ }
+
+ if (newUser.email != null) {
+ await StorageManager().writeToSystemStorage(_emailKey, newUser.email);
+ _dispatchUserField(context, 'email', newUser.email);
+ } else {
+ await StorageManager().removeFromSystemStorage(_emailKey);
+ _dispatchUserField(context, 'email', null);
+ }
+
+ if (newUser.photo != null) {
+ await StorageManager().writeToSystemStorage(_photoKey, newUser.photo);
+ _dispatchUserField(context, 'photo', newUser.photo);
+ } else {
+ await StorageManager().removeFromSystemStorage(_photoKey);
+ _dispatchUserField(context, 'photo', null);
+ }
+
+ if (newUser.data != null) {
+ await StorageManager().writeToSystemStorage(_dataKey, newUser.data);
+ _dispatchUserField(context, 'data', newUser.data);
+ } else {
+ await StorageManager().removeFromSystemStorage(_dataKey);
+ _dispatchUserField(context, 'data', null);
+ }
+ }
+
+ Future _clearCurrentUser(BuildContext context) async {
+ await StorageManager().removeFromSystemStorage(_idKey);
+ await StorageManager().removeFromSystemStorage(_clientKey);
+ await StorageManager().removeFromSystemStorage(_providerKey);
+
+ await StorageManager().removeFromSystemStorage(_nameKey);
+ _dispatchUserField(context, 'name', null);
+
+ await StorageManager().removeFromSystemStorage(_emailKey);
+ _dispatchUserField(context, 'email', null);
+
+ await StorageManager().removeFromSystemStorage(_photoKey);
+ _dispatchUserField(context, 'photo', null);
+
+ await StorageManager().removeFromSystemStorage(_dataKey);
+ _dispatchUserField(context, 'data', null);
+ }
+
+ void _dispatchUserField(BuildContext context, String key, dynamic value) {
+ ScreenController().dispatchSystemStorageChanges(context, key, value,
+ storagePrefix: 'user');
+ }
+}
+
+/// publicly exposed as Context
+class AuthContextManagerImpl with Invokable implements AuthContextManager {
+ @override
+ Map getters() {
+ return {
+ 'user': () => AuthManager().getCurrentUser(),
+ };
+ }
+
+ @override
+ Map methods() {
+ return {
+ // 'isSignedIn': () => AuthManager().isSignedIn(),
+ 'signIn': _processSignInFromServer,
+ 'signOut': () => signOut(),
+ };
+ }
+
+ // this SignIn is using a Server SignInProvider
+ void _processSignInFromServer(dynamic inputs) {
+ // TODO Think this through, this is doing the Sign in on the server-side.
+ // Server should be sending back:
+ // 1. a token that we can append to every server call to tell the server
+ // who this person is
+ // 2. Basic user information so we can display and bind to. (technically
+ // we don't need any but it'll be more consistent with other providers)
+ }
+
+ @override
+ Map setters() {
+ return {};
+ }
+
+ /// this method is exposed to the main module
+ @override
+ Future getSignedInUser() {
+ return AuthManager().getSignedInUser();
+ }
+
+ /// this method is exposed to the main module
+ @override
+ Future signOut() {
+ return AuthManager().signOut(Utils.globalAppKey.currentContext!);
+ }
+
+ /// Sends a phone verification code to the given phone number.
+ @override
+ Future sendVerificationCode({
+ required String provider,
+ required String method,
+ required String phoneNumber,
+ required Function(String verificationId, int? resendToken) onSuccess,
+ required Function(String error) onError,
+ }) async {
+ try {
+ final SignInWithVerificationCode _signInWithVerificationCode =
+ SignInWithVerificationCode();
+ await _signInWithVerificationCode.sendVerificationCode(
+ provider: provider,
+ method: method,
+ phoneNumber: phoneNumber,
+ onSuccess: (verificationId, resendToken) {
+ onSuccess(verificationId, resendToken);
+ },
+ onError: (e) {
+ onError(e.message ?? 'An error occurred while sending code');
+ },
+ );
+ } catch (e) {
+ onError('Unexpected error occurred: $e');
+ }
+ }
+
+ /// Verifies a phone code using [smsCode] and [verificationId].
+ @override
+ Future validateVerificationCode({
+ required String provider,
+ required String method,
+ required String smsCode,
+ required String verificationId,
+ required Function(AuthenticatedUser, String idToken) onSuccess,
+ required Function(String) onError,
+ required Function(String) onVerificationFailure,
+ }) async {
+ try {
+ final SignInWithVerificationCode _signInWithVerificationCode =
+ SignInWithVerificationCode();
+ final response =
+ await _signInWithVerificationCode.validateVerificationCode(
+ provider: provider,
+ method: method,
+ smsCode: smsCode,
+ verificationId: verificationId,
+ );
+
+ if (response != null) {
+ final user = response['user'];
+ final idToken = response['idToken'];
+
+ await AuthManager()._updateCurrentUser(
+ Utils.globalAppKey.currentContext!,
+ user,
+ );
+
+ onSuccess(user, idToken);
+ } else {
+ onError('Something went wrong, User not found');
+ }
+
+ return response?['user'];
+ } catch (e) {
+ onVerificationFailure('Error verifying phone code: ${e.toString()}');
+ return null;
+ }
+ }
+
+ /// Resends the verification code using [resendToken].
+ @override
+ Future resendVerificationCode({
+ required String provider,
+ required String method,
+ required String phoneNumber,
+ required int resendToken,
+ required Function(String verificationId, int? resendToken) onSuccess,
+ required Function(String error) onError,
+ }) {
+ final SignInWithVerificationCode _signInWithVerificationCode =
+ SignInWithVerificationCode();
+ return _signInWithVerificationCode.resendVerificationCode(
+ provider: provider,
+ method: method,
+ phoneNumber: phoneNumber,
+ resendToken: resendToken,
+ onSuccess: (verificationId, newResendToken) {
+ onSuccess(verificationId, newResendToken);
+ },
+ onError: (e) {
+ onError('Error resending phone verification: ${e.message}');
+ },
+ );
+ }
+}
+
+class AuthToken {
+ AuthToken({required this.tokenType, required this.token});
+
+ TokenType tokenType;
+ String token;
+}
+
+enum TokenType {
+ token, // Authorization:
+ bearerToken // Authorization: Bearer
+}
diff --git a/modules/auth/lib/signin/signin_utils.dart b/modules/auth/lib/signin/signin_utils.dart
index 80ad8bf58..70e4c956d 100644
--- a/modules/auth/lib/signin/signin_utils.dart
+++ b/modules/auth/lib/signin/signin_utils.dart
@@ -1,31 +1,31 @@
-import 'package:ensemble/framework/stub/auth_context_manager.dart';
-import 'package:firebase_core/firebase_core.dart';
-import 'package:flutter/services.dart';
-import 'package:google_sign_in/google_sign_in.dart';
-import 'package:yaml/yaml.dart';
-
-class SignInUtils {
- /// convert a Google user account to our User
- static AuthenticatedUser fromGoogleUser(GoogleSignInAccount account,
- {SignInProvider? provider}) =>
- AuthenticatedUser(
- client: SignInClient.google,
- provider: provider,
- id: account.id,
- name: account.displayName,
- email: account.email,
- photo: account.photoUrl);
-
- static Future getAppIdFromYaml() async {
- final yamlString = await rootBundle.loadString('ensemble/ensemble-config.yaml');
- final YamlMap yamlMap = loadYaml(yamlString);
- return yamlMap['definitions']?['ensemble']?['appId'];
- }
-
- static bool areFirebaseOptionsEqual(FirebaseOptions a, FirebaseOptions b) {
- return a.apiKey == b.apiKey &&
- a.appId == b.appId &&
- a.messagingSenderId == b.messagingSenderId &&
- a.projectId == b.projectId;
- }
-}
+import 'package:ensemble/framework/stub/auth_context_manager.dart';
+import 'package:firebase_core/firebase_core.dart';
+import 'package:flutter/services.dart';
+import 'package:google_sign_in/google_sign_in.dart';
+import 'package:yaml/yaml.dart';
+
+class SignInUtils {
+ /// convert a Google user account to our User
+ static AuthenticatedUser fromGoogleUser(GoogleSignInAccount account,
+ {SignInProvider? provider}) =>
+ AuthenticatedUser(
+ client: SignInClient.google,
+ provider: provider,
+ id: account.id,
+ name: account.displayName,
+ email: account.email,
+ photo: account.photoUrl);
+
+ static Future getAppIdFromYaml() async {
+ final yamlString = await rootBundle.loadString('ensemble/ensemble-config.yaml');
+ final YamlMap yamlMap = loadYaml(yamlString);
+ return yamlMap['definitions']?['ensemble']?['appId'];
+ }
+
+ static bool areFirebaseOptionsEqual(FirebaseOptions a, FirebaseOptions b) {
+ return a.apiKey == b.apiKey &&
+ a.appId == b.appId &&
+ a.messagingSenderId == b.messagingSenderId &&
+ a.projectId == b.projectId;
+ }
+}
diff --git a/modules/auth/pubspec.yaml b/modules/auth/pubspec.yaml
index ea06ad6a8..0e9c49693 100644
--- a/modules/auth/pubspec.yaml
+++ b/modules/auth/pubspec.yaml
@@ -1,122 +1,122 @@
-name: ensemble_auth
-description: Authentication services and sign-in widgets for Ensemble apps.
-homepage: https://ensembleui.com
-repository: https://github.com/EnsembleUI/ensemble
-issue_tracker: https://github.com/EnsembleUI/ensemble/issues
-documentation: https://github.com/EnsembleUI/ensemble/tree/main/modules/auth#readme
-topics:
- - authentication
- - oauth
- - firebase-auth
- - low-code
- - ensemble
-
-# The following defines the version and build number for your application.
-# A version number is three numbers separated by dots, like 1.2.43
-# followed by an optional build number separated by a +.
-# Both the version and the builder number may be overridden in flutter
-# build by specifying --build-name and --build-number, respectively.
-# In Android, build-name is used as versionName while build-number used as versionCode.
-# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
-# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
-# Read more about iOS versioning at
-# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
-#
-# This version is used _only_ for the Runner app, which is used if you just do
-# a `flutter run` or a `flutter make-host-app-editable`. It has no impact
-# on any other native host app that you embed your Flutter project into.
-version: 1.2.53
-
-environment:
- sdk: ">=3.5.0 <4.0.0"
- flutter: ">=3.24.0"
-
-dependencies:
- flutter:
- sdk: flutter
-
- ensemble:
- git:
- url: https://github.com/EnsembleUI/ensemble.git
- ref: ensemble-v1.2.53
- path: modules/ensemble
-
- ensemble_ts_interpreter: ^1.2.0
-
- get_it: ^8.0.0
- google_sign_in: ^6.1.4
- sign_in_with_apple: ^6.1.4
- firebase_auth: ^6.1.1
- firebase_core: ^4.2.0
- flutter_web_auth_2: ^4.1.0
- flutter_svg: ^2.2.0
- crypto: ^3.0.3
- flutter_secure_storage: ^9.2.4
- http: ^1.6.0
- collection: ^1.19.1
- google_sign_in_platform_interface: ^2.5.0
- google_sign_in_web: ^0.12.4+4
- yaml: ^3.1.3
- # auth0_flutter: ^1.2.1
-
-dev_dependencies:
- flutter_test:
- sdk: flutter
- flutter_lints: ^2.0.0
- mockito:
-
-# For information on the generic Dart part of this file, see the
-# following page: https://dart.dev/tools/pub/pubspec
-
-flutter:
- # The following line ensures that the Material Icons font is
- # included with your application, so that you can use the icons in
- # the material Icons class.
- uses-material-design: true
-
- assets:
- - assets/
-
- # To add Flutter specific assets to your application, add an assets section,
- # like this:
- # assets:
- # - images/a_dot_burr.jpeg
- # - images/a_dot_ham.jpeg
-
- # An image asset can refer to one or more resolution-specific "variants", see
- # https://flutter.dev/assets-and-images/#resolution-aware
-
- # For details regarding adding assets from package dependencies, see
- # https://flutter.dev/assets-and-images/#from-packages
-
- # To add Flutter specific custom fonts to your application, add a fonts
- # section here, in this "flutter" section. Each entry in this list should
- # have a "family" key with the font family name, and a "fonts" key with a
- # list giving the asset and other descriptors for the font. For
- # example:
- # fonts:
- # - family: Schyler
- # fonts:
- # - asset: fonts/Schyler-Regular.ttf
- # - asset: fonts/Schyler-Italic.ttf
- # style: italic
- # - family: Trajan Pro
- # fonts:
- # - asset: fonts/TrajanPro.ttf
- # - asset: fonts/TrajanPro_Bold.ttf
- # weight: 700
- #
- # For details regarding fonts from package dependencies,
- # see https://flutter.dev/custom-fonts/#from-packages
-
-
- # This section identifies your Flutter project as a module meant for
- # embedding in a native host app. These identifiers should _not_ ordinarily
- # be changed after generation - they are used to ensure that the tooling can
- # maintain consistency when adding or modifying assets and plugins.
- # They also do not have any bearing on your native host application's
- # identifiers, which may be completely independent or the same as these.
- module:
- androidX: true
- androidPackage: com.ensembleui.ensemble_auth
- iosBundleIdentifier: com.ensembleui.ensembleAuth
+name: ensemble_auth
+description: Authentication services and sign-in widgets for Ensemble apps.
+homepage: https://ensembleui.com
+repository: https://github.com/EnsembleUI/ensemble
+issue_tracker: https://github.com/EnsembleUI/ensemble/issues
+documentation: https://github.com/EnsembleUI/ensemble/tree/main/modules/auth#readme
+topics:
+ - authentication
+ - oauth
+ - firebase-auth
+ - low-code
+ - ensemble
+
+# The following defines the version and build number for your application.
+# A version number is three numbers separated by dots, like 1.2.43
+# followed by an optional build number separated by a +.
+# Both the version and the builder number may be overridden in flutter
+# build by specifying --build-name and --build-number, respectively.
+# In Android, build-name is used as versionName while build-number used as versionCode.
+# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
+# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
+# Read more about iOS versioning at
+# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
+#
+# This version is used _only_ for the Runner app, which is used if you just do
+# a `flutter run` or a `flutter make-host-app-editable`. It has no impact
+# on any other native host app that you embed your Flutter project into.
+version: 1.2.53
+
+environment:
+ sdk: ">=3.5.0 <4.0.0"
+ flutter: ">=3.24.0"
+
+dependencies:
+ flutter:
+ sdk: flutter
+
+ ensemble:
+ git:
+ url: https://github.com/EnsembleUI/ensemble.git
+ ref: ensemble-v1.2.53
+ path: modules/ensemble
+
+ ensemble_ts_interpreter: ^1.2.0
+
+ get_it: ^8.0.0
+ google_sign_in: ^6.1.4
+ sign_in_with_apple: ^6.1.4
+ firebase_auth: ^6.1.1
+ firebase_core: ^4.2.0
+ flutter_web_auth_2: ^4.1.0
+ flutter_svg: ^2.2.0
+ crypto: ^3.0.3
+ flutter_secure_storage: ^9.2.4
+ http: ^1.6.0
+ collection: ^1.19.1
+ google_sign_in_platform_interface: ^2.5.0
+ google_sign_in_web: ^0.12.4+4
+ yaml: ^3.1.3
+ # auth0_flutter: ^1.2.1
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+ flutter_lints: ^2.0.0
+ mockito:
+
+# For information on the generic Dart part of this file, see the
+# following page: https://dart.dev/tools/pub/pubspec
+
+flutter:
+ # The following line ensures that the Material Icons font is
+ # included with your application, so that you can use the icons in
+ # the material Icons class.
+ uses-material-design: true
+
+ assets:
+ - assets/
+
+ # To add Flutter specific assets to your application, add an assets section,
+ # like this:
+ # assets:
+ # - images/a_dot_burr.jpeg
+ # - images/a_dot_ham.jpeg
+
+ # An image asset can refer to one or more resolution-specific "variants", see
+ # https://flutter.dev/assets-and-images/#resolution-aware
+
+ # For details regarding adding assets from package dependencies, see
+ # https://flutter.dev/assets-and-images/#from-packages
+
+ # To add Flutter specific custom fonts to your application, add a fonts
+ # section here, in this "flutter" section. Each entry in this list should
+ # have a "family" key with the font family name, and a "fonts" key with a
+ # list giving the asset and other descriptors for the font. For
+ # example:
+ # fonts:
+ # - family: Schyler
+ # fonts:
+ # - asset: fonts/Schyler-Regular.ttf
+ # - asset: fonts/Schyler-Italic.ttf
+ # style: italic
+ # - family: Trajan Pro
+ # fonts:
+ # - asset: fonts/TrajanPro.ttf
+ # - asset: fonts/TrajanPro_Bold.ttf
+ # weight: 700
+ #
+ # For details regarding fonts from package dependencies,
+ # see https://flutter.dev/custom-fonts/#from-packages
+
+
+ # This section identifies your Flutter project as a module meant for
+ # embedding in a native host app. These identifiers should _not_ ordinarily
+ # be changed after generation - they are used to ensure that the tooling can
+ # maintain consistency when adding or modifying assets and plugins.
+ # They also do not have any bearing on your native host application's
+ # identifiers, which may be completely independent or the same as these.
+ module:
+ androidX: true
+ androidPackage: com.ensembleui.ensemble_auth
+ iosBundleIdentifier: com.ensembleui.ensembleAuth
diff --git a/modules/bracket/CHANGELOG.md b/modules/bracket/CHANGELOG.md
index 11277e002..43dabaa0c 100644
--- a/modules/bracket/CHANGELOG.md
+++ b/modules/bracket/CHANGELOG.md
@@ -1,27 +1,27 @@
-## 1.2.53
-
- - Bump "ensemble_bracket" to `1.2.53`.
-
-## 1.2.52
-
- - Bump "ensemble_bracket" to `1.2.52`.
-
-## 1.2.51
-
- - Bump "ensemble_bracket" to `1.2.51`.
-
-## 1.2.50
-
- - Bump "ensemble_bracket" to `1.2.50`.
-
-## 1.2.49
-
- - Bump "ensemble_bracket" to `1.2.49`.
-
-## 1.2.48
-
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-## 1.2.47
-
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+## 1.2.53
+
+ - Bump "ensemble_bracket" to `1.2.53`.
+
+## 1.2.52
+
+ - Bump "ensemble_bracket" to `1.2.52`.
+
+## 1.2.51
+
+ - Bump "ensemble_bracket" to `1.2.51`.
+
+## 1.2.50
+
+ - Bump "ensemble_bracket" to `1.2.50`.
+
+## 1.2.49
+
+ - Bump "ensemble_bracket" to `1.2.49`.
+
+## 1.2.48
+
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+## 1.2.47
+
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
diff --git a/modules/bracket/README.md b/modules/bracket/README.md
index b5d4c9102..3baebd142 100644
--- a/modules/bracket/README.md
+++ b/modules/bracket/README.md
@@ -1,81 +1,243 @@
-# ensemble_bracket
-
-`ensemble_bracket` implements an Ensemble `Bracket` widget for rendering elimination-style tournament brackets.
-
-## Overview
-
-This is an optional Ensemble widget module. The package exports `lib/src/bracket.dart`, where `EnsembleBracketImpl` implements the `EnsembleBracket` contract and `BracketController` manages bracket templates and data.
-
-## Features
-
-- Implements the Ensemble widget type `Bracket`.
-- Supports round and match templates through `RoundTemplate` and `MatchTemplate`.
-- Provides bracket rendering widgets and a custom painter for bracket connectors.
-
-## Installation / Setup
-
-Use this package from inside the Melos workspace:
-
-```bash
-melos bootstrap
-```
-
-## Usage
-
-The verified public import is:
-
-```dart
-import 'package:ensemble_bracket/ensemble_bracket.dart';
-```
-
-A complete Ensemble YAML example was not found in this package, so no YAML data shape is documented here.
-
-## Configuration
-
-No additional configuration was found in this package.
-
-## Platform Support
-
-| Platform | Supported | Notes |
-| -------- | --------: | ----- |
-| Android | Unknown | No Android project is included in this package; host app setup is required. |
-| iOS | Unknown | No iOS project is included in this package; host app setup is required. |
-| Web | Unknown | No web implementation was found in this package. |
-| macOS | Unknown | No macOS project is included in this package. |
-| Windows | Unknown | No Windows project is included in this package. |
-| Linux | Unknown | No Linux project is included in this package. |
-
-## Permissions
-
-No runtime permissions were found in this package.
-
-## API Reference
-
-| API | Type | Description |
-| --- | ---- | ----------- |
-| `EnsembleBracketImpl` | Widget | Ensemble widget implementation for the `Bracket` type. |
-| `BracketController` | Controller | Holds bracket properties and template configuration. |
-| `RoundTemplate` | Template | Template model for rounds. |
-| `MatchTemplate` | Template | Template model for matches. |
-
-## Development
-
-```bash
-melos bootstrap
-melos exec --scope="ensemble_bracket" -- flutter analyze
-melos exec --scope="ensemble_bracket" -- flutter test
-```
-
-## Testing
-
-A `test/` directory exists, but the current test file only contains an empty placeholder test.
-
-## Related Packages / Modules
-
-- `ensemble`: defines the `EnsembleBracket` contract resolved by the core widget registry.
-
-## Notes for Contributors
-
-- Keep examples in sync with source code.
-- Update this README when public APIs, permissions, configuration, or platform support changes.
-- Do not document unverified behavior.
+# ensemble_bracket
+
+`ensemble_bracket` implements an Ensemble `Bracket` widget for rendering elimination-style tournament brackets.
+
+## Overview
+
+This is an optional Ensemble widget module. The package exports `lib/src/bracket.dart`, where `EnsembleBracketImpl` implements the `EnsembleBracket` contract and `BracketController` manages bracket templates and data.
+
+## Features
+
+- Implements the Ensemble widget type `Bracket`.
+- Supports round and match templates through `RoundTemplate` and `MatchTemplate`.
+- Provides bracket rendering widgets and a custom painter for bracket connectors.
+- Full TV/Android TV D-pad navigation support with customizable focus styling.
+
+## Installation / Setup
+
+Use this package from inside the Melos workspace:
+
+```bash
+melos bootstrap
+```
+
+## Usage
+
+The verified public import is:
+
+```dart
+import 'package:ensemble_bracket/ensemble_bracket.dart';
+```
+
+### Basic YAML Example (Mobile/Web)
+
+```yaml
+Bracket:
+ id: bracket
+ styles:
+ scale: 0.75 # Layout scale (0.1 - 1.0)
+ borderColor: transparent
+ borderWidth: 2
+ lineStyles:
+ color: 0xff404040
+ width: 2
+ tabStyles:
+ backgroundColor: 0xFF232323
+ selectedBackgroundColor: 0xFF00C300
+ textStyle:
+ color: 0xFFB3B3B3
+ selectedTextStyle:
+ color: black
+ borderRadius: 8
+
+ items:
+ data: ${bracketData}
+ name: round
+ title: ${round.title}
+ item-template:
+ data: ${round.matches}
+ name: match
+ height: 100
+ template:
+ MatchCard:
+ inputs:
+ match: ${match}
+```
+
+### TV YAML Example (Android TV / D-pad)
+
+```yaml
+Bracket:
+ id: bracket
+ styles:
+ scale: 0.4 # Smaller scale for TV (more columns visible)
+ borderColor: transparent
+ borderWidth: 2
+ tvOptions:
+ row: 1 # TV: Tab row, matches start at row+1
+ lineStyles:
+ color: 0xff404040
+ width: 2
+ tabStyles:
+ backgroundColor: 0xFF232323
+ selectedBackgroundColor: 0xFF00C300
+ textStyle:
+ color: 0xFFB3B3B3
+ selectedTextStyle:
+ color: black
+ borderRadius: 8
+ focusBorderRadius: 12 # TV: Focus indicator radius
+
+ items:
+ data: ${bracketData}
+ name: round
+ title: ${round.title}
+ item-template:
+ data: ${round.matches}
+ name: match
+ height: 100
+ template:
+ MatchCard:
+ inputs:
+ match: ${match}
+```
+
+## Configuration
+
+### Bracket Properties
+
+| Property | Type | TV | Description |
+| ------------- | ------ | :-: | ------------------------------- |
+| `borderColor` | Color | | Border color around match cards |
+| `borderWidth` | Number | | Border width around match cards |
+
+### Scale (`scale`)
+
+| Property | Type | Description |
+| -------- | ------ | -------------------------------------------------------------------------------------------------------------------- |
+| `scale` | Number | Layout scale (0.1 - 1.0, default: 0.75). Controls viewportFraction, card width, and connector length proportionally. |
+
+### Line Styles (`lineStyles`)
+
+| Property | Type | Description |
+| -------- | ------ | -------------------------------- |
+| `color` | Color | Color of bracket connector lines |
+| `width` | Number | Width of bracket connector lines |
+
+> **Note**: Vertical connector lines automatically scale based on card spacing when navigating between rounds, ensuring lines always connect properly at any scale.
+
+### Tab Styles (`tabStyles`)
+
+| Property | Type | TV | Description |
+| -------------------------- | ---------- | :-: | --------------------------------------------- |
+| `backgroundColor` | Color | | Background color of unselected tabs |
+| `selectedBackgroundColor` | Color | | Background color of selected tab |
+| `textStyle` | TextStyle | | Text style for unselected tabs |
+| `selectedTextStyle` | TextStyle | | Text style for selected tab |
+| `borderRadius` | Number | | Border radius of tabs |
+| `borderColor` | Color | | Border color of tabs |
+| `borderWidth` | Number | | Border width of tabs |
+| `selectedBorderColor` | Color | | Border color of the selected tab |
+| `selectedBorderWidth` | Number | | Border width of the selected tab |
+| `padding` | EdgeInsets | | Padding inside tabs |
+| `gap` | Number | | Gap between tabs (default: 12) |
+| `focusBorderColor` | Color | ✅ | Focus border color when navigating with D-pad |
+| `focusBorderWidth` | Number | ✅ | Focus border width (default: 2.0) |
+| `focusBorderRadius` | Number | ✅ | Focus border radius (default: 8.0) |
+| `focusBackgroundColor` | Color | ✅ | Background color when focused |
+| `focusTextStyle` | TextStyle | ✅ | Text style when focused |
+| `focusAnimationDurationMs` | Number | ✅ | Focus animation duration in milliseconds |
+
+### TV Options (`tvOptions`)
+
+| Property | Type | TV | Description |
+| -------- | ------ | :-: | ---------------------------------------------------------------------- |
+| `row` | Number | ✅ | TV navigation row offset. Tabs are at this row, matches start at row+1 |
+
+---
+
+## TV D-pad Navigation
+
+> **Note**: This section only applies to Android TV / TV devices with D-pad remote control.
+
+### Focus Styling Priority Chain
+
+The bracket widget follows the same focus styling priority as other Ensemble widgets:
+
+1. **tabStyles focus properties** (`focusBorderColor` / `focusBorderWidth` / `focusBorderRadius`)
+2. **Theme** (`EnsembleThemeExtension.tvFocusTheme`)
+3. **Provider** (`TVFocusProviderScope`)
+4. **tabStyles regular border** (`borderColor` / `borderWidth` / `borderRadius`)
+5. **Terminal default (per property):** color → app primary color (`theme.colorScheme.primary`); width → `2.0`; radius → `8.0`
+
+### Navigation Behavior
+
+The bracket widget provides full TV D-pad navigation:
+
+- **LEFT/RIGHT** arrows navigate between rounds (columns)
+- **UP/DOWN** arrows navigate between matches within a round
+- Focus automatically transfers to the corresponding row when changing rounds
+- Row clamping ensures focus stays within available matches (e.g., 8 matches in Round of 16 → 4 matches in Quarter Finals)
+
+### Match Card tvOptions
+
+Match cards within the bracket should include `tvOptions` for focus styling:
+
+```yaml
+MatchCard:
+ body:
+ Column:
+ styles:
+ tvOptions:
+ row: 0 # Required for box_wrapper focus styling (actual row is set by bracket)
+ backgroundColor: 0xff303030 # Background when focused
+```
+
+Note: The `row` value is overridden by the bracket for navigation ordering, but must be present for box_wrapper to apply focus styling.
+
+## Platform Support
+
+| Platform | Supported | Notes |
+| -------- | --------: | ------------------------------------ |
+| Android | ✅ | Full support including Android TV |
+| iOS | ✅ | Full support |
+| Web | ✅ | Full support |
+| macOS | ✅ | Full support |
+| Windows | ✅ | Full support |
+| Linux | - | Not listed in pubspec.yaml platforms |
+
+## Permissions
+
+No runtime permissions were found in this package.
+
+## API Reference
+
+| API | Type | Description |
+| --------------------- | ---------- | --------------------------------------------------------- |
+| `EnsembleBracketImpl` | Widget | Ensemble widget implementation for the `Bracket` type. |
+| `BracketController` | Controller | Holds bracket properties and template configuration. |
+| `RoundTemplate` | Template | Template model for rounds. |
+| `MatchTemplate` | Template | Template model for matches. |
+| `RoundData` | Data | Resolved round data with title, matches, and local scope. |
+
+## Development
+
+```bash
+melos bootstrap
+melos exec --scope="ensemble_bracket" -- flutter analyze
+melos exec --scope="ensemble_bracket" -- flutter test
+```
+
+## Testing
+
+A `test/` directory exists, but the current test file only contains an empty placeholder test.
+
+## Related Packages / Modules
+
+- `ensemble`: defines the `EnsembleBracket` contract resolved by the core widget registry.
+
+## Notes for Contributors
+
+- Keep examples in sync with source code.
+- Update this README when public APIs, permissions, configuration, or platform support changes.
+- Do not document unverified behavior.
diff --git a/modules/bracket/lib/src/bracket.dart b/modules/bracket/lib/src/bracket.dart
index 2f213b050..1ce8cf680 100644
--- a/modules/bracket/lib/src/bracket.dart
+++ b/modules/bracket/lib/src/bracket.dart
@@ -1,584 +1,1689 @@
-// ignore_for_file: avoid_print
-
-import 'package:ensemble/framework/ensemble_widget.dart';
-import 'package:ensemble/framework/model.dart';
-import 'package:ensemble/framework/scope.dart';
-import 'package:ensemble/framework/stub/ensemble_bracket.dart';
-import 'package:ensemble/framework/view/data_scope_widget.dart';
-import 'package:ensemble/layout/templated.dart';
-import 'package:ensemble/model/item_template.dart';
-import 'package:ensemble/util/utils.dart';
-import 'package:ensemble/widget/helpers/controllers.dart';
-import 'package:flutter/material.dart';
-
-/// Implementation of the tournament bracket widget for Ensemble.
-class EnsembleBracketImpl extends EnsembleWidget
- implements EnsembleBracket {
- const EnsembleBracketImpl._(super.controller);
-
- /// Factory constructor to build the [EnsembleBracketImpl] widget.
- factory EnsembleBracketImpl.build([dynamic controller]) =>
- EnsembleBracketImpl._(
- controller is BracketController ? controller : BracketController());
-
- @override
- State createState() => BracketState();
-}
-
-/// Template representing a round in the tournament bracket.
-class RoundTemplate extends ItemTemplate {
- /// The title of the round.
- final String? title;
- /// The matches within the round.
- final MatchTemplate matches;
-
- /// Creates a [RoundTemplate].
- RoundTemplate({
- required String? data,
- required String name,
- dynamic template,
- required this.title,
- required this.matches,
- }) : super(data, name, template);
-}
-
-/// Template representing a match within a round.
-class MatchTemplate extends ItemTemplate {
- /// The height of the match container.
- final double height;
-
- /// Creates a [MatchTemplate].
- MatchTemplate(super.data, super.name, super.template, this.height);
-}
-
-/// Data object containing resolved information for a round.
-class RoundData {
- /// The title of the round.
- final String title;
- /// The match template configuration.
- final MatchTemplate matches;
- /// The local scope manager for evaluated variables in the round.
- final ScopeManager localScope;
-
- /// Creates a [RoundData] object.
- RoundData({
- required this.title,
- required this.matches,
- required this.localScope,
- });
-}
-
-/// Controller managing styling and properties of the [EnsembleBracketImpl] widget.
-class BracketController extends EnsembleBoxController {
- /// Padding for the bracket tabs.
- EdgeInsets? tabPadding;
-
- /// Gap between tabs.
- double tabGap = 12;
-
- /// Creates a [BracketController].
- BracketController();
-
- RoundTemplate? roundTemplate;
- Color? lineColor;
- double? lineWidth;
-
- Color? tabBackgroundColor;
- Color? tabSelectedBackgroundColor;
- TextStyle? tabTextStyle;
- TextStyle? tabSelectedStyle;
- EBorderRadius? tabBorderRadius;
-
- @override
- List passthroughSetters() => ['items'];
-
- @override
- Map getters() {
- return {};
- }
-
- @override
- Map methods() {
- return {};
- }
-
- @override
- Map setters() => Map.from(super.setters())
- ..addAll({
- 'lineStyles': (data) {
- lineColor = Utils.getColor(data['color']);
- lineWidth = Utils.optionalDouble(data['width']);
- },
- 'tabStyles': (data) {
- tabBackgroundColor = Utils.getColor(data['backgroundColor']);
- tabSelectedBackgroundColor =
- Utils.getColor(data['selectedBackgroundColor']);
- tabTextStyle = Utils.getTextStyle(data['textStyle']);
- tabSelectedStyle = Utils.getTextStyle(data['selectedTextStyle']);
- tabBorderRadius = Utils.getBorderRadius(data['borderRadius']);
- tabPadding = Utils.optionalInsets(data['padding']);
- tabGap = Utils.getDouble(data['gap'], fallback: 12.0);
- },
- 'items': (data) {
- if (!_isValidData(data)) return;
-
- roundTemplate = RoundTemplate(
- data: Utils.optionalString(data['data']),
- name: Utils.optionalString(data['name']) ?? 'round',
- title: Utils.optionalString(data['title']),
- matches: MatchTemplate(
- Utils.optionalString(data['item-template']['data']),
- Utils.optionalString(data['item-template']['name']) ?? 'march',
- data['item-template']['template'],
- Utils.getDouble(
- data['item-template']['height'],
- fallback: 100,
- )),
- );
- }
- });
-
- bool _isValidData(dynamic data) {
- if (data is! Map) {
- print('Bracket: Invalid items');
- return false;
- }
- if (data['data'] == null || data['name'] == null) {
- print('Bracket: data and name are required');
- return false;
- }
- if (data['item-template'] == null) {
- print('Bracket: item-template is required');
- return false;
- }
- return true;
- }
-}
-
-class BracketState extends EnsembleWidgetState
- with TemplatedWidgetState {
- List roundData = [];
-
- @override
- void didChangeDependencies() {
- _registerRowSpanListener(context);
- super.didChangeDependencies();
- }
-
- List _buildRoundConfig(BuildContext context, List dataList) {
- List roundDataConfig = [];
-
- RoundTemplate? itemTemplate = widget.controller.roundTemplate;
- ScopeManager? myScope = DataScopeWidget.getScope(context);
- if (myScope != null && itemTemplate != null) {
- for (dynamic dataItem in dataList) {
- ScopeManager dataScope = myScope.createChildScope();
- dataScope.dataContext.addDataContextById(itemTemplate.name, dataItem);
-
- roundDataConfig.add(
- RoundData(
- title: Utils.getString(
- dataScope.dataContext.eval(itemTemplate.title),
- fallback: '--',
- ),
- matches: itemTemplate.matches,
- localScope: dataScope,
- ),
- );
- }
- }
- return roundDataConfig;
- }
-
- void _registerRowSpanListener(BuildContext context) {
- if (widget.controller.roundTemplate != null) {
- registerItemTemplate(context, widget.controller.roundTemplate!,
- onDataChanged: (dataList) {
- if (dataList is List) {
- roundData = _buildRoundConfig(context, dataList);
- setState(() {});
- }
- });
- }
- }
-
- @override
- Widget buildWidget(BuildContext context) {
- return BracketsView(
- controller: widget.controller,
- data: roundData,
- );
- }
-}
-
-class BracketsView extends StatefulWidget {
- final List data;
- final BracketController controller;
-
- const BracketsView({
- super.key,
- required this.data,
- required this.controller,
- });
-
- @override
- State createState() => _BracketsViewState();
-}
-
-class _BracketsViewState extends State {
- late PageController _pageController;
- int _currentPageIndex = 0;
- List _tabKeys = [];
-
- @override
- void initState() {
- super.initState();
- _pageController = PageController(viewportFraction: 0.75);
- _pageController.addListener(_updatePageIndex);
- }
-
- @override
- void didChangeDependencies() {
- super.didChangeDependencies();
- _tabKeys =
- List.generate(widget.data.length, (index) => GlobalKey());
- }
-
- void _updatePageIndex() {
- int newPage = _pageController.page!.round();
- if (newPage != _currentPageIndex) {
- setState(() {
- _currentPageIndex = newPage;
- });
- }
- _scrollToSelectedTab(newPage);
- }
-
- void _scrollToSelectedTab(int index) {
- if (index < _tabKeys.length) {
- Scrollable.ensureVisible(
- _tabKeys[index].currentContext!,
- duration: const Duration(milliseconds: 300),
- alignment: 0.5,
- );
- }
- }
-
- void _animateToPage(int index) {
- _pageController.animateToPage(
- index,
- duration: const Duration(milliseconds: 300),
- curve: Curves.easeInOut,
- );
- }
-
- @override
- void dispose() {
- _pageController.removeListener(_updatePageIndex);
- _pageController.dispose();
- super.dispose();
- }
-
- @override
- Widget build(BuildContext context) {
- return Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- if (_tabKeys.isNotEmpty)
- SingleChildScrollView(
- padding: EdgeInsets.zero,
- scrollDirection: Axis.horizontal,
- child: Row(
- mainAxisAlignment: MainAxisAlignment.start,
- children: List.generate(widget.data.length, (index) {
- bool isSelected = index == _currentPageIndex;
- String? title = widget.data.elementAt(index).title;
- return Container(
- padding: EdgeInsets.only(left: widget.controller.tabGap),
- child: ElevatedButton(
- key: _tabKeys[index],
- onPressed: () {
- _animateToPage(index);
- _scrollToSelectedTab(index);
- },
- style: ElevatedButton.styleFrom(
- padding: widget.controller.tabPadding,
- shape: widget.controller.tabBorderRadius != null
- ? RoundedRectangleBorder(
- borderRadius:
- widget.controller.tabBorderRadius!.getValue(),
- )
- : null,
- backgroundColor: isSelected
- ? widget.controller.tabSelectedBackgroundColor
- : widget.controller.tabBackgroundColor,
- ),
- child: Text(
- title,
- style: isSelected
- ? widget.controller.tabSelectedStyle
- : widget.controller.tabTextStyle,
- ),
- ),
- );
- }),
- ),
- ),
- Expanded(
- child: BracketsPage(
- controller: widget.controller,
- pageController: _pageController,
- data: widget.data,
- ),
- ),
- ],
- );
- }
-}
-
-class BracketsPage extends StatefulWidget {
- final List data;
- final PageController pageController;
- final BracketController controller;
-
- const BracketsPage({
- super.key,
- required this.data,
- required this.pageController,
- required this.controller,
- });
-
- @override
- State createState() => _BracketsPageState();
-}
-
-class CustomScrollNotification extends Notification {
- final double scrollPosition;
- final double maxScrollExtent;
- final double visibleHeight;
-
- CustomScrollNotification(
- this.scrollPosition, this.maxScrollExtent, this.visibleHeight);
-}
-
-class _BracketsPageState extends State {
- int _prevColumnIndex = 0;
- late List _scrollControllers;
-
- @override
- void initState() {
- super.initState();
- _scrollControllers =
- List.generate(widget.data.length, (index) => ScrollController());
- }
-
- void _onPageChanged(int index) async {
- _scrollControllers[index].animateTo(0.0,
- duration: const Duration(milliseconds: 600), curve: Curves.decelerate);
- _scrollControllers[index].animateTo(0.1,
- duration: const Duration(milliseconds: 10), curve: Curves.decelerate);
-
- setState(() {
- _prevColumnIndex = index;
- });
- }
-
- @override
- void dispose() {
- for (var controller in _scrollControllers) {
- controller.dispose();
- }
- super.dispose();
- }
-
- @override
- Widget build(BuildContext context) {
- return NotificationListener(
- onNotification: (CustomScrollNotification notification) {
- int currentPage = widget.pageController.page?.round() ?? 0;
- _scrollControllers[currentPage + 1].jumpTo(notification.scrollPosition);
- return true;
- },
- child: PageView.builder(
- padEnds: false,
- controller: widget.pageController,
- itemCount: widget.data.length,
- onPageChanged: _onPageChanged,
- itemBuilder: (context, columnIndex) {
- return BracketsColumnPage(
- controller: widget.controller,
- roundData: widget.data[columnIndex],
- columnIndex: columnIndex,
- prevColumnIndex: _prevColumnIndex,
- totalColumns: widget.data.length,
- scrollController: _scrollControllers[columnIndex],
- );
- },
- ),
- );
- }
-}
-
-class BracketsColumnPage extends StatefulWidget {
- final RoundData roundData;
- final int columnIndex;
- final int prevColumnIndex;
- final int totalColumns;
- final BracketController controller;
- final ScrollController scrollController;
-
- const BracketsColumnPage({
- super.key,
- required this.roundData,
- required this.columnIndex,
- required this.prevColumnIndex,
- required this.totalColumns,
- required this.controller,
- required this.scrollController,
- });
-
- @override
- State createState() => _BracketsColumnPageState();
-}
-
-class _BracketsColumnPageState extends State {
- late double matchCardHeight;
- List computedMatches = [];
-
- @override
- void initState() {
- computedMatches = widget.roundData.localScope.dataContext
- .eval(widget.roundData.matches.data);
- matchCardHeight = widget.roundData.matches.height;
- super.initState();
- }
-
- @override
- Widget build(BuildContext context) {
- bool isNextColumn = widget.columnIndex == widget.prevColumnIndex + 1;
-
- return NotificationListener(
- onNotification: (ScrollNotification notification) {
- if (notification is ScrollUpdateNotification) {
- double visibleHeight = notification.metrics.viewportDimension;
- CustomScrollNotification(
- notification.metrics.pixels,
- notification.metrics.maxScrollExtent,
- visibleHeight,
- ).dispatch(context);
- }
- return true;
- },
- child: SingleChildScrollView(
- scrollDirection: Axis.vertical,
- physics: const ClampingScrollPhysics(),
- controller: widget.scrollController,
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- ...computedMatches.asMap().entries.map((entry) {
- final matchIndex = entry.key;
- final matchData = entry.value;
-
- double topOffset = 0;
- if (widget.prevColumnIndex < widget.columnIndex) {
- topOffset = topOffset + (matchCardHeight / 2);
- if (matchIndex > 0) {
- topOffset = topOffset + matchCardHeight / 2;
- }
- }
-
- widget.roundData.localScope.dataContext
- .addDataContextById(widget.roundData.matches.name, matchData);
-
- final cellWidget = widget.roundData.localScope
- .buildWidgetFromDefinition(widget.roundData.matches.template);
- return AnimatedContainer(
- height: matchCardHeight,
- width: MediaQuery.of(context).size.width * 0.6,
- duration: const Duration(milliseconds: 300),
- margin: EdgeInsets.only(
- top: topOffset, left: !isNextColumn ? 0 : 15),
- child: CustomPaint(
- painter: BracketPainter(
- isTopBracket: widget.columnIndex + 1 == widget.totalColumns
- ? null
- : !(matchIndex % 2 == 0),
- showLeftBorder: widget.prevColumnIndex < widget.columnIndex,
- lineColor: widget.controller.lineColor ?? Colors.black,
- borderColor: widget.controller.borderColor ?? Colors.black,
- lineWidth: widget.controller.lineWidth ?? 2.0,
- borderWidth:
- widget.controller.borderWidth?.toDouble() ?? 2.0,
- ),
- child: Padding(
- padding: const EdgeInsets.all(2.0),
- child: cellWidget,
- ),
- ),
- );
- }),
- if (isNextColumn) SizedBox(height: matchCardHeight),
- ],
- ),
- ),
- );
- }
-}
-
-class BracketPainter extends CustomPainter {
- final bool? isTopBracket;
- final bool showLeftBorder;
- final Color lineColor;
- final double lineWidth;
- final Color borderColor;
- final double borderWidth;
-
- BracketPainter({
- this.isTopBracket,
- required this.showLeftBorder,
- this.lineColor = Colors.black,
- this.lineWidth = 2.0,
- this.borderColor = Colors.black,
- this.borderWidth = 2.0,
- });
-
- @override
- void paint(Canvas canvas, Size size) {
- final borderPaint = Paint()
- ..color = borderColor
- ..strokeWidth = borderWidth
- ..style = PaintingStyle.stroke;
-
- final linePaint = Paint()
- ..color = lineColor
- ..strokeWidth = lineWidth
- ..style = PaintingStyle.stroke;
-
- final rect = Rect.fromLTWH(0, 0, size.width, size.height);
- canvas.drawRect(rect, borderPaint);
-
- if (isTopBracket != null) {
- final startPoint = Offset(size.width, size.height / 2);
- final endPoint = Offset(size.width + 25, size.height / 2);
- canvas.drawLine(startPoint, endPoint, linePaint);
-
- const double verticalLength = 40;
- final verticalStartPoint = endPoint;
- final verticalEndPoint = isTopBracket!
- ? Offset(endPoint.dx, endPoint.dy - verticalLength)
- : Offset(endPoint.dx, endPoint.dy + verticalLength);
- canvas.drawLine(verticalStartPoint, verticalEndPoint, linePaint);
- }
- if (showLeftBorder) {
- final leftStartPoint = Offset(0, size.height / 2);
- final leftEndPoint = Offset(-25, size.height / 2);
- canvas.drawLine(leftStartPoint, leftEndPoint, linePaint);
- }
- }
-
- @override
- bool shouldRepaint(covariant CustomPainter oldDelegate) {
- return false;
- }
-}
+// ignore_for_file: avoid_print
+
+import 'package:ensemble/framework/device.dart';
+import 'package:ensemble/framework/ensemble_widget.dart';
+import 'package:ensemble/framework/model.dart';
+import 'package:ensemble/framework/scope.dart';
+import 'package:ensemble/framework/stub/ensemble_bracket.dart';
+import 'package:ensemble/framework/theme/theme_loader.dart';
+import 'package:ensemble/framework/tv/tv_focus_order.dart';
+import 'package:ensemble/framework/tv/tv_focus_provider.dart';
+import 'package:ensemble/framework/tv/tv_focus_widget.dart';
+import 'package:ensemble/framework/view/data_scope_widget.dart';
+import 'package:ensemble/layout/templated.dart';
+import 'package:ensemble/model/item_template.dart';
+import 'package:ensemble/util/utils.dart';
+import 'package:ensemble/widget/helpers/controllers.dart';
+import 'package:flutter/foundation.dart' show ValueListenable, ValueNotifier;
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+
+/// Implementation of the tournament bracket widget for Ensemble.
+class EnsembleBracketImpl extends EnsembleWidget
+ implements EnsembleBracket {
+ const EnsembleBracketImpl._(super.controller);
+
+ /// Factory constructor to build the [EnsembleBracketImpl] widget.
+ factory EnsembleBracketImpl.build([dynamic controller]) =>
+ EnsembleBracketImpl._(
+ controller is BracketController ? controller : BracketController());
+
+ @override
+ State createState() => BracketState();
+}
+
+/// Template representing a round in the tournament bracket.
+class RoundTemplate extends ItemTemplate {
+ /// The title of the round.
+ final String? title;
+
+ /// The matches within the round.
+ final MatchTemplate matches;
+
+ /// Creates a [RoundTemplate].
+ RoundTemplate({
+ required String? data,
+ required String name,
+ dynamic template,
+ required this.title,
+ required this.matches,
+ }) : super(data, name, template);
+}
+
+/// Template representing a match within a round.
+class MatchTemplate extends ItemTemplate {
+ /// The height of the match container.
+ final double height;
+
+ /// Creates a [MatchTemplate].
+ MatchTemplate(super.data, super.name, super.template, this.height);
+}
+
+/// Data object containing resolved information for a round.
+class RoundData {
+ /// The title of the round.
+ final String title;
+
+ /// The match template configuration.
+ final MatchTemplate matches;
+
+ /// The local scope manager for evaluated variables in the round.
+ final ScopeManager localScope;
+
+ /// Creates a [RoundData] object.
+ RoundData({
+ required this.title,
+ required this.matches,
+ required this.localScope,
+ });
+}
+
+/// Controller managing styling and properties of the [EnsembleBracketImpl] widget.
+class BracketController extends EnsembleBoxController {
+ /// Padding for the bracket tabs.
+ EdgeInsets? tabPadding;
+
+ /// Gap between tabs.
+ double tabGap = 12;
+
+ /// Leading inset inside every round page.
+ double? leftEdgePadding;
+
+ /// Trailing inset applied only to the final round page.
+ double? rightEdgePadding;
+
+ /// Symmetric inset for the round-title strip.
+ double headerPadding = 0;
+
+ /// Creates a [BracketController].
+ BracketController();
+
+ RoundTemplate? roundTemplate;
+ Color? lineColor;
+ double? lineWidth;
+
+ Color? tabBackgroundColor;
+ Color? tabSelectedBackgroundColor;
+ TextStyle? tabTextStyle;
+ TextStyle? tabSelectedStyle;
+ EBorderRadius? tabBorderRadius;
+ Color? tabBorderColor;
+ double? tabBorderWidth;
+ Color? tabSelectedBorderColor;
+ double? tabSelectedBorderWidth;
+
+ // Tab focus styling (TV D-pad)
+ Color? tabFocusColor;
+ double? tabFocusBorderWidth;
+ EBorderRadius? tabFocusBorderRadius;
+ int? tabFocusAnimationDurationMs;
+ Color? tabFocusBackgroundColor;
+ TextStyle? tabFocusTextStyle;
+
+ // TV navigation row offset - tabs will be at this row, matches at row+1, row+2, etc.
+ int tvRowOffset = 0;
+
+ // Layout scale (0.1 - 1.0). Baseline 0.75 = current defaults.
+ // Controls viewportFraction, matchCardWidthFraction, and connectorLength proportionally.
+ double? _scale;
+
+ // Computed layout values based on scale.
+ // Baseline: scale=0.75 → viewportFraction=0.75, cardWidth=0.6, connector=25
+ double get viewportFraction => _scale ?? 0.75;
+ double get matchCardWidthFraction =>
+ _scale != null ? 0.6 * (_scale! / 0.75) : 0.6;
+ double get connectorLength => _scale != null ? 25.0 * (_scale! / 0.75) : 25.0;
+
+ @override
+ List passthroughSetters() => ['items'];
+
+ @override
+ Map getters() {
+ return {};
+ }
+
+ @override
+ Map methods() {
+ return {};
+ }
+
+ @override
+ Map setters() => Map.from(super.setters())
+ ..addAll({
+ 'scale': (value) {
+ final parsed = Utils.optionalDouble(value);
+ if (parsed != null) {
+ _scale = parsed.clamp(0.1, 1.0);
+ }
+ },
+ 'tvOptions': (data) {
+ if (data is Map) {
+ tvRowOffset = Utils.getInt(data['row'], fallback: 0);
+ }
+ },
+ 'leftEdgePadding': (value) {
+ leftEdgePadding = (Utils.optionalDouble(value) ?? 0)
+ .clamp(0, double.infinity)
+ .toDouble();
+ },
+ 'rightEdgePadding': (value) {
+ rightEdgePadding = (Utils.optionalDouble(value) ?? 0)
+ .clamp(0, double.infinity)
+ .toDouble();
+ },
+ 'headerPadding': (value) {
+ headerPadding = (Utils.optionalDouble(value) ?? 0)
+ .clamp(0, double.infinity)
+ .toDouble();
+ },
+ 'lineStyles': (data) {
+ lineColor = Utils.getColor(data['color']);
+ lineWidth = Utils.optionalDouble(data['width']);
+ },
+ 'tabStyles': (data) {
+ tabBackgroundColor = Utils.getColor(data['backgroundColor']);
+ tabSelectedBackgroundColor =
+ Utils.getColor(data['selectedBackgroundColor']);
+ tabTextStyle = Utils.getTextStyle(data['textStyle']);
+ tabSelectedStyle = Utils.getTextStyle(data['selectedTextStyle']);
+ tabBorderRadius = Utils.getBorderRadius(data['borderRadius']);
+ tabBorderColor = Utils.getColor(data['borderColor']);
+ tabBorderWidth = Utils.optionalDouble(data['borderWidth']);
+ tabSelectedBorderColor = Utils.getColor(data['selectedBorderColor']);
+ tabSelectedBorderWidth =
+ Utils.optionalDouble(data['selectedBorderWidth']);
+ tabPadding = Utils.optionalInsets(data['padding']);
+ tabGap = Utils.getDouble(data['gap'], fallback: 12.0);
+ tabFocusColor = Utils.getColor(data['focusBorderColor']);
+ tabFocusBorderWidth = Utils.optionalDouble(data['focusBorderWidth']);
+ tabFocusBorderRadius = Utils.getBorderRadius(data['focusBorderRadius']);
+ tabFocusAnimationDurationMs =
+ Utils.optionalInt(data['focusAnimationDurationMs']);
+ tabFocusBackgroundColor = Utils.getColor(data['focusBackgroundColor']);
+ tabFocusTextStyle = Utils.getTextStyle(data['focusTextStyle']);
+ },
+ 'items': (data) {
+ if (!_isValidData(data)) return;
+
+ roundTemplate = RoundTemplate(
+ data: Utils.optionalString(data['data']),
+ name: Utils.optionalString(data['name']) ?? 'round',
+ title: Utils.optionalString(data['title']),
+ matches: MatchTemplate(
+ Utils.optionalString(data['item-template']['data']),
+ Utils.optionalString(data['item-template']['name']) ?? 'match',
+ data['item-template']['template'],
+ Utils.getDouble(
+ data['item-template']['height'],
+ fallback: 100,
+ )),
+ );
+ }
+ });
+
+ bool _isValidData(dynamic data) {
+ if (data is! Map) {
+ print('Bracket: Invalid items');
+ return false;
+ }
+ if (data['data'] == null || data['name'] == null) {
+ print('Bracket: data and name are required');
+ return false;
+ }
+ if (data['item-template'] == null) {
+ print('Bracket: item-template is required');
+ return false;
+ }
+ return true;
+ }
+}
+
+class BracketState extends EnsembleWidgetState
+ with TemplatedWidgetState {
+ List roundData = [];
+
+ @override
+ void didChangeDependencies() {
+ _registerRowSpanListener(context);
+ super.didChangeDependencies();
+ }
+
+ List _buildRoundConfig(BuildContext context, List dataList) {
+ List roundDataConfig = [];
+
+ RoundTemplate? itemTemplate = widget.controller.roundTemplate;
+ ScopeManager? myScope = DataScopeWidget.getScope(context);
+ if (myScope != null && itemTemplate != null) {
+ for (int i = 0; i < dataList.length; i++) {
+ dynamic dataItem = dataList[i];
+ ScopeManager dataScope = myScope.createChildScope();
+ dataScope.dataContext.addDataContextById(itemTemplate.name, dataItem);
+ // Add roundIndex to scope for TV navigation (tvOptions.order: ${roundIndex})
+ dataScope.dataContext.addDataContextById('roundIndex', i);
+
+ roundDataConfig.add(
+ RoundData(
+ title: Utils.getString(
+ dataScope.dataContext.eval(itemTemplate.title),
+ fallback: '--',
+ ),
+ matches: itemTemplate.matches,
+ localScope: dataScope,
+ ),
+ );
+ }
+ }
+ return roundDataConfig;
+ }
+
+ void _registerRowSpanListener(BuildContext context) {
+ if (widget.controller.roundTemplate != null) {
+ registerItemTemplate(context, widget.controller.roundTemplate!,
+ onDataChanged: (dataList) {
+ if (dataList is List) {
+ roundData = _buildRoundConfig(context, dataList);
+ setState(() {});
+ }
+ });
+ }
+ }
+
+ @override
+ Widget buildWidget(BuildContext context) {
+ return BracketsView(
+ controller: widget.controller,
+ data: roundData,
+ tvRowOffset: widget.controller.tvRowOffset,
+ );
+ }
+}
+
+class BracketsView extends StatefulWidget {
+ final List data;
+ final BracketController controller;
+ final int tvRowOffset;
+
+ const BracketsView({
+ super.key,
+ required this.data,
+ required this.controller,
+ this.tvRowOffset = 0,
+ });
+
+ @override
+ State createState() => _BracketsViewState();
+}
+
+class _BracketsViewState extends State {
+ late PageController _pageController;
+ int _currentPageIndex = 0;
+ // Target page controls column expansion.
+ int _prevColumnIndex = 0;
+ List _tabKeys = [];
+ // Prevents child focus handling from scrolling horizontally.
+ final _bracketTVFocusProvider = _BracketTVFocusProvider();
+
+ @override
+ void initState() {
+ super.initState();
+ _pageController = PageController(
+ viewportFraction: widget.controller.viewportFraction,
+ );
+ _pageController.addListener(_updatePageIndex);
+ }
+
+ @override
+ void didUpdateWidget(covariant BracketsView oldWidget) {
+ super.didUpdateWidget(oldWidget);
+ _syncTabKeys();
+ // Recreate PageController if viewportFraction changed
+ if (oldWidget.controller.viewportFraction !=
+ widget.controller.viewportFraction) {
+ final currentPage = _pageController.page?.round() ?? 0;
+ _pageController.removeListener(_updatePageIndex);
+ _pageController.dispose();
+ _pageController = PageController(
+ viewportFraction: widget.controller.viewportFraction,
+ initialPage: currentPage,
+ );
+ _pageController.addListener(_updatePageIndex);
+ }
+ }
+
+ @override
+ void didChangeDependencies() {
+ super.didChangeDependencies();
+ _syncTabKeys();
+ }
+
+ // Regenerate tab keys when the round count changes.
+ void _syncTabKeys() {
+ if (_tabKeys.length != widget.data.length) {
+ _tabKeys =
+ List.generate(widget.data.length, (index) => GlobalKey());
+ }
+ }
+
+ void _updatePageIndex() {
+ int newPage = _pageController.page!.round();
+ if (newPage != _currentPageIndex) {
+ setState(() {
+ _currentPageIndex = newPage;
+ // On mobile, a horizontal swipe changes the page but not the reference
+ // lane used for column spacing (_prevColumnIndex). Sync it here so tiles
+ // realign after a swipe exactly as they do after a tab tap. TV drives
+ // _prevColumnIndex via the keyboard-navigation callback instead.
+ if (!Device().isTV) {
+ _prevColumnIndex = newPage;
+ }
+ });
+ }
+ _scrollToSelectedTab(newPage);
+ }
+
+ void _scrollToSelectedTab(int index) {
+ if (index < _tabKeys.length) {
+ final context = _tabKeys[index].currentContext;
+ if (context != null) {
+ Scrollable.ensureVisible(
+ context,
+ duration: const Duration(milliseconds: 300),
+ alignment: 0.5,
+ );
+ }
+ }
+ }
+
+ void _animateToPage(int index) {
+ // Update _prevColumnIndex BEFORE animation to trigger column expansion
+ setState(() {
+ _prevColumnIndex = index;
+ });
+ _pageController.animateToPage(
+ index,
+ duration: const Duration(milliseconds: 300),
+ curve: Curves.easeInOut,
+ );
+ }
+
+ @override
+ void dispose() {
+ _pageController.removeListener(_updatePageIndex);
+ _pageController.dispose();
+ super.dispose();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ Widget content = Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ if (_tabKeys.isNotEmpty)
+ SingleChildScrollView(
+ padding: EdgeInsets.symmetric(
+ horizontal: widget.controller.headerPadding,
+ ),
+ scrollDirection: Axis.horizontal,
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: List.generate(widget.data.length, (index) {
+ // On TV, tab selection follows _prevColumnIndex — the true
+ // navigation target — because _pageController.page (which drives
+ // _currentPageIndex) clamps on the last pages with padEnds:false,
+ // so the final tab would never register as selected. Mobile keeps
+ // _currentPageIndex since swipes update it directly.
+ bool isSelected = index ==
+ (Device().isTV ? _prevColumnIndex : _currentPageIndex);
+ String? title = widget.data.elementAt(index).title;
+
+ // Wrap with TVFocusWidget for D-pad navigation on TV
+ if (Device().isTV) {
+ return _buildTVTabButton(
+ context,
+ index: index,
+ title: title,
+ isSelected: isSelected,
+ );
+ }
+
+ final Color? mobileBorderColor = isSelected
+ ? (widget.controller.tabSelectedBorderColor ??
+ widget.controller.tabBorderColor)
+ : widget.controller.tabBorderColor;
+ final double mobileBorderWidth = isSelected
+ ? (widget.controller.tabSelectedBorderWidth ??
+ widget.controller.tabBorderWidth ??
+ 1.0)
+ : (widget.controller.tabBorderWidth ?? 1.0);
+
+ return Container(
+ padding: EdgeInsets.only(left: widget.controller.tabGap),
+ child: ElevatedButton(
+ key: _tabKeys[index],
+ onPressed: () {
+ _animateToPage(index);
+ _scrollToSelectedTab(index);
+ },
+ style: ElevatedButton.styleFrom(
+ padding: widget.controller.tabPadding,
+ // Draw a resting border only when a border color is set, so
+ // apps that never set it keep their previous look.
+ shape: (widget.controller.tabBorderRadius != null ||
+ mobileBorderColor != null)
+ ? RoundedRectangleBorder(
+ borderRadius: widget.controller.tabBorderRadius
+ ?.getValue() ??
+ BorderRadius.zero,
+ side: mobileBorderColor != null
+ ? BorderSide(
+ color: mobileBorderColor,
+ width: mobileBorderWidth,
+ )
+ : BorderSide.none,
+ )
+ : null,
+ backgroundColor: isSelected
+ ? widget.controller.tabSelectedBackgroundColor
+ : widget.controller.tabBackgroundColor,
+ ),
+ child: Text(
+ title,
+ style: isSelected
+ ? widget.controller.tabSelectedStyle
+ : widget.controller.tabTextStyle,
+ ),
+ ),
+ );
+ }),
+ ),
+ ),
+ Expanded(
+ // Wrap with TVFocusProviderScope to tell child widgets that
+ // the bracket handles horizontal scrolling via PageView.
+ // This prevents box_wrapper from calling Scrollable.ensureVisible()
+ // which would cause horizontal jerk when navigating UP/DOWN.
+ child: Device().isTV
+ ? TVFocusProviderScope(
+ provider: _bracketTVFocusProvider,
+ child: BracketsPage(
+ controller: widget.controller,
+ pageController: _pageController,
+ data: widget.data,
+ tvRowOffset: widget.tvRowOffset,
+ prevColumnIndex: _prevColumnIndex,
+ onPrevColumnIndexChanged: (index) {
+ setState(() {
+ _prevColumnIndex = index;
+ });
+ _scrollToSelectedTab(index);
+ },
+ ),
+ )
+ : BracketsPage(
+ controller: widget.controller,
+ pageController: _pageController,
+ data: widget.data,
+ tvRowOffset: widget.tvRowOffset,
+ prevColumnIndex: _prevColumnIndex,
+ onPrevColumnIndexChanged: (index) {
+ setState(() {
+ _prevColumnIndex = index;
+ });
+ },
+ ),
+ ),
+ ],
+ );
+
+ // NOTE: We no longer wrap with FocusTraversalGroup here because:
+ // 1. The outer View already has a FocusTraversalGroup with TVFocusOrderTraversalPolicy
+ // 2. Nested FocusTraversalGroups isolate focus, preventing navigation from header (BackArrow) to bracket
+ // The outer View's FocusTraversalGroup handles all TV navigation using row/order from tvOptions.
+
+ return content;
+ }
+
+ /// Build a TV-focusable tab button with focus styling
+ Widget _buildTVTabButton(
+ BuildContext context, {
+ required int index,
+ required String title,
+ required bool isSelected,
+ }) {
+ return _TVTabButton(
+ tabKey: _tabKeys[index],
+ index: index,
+ title: title,
+ isSelected: isSelected,
+ controller: widget.controller,
+ tvRowOffset: widget.tvRowOffset,
+ onPressed: () {
+ _animateToPage(index);
+ _scrollToSelectedTab(index);
+ },
+ );
+ }
+}
+
+/// Stateful TV tab button that can track its own focus state
+class _TVTabButton extends StatefulWidget {
+ final GlobalKey tabKey;
+ final int index;
+ final String title;
+ final bool isSelected;
+ final BracketController controller;
+ final int tvRowOffset;
+ final VoidCallback onPressed;
+
+ const _TVTabButton({
+ required this.tabKey,
+ required this.index,
+ required this.title,
+ required this.isSelected,
+ required this.controller,
+ required this.tvRowOffset,
+ required this.onPressed,
+ });
+
+ @override
+ State<_TVTabButton> createState() => _TVTabButtonState();
+}
+
+class _TVTabButtonState extends State<_TVTabButton> {
+ bool _isFocused = false;
+
+ @override
+ Widget build(BuildContext context) {
+ final theme = Theme.of(context);
+ final themeExtension = theme.extension();
+ final tvFocusTheme = themeExtension?.tvFocusTheme;
+ final appPrimaryColor = theme.colorScheme.primary;
+ final externalProvider = TVFocusProviderScope.maybeOf(context);
+
+ // Priority: focusBorderColor > Theme > provider > borderColor > app primary
+ final focusBorderColor = widget.controller.tabFocusColor ??
+ tvFocusTheme?.focusBorderColor ??
+ externalProvider?.focusBorderColor ??
+ widget.controller.tabBorderColor ??
+ appPrimaryColor;
+ // Priority: focusBorderWidth > Theme > provider > borderWidth > default (2.0)
+ final focusBorderWidth = widget.controller.tabFocusBorderWidth ??
+ tvFocusTheme?.focusBorderWidth ??
+ externalProvider?.focusBorderWidth ??
+ widget.controller.tabBorderWidth ??
+ 2.0;
+ // Priority: focusBorderRadius > Theme > provider > borderRadius > default (8.0)
+ final borderRadius = widget.controller.tabFocusBorderRadius?.getValue() ??
+ (tvFocusTheme?.focusBorderRadius != null
+ ? BorderRadius.circular(tvFocusTheme!.focusBorderRadius!)
+ : null) ??
+ (externalProvider?.focusBorderRadius != null
+ ? BorderRadius.circular(externalProvider!.focusBorderRadius!)
+ : null) ??
+ widget.controller.tabBorderRadius?.getValue() ??
+ BorderRadius.circular(8);
+
+ // Determine background color based on focus and selection state
+ // Priority: focused > selected > default
+ Color? backgroundColor;
+ if (_isFocused && widget.controller.tabFocusBackgroundColor != null) {
+ backgroundColor = widget.controller.tabFocusBackgroundColor;
+ } else if (widget.isSelected) {
+ backgroundColor = widget.controller.tabSelectedBackgroundColor;
+ } else {
+ backgroundColor = widget.controller.tabBackgroundColor;
+ }
+
+ // Determine text style based on focus and selection state
+ // Priority: focused > selected > default
+ TextStyle? textStyle;
+ if (_isFocused && widget.controller.tabFocusTextStyle != null) {
+ textStyle = widget.controller.tabFocusTextStyle;
+ } else if (widget.isSelected) {
+ textStyle = widget.controller.tabSelectedStyle;
+ } else {
+ textStyle = widget.controller.tabTextStyle;
+ }
+
+ // Resting-state border comes from the base tabStyles (borderColor/
+ // borderWidth); focus overrides it. A border is always painted
+ // (transparent + focus width when unset) to prevent size jerk on focus.
+ // Selected tab may override the base border; priority focused > selected > normal.
+ final restingBorderColor = widget.isSelected
+ ? (widget.controller.tabSelectedBorderColor ??
+ widget.controller.tabBorderColor ??
+ Colors.transparent)
+ : (widget.controller.tabBorderColor ?? Colors.transparent);
+ final restingBorderWidth = widget.isSelected
+ ? (widget.controller.tabSelectedBorderWidth ??
+ widget.controller.tabBorderWidth ??
+ focusBorderWidth)
+ : (widget.controller.tabBorderWidth ?? focusBorderWidth);
+ final borderColor = _isFocused ? focusBorderColor : restingBorderColor;
+ final borderWidth = _isFocused ? focusBorderWidth : restingBorderWidth;
+
+ return TVFocusWidget(
+ focusOrder: TVFocusOrder.withOptions(
+ widget.tvRowOffset.toDouble(), // Tab row from tvOptions
+ order: widget.index.toDouble(),
+ isRowEntryPoint: widget.isSelected, // Selected tab is entry point
+ ),
+ child: Container(
+ padding: EdgeInsets.only(left: widget.controller.tabGap),
+ child: Focus(
+ onFocusChange: (hasFocus) {
+ setState(() {
+ _isFocused = hasFocus;
+ });
+ },
+ child: ElevatedButton(
+ key: widget.tabKey,
+ onPressed: widget.onPressed,
+ style: ElevatedButton.styleFrom(
+ padding: widget.controller.tabPadding,
+ backgroundColor: backgroundColor,
+ // Disable Material focus/hover overlay to only show our custom border
+ overlayColor: Colors.transparent,
+ surfaceTintColor: Colors.transparent,
+ shadowColor: Colors.transparent,
+ shape: RoundedRectangleBorder(
+ borderRadius: borderRadius,
+ side: BorderSide(
+ color: borderColor,
+ width: borderWidth,
+ ),
+ ),
+ ),
+ child: Text(
+ widget.title,
+ style: textStyle,
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+}
+
+class BracketsPage extends StatefulWidget {
+ final List data;
+ final PageController pageController;
+ final BracketController controller;
+ final int tvRowOffset;
+ final int prevColumnIndex;
+ final ValueChanged? onPrevColumnIndexChanged;
+
+ const BracketsPage({
+ super.key,
+ required this.data,
+ required this.pageController,
+ required this.controller,
+ this.tvRowOffset = 0,
+ this.prevColumnIndex = 0,
+ this.onPrevColumnIndexChanged,
+ });
+
+ @override
+ State createState() => _BracketsPageState();
+}
+
+class _BracketsPageState extends State
+ with SingleTickerProviderStateMixin {
+ late List _scrollControllers;
+
+ // Own the FocusScope that wraps this bracket's pages so navigation can search
+ // ONLY this bracket's focus subtree. A previous BracketView still mounted lower
+ // in the navigator stack has its own duplicate column tiles in the global focus
+ // tree; scanning globally can focus those off-screen ghosts (no visible ring).
+ final FocusScopeNode _pageScopeNode =
+ FocusScopeNode(debugLabel: 'BracketPageScope');
+ final Map<_BracketMatchKey, FocusScopeNode> _matchFocusScopes = {};
+
+ bool _scrollSyncScheduled = false;
+ bool _isSynchronizingScrolls = false;
+ int? _pendingScrollSyncColumn;
+ bool _isHorizontalTransitioning = false;
+ int _focusRequestGeneration = 0;
+ double _logicalScrollOffset = 0;
+ _BracketMatchKey? _focusedMatch;
+ late int _activeColumnIndex;
+ late final ValueNotifier<_BracketLayoutState> _layoutStateNotifier;
+ late final AnimationController _layoutAnimationController;
+
+ @override
+ void initState() {
+ super.initState();
+ _activeColumnIndex = widget.prevColumnIndex;
+ _layoutStateNotifier = ValueNotifier(
+ _BracketLayoutState.stationary(widget.prevColumnIndex),
+ );
+ _layoutAnimationController = AnimationController(
+ vsync: this,
+ duration: const Duration(milliseconds: 280),
+ )..addListener(_onLayoutAnimationTick);
+ _scrollControllers =
+ List.generate(widget.data.length, (index) => ScrollController());
+ }
+
+ @override
+ void didUpdateWidget(covariant BracketsPage oldWidget) {
+ super.didUpdateWidget(oldWidget);
+ if (!_isHorizontalTransitioning &&
+ oldWidget.prevColumnIndex != widget.prevColumnIndex) {
+ _activeColumnIndex = widget.prevColumnIndex;
+ }
+ if (oldWidget.prevColumnIndex != widget.prevColumnIndex &&
+ !_isHorizontalTransitioning) {
+ _animateLayoutTo(widget.prevColumnIndex);
+ }
+ if (oldWidget.data.length != widget.data.length) {
+ _resizeScrollControllers();
+ if (widget.data.isNotEmpty && _activeColumnIndex >= widget.data.length) {
+ _activeColumnIndex = widget.data.length - 1;
+ }
+ }
+ }
+
+ void _resizeScrollControllers() {
+ final oldControllers = _scrollControllers;
+ final retainedCount = oldControllers.length < widget.data.length
+ ? oldControllers.length
+ : widget.data.length;
+ final newControllers = [
+ for (var i = 0; i < retainedCount; i++) oldControllers[i],
+ for (var i = retainedCount; i < widget.data.length; i++)
+ ScrollController(),
+ ];
+ for (var i = widget.data.length; i < oldControllers.length; i++) {
+ oldControllers[i].dispose();
+ }
+ _scrollControllers = newControllers;
+ }
+
+ void _onPageChanged(int columnIndex) {
+ // Synchronize only the newly selected column.
+ _scheduleScrollSync(columnIndex);
+ }
+
+ int _matchCount(int columnIndex) {
+ final matches = widget.data[columnIndex].localScope.dataContext
+ .eval(widget.data[columnIndex].matches.data);
+ return (matches as List?)?.length ?? 0;
+ }
+
+ double _slotExtent(int columnIndex) {
+ return widget.data[columnIndex].matches.height *
+ _layoutStateNotifier.value.multiplierFor(columnIndex);
+ }
+
+ void _onLayoutAnimationTick() {
+ final state = _layoutStateNotifier.value;
+ _layoutStateNotifier.value = state.copyWith(
+ progress:
+ Curves.easeInOutCubic.transform(_layoutAnimationController.value),
+ );
+ }
+
+ void _animateLayoutTo(int targetColumn, {VoidCallback? onComplete}) {
+ final current = _layoutStateNotifier.value;
+ if (current.toColumnIndex == targetColumn && current.progress == 1) {
+ onComplete?.call();
+ return;
+ }
+ _layoutStateNotifier.value = _BracketLayoutState(
+ fromColumnIndex: current.toColumnIndex,
+ toColumnIndex: targetColumn,
+ progress: 0,
+ );
+ _layoutAnimationController.forward(from: 0).whenComplete(() {
+ if (mounted) onComplete?.call();
+ });
+ }
+
+ void _registerMatchFocus(_BracketMatchKey key, FocusScopeNode node) {
+ _matchFocusScopes[key] = node;
+ }
+
+ void _unregisterMatchFocus(_BracketMatchKey key, FocusScopeNode node) {
+ if (identical(_matchFocusScopes[key], node)) {
+ _matchFocusScopes.remove(key);
+ }
+ }
+
+ void _scheduleScrollSync(int columnIndex) {
+ if (!mounted ||
+ columnIndex < 0 ||
+ columnIndex >= _scrollControllers.length) {
+ return;
+ }
+ _pendingScrollSyncColumn = columnIndex;
+ if (_scrollSyncScheduled) return;
+ _scrollSyncScheduled = true;
+ WidgetsBinding.instance.addPostFrameCallback((_) {
+ _scrollSyncScheduled = false;
+ if (!mounted) return;
+ final pendingColumn = _pendingScrollSyncColumn;
+ _pendingScrollSyncColumn = null;
+ if (pendingColumn == null || pendingColumn >= _scrollControllers.length) {
+ return;
+ }
+ final controller = _scrollControllers[pendingColumn];
+ if (!controller.hasClients) return;
+
+ _isSynchronizingScrolls = true;
+ final position = controller.position;
+ final target = _logicalScrollOffset.clamp(
+ position.minScrollExtent,
+ position.maxScrollExtent,
+ );
+ if ((position.pixels - target).abs() > 0.5) {
+ controller.jumpTo(target);
+ }
+ _isSynchronizingScrolls = false;
+ });
+ }
+
+ void _onColumnScroll(int columnIndex, ScrollNotification notification) {
+ if (_isSynchronizingScrolls || notification.metrics.axis != Axis.vertical) {
+ return;
+ }
+ if (notification is ScrollUpdateNotification ||
+ notification is ScrollEndNotification) {
+ _logicalScrollOffset = notification.metrics.pixels;
+ if (notification is ScrollUpdateNotification) {
+ // Keep every other column's vertical position in sync live, while
+ // dragging - not just once a page change lands. Matches the
+ // partially-visible neighbor column(s) to the active column's
+ // scroll in real time so connector lines/match rows don't desync
+ // mid-drag.
+ _syncOtherColumns(excluding: columnIndex);
+ }
+ }
+ }
+
+ void _syncOtherColumns({required int excluding}) {
+ _isSynchronizingScrolls = true;
+ // Sync ALL other columns, not just the adjacent one - this ensures e.g.
+ // Semi Finals and Final scroll with 8th Finals and Quarter Finals, so
+ // none of them are out of alignment by the time you page onto them.
+ for (var i = 0; i < _scrollControllers.length; i++) {
+ if (i == excluding) continue;
+ final controller = _scrollControllers[i];
+ if (!controller.hasClients) continue;
+ final position = controller.position;
+ final target = _logicalScrollOffset.clamp(
+ position.minScrollExtent,
+ position.maxScrollExtent,
+ );
+ if ((position.pixels - target).abs() > 0.5) {
+ controller.jumpTo(target);
+ }
+ }
+ _isSynchronizingScrolls = false;
+ }
+
+ void _requestFocusWhenMounted(
+ _BracketMatchKey key,
+ int requestGeneration, [
+ int attempt = 0,
+ ]) {
+ WidgetsBinding.instance.addPostFrameCallback((_) {
+ if (!mounted || requestGeneration != _focusRequestGeneration) return;
+ final scope = _matchFocusScopes[key];
+ if (scope == null || scope.context == null) {
+ if (attempt < 4) {
+ _requestFocusWhenMounted(key, requestGeneration, attempt + 1);
+ }
+ return;
+ }
+
+ if (scope.hasFocus) {
+ _focusedMatch = key;
+ return;
+ }
+
+ FocusNode? target;
+ for (final node in scope.descendants) {
+ if (node != scope && node.canRequestFocus && node.context != null) {
+ target = node;
+ }
+ }
+ (target ?? scope).requestFocus();
+ _focusedMatch = key;
+ });
+ }
+
+ Future _focusMatch(int columnIndex, int requestedMatch) async {
+ // Ignore stale completions from repeated remote events.
+ final requestGeneration = ++_focusRequestGeneration;
+ final count = _matchCount(columnIndex);
+ if (count == 0) return;
+ final matchIndex = requestedMatch.clamp(0, count - 1);
+ final key = _BracketMatchKey(columnIndex, matchIndex);
+ _focusedMatch = key;
+
+ final controller = _scrollControllers[columnIndex];
+ Future? scrollAnimation;
+ if (controller.hasClients) {
+ final position = controller.position;
+ final desiredOffset = (matchIndex * _slotExtent(columnIndex) -
+ position.viewportDimension * 0.35)
+ .clamp(position.minScrollExtent, position.maxScrollExtent);
+ _logicalScrollOffset = desiredOffset;
+ if ((position.pixels - desiredOffset).abs() > 0.5) {
+ scrollAnimation = controller.animateTo(
+ desiredOffset,
+ duration: const Duration(milliseconds: 220),
+ curve: Curves.easeOutCubic,
+ );
+ }
+ }
+
+ // Focus must react to the key event, not wait for the viewport animation.
+ _requestFocusWhenMounted(key, requestGeneration);
+
+ // A card just outside the lazy cache may mount during this scroll. Retry
+ // once the latest request's animation completes in that case.
+ if (scrollAnimation != null) {
+ await scrollAnimation;
+ }
+ if (!mounted || requestGeneration != _focusRequestGeneration) return;
+ _requestFocusWhenMounted(key, requestGeneration);
+ }
+
+ bool _moveVertically(int columnIndex, int matchIndex, int direction) {
+ final activeMatch = _focusedMatch?.columnIndex == columnIndex
+ ? _focusedMatch!.matchIndex
+ : matchIndex;
+ final targetMatch = activeMatch + direction;
+ // Let the outer focus grid handle the column edges.
+ if (targetMatch < 0 || targetMatch >= _matchCount(columnIndex)) {
+ return false;
+ }
+ _focusMatch(columnIndex, targetMatch);
+ return true;
+ }
+
+ @override
+ void dispose() {
+ for (var controller in _scrollControllers) {
+ controller.dispose();
+ }
+ _layoutAnimationController
+ ..removeListener(_onLayoutAnimationTick)
+ ..dispose();
+ _layoutStateNotifier.dispose();
+ _pageScopeNode.dispose();
+ super.dispose();
+ }
+
+ /// Handle LEFT/RIGHT key events to animate PageView.
+ /// Match cards set delegateHorizontalNavigation: true, so horizontal keys bubble up here.
+ KeyEventResult _handleKeyEvent(FocusNode node, KeyEvent event) {
+ if (event is! KeyDownEvent && event is! KeyRepeatEvent) {
+ return KeyEventResult.ignored;
+ }
+
+ if (_isHorizontalTransitioning) return KeyEventResult.handled;
+
+ if (event.logicalKey == LogicalKeyboardKey.arrowRight) {
+ if (_activeColumnIndex < widget.data.length - 1) {
+ _startHorizontalTransition(_activeColumnIndex + 1);
+ return KeyEventResult.handled;
+ }
+ } else if (event.logicalKey == LogicalKeyboardKey.arrowLeft) {
+ if (_activeColumnIndex > 0) {
+ _startHorizontalTransition(_activeColumnIndex - 1);
+ return KeyEventResult.handled;
+ }
+ }
+
+ return KeyEventResult.ignored;
+ }
+
+ /// Changes page and reflows the layout.
+ void _startHorizontalTransition(int targetPage) {
+ final targetMatch = _focusedMatch?.columnIndex == _activeColumnIndex
+ ? _focusedMatch!.matchIndex
+ : 0;
+
+ _isHorizontalTransitioning = true;
+ _activeColumnIndex = targetPage;
+ widget.pageController
+ .animateToPage(targetPage,
+ duration: const Duration(milliseconds: 180), curve: Curves.easeOut)
+ .whenComplete(() {
+ if (!mounted) return;
+ widget.onPrevColumnIndexChanged?.call(targetPage);
+ WidgetsBinding.instance.addPostFrameCallback((_) {
+ if (!mounted) return;
+ _animateLayoutTo(targetPage, onComplete: () {
+ if (!mounted) return;
+ _isHorizontalTransitioning = false;
+ _focusMatch(targetPage, targetMatch);
+ });
+ });
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ Widget pageView = PageView.builder(
+ padEnds: false,
+ controller: widget.pageController,
+ physics: Device().isTV
+ ? const NeverScrollableScrollPhysics()
+ : const PageScrollPhysics(),
+ itemCount: widget.data.length,
+ onPageChanged: _onPageChanged,
+ itemBuilder: (context, columnIndex) {
+ return BracketsColumnPage(
+ controller: widget.controller,
+ roundData: widget.data[columnIndex],
+ columnIndex: columnIndex,
+ prevColumnIndex: widget.prevColumnIndex,
+ totalColumns: widget.data.length,
+ scrollController: _scrollControllers[columnIndex],
+ tvRowOffset: widget.tvRowOffset,
+ leftEdgePadding: widget.controller.leftEdgePadding,
+ rightEdgePadding: widget.controller.rightEdgePadding,
+ layoutState: _layoutStateNotifier,
+ onScrollNotification: _onColumnScroll,
+ registerMatchFocus: _registerMatchFocus,
+ unregisterMatchFocus: _unregisterMatchFocus,
+ onMoveVertical: _moveVertically,
+ onMatchFocused: (key) => _focusedMatch = key,
+ );
+ },
+ );
+
+ // On TV, wrap with FocusScope to catch delegated horizontal key events.
+ // Own the node so navigation can scope its search to this bracket's subtree.
+ if (Device().isTV) {
+ return FocusScope(
+ node: _pageScopeNode,
+ onKeyEvent: _handleKeyEvent,
+ child: pageView,
+ );
+ }
+
+ return pageView;
+ }
+}
+
+class BracketsColumnPage extends StatefulWidget {
+ final RoundData roundData;
+ final int columnIndex;
+ final int prevColumnIndex;
+ final int totalColumns;
+ final BracketController controller;
+ final ScrollController scrollController;
+ final int tvRowOffset;
+ final double? leftEdgePadding;
+ final double? rightEdgePadding;
+ final ValueListenable<_BracketLayoutState> layoutState;
+ final void Function(int columnIndex, ScrollNotification notification)?
+ onScrollNotification;
+ final void Function(_BracketMatchKey key, FocusScopeNode node)?
+ registerMatchFocus;
+ final void Function(_BracketMatchKey key, FocusScopeNode node)?
+ unregisterMatchFocus;
+ final bool Function(int columnIndex, int matchIndex, int direction)?
+ onMoveVertical;
+ final ValueChanged<_BracketMatchKey>? onMatchFocused;
+
+ const BracketsColumnPage({
+ super.key,
+ required this.roundData,
+ required this.columnIndex,
+ required this.prevColumnIndex,
+ required this.totalColumns,
+ required this.controller,
+ required this.scrollController,
+ required this.layoutState,
+ this.tvRowOffset = 0,
+ this.leftEdgePadding,
+ this.rightEdgePadding,
+ this.onScrollNotification,
+ this.registerMatchFocus,
+ this.unregisterMatchFocus,
+ this.onMoveVertical,
+ this.onMatchFocused,
+ });
+
+ @override
+ State createState() => _BracketsColumnPageState();
+}
+
+class _BracketsColumnPageState extends State {
+ late double matchCardHeight;
+ List computedMatches = [];
+ late SliverChildBuilderDelegate _sliverDelegate;
+
+ @override
+ void initState() {
+ computedMatches = widget.roundData.localScope.dataContext
+ .eval(widget.roundData.matches.data);
+ matchCardHeight = widget.roundData.matches.height;
+ _sliverDelegate = _createSliverDelegate();
+ super.initState();
+ }
+
+ @override
+ void didUpdateWidget(covariant BracketsColumnPage oldWidget) {
+ super.didUpdateWidget(oldWidget);
+ if (!identical(widget.roundData, oldWidget.roundData)) {
+ computedMatches = widget.roundData.localScope.dataContext
+ .eval(widget.roundData.matches.data);
+ matchCardHeight = widget.roundData.matches.height;
+ _sliverDelegate = _createSliverDelegate();
+ }
+ }
+
+ SliverChildBuilderDelegate _createSliverDelegate() =>
+ SliverChildBuilderDelegate(
+ (context, matchIndex) => _buildMatch(context, matchIndex),
+ childCount: computedMatches.length,
+ addAutomaticKeepAlives: false,
+ addRepaintBoundaries: true,
+ );
+
+ Widget _buildMatch(BuildContext context, int matchIndex) {
+ final matchData = computedMatches[matchIndex];
+ final matchScope = widget.roundData.localScope.createChildScope();
+ matchScope.dataContext
+ .addDataContextById(widget.roundData.matches.name, matchData);
+ matchScope.dataContext.addDataContextById('matchIndex', matchIndex);
+ matchScope.dataContext.addDataContextById('roundIndex', widget.columnIndex);
+
+ final widgetModel = matchScope
+ .buildWidgetModelFromDefinition(widget.roundData.matches.template);
+ Widget matchWidget = DataScopeWidget(
+ scopeManager: matchScope,
+ child: matchScope.buildWidgetFromModel(widgetModel),
+ );
+
+ final key = _BracketMatchKey(widget.columnIndex, matchIndex);
+ if (Device().isTV && widget.registerMatchFocus != null) {
+ matchWidget = _BracketMatchFocusTarget(
+ key: ValueKey(key),
+ matchKey: key,
+ onMoveVertical: widget.onMoveVertical,
+ onFocused: widget.onMatchFocused,
+ focusOrder: TVFocusOrder.withOptions(
+ (widget.tvRowOffset + 1 + matchIndex).toDouble(),
+ order: widget.columnIndex.toDouble(),
+ isRowEntryPoint:
+ matchIndex == 0 && widget.columnIndex == widget.prevColumnIndex,
+ delegateHorizontalNavigation: true,
+ ),
+ register: widget.registerMatchFocus!,
+ unregister: widget.unregisterMatchFocus!,
+ child: matchWidget,
+ );
+ } else if (Device().isTV) {
+ // Keep the historic TV traversal when this column is used without the
+ // BracketsPage coordinator.
+ matchWidget = TVFocusWidget(
+ focusOrder: TVFocusOrder.withOptions(
+ (widget.tvRowOffset + 1 + matchIndex).toDouble(),
+ order: widget.columnIndex.toDouble(),
+ isRowEntryPoint: matchIndex == 0,
+ delegateHorizontalNavigation: true,
+ ),
+ child: matchWidget,
+ );
+ }
+
+ return ValueListenableBuilder<_BracketLayoutState>(
+ valueListenable: widget.layoutState,
+ child: matchWidget,
+ builder: (context, layout, card) => Align(
+ alignment: Alignment.topLeft,
+ child: SizedBox(
+ height: matchCardHeight,
+ width: MediaQuery.of(context).size.width *
+ widget.controller.matchCardWidthFraction,
+ child: Container(
+ margin: EdgeInsets.only(
+ left: widget.controller.connectorLength *
+ layout.leftConnectorProgressFor(widget.columnIndex),
+ ),
+ child: CustomPaint(
+ painter: BracketPainter(
+ isTopBracket: widget.columnIndex + 1 == widget.totalColumns
+ ? null
+ : !(matchIndex.isEven),
+ showLeftBorder:
+ layout.leftConnectorProgressFor(widget.columnIndex) > 0,
+ leftBorderOpacity:
+ layout.leftConnectorProgressFor(widget.columnIndex),
+ lineColor: widget.controller.lineColor ?? Colors.black,
+ borderColor: widget.controller.borderColor ?? Colors.black,
+ lineWidth: widget.controller.lineWidth ?? 2.0,
+ borderWidth: widget.controller.borderWidth ?? 2.0,
+ connectorLength: widget.controller.connectorLength,
+ columnIndex: widget.columnIndex,
+ prevColumnIndex: layout.toColumnIndex,
+ spacingMultiplier: layout.multiplierFor(widget.columnIndex),
+ ),
+ child: card,
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ // TV: reuse the cached delegate across navigation rebuilds so a
+ // prevColumnIndex change doesn't discard the sliver's built-child cache
+ // (re-parsing/instantiating every visible tile on every navigation).
+ // Mobile builds fresh each frame (unchanged).
+ final sliverDelegate =
+ Device().isTV ? _sliverDelegate : _createSliverDelegate();
+
+ final double leftPad = widget.leftEdgePadding ?? 0.0;
+ final double rightPad = widget.columnIndex == widget.totalColumns - 1
+ ? (widget.rightEdgePadding ?? 0.0)
+ : 0.0;
+
+ return Padding(
+ padding: EdgeInsets.only(left: leftPad, right: rightPad),
+ child: ValueListenableBuilder<_BracketLayoutState>(
+ valueListenable: widget.layoutState,
+ builder: (context, layout, _) {
+ final multiplier = layout.multiplierFor(widget.columnIndex);
+ final slotExtent = matchCardHeight * multiplier;
+ final cardTopOffset = matchCardHeight * (multiplier - 1) / 2;
+ return NotificationListener(
+ onNotification: (notification) {
+ widget.onScrollNotification
+ ?.call(widget.columnIndex, notification);
+ return false;
+ },
+ child: CustomScrollView(
+ controller: widget.scrollController,
+ physics: const ClampingScrollPhysics(),
+ cacheExtent: matchCardHeight * 2,
+ slivers: [
+ SliverPadding(
+ padding: EdgeInsets.only(
+ top: cardTopOffset, bottom: cardTopOffset),
+ sliver: SliverFixedExtentList(
+ itemExtent: slotExtent,
+ delegate: sliverDelegate,
+ ),
+ ),
+ ],
+ ),
+ );
+ },
+ ),
+ );
+ }
+}
+
+/// Interpolates bracket-tree geometry during reflow.
+class _BracketLayoutState {
+ const _BracketLayoutState({
+ required this.fromColumnIndex,
+ required this.toColumnIndex,
+ required this.progress,
+ });
+
+ factory _BracketLayoutState.stationary(int columnIndex) =>
+ _BracketLayoutState(
+ fromColumnIndex: columnIndex,
+ toColumnIndex: columnIndex,
+ progress: 1,
+ );
+
+ final int fromColumnIndex;
+ final int toColumnIndex;
+ final double progress;
+
+ _BracketLayoutState copyWith({double? progress}) => _BracketLayoutState(
+ fromColumnIndex: fromColumnIndex,
+ toColumnIndex: toColumnIndex,
+ progress: progress ?? this.progress,
+ );
+
+ double multiplierFor(int columnIndex) {
+ double multiplierForAnchor(int anchor) {
+ final distance = columnIndex - anchor;
+ return distance > 0 ? (1 << distance).toDouble() : 1;
+ }
+
+ final from = multiplierForAnchor(fromColumnIndex);
+ final to = multiplierForAnchor(toColumnIndex);
+ return from + (to - from) * progress;
+ }
+
+ double leftConnectorProgressFor(int columnIndex) {
+ final from = fromColumnIndex < columnIndex ? 1.0 : 0.0;
+ final to = toColumnIndex < columnIndex ? 1.0 : 0.0;
+ return from + (to - from) * progress;
+ }
+}
+
+class _BracketMatchKey {
+ const _BracketMatchKey(this.columnIndex, this.matchIndex);
+
+ final int columnIndex;
+ final int matchIndex;
+
+ @override
+ bool operator ==(Object other) =>
+ other is _BracketMatchKey &&
+ other.columnIndex == columnIndex &&
+ other.matchIndex == matchIndex;
+
+ @override
+ int get hashCode => Object.hash(columnIndex, matchIndex);
+}
+
+/// Lightweight per-card TV focus boundary.
+class _BracketMatchFocusTarget extends StatefulWidget {
+ const _BracketMatchFocusTarget({
+ super.key,
+ required this.matchKey,
+ required this.register,
+ required this.unregister,
+ required this.child,
+ required this.focusOrder,
+ this.onMoveVertical,
+ this.onFocused,
+ });
+
+ final _BracketMatchKey matchKey;
+ final void Function(_BracketMatchKey key, FocusScopeNode node) register;
+ final void Function(_BracketMatchKey key, FocusScopeNode node) unregister;
+ final TVFocusOrder focusOrder;
+ final bool Function(int columnIndex, int matchIndex, int direction)?
+ onMoveVertical;
+ final ValueChanged<_BracketMatchKey>? onFocused;
+ final Widget child;
+
+ @override
+ State<_BracketMatchFocusTarget> createState() =>
+ _BracketMatchFocusTargetState();
+}
+
+class _BracketMatchFocusTargetState extends State<_BracketMatchFocusTarget> {
+ late final FocusScopeNode _scopeNode = FocusScopeNode(
+ debugLabel:
+ 'BracketMatch(${widget.matchKey.columnIndex}, ${widget.matchKey.matchIndex})',
+ );
+
+ @override
+ void initState() {
+ super.initState();
+ widget.register(widget.matchKey, _scopeNode);
+ }
+
+ @override
+ void dispose() {
+ widget.unregister(widget.matchKey, _scopeNode);
+ _scopeNode.dispose();
+ super.dispose();
+ }
+
+ KeyEventResult _onKeyEvent(FocusNode _, KeyEvent event) {
+ if (event is! KeyDownEvent && event is! KeyRepeatEvent) {
+ return KeyEventResult.ignored;
+ }
+ if (event.logicalKey == LogicalKeyboardKey.arrowUp) {
+ final didMove = widget.onMoveVertical
+ ?.call(widget.matchKey.columnIndex, widget.matchKey.matchIndex, -1);
+ return didMove == true ? KeyEventResult.handled : KeyEventResult.ignored;
+ }
+ if (event.logicalKey == LogicalKeyboardKey.arrowDown) {
+ widget.onMoveVertical
+ ?.call(widget.matchKey.columnIndex, widget.matchKey.matchIndex, 1);
+ // At the final card, keep focus in this column. Letting DOWN bubble into
+ // the outer focus grid can select a card in a different-length column.
+ return KeyEventResult.handled;
+ }
+ // LEFT/RIGHT deliberately bubble to BracketsPage's FocusScope.
+ return KeyEventResult.ignored;
+ }
+
+ @override
+ Widget build(BuildContext context) => TVFocusWidget(
+ focusOrder: widget.focusOrder,
+ primaryFocusNode: _scopeNode,
+ child: FocusScope(
+ node: _scopeNode,
+ onKeyEvent: _onKeyEvent,
+ onFocusChange: (hasFocus) {
+ if (!hasFocus) return;
+ widget.onFocused?.call(widget.matchKey);
+ if (_scopeNode.hasPrimaryFocus) {
+ WidgetsBinding.instance.addPostFrameCallback((_) {
+ if (!mounted || !_scopeNode.hasPrimaryFocus) return;
+ for (final node in _scopeNode.descendants) {
+ if (node != _scopeNode &&
+ node.canRequestFocus &&
+ node.context != null) {
+ node.requestFocus();
+ }
+ }
+ });
+ }
+ },
+ child: widget.child,
+ ),
+ );
+}
+
+/// Paints bracket connector lines between tournament matches.
+///
+/// Draws:
+/// - Border rectangle around the match card
+/// - Right-side horizontal + vertical connector (toward next round)
+/// - Left-side horizontal connector (from previous round)
+///
+/// [columnIndex] - The index of the current column being rendered.
+/// [prevColumnIndex] - The index of the currently focused/visible page.
+/// [spacingMultiplier] - Live interpolated spacing from [_BracketLayoutState],
+/// used during a column transition; falls back to [prevColumnIndex] when unset.
+/// Used to calculate dynamic vertical line length when columns are "expanded"
+/// (i.e., when viewing later rounds where card spacing increases).
+class BracketPainter extends CustomPainter {
+ // Baseline connector length used as default
+ static const _baselineConnectorLength = 25.0;
+
+ final bool? isTopBracket;
+ final bool showLeftBorder;
+ final Color lineColor;
+ final double lineWidth;
+ final Color borderColor;
+ final double borderWidth;
+ final double connectorLength;
+ final int columnIndex;
+ final int prevColumnIndex;
+ final double? spacingMultiplier;
+ final double leftBorderOpacity;
+
+ BracketPainter({
+ this.isTopBracket,
+ required this.showLeftBorder,
+ this.lineColor = Colors.black,
+ this.lineWidth = 2.0,
+ this.borderColor = Colors.black,
+ this.borderWidth = 2.0,
+ this.connectorLength = _baselineConnectorLength,
+ this.columnIndex = 0,
+ this.prevColumnIndex = 0,
+ this.spacingMultiplier,
+ this.leftBorderOpacity = 1,
+ });
+
+ @override
+ void paint(Canvas canvas, Size size) {
+ final borderPaint = Paint()
+ ..color = borderColor
+ ..strokeWidth = borderWidth
+ ..style = PaintingStyle.stroke;
+
+ final linePaint = Paint()
+ ..color = lineColor
+ ..strokeWidth = lineWidth
+ ..style = PaintingStyle.stroke;
+
+ final rect = Rect.fromLTWH(0, 0, size.width, size.height);
+ canvas.drawRect(rect, borderPaint);
+
+ if (isTopBracket != null) {
+ final startPoint = Offset(size.width, size.height / 2);
+ final endPoint = Offset(size.width + connectorLength, size.height / 2);
+ canvas.drawLine(startPoint, endPoint, linePaint);
+
+ final verticalStartPoint = endPoint;
+ // Calculate vertical line length based on card spacing.
+ // Cards double in spacing with each column distance; vertical line
+ // needs to reach halfway to the adjacent card.
+ final cardHeight = size.height;
+ double verticalLength;
+ if (spacingMultiplier != null) {
+ // Live-interpolated spacing during a column transition.
+ verticalLength = cardHeight * 0.5 * spacingMultiplier!;
+ } else if (prevColumnIndex < columnIndex) {
+ // When expanded, cards have gaps - use spacing multiplier.
+ final distance = columnIndex - prevColumnIndex;
+ final multiplier = 1 << distance; // 2^distance
+ verticalLength = cardHeight * 0.5 * multiplier;
+ } else {
+ // Non-expanded: cards stacked with no gap, use half card height.
+ verticalLength = cardHeight * 0.5;
+ }
+ final verticalEndPoint = isTopBracket!
+ ? Offset(endPoint.dx, endPoint.dy - verticalLength)
+ : Offset(endPoint.dx, endPoint.dy + verticalLength);
+ canvas.drawLine(verticalStartPoint, verticalEndPoint, linePaint);
+ }
+ if (showLeftBorder && leftBorderOpacity > 0) {
+ final leftStartPoint = Offset(0, size.height / 2);
+ final leftEndPoint = Offset(-connectorLength, size.height / 2);
+ final leftLinePaint = Paint()
+ ..color = lineColor.withValues(alpha: leftBorderOpacity)
+ ..strokeWidth = lineWidth
+ ..style = PaintingStyle.stroke;
+ canvas.drawLine(leftStartPoint, leftEndPoint, leftLinePaint);
+ }
+ }
+
+ @override
+ bool shouldRepaint(covariant BracketPainter oldDelegate) =>
+ oldDelegate.columnIndex != columnIndex ||
+ oldDelegate.prevColumnIndex != prevColumnIndex ||
+ oldDelegate.spacingMultiplier != spacingMultiplier ||
+ oldDelegate.leftBorderOpacity != leftBorderOpacity ||
+ oldDelegate.isTopBracket != isTopBracket ||
+ oldDelegate.showLeftBorder != showLeftBorder ||
+ oldDelegate.connectorLength != connectorLength ||
+ oldDelegate.lineColor != lineColor ||
+ oldDelegate.lineWidth != lineWidth ||
+ oldDelegate.borderColor != borderColor ||
+ oldDelegate.borderWidth != borderWidth;
+}
+
+/// TV focus provider for the Bracket widget.
+///
+/// Horizontal navigation is handled by:
+/// 1. Match cards set delegateHorizontalNavigation: true in YAML
+/// 2. BracketsPage FocusScope catches LEFT/RIGHT keys and animates PageView
+class _BracketTVFocusProvider implements TVFocusProvider {
+ // Singleton - no state needed
+ static final _instance = _BracketTVFocusProvider._();
+ factory _BracketTVFocusProvider() => _instance;
+ _BracketTVFocusProvider._();
+
+ @override
+ Widget wrapFocusable({
+ required double row,
+ required double order,
+ required Widget child,
+ bool isRowEntryPoint = false,
+ bool lockHorizontalNavigation = false,
+ bool delegateHorizontalNavigation = false,
+ String? focusGroup,
+ bool rememberRowPosition = false,
+ FocusNode? primaryFocusNode,
+ KeyEventResult Function(FocusNode node)? onBackPressed,
+ VoidCallback? onRightEdge,
+ VoidCallback? onLeftEdge,
+ VoidCallback? onTopEdge,
+ VoidCallback? onBottomEdge,
+ }) {
+ // DON'T wrap with TVFocusWidget - bracket.dart already handles TV navigation.
+ // box_wrapper has already applied focus styling (backgroundColor, focusBorderColor, etc.)
+ // from YAML tvOptions. Just return the styled child as-is.
+ return child;
+ }
+
+ /// The bracket handles horizontal scrolling via PageView page changes.
+ /// This prevents box_wrapper from calling Scrollable.ensureVisible()
+ /// which would cause horizontal jerk when navigating UP/DOWN.
+ @override
+ bool get handlesHorizontalScroll => true;
+
+ @override
+ double get rowOffset => 0;
+
+ @override
+ double get orderOffset => 0;
+
+ @override
+ Color? get focusBorderColor => null;
+
+ @override
+ double? get focusBorderWidth => null;
+
+ @override
+ double? get focusBorderRadius => 0;
+
+ @override
+ int? get focusAnimationDurationMs => null;
+
+ @override
+ void dispose() {}
+
+ @override
+ void requestFocusAt(BuildContext context, double row,
+ [double? order, String? focusGroup]) {
+ const TVFocusOrder(0).requestFocusAt(context, row, order, focusGroup);
+ }
+
+ @override
+ void requestFocusByEdge(
+ BuildContext context, {
+ required TVFocusDirection direction,
+ String? targetFocusGroup,
+ double? targetRow,
+ double? targetOrder,
+ double? currentRow,
+ double? currentOrder,
+ }) {
+ const TVFocusOrder(0).requestFocusByEdge(
+ context,
+ direction: direction,
+ targetFocusGroup: targetFocusGroup,
+ targetRow: targetRow,
+ targetOrder: targetOrder,
+ currentRow: currentRow,
+ currentOrder: currentOrder,
+ );
+ }
+
+ // Bracket handles its own TV navigation and has no row-position memory.
+ @override
+ void saveRowPosition({
+ required ModalRoute? route,
+ required double row,
+ required double order,
+ String? focusGroup,
+ }) {}
+}
diff --git a/modules/bracket/pubspec.yaml b/modules/bracket/pubspec.yaml
index 0743334ca..f98c65cbd 100644
--- a/modules/bracket/pubspec.yaml
+++ b/modules/bracket/pubspec.yaml
@@ -1,38 +1,38 @@
-name: ensemble_bracket
-description: Tournament bracket widget implementation for Ensemble apps.
-homepage: https://ensembleui.com
-repository: https://github.com/EnsembleUI/ensemble/tree/main/modules/bracket
-issue_tracker: https://github.com/EnsembleUI/ensemble/issues
-documentation: https://github.com/EnsembleUI/ensemble/tree/main/modules/bracket#readme
-topics:
- - tournament
- - brackets
- - low-code
- - ensemble
-platforms:
- android:
- ios:
- macos:
- web:
- windows:
-
-version: 1.2.53
-
-environment:
- sdk: ">=3.5.0 <4.0.0"
- flutter: ">=3.24.0"
-
-dependencies:
- flutter:
- sdk: flutter
- ensemble:
- git:
- url: https://github.com/EnsembleUI/ensemble.git
- ref: ensemble-v1.2.53
- path: modules/ensemble
-
-dev_dependencies:
- flutter_test:
- sdk: flutter
- flutter_lints: ^3.0.0
-
+name: ensemble_bracket
+description: Tournament bracket widget implementation for Ensemble apps.
+homepage: https://ensembleui.com
+repository: https://github.com/EnsembleUI/ensemble/tree/main/modules/bracket
+issue_tracker: https://github.com/EnsembleUI/ensemble/issues
+documentation: https://github.com/EnsembleUI/ensemble/tree/main/modules/bracket#readme
+topics:
+ - tournament
+ - brackets
+ - low-code
+ - ensemble
+platforms:
+ android:
+ ios:
+ macos:
+ web:
+ windows:
+
+version: 1.2.53
+
+environment:
+ sdk: ">=3.5.0 <4.0.0"
+ flutter: ">=3.24.0"
+
+dependencies:
+ flutter:
+ sdk: flutter
+ ensemble:
+ git:
+ url: https://github.com/EnsembleUI/ensemble.git
+ ref: ensemble-v1.2.53
+ path: modules/ensemble
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+ flutter_lints: ^3.0.0
+
diff --git a/modules/camera/CHANGELOG.md b/modules/camera/CHANGELOG.md
index 163866eee..931df8897 100644
--- a/modules/camera/CHANGELOG.md
+++ b/modules/camera/CHANGELOG.md
@@ -1,50 +1,50 @@
-## 1.2.53
-
- - Bump "ensemble_camera" to `1.2.53`.
-
-## 1.2.52
-
- - Bump "ensemble_camera" to `1.2.52`.
-
-## 1.2.51
-
- - Bump "ensemble_camera" to `1.2.51`.
-
-## 1.2.50
-
- - Bump "ensemble_camera" to `1.2.50`.
-
-## 1.2.49
-
- - Bump "ensemble_camera" to `1.2.49`.
-
-## 1.2.48
-
- - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
- - **FIX**: face detection camera build issues. ([cafd193e](https://github.com/ensembleUI/ensemble/commit/cafd193e78760ccb38efc42e7ee10cbd436a4bfb))
- - **FIX**: dispose existing camera controller before initializing a new one. ([762ddd4a](https://github.com/ensembleUI/ensemble/commit/762ddd4a84009eeb92be61d66b3e93d1da70e53e))
- - **FIX**: repaint issue. ([8cc4e00d](https://github.com/ensembleUI/ensemble/commit/8cc4e00d781ced5bb538e7053304388f02e4af85))
- - **FIX**: camera mobile browser. ([8e676c90](https://github.com/ensembleUI/ensemble/commit/8e676c90d1cbae022acb0bf86c364aa258e9bc74))
- - **FIX**: unreliable showpreview. ([2365d35e](https://github.com/ensembleUI/ensemble/commit/2365d35e5b44743d1924ce5c6e7875676858296b))
- - **FIX**: camera model dismiss. ([4827df14](https://github.com/ensembleUI/ensemble/commit/4827df1439f901dc8c852fdebf26ba4319a66ab3))
- - **FEAT**(face_camera): separate face detection from ensemble_camera into separate module. ([9857c3cc](https://github.com/ensembleUI/ensemble/commit/9857c3cc3048f2c8879feeb07d77b084181010cd))
- - **FEAT**: implement web face detection functionality. ([994eba49](https://github.com/ensembleUI/ensemble/commit/994eba49cd648349a5a1b1319829fc244b168627))
- - **DOCS**: update README to reflect QR code scanning module relocation. ([3a6eeb80](https://github.com/ensembleUI/ensemble/commit/3a6eeb80bbddb9561c0c64de455c2b4a981feb08))
- - **DOCS**: update package and module READMEs. ([2f7e2dec](https://github.com/ensembleUI/ensemble/commit/2f7e2deccf3110badc169d78c22afb64870897f6))
- - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-## 1.2.47
-
- - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
- - **FIX**: face detection camera build issues. ([cafd193e](https://github.com/ensembleUI/ensemble/commit/cafd193e78760ccb38efc42e7ee10cbd436a4bfb))
- - **FIX**: dispose existing camera controller before initializing a new one. ([762ddd4a](https://github.com/ensembleUI/ensemble/commit/762ddd4a84009eeb92be61d66b3e93d1da70e53e))
- - **FIX**: repaint issue. ([8cc4e00d](https://github.com/ensembleUI/ensemble/commit/8cc4e00d781ced5bb538e7053304388f02e4af85))
- - **FIX**: camera mobile browser. ([8e676c90](https://github.com/ensembleUI/ensemble/commit/8e676c90d1cbae022acb0bf86c364aa258e9bc74))
- - **FIX**: unreliable showpreview. ([2365d35e](https://github.com/ensembleUI/ensemble/commit/2365d35e5b44743d1924ce5c6e7875676858296b))
- - **FIX**: camera model dismiss. ([4827df14](https://github.com/ensembleUI/ensemble/commit/4827df1439f901dc8c852fdebf26ba4319a66ab3))
- - **FEAT**(face_camera): separate face detection from ensemble_camera into separate module. ([9857c3cc](https://github.com/ensembleUI/ensemble/commit/9857c3cc3048f2c8879feeb07d77b084181010cd))
- - **FEAT**: implement web face detection functionality. ([994eba49](https://github.com/ensembleUI/ensemble/commit/994eba49cd648349a5a1b1319829fc244b168627))
- - **DOCS**: update package and module READMEs. ([2f7e2dec](https://github.com/ensembleUI/ensemble/commit/2f7e2deccf3110badc169d78c22afb64870897f6))
- - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+## 1.2.53
+
+ - Bump "ensemble_camera" to `1.2.53`.
+
+## 1.2.52
+
+ - Bump "ensemble_camera" to `1.2.52`.
+
+## 1.2.51
+
+ - Bump "ensemble_camera" to `1.2.51`.
+
+## 1.2.50
+
+ - Bump "ensemble_camera" to `1.2.50`.
+
+## 1.2.49
+
+ - Bump "ensemble_camera" to `1.2.49`.
+
+## 1.2.48
+
+ - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
+ - **FIX**: face detection camera build issues. ([cafd193e](https://github.com/ensembleUI/ensemble/commit/cafd193e78760ccb38efc42e7ee10cbd436a4bfb))
+ - **FIX**: dispose existing camera controller before initializing a new one. ([762ddd4a](https://github.com/ensembleUI/ensemble/commit/762ddd4a84009eeb92be61d66b3e93d1da70e53e))
+ - **FIX**: repaint issue. ([8cc4e00d](https://github.com/ensembleUI/ensemble/commit/8cc4e00d781ced5bb538e7053304388f02e4af85))
+ - **FIX**: camera mobile browser. ([8e676c90](https://github.com/ensembleUI/ensemble/commit/8e676c90d1cbae022acb0bf86c364aa258e9bc74))
+ - **FIX**: unreliable showpreview. ([2365d35e](https://github.com/ensembleUI/ensemble/commit/2365d35e5b44743d1924ce5c6e7875676858296b))
+ - **FIX**: camera model dismiss. ([4827df14](https://github.com/ensembleUI/ensemble/commit/4827df1439f901dc8c852fdebf26ba4319a66ab3))
+ - **FEAT**(face_camera): separate face detection from ensemble_camera into separate module. ([9857c3cc](https://github.com/ensembleUI/ensemble/commit/9857c3cc3048f2c8879feeb07d77b084181010cd))
+ - **FEAT**: implement web face detection functionality. ([994eba49](https://github.com/ensembleUI/ensemble/commit/994eba49cd648349a5a1b1319829fc244b168627))
+ - **DOCS**: update README to reflect QR code scanning module relocation. ([3a6eeb80](https://github.com/ensembleUI/ensemble/commit/3a6eeb80bbddb9561c0c64de455c2b4a981feb08))
+ - **DOCS**: update package and module READMEs. ([2f7e2dec](https://github.com/ensembleUI/ensemble/commit/2f7e2deccf3110badc169d78c22afb64870897f6))
+ - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+## 1.2.47
+
+ - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
+ - **FIX**: face detection camera build issues. ([cafd193e](https://github.com/ensembleUI/ensemble/commit/cafd193e78760ccb38efc42e7ee10cbd436a4bfb))
+ - **FIX**: dispose existing camera controller before initializing a new one. ([762ddd4a](https://github.com/ensembleUI/ensemble/commit/762ddd4a84009eeb92be61d66b3e93d1da70e53e))
+ - **FIX**: repaint issue. ([8cc4e00d](https://github.com/ensembleUI/ensemble/commit/8cc4e00d781ced5bb538e7053304388f02e4af85))
+ - **FIX**: camera mobile browser. ([8e676c90](https://github.com/ensembleUI/ensemble/commit/8e676c90d1cbae022acb0bf86c364aa258e9bc74))
+ - **FIX**: unreliable showpreview. ([2365d35e](https://github.com/ensembleUI/ensemble/commit/2365d35e5b44743d1924ce5c6e7875676858296b))
+ - **FIX**: camera model dismiss. ([4827df14](https://github.com/ensembleUI/ensemble/commit/4827df1439f901dc8c852fdebf26ba4319a66ab3))
+ - **FEAT**(face_camera): separate face detection from ensemble_camera into separate module. ([9857c3cc](https://github.com/ensembleUI/ensemble/commit/9857c3cc3048f2c8879feeb07d77b084181010cd))
+ - **FEAT**: implement web face detection functionality. ([994eba49](https://github.com/ensembleUI/ensemble/commit/994eba49cd648349a5a1b1319829fc244b168627))
+ - **DOCS**: update package and module READMEs. ([2f7e2dec](https://github.com/ensembleUI/ensemble/commit/2f7e2deccf3110badc169d78c22afb64870897f6))
+ - **DOCS**: update package and module READMEs. ([35b52c94](https://github.com/ensembleUI/ensemble/commit/35b52c94c314cb597a6fbfe32d972f428301856a))
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
diff --git a/modules/camera/pubspec.yaml b/modules/camera/pubspec.yaml
index 85bd92b5d..833bc1f33 100644
--- a/modules/camera/pubspec.yaml
+++ b/modules/camera/pubspec.yaml
@@ -1,82 +1,82 @@
-name: ensemble_camera
-description: Camera and media capture bridge for Ensemble apps.
-homepage: https://ensembleui.com
-repository: https://github.com/EnsembleUI/ensemble
-issue_tracker: https://github.com/EnsembleUI/ensemble/issues
-documentation: https://github.com/EnsembleUI/ensemble/tree/main/modules/camera#readme
-topics:
- - camera
- - media
- - low-code
- - ensemble
-version: 1.2.53
-
-environment:
- sdk: ">=3.5.0 <4.0.0"
- flutter: ">=3.24.0"
-
-dependencies:
- flutter:
- sdk: flutter
- camera: ^0.11.0+2
- # embed Ensemble as a sibling project
- ensemble:
- git:
- url: https://github.com/EnsembleUI/ensemble.git
- ref: ensemble-v1.2.53
- path: modules/ensemble
- ensemble_ts_interpreter: ^1.2.0
-
- collection: ^1.17.1
- geolocator: ^9.0.2
- image: ^4.8.0
- image_picker: ^0.8.7+5
- sensors_plus: ^7.0.0
- video_player: ^2.6.1
- path_provider: ^2.1.5
- share_plus: ^12.0.0
-
-dev_dependencies:
- flutter_test:
- sdk: flutter
- flutter_lints: ^2.0.0
-
-# For information on the generic Dart part of this file, see the
-# following page: https://dart.dev/tools/pub/pubspec
-
-# The following section is specific to Flutter packages.
-flutter:
-
- # To add assets to your package, add an assets section, like this:
- # assets:
- # - images/a_dot_burr.jpeg
- # - images/a_dot_ham.jpeg
- #
- # For details regarding assets in packages, see
- # https://flutter.dev/assets-and-images/#from-packages
- #
- # An image asset can refer to one or more resolution-specific "variants", see
- # https://flutter.dev/assets-and-images/#resolution-aware
-
- # To add custom fonts to your package, add a fonts section here,
- # in this "flutter" section. Each entry in this list should have a
- # "family" key with the font family name, and a "fonts" key with a
- # list giving the asset and other descriptors for the font. For
- # example:
- # fonts:
- # - family: Schyler
- # fonts:
- # - asset: fonts/Schyler-Regular.ttf
- # - asset: fonts/Schyler-Italic.ttf
- # style: italic
- # - family: Trajan Pro
- # fonts:
- # - asset: fonts/TrajanPro.ttf
- # - asset: fonts/TrajanPro_Bold.ttf
- # weight: 700
- #
- # For details regarding fonts in packages, see
- # https://flutter.dev/custom-fonts/#from-packages
-
- assets:
- - web/image_worker.js
+name: ensemble_camera
+description: Camera and media capture bridge for Ensemble apps.
+homepage: https://ensembleui.com
+repository: https://github.com/EnsembleUI/ensemble
+issue_tracker: https://github.com/EnsembleUI/ensemble/issues
+documentation: https://github.com/EnsembleUI/ensemble/tree/main/modules/camera#readme
+topics:
+ - camera
+ - media
+ - low-code
+ - ensemble
+version: 1.2.53
+
+environment:
+ sdk: ">=3.5.0 <4.0.0"
+ flutter: ">=3.24.0"
+
+dependencies:
+ flutter:
+ sdk: flutter
+ camera: ^0.11.0+2
+ # embed Ensemble as a sibling project
+ ensemble:
+ git:
+ url: https://github.com/EnsembleUI/ensemble.git
+ ref: ensemble-v1.2.53
+ path: modules/ensemble
+ ensemble_ts_interpreter: ^1.2.0
+
+ collection: ^1.17.1
+ geolocator: ^9.0.2
+ image: ^4.8.0
+ image_picker: ^0.8.7+5
+ sensors_plus: ^7.0.0
+ video_player: ^2.6.1
+ path_provider: ^2.1.5
+ share_plus: ^12.0.0
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+ flutter_lints: ^2.0.0
+
+# For information on the generic Dart part of this file, see the
+# following page: https://dart.dev/tools/pub/pubspec
+
+# The following section is specific to Flutter packages.
+flutter:
+
+ # To add assets to your package, add an assets section, like this:
+ # assets:
+ # - images/a_dot_burr.jpeg
+ # - images/a_dot_ham.jpeg
+ #
+ # For details regarding assets in packages, see
+ # https://flutter.dev/assets-and-images/#from-packages
+ #
+ # An image asset can refer to one or more resolution-specific "variants", see
+ # https://flutter.dev/assets-and-images/#resolution-aware
+
+ # To add custom fonts to your package, add a fonts section here,
+ # in this "flutter" section. Each entry in this list should have a
+ # "family" key with the font family name, and a "fonts" key with a
+ # list giving the asset and other descriptors for the font. For
+ # example:
+ # fonts:
+ # - family: Schyler
+ # fonts:
+ # - asset: fonts/Schyler-Regular.ttf
+ # - asset: fonts/Schyler-Italic.ttf
+ # style: italic
+ # - family: Trajan Pro
+ # fonts:
+ # - asset: fonts/TrajanPro.ttf
+ # - asset: fonts/TrajanPro_Bold.ttf
+ # weight: 700
+ #
+ # For details regarding fonts in packages, see
+ # https://flutter.dev/custom-fonts/#from-packages
+
+ assets:
+ - web/image_worker.js
diff --git a/modules/chat/CHANGELOG.md b/modules/chat/CHANGELOG.md
index dac2456cc..23b9dce56 100644
--- a/modules/chat/CHANGELOG.md
+++ b/modules/chat/CHANGELOG.md
@@ -1,30 +1,30 @@
-## 1.2.53
-
- - Bump "ensemble_chat" to `1.2.53`.
-
-## 1.2.52
-
- - Bump "ensemble_chat" to `1.2.52`.
-
-## 1.2.51
-
- - Bump "ensemble_chat" to `1.2.51`.
-
-## 1.2.50
-
- - Bump "ensemble_chat" to `1.2.50`.
-
-## 1.2.49
-
- - Bump "ensemble_chat" to `1.2.49`.
-
-## 1.2.48
-
- - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
-## 1.2.47
-
- - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
- - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
-
+## 1.2.53
+
+ - Bump "ensemble_chat" to `1.2.53`.
+
+## 1.2.52
+
+ - Bump "ensemble_chat" to `1.2.52`.
+
+## 1.2.51
+
+ - Bump "ensemble_chat" to `1.2.51`.
+
+## 1.2.50
+
+ - Bump "ensemble_chat" to `1.2.50`.
+
+## 1.2.49
+
+ - Bump "ensemble_chat" to `1.2.49`.
+
+## 1.2.48
+
+ - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
+## 1.2.47
+
+ - **REFACTOR**: update color handling in various widget files to use withValues for opacity adjustments. ([47affb3a](https://github.com/ensembleUI/ensemble/commit/47affb3a3b8e84c092c9d912b85ed8987b828e19))
+ - **DOCS**: update package and module READMEs. ([74306617](https://github.com/ensembleUI/ensemble/commit/74306617e40588dc149587bddd7a9c7ca87fc5bf))
+
diff --git a/modules/chat/README.md b/modules/chat/README.md
index 78563d540..75e5ef9d0 100644
--- a/modules/chat/README.md
+++ b/modules/chat/README.md
@@ -1,76 +1,76 @@
-# ensemble_chat
-
-`ensemble_chat` provides the Ensemble `Chat` widget implementation used by the core runtime when chat support is registered.
-
-## Overview
-
-This is an optional Ensemble module. `lib/ensemble_chat.dart` implements `EnsembleChatImpl` and `EnsembleChatController`; helper files provide message models, bubble UI, typing indicators, and an OpenAI client helper.
-
-## Features
-
-- Implements the Ensemble widget type `Chat`.
-- Supports local chat state through `EnsembleChatController` and `ChatPage`.
-- Includes helper models for messages and users.
-- Includes an OpenAI helper client and WebSocket-related dependencies used by the implementation.
-
-## Installation / Setup
-
-Use this package from inside the Melos workspace:
-
-```bash
-melos bootstrap
-```
-
-## Usage
-
-The widget is exposed to Ensemble as `Chat` through `EnsembleChatImpl.type`. A complete YAML example was not found in this package, so no YAML syntax is documented here. Usage examples are not currently available in this package. See the source files under `lib/` for implementation details.
-
-## Configuration
-
-No package-level configuration files were found. Any API keys or backend endpoints used by chat flows should be verified from the host app or Ensemble app definition before documenting them here.
-
-## Platform Support
-
-| Platform | Supported | Notes |
-| -------- | --------: | ----- |
-| Android | Unknown | No Android project is included in this package; host app setup is required. |
-| iOS | Unknown | No iOS project is included in this package; host app setup is required. |
-| Web | Unknown | No web implementation was found in this package. |
-| macOS | Unknown | No macOS project is included in this package. |
-| Windows | Unknown | No Windows project is included in this package. |
-| Linux | Unknown | No Linux project is included in this package. |
-
-## Permissions
-
-No runtime permissions were found in this package.
-
-## API Reference
-
-| API | Type | Description |
-| --- | ---- | ----------- |
-| `EnsembleChatImpl` | Widget | Ensemble widget implementation for the `Chat` type. |
-| `EnsembleChatController` | Controller | Holds chat widget state and configurable properties. |
-| `ChatPage` | Widget | Flutter UI used by the chat implementation. |
-| `OpenAIClient` | Class | Helper client used by the package's OpenAI integration code. |
-
-## Development
-
-```bash
-melos bootstrap
-melos exec --scope="ensemble_chat" -- flutter analyze
-melos exec --scope="ensemble_chat" -- flutter test
-```
-
-## Testing
-
-No package-specific tests were found.
-
-## Related Packages / Modules
-
-- `ensemble`: the core runtime resolves `EnsembleChat` from its widget registry.
-
-## Notes for Contributors
-
-- Keep examples in sync with source code.
-- Update this README when public APIs, permissions, configuration, or platform support changes.
-- Do not document unverified behavior.
+# ensemble_chat
+
+`ensemble_chat` provides the Ensemble `Chat` widget implementation used by the core runtime when chat support is registered.
+
+## Overview
+
+This is an optional Ensemble module. `lib/ensemble_chat.dart` implements `EnsembleChatImpl` and `EnsembleChatController`; helper files provide message models, bubble UI, typing indicators, and an OpenAI client helper.
+
+## Features
+
+- Implements the Ensemble widget type `Chat`.
+- Supports local chat state through `EnsembleChatController` and `ChatPage`.
+- Includes helper models for messages and users.
+- Includes an OpenAI helper client and WebSocket-related dependencies used by the implementation.
+
+## Installation / Setup
+
+Use this package from inside the Melos workspace:
+
+```bash
+melos bootstrap
+```
+
+## Usage
+
+The widget is exposed to Ensemble as `Chat` through `EnsembleChatImpl.type`. A complete YAML example was not found in this package, so no YAML syntax is documented here. Usage examples are not currently available in this package. See the source files under `lib/` for implementation details.
+
+## Configuration
+
+No package-level configuration files were found. Any API keys or backend endpoints used by chat flows should be verified from the host app or Ensemble app definition before documenting them here.
+
+## Platform Support
+
+| Platform | Supported | Notes |
+| -------- | --------: | ----- |
+| Android | Unknown | No Android project is included in this package; host app setup is required. |
+| iOS | Unknown | No iOS project is included in this package; host app setup is required. |
+| Web | Unknown | No web implementation was found in this package. |
+| macOS | Unknown | No macOS project is included in this package. |
+| Windows | Unknown | No Windows project is included in this package. |
+| Linux | Unknown | No Linux project is included in this package. |
+
+## Permissions
+
+No runtime permissions were found in this package.
+
+## API Reference
+
+| API | Type | Description |
+| --- | ---- | ----------- |
+| `EnsembleChatImpl` | Widget | Ensemble widget implementation for the `Chat` type. |
+| `EnsembleChatController` | Controller | Holds chat widget state and configurable properties. |
+| `ChatPage` | Widget | Flutter UI used by the chat implementation. |
+| `OpenAIClient` | Class | Helper client used by the package's OpenAI integration code. |
+
+## Development
+
+```bash
+melos bootstrap
+melos exec --scope="ensemble_chat" -- flutter analyze
+melos exec --scope="ensemble_chat" -- flutter test
+```
+
+## Testing
+
+No package-specific tests were found.
+
+## Related Packages / Modules
+
+- `ensemble`: the core runtime resolves `EnsembleChat` from its widget registry.
+
+## Notes for Contributors
+
+- Keep examples in sync with source code.
+- Update this README when public APIs, permissions, configuration, or platform support changes.
+- Do not document unverified behavior.
diff --git a/modules/chat/ios/Runner/GeneratedPluginRegistrant.m b/modules/chat/ios/Runner/GeneratedPluginRegistrant.m
index 7d978be49..c3e443b0c 100644
--- a/modules/chat/ios/Runner/GeneratedPluginRegistrant.m
+++ b/modules/chat/ios/Runner/GeneratedPluginRegistrant.m
@@ -1,245 +1,245 @@
-//
-// Generated file. Do not edit.
-//
-
-// clang-format off
-
-#import "GeneratedPluginRegistrant.h"
-
-#if __has_include()
-#import
-#else
-@import app_links;
-#endif
-
-#if __has_include()
-#import
-#else
-@import audioplayers_darwin;
-#endif
-
-#if __has_include()
-#import
-#else
-@import cloud_firestore;
-#endif
-
-#if __has_include()
-#import
-#else
-@import cloud_functions;
-#endif
-
-#if __has_include()
-#import
-#else
-@import connectivity_plus;
-#endif
-
-#if __has_include()
-#import
-#else
-@import device_info_plus;
-#endif
-
-#if __has_include()
-#import
-#else
-@import ensemble_app_badger;
-#endif
-
-#if __has_include()
-#import
-#else
-@import ensemble_otp;
-#endif
-
-#if __has_include()
-#import
-#else
-@import firebase_app_check;
-#endif
-
-#if __has_include()
-#import
-#else
-@import firebase_core;
-#endif
-
-#if __has_include()
-#import
-#else
-@import firebase_messaging;
-#endif
-
-#if __has_include()
-#import
-#else
-@import flutter_inappwebview_ios;
-#endif
-
-#if __has_include()
-#import
-#else
-@import flutter_local_notifications;
-#endif
-
-#if __has_include()
-#import
-#else
-@import flutter_secure_storage;
-#endif
-
-#if __has_include()
-#import
-#else
-@import flutter_security_checker;
-#endif
-
-#if __has_include()
-#import
-#else
-@import flutter_share_receiver;
-#endif
-
-#if __has_include()
-#import
-#else
-@import fluttertoast;
-#endif
-
-#if __has_include()
-#import
-#else
-@import local_auth_darwin;
-#endif
-
-#if __has_include()
-#import
-#else
-@import open_settings_plus;
-#endif
-
-#if __has_include()
-#import
-#else
-@import package_info_plus;
-#endif
-
-#if __has_include()
-#import
-#else
-@import path_provider_foundation;
-#endif
-
-#if __has_include()
-#import
-#else
-@import pointer_interceptor_ios;
-#endif
-
-#if __has_include()
-#import
-#else
-@import rate_my_app;
-#endif
-
-#if __has_include()
-#import
-#else
-@import safe_device;
-#endif
-
-#if __has_include()
-#import
-#else
-@import sensors_plus;
-#endif
-
-#if __has_include()
-#import
-#else
-@import share_plus;
-#endif
-
-#if __has_include()
-#import
-#else
-@import shared_preferences_foundation;
-#endif
-
-#if __has_include()
-#import
-#else
-@import sqflite_darwin;
-#endif
-
-#if __has_include()
-#import
-#else
-@import url_launcher_ios;
-#endif
-
-#if __has_include()
-#import
-#else
-@import video_player_avfoundation;
-#endif
-
-#if __has_include()
-#import
-#else
-@import wakelock_plus;
-#endif
-
-#if __has_include()
-#import
-#else
-@import webview_flutter_wkwebview;
-#endif
-
-#if __has_include()
-#import
-#else
-@import workmanager;
-#endif
-
-@implementation GeneratedPluginRegistrant
-
-+ (void)registerWithRegistry:(NSObject*)registry {
- [AppLinksIosPlugin registerWithRegistrar:[registry registrarForPlugin:@"AppLinksIosPlugin"]];
- [AudioplayersDarwinPlugin registerWithRegistrar:[registry registrarForPlugin:@"AudioplayersDarwinPlugin"]];
- [FLTFirebaseFirestorePlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTFirebaseFirestorePlugin"]];
- [FirebaseFunctionsPlugin registerWithRegistrar:[registry registrarForPlugin:@"FirebaseFunctionsPlugin"]];
- [ConnectivityPlusPlugin registerWithRegistrar:[registry registrarForPlugin:@"ConnectivityPlusPlugin"]];
- [FPPDeviceInfoPlusPlugin registerWithRegistrar:[registry registrarForPlugin:@"FPPDeviceInfoPlusPlugin"]];
- [FlutterAppBadgerPlugin registerWithRegistrar:[registry registrarForPlugin:@"FlutterAppBadgerPlugin"]];
- [OtpPinFieldPlugin registerWithRegistrar:[registry registrarForPlugin:@"OtpPinFieldPlugin"]];
- [FirebaseAppCheckPlugin registerWithRegistrar:[registry registrarForPlugin:@"FirebaseAppCheckPlugin"]];
- [FLTFirebaseCorePlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTFirebaseCorePlugin"]];
- [FLTFirebaseMessagingPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTFirebaseMessagingPlugin"]];
- [InAppWebViewFlutterPlugin registerWithRegistrar:[registry registrarForPlugin:@"InAppWebViewFlutterPlugin"]];
- [FlutterLocalNotificationsPlugin registerWithRegistrar:[registry registrarForPlugin:@"FlutterLocalNotificationsPlugin"]];
- [FlutterSecureStoragePlugin registerWithRegistrar:[registry registrarForPlugin:@"FlutterSecureStoragePlugin"]];
- [FlutterSecurityCheckerPlugin registerWithRegistrar:[registry registrarForPlugin:@"FlutterSecurityCheckerPlugin"]];
- [ReceiveSharingIntentPlugin registerWithRegistrar:[registry registrarForPlugin:@"ReceiveSharingIntentPlugin"]];
- [FluttertoastPlugin registerWithRegistrar:[registry registrarForPlugin:@"FluttertoastPlugin"]];
- [LocalAuthPlugin registerWithRegistrar:[registry registrarForPlugin:@"LocalAuthPlugin"]];
- [OpenSettingsPlusPlugin registerWithRegistrar:[registry registrarForPlugin:@"OpenSettingsPlusPlugin"]];
- [FPPPackageInfoPlusPlugin registerWithRegistrar:[registry registrarForPlugin:@"FPPPackageInfoPlusPlugin"]];
- [PathProviderPlugin registerWithRegistrar:[registry registrarForPlugin:@"PathProviderPlugin"]];
- [PointerInterceptorIosPlugin registerWithRegistrar:[registry registrarForPlugin:@"PointerInterceptorIosPlugin"]];
- [SwiftRateMyAppPlugin registerWithRegistrar:[registry registrarForPlugin:@"SwiftRateMyAppPlugin"]];
- [SafeDevicePlugin registerWithRegistrar:[registry registrarForPlugin:@"SafeDevicePlugin"]];
- [FPPSensorsPlusPlugin registerWithRegistrar:[registry registrarForPlugin:@"FPPSensorsPlusPlugin"]];
- [FPPSharePlusPlugin registerWithRegistrar:[registry registrarForPlugin:@"FPPSharePlusPlugin"]];
- [SharedPreferencesPlugin registerWithRegistrar:[registry registrarForPlugin:@"SharedPreferencesPlugin"]];
- [SqflitePlugin registerWithRegistrar:[registry registrarForPlugin:@"SqflitePlugin"]];
- [URLLauncherPlugin registerWithRegistrar:[registry registrarForPlugin:@"URLLauncherPlugin"]];
- [FVPVideoPlayerPlugin registerWithRegistrar:[registry registrarForPlugin:@"FVPVideoPlayerPlugin"]];
- [WakelockPlusPlugin registerWithRegistrar:[registry registrarForPlugin:@"WakelockPlusPlugin"]];
- [WebViewFlutterPlugin registerWithRegistrar:[registry registrarForPlugin:@"WebViewFlutterPlugin"]];
- [WorkmanagerPlugin registerWithRegistrar:[registry registrarForPlugin:@"WorkmanagerPlugin"]];
-}
-
-@end
+//
+// Generated file. Do not edit.
+//
+
+// clang-format off
+
+#import "GeneratedPluginRegistrant.h"
+
+#if __has_include()
+#import
+#else
+@import app_links;
+#endif
+
+#if __has_include()
+#import
+#else
+@import audioplayers_darwin;
+#endif
+
+#if __has_include()
+#import
+#else
+@import cloud_firestore;
+#endif
+
+#if __has_include()
+#import
+#else
+@import cloud_functions;
+#endif
+
+#if __has_include()
+#import
+#else
+@import connectivity_plus;
+#endif
+
+#if __has_include()
+#import
+#else
+@import device_info_plus;
+#endif
+
+#if __has_include()
+#import
+#else
+@import ensemble_app_badger;
+#endif
+
+#if __has_include()
+#import
+#else
+@import ensemble_otp;
+#endif
+
+#if __has_include()
+#import
+#else
+@import firebase_app_check;
+#endif
+
+#if __has_include()
+#import
+#else
+@import firebase_core;
+#endif
+
+#if __has_include()
+#import
+#else
+@import firebase_messaging;
+#endif
+
+#if __has_include()
+#import
+#else
+@import flutter_inappwebview_ios;
+#endif
+
+#if __has_include()
+#import
+#else
+@import flutter_local_notifications;
+#endif
+
+#if __has_include()
+#import
+#else
+@import flutter_secure_storage;
+#endif
+
+#if __has_include()
+#import
+#else
+@import flutter_security_checker;
+#endif
+
+#if __has_include()
+#import
+#else
+@import flutter_share_receiver;
+#endif
+
+#if __has_include()
+#import
+#else
+@import fluttertoast;
+#endif
+
+#if __has_include()
+#import
+#else
+@import local_auth_darwin;
+#endif
+
+#if __has_include()
+#import
+#else
+@import open_settings_plus;
+#endif
+
+#if __has_include()
+#import
+#else
+@import package_info_plus;
+#endif
+
+#if __has_include()
+#import
+#else
+@import path_provider_foundation;
+#endif
+
+#if __has_include()
+#import
+#else
+@import pointer_interceptor_ios;
+#endif
+
+#if __has_include()
+#import
+#else
+@import rate_my_app;
+#endif
+
+#if __has_include()
+#import
+#else
+@import safe_device;
+#endif
+
+#if __has_include()
+#import
+#else
+@import sensors_plus;
+#endif
+
+#if __has_include()
+#import
+#else
+@import share_plus;
+#endif
+
+#if __has_include()
+#import
+#else
+@import shared_preferences_foundation;
+#endif
+
+#if __has_include()
+#import
+#else
+@import sqflite_darwin;
+#endif
+
+#if __has_include()
+#import
+#else
+@import url_launcher_ios;
+#endif
+
+#if __has_include()
+#import
+#else
+@import video_player_avfoundation;
+#endif
+
+#if __has_include()
+#import
+#else
+@import wakelock_plus;
+#endif
+
+#if __has_include()
+#import