diff --git a/.eslintrc.json b/.eslintrc.json
index 5b7d0096..bf3518c1 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -1,12 +1,12 @@
{
"root": true,
"ignorePatterns": ["**/*"],
- "plugins": ["@nrwl/nx"],
+ "plugins": ["@nx"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {
- "@nrwl/nx/enforce-module-boundaries": [
+ "@nx/enforce-module-boundaries": [
"error",
{
"enforceBuildableLibDependency": true,
@@ -23,13 +23,19 @@
},
{
"files": ["*.ts", "*.tsx"],
- "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier", "plugin:@nrwl/nx/typescript"],
- "rules": {}
+ "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier", "plugin:@nx/typescript"],
+ "rules": {
+ "@typescript-eslint/no-extra-semi": "error",
+ "no-extra-semi": "off"
+ }
},
{
"files": ["*.js", "*.jsx"],
- "extends": ["plugin:@nrwl/nx/javascript"],
- "rules": {}
+ "extends": ["plugin:@nx/javascript"],
+ "rules": {
+ "@typescript-eslint/no-extra-semi": "error",
+ "no-extra-semi": "off"
+ }
},
{
"files": ["references.d.ts"],
diff --git a/.github/workflows/secure_nx_release.yml b/.github/workflows/secure_nx_release.yml
new file mode 100644
index 00000000..b622c0be
--- /dev/null
+++ b/.github/workflows/secure_nx_release.yml
@@ -0,0 +1,502 @@
+name: Release Workflow
+
+on:
+ push:
+ branches:
+ - main
+ tags:
+ # Matches the Nx releaseTagPattern in nx.json: "{version}-{projectName}"
+ - '*-*'
+ workflow_dispatch:
+ inputs:
+ release-type:
+ description: "Version bump (patch/minor/major publish to npm 'latest'; prerelease uses 'preid')"
+ required: false
+ type: choice
+ options:
+ - prerelease
+ - patch
+ - minor
+ - major
+ default: prerelease
+ preid:
+ description: "Prerelease identifier (used only when release-type=prerelease; also becomes the npm dist-tag, e.g. next | canary)"
+ required: false
+ type: string
+ default: next
+ dry-run:
+ description: "Run release steps without making changes (no git push, no publish)"
+ required: false
+ type: boolean
+ default: false
+ release-group:
+ description: "Optional Nx project pattern to scope the release (empty = default behavior)"
+ required: false
+ type: string
+ default: ""
+ first-release:
+ description: "Enable for packages never released via nx release (no '{version}-{projectName}' git tag yet); changelog falls back to the project's first commit instead of erroring"
+ required: false
+ type: boolean
+ default: false
+
+concurrency:
+ # Avoid overlapping publishes on the same ref/branch
+ group: nx-release-${{ github.ref }}
+ cancel-in-progress: false
+
+permissions:
+ contents: write # needed to push version commits and tags
+ id-token: write # required for npm provenance / trusted publishing (OIDC)
+
+jobs:
+ release:
+ name: Version and Publish (gated by environment)
+ if: ${{ github.actor != 'github-actions[bot]' }}
+ runs-on: ubuntu-latest
+ environment:
+ name: ${{ (github.event_name == 'workflow_dispatch' && inputs.dry-run) && 'npm-publish-dry-run' || 'npm-publish' }}
+
+ env:
+ # Projects allowed to auto-publish a 'next' prerelease on pushes to main (empty = disabled)
+ NEXT_PRERELEASE_PROJECT_ALLOWLIST: ""
+
+ steps:
+ - name: Harden the runner (Audit all outbound calls)
+ uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
+ with:
+ egress-policy: audit
+
+ - name: Checkout repository (full history for tagging)
+ uses: actions/checkout@v7.0.0
+ with:
+ fetch-depth: 0
+
+ - name: Resolve release context
+ id: ctx
+ shell: bash
+ run: |
+ set -euo pipefail
+
+ if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]]; then
+ release_type="${{ inputs['release-type'] }}"
+ preid="${{ inputs['preid'] }}"
+ scope="${{ inputs['release-group'] }}"
+ dry_run="${{ inputs['dry-run'] }}"
+ first_release="${{ inputs['first-release'] }}"
+ mode="dispatch"
+
+ # npm dist-tag follows release type: prerelease -> preid, stable -> latest
+ if [[ "$release_type" == "prerelease" ]]; then
+ dist_tag="$preid"
+ else
+ dist_tag="latest"
+ fi
+ elif [[ "${GITHUB_REF}" == refs/tags/* ]]; then
+ release_type=""
+ preid=""
+ dist_tag=""
+ scope=""
+ dry_run="false"
+ first_release="false"
+ mode="tag"
+ else
+ release_type="prerelease"
+ preid="next"
+ dist_tag="next"
+ scope=""
+ dry_run="false"
+ first_release="false"
+ mode="main"
+ fi
+
+ # Main pushes with an empty allowlist have nothing to release; skip the heavy setup steps.
+ proceed="true"
+ if [[ "$mode" == "main" && -z "${NEXT_PRERELEASE_PROJECT_ALLOWLIST}" ]]; then
+ proceed="false"
+ fi
+
+ echo "mode=${mode}" >> "$GITHUB_OUTPUT"
+ echo "release_type=${release_type}" >> "$GITHUB_OUTPUT"
+ echo "preid=${preid}" >> "$GITHUB_OUTPUT"
+ echo "dist_tag=${dist_tag}" >> "$GITHUB_OUTPUT"
+ echo "scope=${scope}" >> "$GITHUB_OUTPUT"
+ echo "dry_run=${dry_run}" >> "$GITHUB_OUTPUT"
+ echo "first_release=${first_release}" >> "$GITHUB_OUTPUT"
+ echo "proceed=${proceed}" >> "$GITHUB_OUTPUT"
+
+ - name: Setup Node.js
+ if: ${{ steps.ctx.outputs.proceed == 'true' }}
+ uses: actions/setup-node@v4
+ with:
+ node-version: '24'
+ registry-url: 'https://registry.npmjs.org'
+
+ - name: Update npm (required for OIDC trusted publishing)
+ if: ${{ steps.ctx.outputs.proceed == 'true' }}
+ run: |
+ npm install -g npm@^11.5.1
+ npm --version
+
+ - name: Install dependencies
+ if: ${{ steps.ctx.outputs.proceed == 'true' }}
+ run: npm install
+
+ - name: Determine affected release projects (main)
+ id: affected
+ if: ${{ steps.ctx.outputs.mode == 'main' }}
+ shell: bash
+ run: |
+ set -euo pipefail
+
+ if [[ -z "${NEXT_PRERELEASE_PROJECT_ALLOWLIST}" ]]; then
+ echo "NEXT_PRERELEASE_PROJECT_ALLOWLIST is empty; skipping main-branch prerelease."
+ echo "projects=" >> "$GITHUB_OUTPUT"
+ echo "count=0" >> "$GITHUB_OUTPUT"
+ exit 0
+ fi
+
+ base='${{ github.event.before }}'
+ head='${{ github.sha }}'
+
+ # Handle edge cases where base commit doesn't exist (first push, force-push, etc.)
+ # Use HEAD~1 as fallback, or just compare against HEAD if no parent exists
+ if [[ "$base" == "0000000000000000000000000000000000000000" ]] || ! git cat-file -e "$base" 2>/dev/null; then
+ echo "Base commit not available, falling back to HEAD~1"
+ base="HEAD~1"
+ # If HEAD~1 doesn't exist (first commit), use empty tree
+ if ! git cat-file -e "$base" 2>/dev/null; then
+ base="$(git hash-object -t tree /dev/null)"
+ fi
+ fi
+
+ # Only consider main-branch prerelease libraries allowed for automatic next publishes.
+ affected_json=$(npx nx show projects --affected --base "$base" --head "$head" --type lib --projects "$NEXT_PRERELEASE_PROJECT_ALLOWLIST" --json)
+ affected_list=$(printf '%s' "$affected_json" | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{const a=JSON.parse(s||"[]");process.stdout.write(a.join(","));});')
+ affected_count=$(printf '%s' "$affected_json" | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{const a=JSON.parse(s||"[]");process.stdout.write(String(a.length));});')
+
+ echo "projects=${affected_list}" >> "$GITHUB_OUTPUT"
+ echo "count=${affected_count}" >> "$GITHUB_OUTPUT"
+
+ - name: Determine tag release project and dist-tag (tags)
+ id: taginfo
+ if: ${{ steps.ctx.outputs.mode == 'tag' }}
+ shell: bash
+ run: |
+ set -euo pipefail
+
+ tag_name="${GITHUB_REF_NAME}"
+
+ # Find the project by matching the tag suffix against known releaseable packages.
+ projects=$(npx nx show projects --projects "packages/*" --type lib --sep ' ')
+
+ best_match=""
+ best_len=0
+ for p in $projects; do
+ suffix="-${p}"
+ if [[ "$tag_name" == *"$suffix" ]]; then
+ if (( ${#p} > best_len )); then
+ best_match="$p"
+ best_len=${#p}
+ fi
+ fi
+ done
+
+ if [[ -z "$best_match" ]]; then
+ echo "Could not determine project from tag '$tag_name'. Expected '{version}-{projectName}'." >&2
+ exit 1
+ fi
+
+ version_part="${tag_name%-$best_match}"
+ if [[ "$version_part" == *-* ]]; then
+ dist_tag="next"
+ else
+ dist_tag="latest"
+ fi
+
+ echo "project=${best_match}" >> "$GITHUB_OUTPUT"
+ echo "version=${version_part}" >> "$GITHUB_OUTPUT"
+ echo "dist_tag=${dist_tag}" >> "$GITHUB_OUTPUT"
+
+ - name: Configure git user for automated commits
+ run: |
+ git config user.name "github-actions[bot]"
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+
+ # VERSION: updates versions and creates git tags following nx.json releaseTagPattern.
+ - name: nx release version (main)
+ if: ${{ steps.ctx.outputs.mode == 'main' && steps.affected.outputs.count != '0' }}
+ shell: bash
+ run: |
+ set -euo pipefail
+ npx nx release version prerelease \
+ --preid next \
+ --projects "${{ steps.affected.outputs.projects }}" \
+ --git-commit \
+ --git-push \
+ --verbose
+
+ - name: nx release version (main, no-op)
+ if: ${{ steps.ctx.outputs.mode == 'main' && steps.affected.outputs.count == '0' }}
+ run: echo "No affected release projects on main; skipping version + publish."
+
+ # Orchestrated release: bumps versions, generates changelogs, commits + tags in one shot.
+ # The orchestrator does not accept --git-* flags (config-driven only); push is handled in the next step.
+ # --skip-publish keeps publishing as a separate step below so the OIDC token-clearing logic still runs.
+ - name: nx release version + changelog (dispatch)
+ if: ${{ steps.ctx.outputs.mode == 'dispatch' && !inputs.dry-run }}
+ shell: bash
+ run: |
+ set -euo pipefail
+
+ scope="${{ steps.ctx.outputs.scope }}"
+ projects_arg=()
+ if [[ -n "$scope" ]]; then
+ projects_arg=(--projects "$scope")
+ fi
+
+ release_type="${{ steps.ctx.outputs.release_type }}"
+ preid_arg=()
+ if [[ "$release_type" == "prerelease" ]]; then
+ preid_arg=(--preid "${{ steps.ctx.outputs.preid }}")
+ fi
+
+ first_release_arg=()
+ if [[ "${{ steps.ctx.outputs.first_release }}" == "true" ]]; then
+ first_release_arg=(--first-release)
+ fi
+
+ npx nx release "$release_type" \
+ "${preid_arg[@]}" \
+ "${projects_arg[@]}" \
+ "${first_release_arg[@]}" \
+ --skip-publish \
+ --verbose
+
+ - name: Push release commit and tags (dispatch)
+ if: ${{ steps.ctx.outputs.mode == 'dispatch' && !inputs.dry-run }}
+ run: git push --follow-tags
+
+ - name: nx release version + changelog (dispatch, dry-run)
+ if: ${{ steps.ctx.outputs.mode == 'dispatch' && inputs.dry-run }}
+ shell: bash
+ run: |
+ set -euo pipefail
+
+ scope="${{ steps.ctx.outputs.scope }}"
+ projects_arg=()
+ if [[ -n "$scope" ]]; then
+ projects_arg=(--projects "$scope")
+ fi
+
+ release_type="${{ steps.ctx.outputs.release_type }}"
+ preid_arg=()
+ if [[ "$release_type" == "prerelease" ]]; then
+ preid_arg=(--preid "${{ steps.ctx.outputs.preid }}")
+ fi
+
+ first_release_arg=()
+ if [[ "${{ steps.ctx.outputs.first_release }}" == "true" ]]; then
+ first_release_arg=(--first-release)
+ fi
+
+ npx nx release "$release_type" \
+ "${preid_arg[@]}" \
+ "${projects_arg[@]}" \
+ "${first_release_arg[@]}" \
+ --skip-publish \
+ --verbose \
+ --dry-run
+
+ # BUILD: Ensure projects are built before publishing.
+ # build.all is the publishable build (adds angular dist + publishing assets to dist/packages).
+ - name: Build affected projects (main)
+ if: ${{ steps.ctx.outputs.mode == 'main' && steps.affected.outputs.count != '0' }}
+ run: npx nx run-many -t build.all --projects "${{ steps.affected.outputs.projects }}" --verbose
+
+ - name: Build projects (dispatch)
+ if: ${{ steps.ctx.outputs.mode == 'dispatch' }}
+ shell: bash
+ run: |
+ set -euo pipefail
+ scope="${{ steps.ctx.outputs.scope }}"
+ if [[ -n "$scope" ]]; then
+ npx nx run-many -t build.all --projects "$scope" --verbose
+ else
+ npx nx run-many -t build.all --all --verbose
+ fi
+
+ # PUBLISH: OIDC trusted publishing (default). Avoid any lingering token auth.
+ - name: nx release publish (OIDC, main)
+ if: ${{ steps.ctx.outputs.mode == 'main' && steps.affected.outputs.count != '0' && vars.USE_NPM_TOKEN != 'true' }}
+ shell: bash
+ env:
+ NPM_CONFIG_PROVENANCE: true
+ NODE_AUTH_TOKEN: ""
+ run: |
+ set -euo pipefail
+ unset NODE_AUTH_TOKEN
+ rm -f ~/.npmrc || true
+ if [[ -n "${NPM_CONFIG_USERCONFIG:-}" ]]; then
+ rm -f "$NPM_CONFIG_USERCONFIG" || true
+ fi
+
+ npx nx release publish \
+ --projects "${{ steps.affected.outputs.projects }}" \
+ --tag "${{ steps.ctx.outputs.dist_tag }}" \
+ --access public \
+ --verbose
+
+ - name: nx release publish (OIDC, dispatch)
+ if: ${{ steps.ctx.outputs.mode == 'dispatch' && steps.ctx.outputs.dry_run != 'true' && vars.USE_NPM_TOKEN != 'true' }}
+ shell: bash
+ env:
+ NPM_CONFIG_PROVENANCE: true
+ NODE_AUTH_TOKEN: ""
+ run: |
+ set -euo pipefail
+ unset NODE_AUTH_TOKEN
+ rm -f ~/.npmrc || true
+ if [[ -n "${NPM_CONFIG_USERCONFIG:-}" ]]; then
+ rm -f "$NPM_CONFIG_USERCONFIG" || true
+ fi
+
+ scope="${{ steps.ctx.outputs.scope }}"
+ if [[ -n "$scope" ]]; then
+ projects_arg="--projects $scope"
+ else
+ projects_arg=""
+ fi
+
+ npx nx release publish \
+ $projects_arg \
+ --tag "${{ steps.ctx.outputs.dist_tag }}" \
+ --access public \
+ --verbose
+
+ - name: nx release publish (OIDC, dispatch dry-run)
+ if: ${{ steps.ctx.outputs.mode == 'dispatch' && inputs.dry-run && vars.USE_NPM_TOKEN != 'true' }}
+ shell: bash
+ env:
+ NPM_CONFIG_PROVENANCE: true
+ NODE_AUTH_TOKEN: ""
+ run: |
+ set -euo pipefail
+ unset NODE_AUTH_TOKEN
+ rm -f ~/.npmrc || true
+ if [[ -n "${NPM_CONFIG_USERCONFIG:-}" ]]; then
+ rm -f "$NPM_CONFIG_USERCONFIG" || true
+ fi
+
+ scope="${{ steps.ctx.outputs.scope }}"
+ if [[ -n "$scope" ]]; then
+ projects_arg="--projects $scope"
+ else
+ projects_arg=""
+ fi
+
+ npx nx release publish \
+ $projects_arg \
+ --tag "${{ steps.ctx.outputs.dist_tag }}" \
+ --access public \
+ --verbose \
+ --dry-run
+
+ # PUBLISH: token fallback (only when explicitly enabled via repo/environment variable USE_NPM_TOKEN=true).
+ - name: nx release publish (token, main)
+ if: ${{ steps.ctx.outputs.mode == 'main' && steps.affected.outputs.count != '0' && vars.USE_NPM_TOKEN == 'true' }}
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
+ NPM_CONFIG_PROVENANCE: true
+ run: |
+ npx nx release publish --projects "${{ steps.affected.outputs.projects }}" --tag "${{ steps.ctx.outputs.dist_tag }}" --access public --verbose
+
+ - name: nx release publish (token, dispatch)
+ if: ${{ steps.ctx.outputs.mode == 'dispatch' && steps.ctx.outputs.dry_run != 'true' && vars.USE_NPM_TOKEN == 'true' }}
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
+ NPM_CONFIG_PROVENANCE: true
+ run: |
+ set -euo pipefail
+ scope="${{ steps.ctx.outputs.scope }}"
+ if [[ -n "$scope" ]]; then
+ projects_arg="--projects $scope"
+ else
+ projects_arg=""
+ fi
+ npx nx release publish $projects_arg --tag "${{ steps.ctx.outputs.dist_tag }}" --access public --verbose
+
+ - name: nx release publish (token, dispatch dry-run)
+ if: ${{ steps.ctx.outputs.mode == 'dispatch' && inputs.dry-run && vars.USE_NPM_TOKEN == 'true' }}
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
+ NPM_CONFIG_PROVENANCE: true
+ run: |
+ set -euo pipefail
+ scope="${{ steps.ctx.outputs.scope }}"
+ if [[ -n "$scope" ]]; then
+ projects_arg="--projects $scope"
+ else
+ projects_arg=""
+ fi
+ npx nx release publish $projects_arg --tag "${{ steps.ctx.outputs.dist_tag }}" --access public --verbose --dry-run
+
+ # Tag-triggered publishing: publish the single package referenced by the tag.
+ - name: Build project before publish (tag)
+ if: ${{ steps.ctx.outputs.mode == 'tag' }}
+ run: npx nx run "${{ steps.taginfo.outputs.project }}:build.all" --verbose
+
+ - name: nx release publish (tag)
+ if: ${{ steps.ctx.outputs.mode == 'tag' && vars.USE_NPM_TOKEN != 'true' }}
+ shell: bash
+ env:
+ NPM_CONFIG_PROVENANCE: true
+ NODE_AUTH_TOKEN: ""
+ run: |
+ set -euo pipefail
+ unset NODE_AUTH_TOKEN
+ rm -f ~/.npmrc || true
+ if [[ -n "${NPM_CONFIG_USERCONFIG:-}" ]]; then
+ rm -f "$NPM_CONFIG_USERCONFIG" || true
+ fi
+
+ npx nx release publish \
+ --projects "${{ steps.taginfo.outputs.project }}" \
+ --tag "${{ steps.taginfo.outputs.dist_tag }}" \
+ --access public \
+ --verbose
+
+ - name: nx release publish (tag, token)
+ if: ${{ steps.ctx.outputs.mode == 'tag' && vars.USE_NPM_TOKEN == 'true' }}
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
+ NPM_CONFIG_PROVENANCE: true
+ run: |
+ npx nx release publish --projects "${{ steps.taginfo.outputs.project }}" --tag "${{ steps.taginfo.outputs.dist_tag }}" --access public --verbose
+
+ - name: Summary
+ if: always()
+ run: |
+ mode="${{ steps.ctx.outputs.mode }}"
+
+ echo "Nx Release completed."
+ echo "- mode: ${mode}"
+ echo "- release-type: '${{ steps.ctx.outputs.release_type }}'"
+ echo "- preid: '${{ steps.ctx.outputs.preid }}'"
+ echo "- dist-tag: ${{ steps.ctx.outputs.mode == 'tag' && steps.taginfo.outputs.dist_tag || steps.ctx.outputs.dist_tag }}"
+ echo "- scope: '${{ steps.ctx.outputs.scope }}'"
+ echo "- first-release: ${{ steps.ctx.outputs.first_release }}"
+ echo "- next-prerelease-allowlist: '${NEXT_PRERELEASE_PROJECT_ALLOWLIST}'"
+ if [[ "$mode" == "main" ]]; then
+ echo "- projects: ${{ steps.affected.outputs.projects }}"
+ elif [[ "$mode" == "dispatch" ]]; then
+ if [[ -n "${{ steps.ctx.outputs.scope }}" ]]; then
+ echo "- projects: ${{ steps.ctx.outputs.scope }}"
+ else
+ echo "- projects: all configured release projects"
+ fi
+ else
+ echo "- project: ${{ steps.taginfo.outputs.project }}"
+ fi
+ echo "- dry-run: ${{ steps.ctx.outputs.dry_run }}"
+ echo "- use-token: ${{ vars.USE_NPM_TOKEN == 'true' }}"
diff --git a/.gitignore b/.gitignore
index 923dbc61..eebfa60f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,6 +36,7 @@ npm-debug.log
yarn-error.log
testem.log
/typings
+.history
# System Files
.DS_Store
@@ -50,17 +51,12 @@ packages/shared-notification-delegate/common.js.map
!packages/google-signin/platforms/android/googlesignin-release.aar
!packages/twitter/platforms/android/twitter-release.aar
+!packages/pdf/platforms/android/android-pdf-viewer-release.aar
+!packages/pdf/platforms/android/PdfiumAndroid-1.0.1.aar
# iOS:
packages/**/native-src/ios/**/xcuserdata/
packages/**/native-src/ios/**/project.xcworkspace/
packages/**/native-src/ios/**/build
-
-# Ionic Portals and testing
-!packages/ionic-portals/platforms/android/IonicPortals-release.aar
-tools/assets/App_Resources/iOS/ionicWebPortalSample
-tools/assets/App_Resources/Android/src/main/assets/ionicWebPortalSample
-tools/assets/App_Resources/iOS/ionicWebStart
-tools/assets/App_Resources/Android/src/main/assets/ionicWebStart
-tools/assets/App_Resources/iOS/ionicWebModal
-tools/assets/App_Resources/Android/src/main/assets/ionicWebModal
\ No newline at end of file
+.nx/cache
+.nx/workspace-data
diff --git a/.prettierignore b/.prettierignore
index 413ca148..342760ab 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -3,3 +3,6 @@
/dist
/coverage
native-src
+
+/.nx/cache
+/.nx/workspace-data
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..87d5206d
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,86 @@
+{
+ "files.exclude": {
+ "**/apps/demo": false,
+ "**/apps/demo-angular": false,
+ "**/packages/animated-circle": false,
+ "**/packages/appavailability": false,
+ "**/packages/apple-sign-in": false,
+ "**/packages/auth0": false,
+ "**/packages/auto-fit-text": false,
+ "**/packages/background-http": false,
+ "**/packages/biometrics": false,
+ "**/packages/brightness": false,
+ "**/packages/camera": false,
+ "**/packages/contacts": false,
+ "**/packages/datetimepicker": false,
+ "**/packages/debug-android": false,
+ "**/packages/debug-ios": false,
+ "**/packages/detox": false,
+ "**/packages/directions": false,
+ "**/packages/email": false,
+ "**/packages/facebook": false,
+ "**/packages/fingerprint-auth": false,
+ "**/packages/geolocation": false,
+ "**/packages/google-maps": false,
+ "**/packages/google-signin": false,
+ "**/packages/haptics": false,
+ "**/packages/imagepicker": false,
+ "**/packages/ios-security": false,
+ "**/packages/iqkeyboardmanager": false,
+ "**/packages/keyboard-toolbar": false,
+ "**/packages/local-notifications": false,
+ "**/packages/localize": false,
+ "**/packages/pdf": false,
+ "**/packages/picker": false,
+ "**/packages/secure-storage": false,
+ "**/packages/shared-notification-delegate": false,
+ "**/packages/social-share": false,
+ "**/packages/theme-switcher": false,
+ "**/packages/twitter": false,
+ "**/packages/zip": false,
+ "**/packages/google-maps-utils": false,
+ "**/packages/google-mobile-ads": false
+ },
+ "search.exclude": {
+ "**/apps/demo": false,
+ "**/apps/demo-angular": false,
+ "**/packages/animated-circle": false,
+ "**/packages/appavailability": false,
+ "**/packages/apple-sign-in": false,
+ "**/packages/auth0": false,
+ "**/packages/auto-fit-text": false,
+ "**/packages/background-http": false,
+ "**/packages/biometrics": false,
+ "**/packages/brightness": false,
+ "**/packages/camera": false,
+ "**/packages/contacts": false,
+ "**/packages/datetimepicker": false,
+ "**/packages/debug-android": false,
+ "**/packages/debug-ios": false,
+ "**/packages/detox": false,
+ "**/packages/directions": false,
+ "**/packages/email": false,
+ "**/packages/facebook": false,
+ "**/packages/fingerprint-auth": false,
+ "**/packages/geolocation": false,
+ "**/packages/google-maps": false,
+ "**/packages/google-signin": false,
+ "**/packages/haptics": false,
+ "**/packages/imagepicker": false,
+ "**/packages/ios-security": false,
+ "**/packages/iqkeyboardmanager": false,
+ "**/packages/keyboard-toolbar": false,
+ "**/packages/local-notifications": false,
+ "**/packages/localize": false,
+ "**/packages/pdf": false,
+ "**/packages/picker": false,
+ "**/packages/secure-storage": false,
+ "**/packages/shared-notification-delegate": false,
+ "**/packages/social-share": false,
+ "**/packages/theme-switcher": false,
+ "**/packages/twitter": false,
+ "**/packages/zip": false,
+ "**/packages/google-maps-utils": false,
+ "**/packages/google-mobile-ads": false
+ }
+}
diff --git a/README.md b/README.md
index d6128517..88c2ba81 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,3 @@
-# @nativescript/\* plugins
-
-```
-npm run setup
-npm start
-```
-
- [@nativescript/animated-circle](packages/animated-circle/README.md)
- [@nativescript/appavailability](packages/appavailability/README.md)
- [@nativescript/apple-sign-in](packages/apple-sign-in/README.md)
@@ -24,20 +17,22 @@ npm start
- [@nativescript/fingerprint-auth](packages/fingerprint-auth/README.md)
- [@nativescript/geolocation](packages/geolocation/README.md)
- [@nativescript/google-maps](packages/google-maps/README.md)
+- [@nativescript/google-maps-utils](packages/google-maps-utils/README.md)
+- [@nativescript/google-mobile-ads](packages/google-mobile-ads/README.md)
- [@nativescript/google-signin](packages/google-signin/README.md)
- [@nativescript/haptics](packages/haptics/README.md)
- [@nativescript/imagepicker](packages/imagepicker/README.md)
-- [@nativescript/ionic-portals](packages/ionic-portals/README.md)
+- [@nativescript/input-accessory](packages/input-accessory/README.md)
- [@nativescript/ios-security](packages/ios-security/README.md)
- [@nativescript/iqkeyboardmanager](packages/iqkeyboardmanager/README.md)
-- [@nativescript/jetpack-compose](packages/jetpack-compose/README.md)
+- [@nativescript/keyboard-toolbar](packages/keyboard-toolbar/README.md)
- [@nativescript/local-notifications](packages/local-notifications/README.md)
- [@nativescript/localize](packages/localize/README.md)
- [@nativescript/pdf](packages/pdf/README.md)
- [@nativescript/picker](packages/picker/README.md)
+- [@nativescript/secure-storage](packages/secure-storage/README.md)
- [@nativescript/shared-notification-delegate](packages/shared-notification-delegate/README.md)
- [@nativescript/social-share](packages/social-share/README.md)
-- [@nativescript/swift-ui](packages/swift-ui/README.md)
- [@nativescript/theme-switcher](packages/theme-switcher/README.md)
- [@nativescript/twitter](packages/twitter/README.md)
- [@nativescript/zip](packages/zip/README.md)
@@ -48,15 +43,7 @@ This workspace manages the suite of plugins listed above.
## Prerequisites
-- Node 18+ is recommended
-- [yarn v1](https://classic.yarnpkg.com/lang/en/docs/install/#mac-stable) is required
-
-### Note about "focus modes"
-
-`npm start` > `focus.{any-plugin}` ENTER will focus the workspace to a single plugin for working on it in isolation.
-
-Generally we try to keep "UI" plugins away from "SDK" related plugins since UI plugins often bring in aspects which may need more resource setup. For example, since the swift-ui plugin is currently managed here, we have testing code for it here: https://github.com/NativeScript/plugins/blob/main/tools/assets/App_Resources/iOS/src/BasicViewProvider.swift ... however when focusing on any other plugins, you would need to rename those .swift > .off so they aren't included in the demo to work with other plugins. Since the supporting .swift files include SwiftUIProvider which comes from only the swift-ui plugin.
-To help contributors in the future, we will likely split some of these plugins out across other workspaces to pair it down. For now that tip can be applied where needed to work on any plugin.
+- Node 20+ is recommended
In general, when in doubt with what to do, just `npm start`.
diff --git a/apps/demo-angular/.gitignore b/apps/demo-angular/.gitignore
deleted file mode 100644
index 74ba2bce..00000000
--- a/apps/demo-angular/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-hooks
-platforms
-!webpack.config.js
\ No newline at end of file
diff --git a/apps/demo-angular/nativescript.config.ts b/apps/demo-angular/nativescript.config.ts
deleted file mode 100644
index 4547ad0d..00000000
--- a/apps/demo-angular/nativescript.config.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { NativeScriptConfig } from '@nativescript/core';
-
-export default {
- id: 'org.nativescript.plugindemoangular',
- appResourcesPath: '../../tools/assets/App_Resources',
- android: {
- v8Flags: '--expose_gc',
- markingMode: 'none',
- },
- appPath: 'src',
- cli: {
- packageManager: 'npm'
- }
-} as NativeScriptConfig;
diff --git a/apps/demo-angular/package.json b/apps/demo-angular/package.json
deleted file mode 100644
index d48f8d29..00000000
--- a/apps/demo-angular/package.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "main": "./src/main.ts",
- "dependencies": {
- "@nativescript/core": "file:../../node_modules/@nativescript/core",
- "@nativescript/jetpack-compose": "file:../../dist/packages/jetpack-compose",
- "@nativescript/animated-circle": "file:../../dist/packages/animated-circle",
- "@nativescript/appavailability": "file:../../dist/packages/appavailability",
- "@nativescript/apple-sign-in": "file:../../dist/packages/apple-sign-in",
- "@nativescript/auto-fit-text": "file:../../dist/packages/auto-fit-text",
- "@nativescript/background-http": "file:../../dist/packages/background-http",
- "@nativescript/biometrics": "file:../../dist/packages/biometrics",
- "@nativescript/brightness": "file:../../dist/packages/brightness",
- "@nativescript/camera": "file:../../dist/packages/camera",
- "@nativescript/contacts": "file:../../dist/packages/contacts",
- "@nativescript/datetimepicker": "file:../../dist/packages/datetimepicker",
- "@nativescript/debug-android": "file:../../dist/packages/debug-android",
- "@nativescript/debug-ios": "file:../../dist/packages/debug-ios",
- "@nativescript/detox": "file:../../dist/packages/detox",
- "@nativescript/directions": "file:../../dist/packages/directions",
- "@nativescript/email": "file:../../dist/packages/email",
- "@nativescript/facebook": "file:../../dist/packages/facebook",
- "@nativescript/fingerprint-auth": "file:../../dist/packages/fingerprint-auth",
- "@nativescript/geolocation": "file:../../dist/packages/geolocation",
- "@nativescript/google-maps": "file:../../dist/packages/google-maps",
- "@nativescript/google-signin": "file:../../dist/packages/google-signin",
- "@nativescript/haptics": "file:../../dist/packages/haptics",
- "@nativescript/imagepicker": "file:../../dist/packages/imagepicker",
- "@nativescript/ionic-portals": "file:../../dist/packages/ionic-portals",
- "@nativescript/ios-security": "file:../../dist/packages/ios-security",
- "@nativescript/iqkeyboardmanager": "file:../../dist/packages/iqkeyboardmanager",
- "@nativescript/local-notifications": "file:../../dist/packages/local-notifications",
- "@nativescript/localize": "file:../../dist/packages/localize",
- "@nativescript/pdf": "file:../../dist/packages/pdf",
- "@nativescript/picker": "file:../../dist/packages/picker",
- "@nativescript/shared-notification-delegate": "file:../../dist/packages/shared-notification-delegate",
- "@nativescript/social-share": "file:../../dist/packages/social-share",
- "@nativescript/swift-ui": "file:../../dist/packages/swift-ui",
- "@nativescript/theme-switcher": "file:../../dist/packages/theme-switcher",
- "@nativescript/twitter": "file:../../dist/packages/twitter",
- "@nativescript/zip": "file:../../dist/packages/zip"
- },
- "devDependencies": {
- "@nativescript/android": "~8.5.0",
- "@nativescript/ios": "~8.5.0"
- }
-}
diff --git a/apps/demo-angular/project.json b/apps/demo-angular/project.json
deleted file mode 100644
index 0d6bb29f..00000000
--- a/apps/demo-angular/project.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "name": "demo-angular",
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
- "sourceRoot": "apps/demo-angular/src",
- "projectType": "application",
- "prefix": "demo",
- "targets": {
- "build": {
- "executor": "@nativescript/nx:build",
- "options": {
- "noHmr": true,
- "production": true,
- "uglify": true,
- "release": true,
- "forDevice": true
- },
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- }
- ]
- },
- "ios": {
- "executor": "@nativescript/nx:build",
- "options": {
- "platform": "ios",
- "noHmr": true
- },
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- }
- ]
- },
- "android": {
- "executor": "@nativescript/nx:build",
- "options": {
- "platform": "android",
- "noHmr": true
- },
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- }
- ]
- },
- "clean": {
- "executor": "@nativescript/nx:build",
- "options": {
- "clean": true
- }
- },
- "lint": {
- "executor": "@nrwl/linter:eslint",
- "options": {
- "lintFilePatterns": ["apps/demo-angular/**/*.ts"]
- }
- }
- }
-}
diff --git a/apps/demo-angular/src/app-routing.module.ts b/apps/demo-angular/src/app-routing.module.ts
deleted file mode 100644
index cefc7451..00000000
--- a/apps/demo-angular/src/app-routing.module.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import { NgModule } from '@angular/core';
-import { Routes } from '@angular/router';
-import { NativeScriptRouterModule } from '@nativescript/angular';
-
-import { HomeComponent } from './home.component';
-
-const routes: Routes = [
- { path: '', redirectTo: '/home', pathMatch: 'full' },
- { path: 'home', component: HomeComponent },
- { path: 'animated-circle', loadChildren: () => import('./plugin-demos/animated-circle.module').then((m) => m.AnimatedCircleModule) },
- { path: 'appavailability', loadChildren: () => import('./plugin-demos/appavailability.module').then((m) => m.AppavailabilityModule) },
- { path: 'apple-sign-in', loadChildren: () => import('./plugin-demos/apple-sign-in.module').then((m) => m.AppleSignInModule) },
- { path: 'auto-fit-text', loadChildren: () => import('./plugin-demos/auto-fit-text.module').then((m) => m.AutoFitTextModule) },
- { path: 'background-http', loadChildren: () => import('./plugin-demos/background-http.module').then((m) => m.BackgroundHttpModule) },
- { path: 'biometrics', loadChildren: () => import('./plugin-demos/biometrics.module').then((m) => m.BiometricsModule) },
- { path: 'brightness', loadChildren: () => import('./plugin-demos/brightness.module').then((m) => m.BrightnessModule) },
- { path: 'camera', loadChildren: () => import('./plugin-demos/camera.module').then((m) => m.CameraModule) },
- { path: 'contacts', loadChildren: () => import('./plugin-demos/contacts.module').then((m) => m.ContactsModule) },
- { path: 'datetimepicker', loadChildren: () => import('./plugin-demos/datetimepicker.module').then((m) => m.DatetimepickerModule) },
- { path: 'debug-android', loadChildren: () => import('./plugin-demos/debug-android.module').then((m) => m.DebugAndroidModule) },
- { path: 'debug-ios', loadChildren: () => import('./plugin-demos/debug-ios.module').then((m) => m.DebugIosModule) },
- { path: 'detox', loadChildren: () => import('./plugin-demos/detox.module').then((m) => m.DetoxModule) },
- { path: 'directions', loadChildren: () => import('./plugin-demos/directions.module').then((m) => m.DirectionsModule) },
- { path: 'email', loadChildren: () => import('./plugin-demos/email.module').then((m) => m.EmailModule) },
- { path: 'facebook', loadChildren: () => import('./plugin-demos/facebook.module').then((m) => m.FacebookModule) },
- { path: 'fingerprint-auth', loadChildren: () => import('./plugin-demos/fingerprint-auth.module').then((m) => m.FingerprintAuthModule) },
- { path: 'geolocation', loadChildren: () => import('./plugin-demos/geolocation.module').then((m) => m.GeolocationModule) },
- { path: 'google-maps', loadChildren: () => import('./plugin-demos/google-maps.module').then((m) => m.GoogleMapsModule) },
- { path: 'google-signin', loadChildren: () => import('./plugin-demos/google-signin.module').then((m) => m.GoogleSigninModule) },
- { path: 'haptics', loadChildren: () => import('./plugin-demos/haptics.module').then((m) => m.HapticsModule) },
- { path: 'imagepicker', loadChildren: () => import('./plugin-demos/imagepicker.module').then((m) => m.ImagepickerModule) },
- { path: 'ionic-portals', loadChildren: () => import('./plugin-demos/ionic-portals.module').then((m) => m.IonicPortalsModule) },
- { path: 'ios-security', loadChildren: () => import('./plugin-demos/ios-security.module').then((m) => m.IosSecurityModule) },
- { path: 'iqkeyboardmanager', loadChildren: () => import('./plugin-demos/iqkeyboardmanager.module').then((m) => m.IqkeyboardmanagerModule) },
- { path: 'jetpack-compose', loadChildren: () => import('./plugin-demos/jetpack-compose.module').then((m) => m.JetpackComposeModule) },
- { path: 'local-notifications', loadChildren: () => import('./plugin-demos/local-notifications.module').then((m) => m.LocalNotificationsModule) },
- { path: 'localize', loadChildren: () => import('./plugin-demos/localize.module').then((m) => m.LocalizeModule) },
- { path: 'pdf', loadChildren: () => import('./plugin-demos/pdf.module').then((m) => m.PdfModule) },
- { path: 'picker', loadChildren: () => import('./plugin-demos/picker.module').then((m) => m.PickerModule) },
- { path: 'shared-notification-delegate', loadChildren: () => import('./plugin-demos/shared-notification-delegate.module').then((m) => m.SharedNotificationDelegateModule) },
- { path: 'social-share', loadChildren: () => import('./plugin-demos/social-share.module').then((m) => m.SocialShareModule) },
- { path: 'swift-ui', loadChildren: () => import('./plugin-demos/swift-ui.module').then((m) => m.SwiftUiModule) },
- { path: 'theme-switcher', loadChildren: () => import('./plugin-demos/theme-switcher.module').then((m) => m.ThemeSwitcherModule) },
- { path: 'twitter', loadChildren: () => import('./plugin-demos/twitter.module').then((m) => m.TwitterModule) },
- { path: 'zip', loadChildren: () => import('./plugin-demos/zip.module').then((m) => m.ZipModule) },
-];
-
-@NgModule({
- imports: [NativeScriptRouterModule.forRoot(routes)],
- exports: [NativeScriptRouterModule],
-})
-export class AppRoutingModule {}
diff --git a/apps/demo-angular/src/app.component.ts b/apps/demo-angular/src/app.component.ts
deleted file mode 100644
index e37a75f9..00000000
--- a/apps/demo-angular/src/app.component.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { Component } from '@angular/core';
-
-@Component({
- selector: 'demo-app',
- template: `
-
- `,
-})
-export class AppComponent {}
diff --git a/apps/demo-angular/src/app.module.ts b/apps/demo-angular/src/app.module.ts
deleted file mode 100644
index c869e4d1..00000000
--- a/apps/demo-angular/src/app.module.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
-import { NativeScriptModule } from '@nativescript/angular';
-
-import { AppComponent } from './app.component';
-import { AppRoutingModule } from './app-routing.module';
-import { HomeComponent } from './home.component';
-
-@NgModule({
- schemas: [NO_ERRORS_SCHEMA],
- declarations: [AppComponent, HomeComponent],
- bootstrap: [AppComponent],
- imports: [NativeScriptModule, AppRoutingModule],
-})
-export class AppModule {}
diff --git a/apps/demo-angular/src/app.scss b/apps/demo-angular/src/app.scss
deleted file mode 100644
index 882864e3..00000000
--- a/apps/demo-angular/src/app.scss
+++ /dev/null
@@ -1,22 +0,0 @@
-@import 'nativescript-theme-core/scss/light';
- @import 'nativescript-theme-core/scss/index';
-
-button, label, stack-layout {
- horizontal-align: center;
-}
-
-button {
- font-size: 36;
-}
-
-.title {
- font-size: 30;
- margin: 20;
-}
-
-.message {
- font-size: 20;
- color: #284848;
- text-align: center;
- margin: 0 20;
-}
diff --git a/apps/demo-angular/src/home.component.html b/apps/demo-angular/src/home.component.html
deleted file mode 100644
index 9f87d8d2..00000000
--- a/apps/demo-angular/src/home.component.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/demo-angular/src/home.component.ts b/apps/demo-angular/src/home.component.ts
deleted file mode 100644
index 863f9cb6..00000000
--- a/apps/demo-angular/src/home.component.ts
+++ /dev/null
@@ -1,118 +0,0 @@
-import { Component } from '@angular/core';
-
-@Component({
- selector: 'demo-home',
- templateUrl: 'home.component.html',
-})
-export class HomeComponent {
- demos = [
- {
- name: 'animated-circle',
- },
- {
- name: 'appavailability',
- },
- {
- name: 'apple-sign-in',
- },
- {
- name: 'auto-fit-text',
- },
- {
- name: 'background-http',
- },
- {
- name: 'biometrics',
- },
- {
- name: 'brightness',
- },
- {
- name: 'camera',
- },
- {
- name: 'contacts',
- },
- {
- name: 'datetimepicker',
- },
- {
- name: 'debug-android',
- },
- {
- name: 'debug-ios',
- },
- {
- name: 'detox',
- },
- {
- name: 'directions',
- },
- {
- name: 'email',
- },
- {
- name: 'facebook',
- },
- {
- name: 'fingerprint-auth',
- },
- {
- name: 'geolocation',
- },
- {
- name: 'google-maps',
- },
- {
- name: 'google-signin',
- },
- {
- name: 'haptics',
- },
- {
- name: 'imagepicker',
- },
- {
- name: 'ionic-portals',
- },
- {
- name: 'ios-security',
- },
- {
- name: 'iqkeyboardmanager',
- },
- {
- name: 'jetpack-compose',
- },
- {
- name: 'local-notifications',
- },
- {
- name: 'localize',
- },
- {
- name: 'pdf',
- },
- {
- name: 'picker',
- },
- {
- name: 'shared-notification-delegate',
- },
- {
- name: 'social-share',
- },
- {
- name: 'swift-ui',
- },
- {
- name: 'theme-switcher',
- },
- {
- name: 'twitter',
- },
- {
- name: 'zip',
- },
- ];
-}
diff --git a/apps/demo-angular/src/i18n/en.default.js b/apps/demo-angular/src/i18n/en.default.js
deleted file mode 100644
index 309d7bfd..00000000
--- a/apps/demo-angular/src/i18n/en.default.js
+++ /dev/null
@@ -1,3 +0,0 @@
-const translations = require('../../../demo/src/i18n/en');
-translations['app.name'] = 'NSL NG Demo';
-module.exports = translations;
diff --git a/apps/demo-angular/src/main.ts b/apps/demo-angular/src/main.ts
deleted file mode 100644
index 1658c2cf..00000000
--- a/apps/demo-angular/src/main.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { runNativeScriptAngularApp, platformNativeScript } from '@nativescript/angular';
-import { AppModule } from './app.module';
-
-runNativeScriptAngularApp({
- appModuleBootstrap: () => platformNativeScript().bootstrapModule(AppModule),
-});
-
\ No newline at end of file
diff --git a/apps/demo-angular/src/plugin-demos/animated-circle.component.html b/apps/demo-angular/src/plugin-demos/animated-circle.component.html
deleted file mode 100644
index 9660fd97..00000000
--- a/apps/demo-angular/src/plugin-demos/animated-circle.component.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/apps/demo-angular/src/plugin-demos/animated-circle.component.ts b/apps/demo-angular/src/plugin-demos/animated-circle.component.ts
deleted file mode 100644
index cb11fc27..00000000
--- a/apps/demo-angular/src/plugin-demos/animated-circle.component.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Component, NgZone } from '@angular/core';
-import { DemoSharedAnimatedCircle } from '@demo/shared';
-import { } from '@nativescript/animated-circle';
-
-@Component({
- selector: 'demo-animated-circle',
- templateUrl: 'animated-circle.component.html',
-})
-export class AnimatedCircleComponent {
- demoShared: DemoSharedAnimatedCircle;
- circleProgress: number = 30;
-
- constructor(private _ngZone: NgZone) {}
-
- ngOnInit() {
- this.demoShared = new DemoSharedAnimatedCircle();
-
- setInterval(() => {
- if (this.circleProgress === 100) {
- this.circleProgress = 0;
- }
- this.circleProgress++;
- }, 100);
- }
-}
diff --git a/apps/demo-angular/src/plugin-demos/animated-circle.module.ts b/apps/demo-angular/src/plugin-demos/animated-circle.module.ts
deleted file mode 100644
index 212bdd9c..00000000
--- a/apps/demo-angular/src/plugin-demos/animated-circle.module.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
-import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
-import { NativeScriptAnimatedCircleModule } from '@nativescript/animated-circle/angular';
-import { AnimatedCircleComponent } from './animated-circle.component';
-
-@NgModule({
- imports: [NativeScriptCommonModule, NativeScriptAnimatedCircleModule, NativeScriptRouterModule.forChild([{ path: '', component: AnimatedCircleComponent }])],
- declarations: [AnimatedCircleComponent],
- schemas: [NO_ERRORS_SCHEMA],
-})
-export class AnimatedCircleModule {}
diff --git a/apps/demo-angular/src/plugin-demos/appavailability.component.html b/apps/demo-angular/src/plugin-demos/appavailability.component.html
deleted file mode 100644
index d245cc36..00000000
--- a/apps/demo-angular/src/plugin-demos/appavailability.component.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/apps/demo-angular/src/plugin-demos/appavailability.component.ts b/apps/demo-angular/src/plugin-demos/appavailability.component.ts
deleted file mode 100644
index ed969f01..00000000
--- a/apps/demo-angular/src/plugin-demos/appavailability.component.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Component, NgZone } from '@angular/core';
-import { DemoSharedAppavailability } from '@demo/shared';
-import {} from '@nativescript/appavailability';
-
-@Component({
- selector: 'demo-appavailability',
- templateUrl: 'appavailability.component.html',
-})
-export class AppavailabilityComponent {
- demoShared: DemoSharedAppavailability;
-
- constructor(private _ngZone: NgZone) {}
-
- ngOnInit() {
- this.demoShared = new DemoSharedAppavailability();
- }
-}
diff --git a/apps/demo-angular/src/plugin-demos/appavailability.module.ts b/apps/demo-angular/src/plugin-demos/appavailability.module.ts
deleted file mode 100644
index 83382adc..00000000
--- a/apps/demo-angular/src/plugin-demos/appavailability.module.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
-import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
-import { AppavailabilityComponent } from './appavailability.component';
-
-@NgModule({
- imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: AppavailabilityComponent }])],
- declarations: [AppavailabilityComponent],
- schemas: [NO_ERRORS_SCHEMA],
-})
-export class AppavailabilityModule {}
diff --git a/apps/demo-angular/src/plugin-demos/apple-sign-in.component.html b/apps/demo-angular/src/plugin-demos/apple-sign-in.component.html
deleted file mode 100644
index 6959fe0b..00000000
--- a/apps/demo-angular/src/plugin-demos/apple-sign-in.component.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/apps/demo-angular/src/plugin-demos/apple-sign-in.component.ts b/apps/demo-angular/src/plugin-demos/apple-sign-in.component.ts
deleted file mode 100644
index 10d840b0..00000000
--- a/apps/demo-angular/src/plugin-demos/apple-sign-in.component.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Component, NgZone } from '@angular/core';
-import { DemoSharedAppleSignIn } from '@demo/shared';
-import { } from '@nativescript/apple-sign-in';
-
-@Component({
- selector: 'demo-apple-sign-in',
- templateUrl: 'apple-sign-in.component.html',
-})
-export class AppleSignInComponent {
-
- demoShared: DemoSharedAppleSignIn;
-
- constructor(private _ngZone: NgZone) {}
-
- ngOnInit() {
- this.demoShared = new DemoSharedAppleSignIn();
- }
-
-}
\ No newline at end of file
diff --git a/apps/demo-angular/src/plugin-demos/apple-sign-in.module.ts b/apps/demo-angular/src/plugin-demos/apple-sign-in.module.ts
deleted file mode 100644
index c5cdc0bc..00000000
--- a/apps/demo-angular/src/plugin-demos/apple-sign-in.module.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
-import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
-import { AppleSignInComponent } from './apple-sign-in.component';
-
-@NgModule({
- imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: AppleSignInComponent }])],
- declarations: [AppleSignInComponent],
- schemas: [ NO_ERRORS_SCHEMA]
-})
-export class AppleSignInModule {}
diff --git a/apps/demo-angular/src/plugin-demos/auto-fit-text.component.html b/apps/demo-angular/src/plugin-demos/auto-fit-text.component.html
deleted file mode 100644
index 49367398..00000000
--- a/apps/demo-angular/src/plugin-demos/auto-fit-text.component.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/apps/demo-angular/src/plugin-demos/auto-fit-text.component.ts b/apps/demo-angular/src/plugin-demos/auto-fit-text.component.ts
deleted file mode 100644
index 7cc62288..00000000
--- a/apps/demo-angular/src/plugin-demos/auto-fit-text.component.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Component, NgZone } from '@angular/core';
-import { DemoSharedAutoFitText } from '@demo/shared';
-import { } from '@nativescript/auto-fit-text';
-
-@Component({
- selector: 'demo-auto-fit-text',
- templateUrl: 'auto-fit-text.component.html',
-})
-export class AutoFitTextComponent {
- demoShared: DemoSharedAutoFitText;
-
- constructor(private _ngZone: NgZone) {}
-
- ngOnInit() {
- this.demoShared = new DemoSharedAutoFitText();
- }
-}
diff --git a/apps/demo-angular/src/plugin-demos/auto-fit-text.module.ts b/apps/demo-angular/src/plugin-demos/auto-fit-text.module.ts
deleted file mode 100644
index 1d57957d..00000000
--- a/apps/demo-angular/src/plugin-demos/auto-fit-text.module.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
-import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
-import { NativeScriptAutoFitTextModule } from '@nativescript/auto-fit-text/angular';
-import { AutoFitTextComponent } from './auto-fit-text.component';
-
-@NgModule({
- imports: [NativeScriptCommonModule, NativeScriptAutoFitTextModule, NativeScriptRouterModule.forChild([{ path: '', component: AutoFitTextComponent }])],
- declarations: [AutoFitTextComponent],
- schemas: [NO_ERRORS_SCHEMA],
-})
-export class AutoFitTextModule {}
diff --git a/apps/demo-angular/src/plugin-demos/background-http.component.html b/apps/demo-angular/src/plugin-demos/background-http.component.html
deleted file mode 100644
index f4ee62c0..00000000
--- a/apps/demo-angular/src/plugin-demos/background-http.component.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/apps/demo-angular/src/plugin-demos/background-http.component.ts b/apps/demo-angular/src/plugin-demos/background-http.component.ts
deleted file mode 100644
index 30e5d77b..00000000
--- a/apps/demo-angular/src/plugin-demos/background-http.component.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Component, NgZone } from '@angular/core';
-import { DemoSharedBackgroundHttp } from '@demo/shared';
-import {} from '@nativescript/background-http';
-
-@Component({
- selector: 'demo-background-http',
- templateUrl: 'background-http.component.html',
-})
-export class BackgroundHttpComponent {
- demoShared: DemoSharedBackgroundHttp;
-
- constructor(private _ngZone: NgZone) {}
-
- ngOnInit() {
- this.demoShared = new DemoSharedBackgroundHttp();
- }
-}
diff --git a/apps/demo-angular/src/plugin-demos/background-http.module.ts b/apps/demo-angular/src/plugin-demos/background-http.module.ts
deleted file mode 100644
index 7c209c66..00000000
--- a/apps/demo-angular/src/plugin-demos/background-http.module.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
-import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
-import { BackgroundHttpComponent } from './background-http.component';
-
-@NgModule({
- imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: BackgroundHttpComponent }])],
- declarations: [BackgroundHttpComponent],
- schemas: [NO_ERRORS_SCHEMA],
-})
-export class BackgroundHttpModule {}
diff --git a/apps/demo-angular/src/plugin-demos/biometrics.component.html b/apps/demo-angular/src/plugin-demos/biometrics.component.html
deleted file mode 100644
index 6349dae7..00000000
--- a/apps/demo-angular/src/plugin-demos/biometrics.component.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/demo-angular/src/plugin-demos/biometrics.component.ts b/apps/demo-angular/src/plugin-demos/biometrics.component.ts
deleted file mode 100644
index ec4fec1c..00000000
--- a/apps/demo-angular/src/plugin-demos/biometrics.component.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Component, NgZone } from '@angular/core';
-import { DemoSharedBiometrics } from '@demo/shared';
-import {} from '@nativescript/biometrics';
-
-@Component({
- selector: 'demo-biometrics',
- templateUrl: 'biometrics.component.html',
-})
-export class BiometricsComponent {
- demoShared: DemoSharedBiometrics;
-
- constructor(private _ngZone: NgZone) {}
-
- ngOnInit() {
- this.demoShared = new DemoSharedBiometrics();
- }
-}
diff --git a/apps/demo-angular/src/plugin-demos/biometrics.module.ts b/apps/demo-angular/src/plugin-demos/biometrics.module.ts
deleted file mode 100644
index 59fb7188..00000000
--- a/apps/demo-angular/src/plugin-demos/biometrics.module.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
-import { NativeScriptCommonModule, NativeScriptRouterModule, NativeScriptFormsModule } from '@nativescript/angular';
-import { BiometricsComponent } from './biometrics.component';
-
-@NgModule({
- imports: [NativeScriptCommonModule, NativeScriptFormsModule, NativeScriptRouterModule.forChild([{ path: '', component: BiometricsComponent }])],
- declarations: [BiometricsComponent],
- schemas: [NO_ERRORS_SCHEMA],
-})
-export class BiometricsModule {}
diff --git a/apps/demo-angular/src/plugin-demos/brightness.component.html b/apps/demo-angular/src/plugin-demos/brightness.component.html
deleted file mode 100644
index 551b4eed..00000000
--- a/apps/demo-angular/src/plugin-demos/brightness.component.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/apps/demo-angular/src/plugin-demos/brightness.component.ts b/apps/demo-angular/src/plugin-demos/brightness.component.ts
deleted file mode 100644
index 3d09f66f..00000000
--- a/apps/demo-angular/src/plugin-demos/brightness.component.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Component, NgZone } from '@angular/core';
-import { DemoSharedBrightness } from '@demo/shared';
-import {} from '@nativescript/brightness';
-
-@Component({
- selector: 'demo-brightness',
- templateUrl: 'brightness.component.html',
-})
-export class BrightnessComponent {
- demoShared: DemoSharedBrightness;
-
- constructor(private _ngZone: NgZone) {}
-
- ngOnInit() {
- this.demoShared = new DemoSharedBrightness();
- }
-}
diff --git a/apps/demo-angular/src/plugin-demos/brightness.module.ts b/apps/demo-angular/src/plugin-demos/brightness.module.ts
deleted file mode 100644
index 0cd444b8..00000000
--- a/apps/demo-angular/src/plugin-demos/brightness.module.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
-import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
-import { BrightnessComponent } from './brightness.component';
-
-@NgModule({
- imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: BrightnessComponent }])],
- declarations: [BrightnessComponent],
- schemas: [NO_ERRORS_SCHEMA],
-})
-export class BrightnessModule {}
diff --git a/apps/demo-angular/src/plugin-demos/camera.component.html b/apps/demo-angular/src/plugin-demos/camera.component.html
deleted file mode 100644
index 3b200113..00000000
--- a/apps/demo-angular/src/plugin-demos/camera.component.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/apps/demo-angular/src/plugin-demos/camera.component.ts b/apps/demo-angular/src/plugin-demos/camera.component.ts
deleted file mode 100644
index 55d69ad0..00000000
--- a/apps/demo-angular/src/plugin-demos/camera.component.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Component, NgZone } from '@angular/core';
-import { DemoSharedCamera } from '@demo/shared';
-import {} from '@nativescript/camera';
-
-@Component({
- selector: 'demo-camera',
- templateUrl: 'camera.component.html',
-})
-export class CameraComponent {
- demoShared: DemoSharedCamera;
-
- constructor(private _ngZone: NgZone) {}
-
- ngOnInit() {
- this.demoShared = new DemoSharedCamera();
- }
-}
diff --git a/apps/demo-angular/src/plugin-demos/camera.module.ts b/apps/demo-angular/src/plugin-demos/camera.module.ts
deleted file mode 100644
index 4627c386..00000000
--- a/apps/demo-angular/src/plugin-demos/camera.module.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
-import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
-import { CameraComponent } from './camera.component';
-
-@NgModule({
- imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: CameraComponent }])],
- declarations: [CameraComponent],
- schemas: [NO_ERRORS_SCHEMA],
-})
-export class CameraModule {}
diff --git a/apps/demo-angular/src/plugin-demos/contacts.component.html b/apps/demo-angular/src/plugin-demos/contacts.component.html
deleted file mode 100644
index 5b8a38eb..00000000
--- a/apps/demo-angular/src/plugin-demos/contacts.component.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/apps/demo-angular/src/plugin-demos/contacts.component.ts b/apps/demo-angular/src/plugin-demos/contacts.component.ts
deleted file mode 100644
index 3d785a66..00000000
--- a/apps/demo-angular/src/plugin-demos/contacts.component.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Component, NgZone } from '@angular/core';
-import { DemoSharedContacts } from '@demo/shared';
-import { } from '@nativescript/contacts';
-
-@Component({
- selector: 'demo-contacts',
- templateUrl: 'contacts.component.html',
-})
-export class ContactsComponent {
-
- demoShared: DemoSharedContacts;
-
- constructor(private _ngZone: NgZone) {}
-
- ngOnInit() {
- this.demoShared = new DemoSharedContacts();
- }
-
-}
\ No newline at end of file
diff --git a/apps/demo-angular/src/plugin-demos/contacts.module.ts b/apps/demo-angular/src/plugin-demos/contacts.module.ts
deleted file mode 100644
index 05cf565d..00000000
--- a/apps/demo-angular/src/plugin-demos/contacts.module.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
-import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
-import { ContactsComponent } from './contacts.component';
-
-@NgModule({
- imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: ContactsComponent }])],
- declarations: [ContactsComponent],
- schemas: [ NO_ERRORS_SCHEMA]
-})
-export class ContactsModule {}
diff --git a/apps/demo-angular/src/plugin-demos/datetimepicker.component.html b/apps/demo-angular/src/plugin-demos/datetimepicker.component.html
deleted file mode 100644
index d668e1e4..00000000
--- a/apps/demo-angular/src/plugin-demos/datetimepicker.component.html
+++ /dev/null
@@ -1,155 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/demo-angular/src/plugin-demos/datetimepicker.component.ts b/apps/demo-angular/src/plugin-demos/datetimepicker.component.ts
deleted file mode 100644
index 7e9e9559..00000000
--- a/apps/demo-angular/src/plugin-demos/datetimepicker.component.ts
+++ /dev/null
@@ -1,188 +0,0 @@
-import { Component, NgZone, ViewChild, ElementRef } from '@angular/core';
-import { Device, EventData, isIOS, Button } from '@nativescript/core';
-import { DateTimePicker } from '@nativescript/datetimepicker';
-
-@Component({
- selector: 'demo-datetimepicker',
- templateUrl: 'datetimepicker.component.html',
- styles: [
- `
- .content {
- font-size: 16;
- font-weight: bold;
- margin-top: 12;
- margin-bottom: 6;
- color: #303f9f;
- }
-
- .header {
- font-size: 16;
- margin-top: 12;
- margin-bottom: 6;
- color: white;
- background-color: #2196f3;
- text-align: center;
- }
-
- label {
- padding: 6 4;
- }
-
- timepickerfield,
- datepickerfield {
- padding: 12 4;
- }
-
- timepickerfield.apply-css,
- datepickerfield.apply-css {
- color: #cddc39;
- background-color: #00796b;
- font-size: 20;
- font-weight: bold;
- padding: 20;
- }
-
- .date-time-picker.apply-css {
- color: #00796b;
- background-color: #cddc39;
- }
-
- .date-time-picker-spinners.apply-css {
- color: #cddc39;
- background-color: #00796b;
- }
-
- .date-time-picker-buttons.apply-css {
- color: #00796b;
- }
- `,
- ],
-})
-export class DatetimepickerComponent {
- public dateText: string = 'tap to select date';
- public timeText: string = 'tap to select time';
- public dateTimeText: string = 'tap to select date and time';
- public dateTime1: Date = new Date();
- public dateTime2: Date = new Date();
- public dateTime3: Date = new Date();
- public dateOpacity: number;
- public timeOpacity: number;
- public dateTimeOpacity: number;
- public customOpacity: number;
- public dateVisibility: string;
- public timeVisibility: string;
- public dateTimeVisibility: string;
- public customVisibility: string;
- public isIOS14plus = isIOS && parseFloat(Device.osVersion) >= 14.0;
- private _expandedId: string;
-
- @ViewChild('scrollView', { static: false }) scrollView: ElementRef;
-
- constructor(private _ngZone: NgZone) {
- // Use the component constructor to inject providers.
- this.expandCollapse(null);
- }
-
- onPickDateTap(args: EventData): void {
- const dateToday = new Date();
- const dateTomorrow = new Date(dateToday.getFullYear(), dateToday.getMonth(), dateToday.getDate() + 1);
- const dateNextWeek = new Date(dateToday.getFullYear(), dateToday.getMonth(), dateToday.getDate() + 7);
- DateTimePicker.pickDate({
- context: (