[
  {
    "path": ".browserslistrc",
    "content": "defaults, not IE 11, maintained node versions\n"
  },
  {
    "path": ".editorconfig",
    "content": "# editorconfig.org\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".eslintignore",
    "content": "node_modules\ndocs\ndist\n"
  },
  {
    "path": ".eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: {\n    browser: true,\n    node: true,\n    es2022: true,\n  },\n  parserOptions: {\n    parser: '@typescript-eslint/parser',\n    ecmaVersion: 2022,\n    sourceType: 'module',\n    lib: ['es2022'],\n    ecmaFeatures: {\n      jsx: true,\n      tsx: true,\n    },\n    extraFileExtensions: ['.vue'],\n  },\n  plugins: [\n    '@typescript-eslint',\n    'import',\n    'jsdoc',\n    'regexp',\n    'security',\n    'vue',\n    'prettier',\n  ],\n  extends: [\n    'plugin:@typescript-eslint/recommended',\n    'plugin:import/recommended',\n    'plugin:import/typescript',\n    'plugin:jsdoc/recommended',\n    'plugin:regexp/recommended',\n    'plugin:security/recommended',\n    'plugin:vue/vue3-recommended',\n    'plugin:prettier/recommended',\n    'prettier',\n  ],\n  rules: {\n    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',\n    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',\n    'vue/component-tags-order': [\n      'error',\n      {\n        order: ['script[setup]', 'template', 'style[scoped]'],\n      },\n    ],\n  },\n};\n"
  },
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: npm\n    versioning-strategy: increase\n    directory: '/'\n    schedule:\n      interval: daily\n      time: '00:00'\n      timezone: Asia/Calcutta\n    groups:\n      npm-development:\n        dependency-type: development\n        update-types:\n          - minor\n          - patch\n      npm-production:\n        dependency-type: production\n        update-types:\n          - patch\n    reviewers:\n      - vinayakkulkarni\n    assignees:\n      - vinayakkulkarni\n    commit-message:\n      prefix: fix\n      prefix-development: chore\n      include: scope\n  - package-ecosystem: github-actions\n    directory: '/'\n    schedule:\n      interval: daily\n      time: '00:00'\n      timezone: Asia/Calcutta\n    groups:\n      actions-minor:\n        update-types:\n          - minor\n          - patch\n    reviewers:\n      - vinayakkulkarni\n    assignees:\n      - vinayakkulkarni\n    commit-message:\n      prefix: fix\n      prefix-development: chore\n      include: scope\n"
  },
  {
    "path": ".github/workflows/automerger.yml",
    "content": "name: 'Automerge Dependabot PRs'\n\non: pull_request_target\n\npermissions:\n  pull-requests: write\n  contents: write\n\njobs:\n  dependabot:\n    runs-on: ubuntu-latest\n    if: ${{ github.actor == 'dependabot[bot]' }}\n    steps:\n      - name: Dependabot metadata 🤖\n        id: metadata\n        uses: dependabot/fetch-metadata@v2.1.0\n        with:\n          alert-lookup: true\n          compat-lookup: true\n          github-token: ${{ secrets.DEPENDABOT_TOKEN }}\n\n      - name: Authenticate CLI with PAT 🔐\n        run: echo \"${{ secrets.DEPENDABOT_TOKEN }}\" | gh auth login --with-token\n\n      - name: Approve Dependabot PRs 👍\n        run: gh pr review --approve \"$PR_URL\"\n        env:\n          PR_URL: ${{ github.event.pull_request.html_url }}\n          GITHUB_TOKEN: ${{ secrets.DEPENDABOT_TOKEN }}\n\n      - name: Auto-merge Dependabot PRs 🕺\n        if: steps.metadata.outputs.update-type == 'version-update:semver-minor' || steps.metadata.outputs.update-type == 'version-update:semver-patch'\n        run: gh pr merge --auto --squash \"$PR_URL\"\n        env:\n          PR_URL: ${{ github.event.pull_request.html_url }}\n          GITHUB_TOKEN: ${{ secrets.DEPENDABOT_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: 'Continuous Integration'\n\non:\n  workflow_call:\n\npermissions:\n  checks: write\n  contents: read\n\njobs:\n  ci:\n    name: 'CI'\n    runs-on: ubuntu-latest\n    steps:\n      - name: Check out repository 🎉\n        uses: actions/checkout@v4\n        with:\n          ref: ${{ github.event.pull_request.head.sha }}\n\n      - name: Setup bun env 🐰\n        uses: oven-sh/setup-bun@v1\n        with:\n          bun-version: latest\n\n      - name: Install dependencies 🚀\n        run: bun install\n\n      - name: Run linter(s) 👀\n        uses: wearerequired/lint-action@v2\n        with:\n          github_token: ${{ secrets.GITHUB_TOKEN }}\n          continue_on_error: false\n          git_name: github-actions[bot]\n          git_email: github-actions[bot]@users.noreply.github.com\n          auto_fix: false\n          neutral_check_on_warning: true\n          stylelint: false\n          stylelint_extensions: css,scss,vue\n          eslint: true\n          eslint_extensions: js,ts,vue\n          prettier: true\n          prettier_extensions: js,ts,vue\n\n      - name: Build the package 🎉\n        run: bun run build\n"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "content": "name: CodeQL\n\non:\n  push:\n    branches:\n      - main\n  pull_request:\n    branches:\n      - main\n  schedule:\n    - cron: '45 23 * * 2'\n\njobs:\n  analyze:\n    name: Analyze\n    runs-on: ubuntu-latest\n    permissions:\n      actions: read\n      contents: read\n      security-events: write\n\n    strategy:\n      fail-fast: false\n      matrix:\n        language: [javascript]\n\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v4\n\n      - name: Initialize CodeQL\n        uses: github/codeql-action/init@v3\n        with:\n          languages: ${{ matrix.language }}\n          queries: +security-and-quality\n\n      - name: Autobuild\n        uses: github/codeql-action/autobuild@v3\n\n      - name: Perform CodeQL Analysis\n        uses: github/codeql-action/analyze@v3\n        with:\n          category: /language:${{ matrix.language }}\n"
  },
  {
    "path": ".github/workflows/ct.yml",
    "content": "name: 'Continuous Testing'\n\non:\n  workflow_call:\n\npermissions:\n  checks: write\n  contents: read\n\njobs:\n  ct:\n    name: 'CT'\n    runs-on: ubuntu-latest\n    steps:\n      - name: Check out repository 🎉\n        uses: actions/checkout@v4\n        with:\n          ref: ${{ github.event.pull_request.head.sha }}\n\n      - name: Setup bun env 🐰\n        uses: oven-sh/setup-bun@v1\n        with:\n          bun-version: latest\n\n      - name: Install dependencies 🚀\n        run: bun install\n\n      - name: Run tests 🧪\n        run: bun run test\n\n      - name: Run coverage 🧪\n        run: bun run test:coverage\n"
  },
  {
    "path": ".github/workflows/lint-pr.yml",
    "content": "name: 'Lint PR'\n\non:\n  pull_request_target:\n    types:\n      - opened\n      - edited\n      - synchronize\n\njobs:\n  validate-pr-title:\n    name: Validate PR title\n    runs-on: ubuntu-latest\n    steps:\n      - uses: amannn/action-semantic-pull-request@v5.5.2\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n\n  check-sign-off:\n    if: startsWith(github.head_ref, 'releases/v') == false\n    name: Write comment if unsigned commits found\n    env:\n      FORCE_COLOR: 1\n    runs-on: ubuntu-latest\n    steps:\n      - uses: live627/check-pr-signoff-action@v1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/pipeline.yml",
    "content": "name: 'The Pipeline'\n\non:\n  push:\n    branches:\n      - main\n  pull_request:\n    branches:\n      - main\n\nconcurrency:\n  group: ci-${{ github.ref }}-1\n  cancel-in-progress: true\n\njobs:\n  extract-branch:\n    name: 'Fetch branch'\n    runs-on: ubuntu-latest\n    outputs:\n      current_branch: ${{ steps.get-branch.outputs.current_branch }}\n    steps:\n      - name: Extract branch name 🕊\n        id: get-branch\n        run: echo \"current_branch=${GITHUB_REF##*/}\" >> $GITHUB_OUTPUT\n  ci:\n    name: 'CI'\n    needs:\n      - extract-branch\n    uses: ./.github/workflows/ci.yml\n  ct:\n    name: 'CT'\n    needs:\n      - extract-branch\n    uses: ./.github/workflows/ct.yml\n"
  },
  {
    "path": ".github/workflows/shipjs-trigger.yml",
    "content": "name: Ship js trigger\n\non:\n  pull_request:\n    types:\n      - closed\n\njobs:\n  publish-to-npm:\n    name: 'Publishing to NPM ✨'\n    runs-on: ubuntu-latest\n    if: github.event.pull_request.merged == true && startsWith(github.head_ref, 'releases/v')\n    steps:\n      - name: Checkout code 🛎\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n          ref: main\n\n      - name: Setup GitHub Actor\n        run: |\n          git config --global user.email \"action@github.com\"\n          git config --global user.name \"GitHub Action\"\n\n      - name: Setup bun env 🐰\n        uses: oven-sh/setup-bun@v1\n        with:\n          bun-version: 1.0.25+a8ff7be64\n\n      - name: Install dependencies 🚀\n        run: bun install\n\n      - name: Trigger a release (NPM) 🥳\n        run: bunx shipjs trigger\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}\n          SLACK_INCOMING_HOOK: ${{ secrets.SLACK_INCOMING_HOOK }}\n\n  publish-to-jsr:\n    name: 'Publishing to JSR ✨'\n    runs-on: ubuntu-latest\n    needs: publish-to-npm\n    permissions:\n      contents: read\n      id-token: write\n    steps:\n      - name: Checkout code 🛎\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n          ref: main\n\n      - name: Setup bun env 🐰\n        uses: oven-sh/setup-bun@v1\n        with:\n          bun-version: latest\n\n      - name: Install dependencies 🚀\n        run: bun install\n\n      - name: Build the package 🎉\n        run: bun run build\n\n      - name: Trigger a release (JSR) 🥳\n        run: bunx jsr publish\n"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n*.lcov\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# TypeScript v1 declaration files\ntypings/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Microbundle cache\n.rpt2_cache/\n.rts2_cache_cjs/\n.rts2_cache_es/\n.rts2_cache_umd/\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n.env.test\n\n# parcel-bundler cache (https://parceljs.org/)\n.cache\n\n# Next.js build output\n.next\n\n# Nuxt.js build / generate output\n.nuxt\ndist\n\n# Gatsby files\n.cache/\n# Comment in the public line in if your project uses Gatsby and *not* Next.js\n# https://nextjs.org/blog/next-9-1#public-directory-support\n# public\n\n# vuepress build output\n.vuepress/dist\n\n# Serverless directories\n.serverless/\n\n# FuseBox cache\n.fusebox/\n\n# DynamoDB Local files\n.dynamodb/\n\n# TernJS port file\n.tern-port\n.DS_Store\n.temp\n\ncache/\n"
  },
  {
    "path": ".husky/commit-msg",
    "content": "NAME=$(git config user.name)\nEMAIL=$(git config user.email)\n\nif [ -z \"$NAME\" ]; then\n    echo \"empty git config user.name\"\n    exit 1\nfi\n\nif [ -z \"$EMAIL\" ]; then\n    echo \"empty git config user.email\"\n    exit 1\nfi\n\ngit interpret-trailers --if-exists doNothing --trailer \\\n    \"Signed-off-by: $NAME <$EMAIL>\" \\\n    --in-place \"$1\"\n\nbun commitlint --edit $1\n"
  },
  {
    "path": ".husky/pre-commit",
    "content": "bun lint-staged --no-stash\n"
  },
  {
    "path": ".npmrc",
    "content": "registry=https://registry.npmjs.org\n@jsr:registry=https://npm.jsr.io\n"
  },
  {
    "path": ".nvmrc",
    "content": "20\n"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n  \"recommendations\": [\n    \"Vue.volar\",\n    \"Vue.vscode-typescript-vue-plugin\"\n  ]\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n  \"files.eol\": \"\\n\",\n  \"editor.formatOnSave\": true,\n  \"editor.codeActionsOnSave\": {\n    \"source.fixAll\": \"explicit\"\n  },\n}\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# [5.1.0](https://github.com/geospoc/v-mapbox/compare/v5.0.0...v5.1.0) (2024-05-19)\n\n\n\n## 5.0.0 (2024-02-05)\n\n* chore: update job name in CT workflow ([e97fedf](https://github.com/geospoc/v-mapbox/commit/e97fedf))\n* chore: upgrade vite 5.x 🤷‍♂️ ([646ec36](https://github.com/geospoc/v-mapbox/commit/646ec36))\n* chore(deps-dev): bump @babel/core from 7.21.0 to 7.21.3 ([f1a692e](https://github.com/geospoc/v-mapbox/commit/f1a692e))\n* chore(deps-dev): Bump @babel/core from 7.21.3 to 7.21.4 ([ab57f85](https://github.com/geospoc/v-mapbox/commit/ab57f85))\n* chore(deps-dev): bump @babel/core from 7.21.4 to 7.21.5 ([9ac94ac](https://github.com/geospoc/v-mapbox/commit/9ac94ac))\n* chore(deps-dev): bump @babel/core from 7.21.5 to 7.21.8 ([96edaa5](https://github.com/geospoc/v-mapbox/commit/96edaa5))\n* chore(deps-dev): bump @babel/core from 7.21.8 to 7.22.1 ([95881df](https://github.com/geospoc/v-mapbox/commit/95881df))\n* chore(deps-dev): bump @babel/core from 7.22.1 to 7.22.5 ([2de4173](https://github.com/geospoc/v-mapbox/commit/2de4173))\n* chore(deps-dev): bump @babel/core from 7.22.5 to 7.22.6 ([e403a13](https://github.com/geospoc/v-mapbox/commit/e403a13))\n* chore(deps-dev): bump @babel/core from 7.22.6 to 7.22.9 ([300a209](https://github.com/geospoc/v-mapbox/commit/300a209))\n* chore(deps-dev): bump @babel/core from 7.22.9 to 7.22.10 ([01cad36](https://github.com/geospoc/v-mapbox/commit/01cad36))\n* chore(deps-dev): bump @babel/traverse from 7.22.10 to 7.23.2 ([015630b](https://github.com/geospoc/v-mapbox/commit/015630b))\n* chore(deps-dev): Bump @commitlint/cli from 17.4.4 to 17.5.0 ([1e9dafc](https://github.com/geospoc/v-mapbox/commit/1e9dafc))\n* chore(deps-dev): Bump @commitlint/cli from 17.5.0 to 17.5.1 ([2951d45](https://github.com/geospoc/v-mapbox/commit/2951d45))\n* chore(deps-dev): bump @commitlint/cli from 17.5.1 to 17.6.1 ([a33a9f0](https://github.com/geospoc/v-mapbox/commit/a33a9f0))\n* chore(deps-dev): bump @commitlint/cli from 17.6.1 to 17.6.3 ([a524e17](https://github.com/geospoc/v-mapbox/commit/a524e17))\n* chore(deps-dev): bump @commitlint/cli from 17.6.3 to 17.6.5 ([f44630e](https://github.com/geospoc/v-mapbox/commit/f44630e))\n* chore(deps-dev): bump @commitlint/cli from 17.6.5 to 17.6.6 ([6be3a51](https://github.com/geospoc/v-mapbox/commit/6be3a51))\n* chore(deps-dev): bump @commitlint/cli from 17.6.6 to 17.6.7 ([2e3d55e](https://github.com/geospoc/v-mapbox/commit/2e3d55e))\n* chore(deps-dev): bump @commitlint/cli from 17.6.7 to 17.7.1 ([d676131](https://github.com/geospoc/v-mapbox/commit/d676131))\n* chore(deps-dev): bump @commitlint/config-conventional ([222c846](https://github.com/geospoc/v-mapbox/commit/222c846))\n* chore(deps-dev): bump @commitlint/config-conventional ([0786904](https://github.com/geospoc/v-mapbox/commit/0786904))\n* chore(deps-dev): bump @commitlint/config-conventional ([46ffc63](https://github.com/geospoc/v-mapbox/commit/46ffc63))\n* chore(deps-dev): bump @commitlint/config-conventional ([447be7d](https://github.com/geospoc/v-mapbox/commit/447be7d))\n* chore(deps-dev): bump @commitlint/config-conventional ([0900fe6](https://github.com/geospoc/v-mapbox/commit/0900fe6))\n* chore(deps-dev): bump @commitlint/config-conventional ([6f46221](https://github.com/geospoc/v-mapbox/commit/6f46221))\n* chore(deps-dev): bump @commitlint/config-conventional ([e93b71a](https://github.com/geospoc/v-mapbox/commit/e93b71a))\n* chore(deps-dev): Bump @types/node from 18.15.10 to 18.15.11 ([7315cce](https://github.com/geospoc/v-mapbox/commit/7315cce))\n* chore(deps-dev): bump @types/node from 18.15.11 to 18.16.0 ([96f5087](https://github.com/geospoc/v-mapbox/commit/96f5087))\n* chore(deps-dev): Bump @types/node from 18.15.3 to 18.15.5 ([55601f2](https://github.com/geospoc/v-mapbox/commit/55601f2))\n* chore(deps-dev): Bump @types/node from 18.15.5 to 18.15.10 ([d71cb63](https://github.com/geospoc/v-mapbox/commit/d71cb63))\n* chore(deps-dev): bump @types/node from 18.16.0 to 18.16.1 ([c25e209](https://github.com/geospoc/v-mapbox/commit/c25e209))\n* chore(deps-dev): bump @types/node from 18.16.1 to 18.16.3 ([31b398e](https://github.com/geospoc/v-mapbox/commit/31b398e))\n* chore(deps-dev): bump @types/node from 18.16.3 to 20.1.0 ([dc5f660](https://github.com/geospoc/v-mapbox/commit/dc5f660))\n* chore(deps-dev): bump @types/node from 20.1.0 to 20.1.1 ([92decf1](https://github.com/geospoc/v-mapbox/commit/92decf1))\n* chore(deps-dev): bump @types/node from 20.1.1 to 20.1.3 ([fa026ac](https://github.com/geospoc/v-mapbox/commit/fa026ac))\n* chore(deps-dev): bump @types/node from 20.1.3 to 20.1.4 ([f062043](https://github.com/geospoc/v-mapbox/commit/f062043))\n* chore(deps-dev): bump @types/node from 20.1.4 to 20.1.6 ([bcc89b7](https://github.com/geospoc/v-mapbox/commit/bcc89b7))\n* chore(deps-dev): bump @types/node from 20.1.6 to 20.1.7 ([2b4898c](https://github.com/geospoc/v-mapbox/commit/2b4898c))\n* chore(deps-dev): bump @types/node from 20.1.7 to 20.2.1 ([9b4faf5](https://github.com/geospoc/v-mapbox/commit/9b4faf5))\n* chore(deps-dev): bump @types/node from 20.2.1 to 20.2.3 ([3a1e684](https://github.com/geospoc/v-mapbox/commit/3a1e684))\n* chore(deps-dev): bump @types/node from 20.2.3 to 20.2.5 ([5268ed0](https://github.com/geospoc/v-mapbox/commit/5268ed0))\n* chore(deps-dev): bump @types/node from 20.2.5 to 20.3.0 ([03983e0](https://github.com/geospoc/v-mapbox/commit/03983e0))\n* chore(deps-dev): bump @types/node from 20.3.0 to 20.3.1 ([fb6b166](https://github.com/geospoc/v-mapbox/commit/fb6b166))\n* chore(deps-dev): bump @types/node from 20.3.1 to 20.3.2 ([d4cbbda](https://github.com/geospoc/v-mapbox/commit/d4cbbda))\n* chore(deps-dev): bump @types/node from 20.3.2 to 20.3.3 ([995da01](https://github.com/geospoc/v-mapbox/commit/995da01))\n* chore(deps-dev): bump @types/node from 20.3.3 to 20.4.1 ([8f48cee](https://github.com/geospoc/v-mapbox/commit/8f48cee))\n* chore(deps-dev): bump @types/node from 20.4.1 to 20.4.6 ([ba901b2](https://github.com/geospoc/v-mapbox/commit/ba901b2))\n* chore(deps-dev): bump @types/node from 20.4.6 to 20.4.9 ([b1091fc](https://github.com/geospoc/v-mapbox/commit/b1091fc))\n* chore(deps-dev): bump @types/node from 20.4.9 to 20.5.0 ([19b6916](https://github.com/geospoc/v-mapbox/commit/19b6916))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([177fd8f](https://github.com/geospoc/v-mapbox/commit/177fd8f))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([d11c2bf](https://github.com/geospoc/v-mapbox/commit/d11c2bf))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([d78ac8a](https://github.com/geospoc/v-mapbox/commit/d78ac8a))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([4b5cc2f](https://github.com/geospoc/v-mapbox/commit/4b5cc2f))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([d869762](https://github.com/geospoc/v-mapbox/commit/d869762))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([9d8e4e8](https://github.com/geospoc/v-mapbox/commit/9d8e4e8))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([770ef42](https://github.com/geospoc/v-mapbox/commit/770ef42))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([dd17ab0](https://github.com/geospoc/v-mapbox/commit/dd17ab0))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([b573cd3](https://github.com/geospoc/v-mapbox/commit/b573cd3))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([ac66d13](https://github.com/geospoc/v-mapbox/commit/ac66d13))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([d3ed528](https://github.com/geospoc/v-mapbox/commit/d3ed528))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([e375df1](https://github.com/geospoc/v-mapbox/commit/e375df1))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([5ac6d80](https://github.com/geospoc/v-mapbox/commit/5ac6d80))\n* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([01aa107](https://github.com/geospoc/v-mapbox/commit/01aa107))\n* chore(deps-dev): Bump @typescript-eslint/eslint-plugin ([50c2412](https://github.com/geospoc/v-mapbox/commit/50c2412))\n* chore(deps-dev): Bump @typescript-eslint/eslint-plugin ([9590776](https://github.com/geospoc/v-mapbox/commit/9590776))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.55.0 to 5.56.0 ([1cea8d2](https://github.com/geospoc/v-mapbox/commit/1cea8d2))\n* chore(deps-dev): Bump @typescript-eslint/parser from 5.56.0 to 5.57.0 ([e0d95ae](https://github.com/geospoc/v-mapbox/commit/e0d95ae))\n* chore(deps-dev): Bump @typescript-eslint/parser from 5.57.0 to 5.57.1 ([41fa1d0](https://github.com/geospoc/v-mapbox/commit/41fa1d0))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.57.1 to 5.58.0 ([58cfbb0](https://github.com/geospoc/v-mapbox/commit/58cfbb0))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.58.0 to 5.59.0 ([e8d09d4](https://github.com/geospoc/v-mapbox/commit/e8d09d4))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.59.0 to 5.59.1 ([f4cdcac](https://github.com/geospoc/v-mapbox/commit/f4cdcac))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.59.1 to 5.59.2 ([4cab3ac](https://github.com/geospoc/v-mapbox/commit/4cab3ac))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.59.11 to 5.60.0 ([6955225](https://github.com/geospoc/v-mapbox/commit/6955225))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.59.2 to 5.59.5 ([471b496](https://github.com/geospoc/v-mapbox/commit/471b496))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.59.5 to 5.59.6 ([1d65133](https://github.com/geospoc/v-mapbox/commit/1d65133))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.59.6 to 5.59.7 ([063ce93](https://github.com/geospoc/v-mapbox/commit/063ce93))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.59.7 to 5.59.8 ([3ff3784](https://github.com/geospoc/v-mapbox/commit/3ff3784))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.59.8 to 5.59.9 ([daeb00e](https://github.com/geospoc/v-mapbox/commit/daeb00e))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.59.9 to 5.59.11 ([8b6ba1b](https://github.com/geospoc/v-mapbox/commit/8b6ba1b))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.60.0 to 5.60.1 ([b17e441](https://github.com/geospoc/v-mapbox/commit/b17e441))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.60.1 to 5.61.0 ([52a4f0d](https://github.com/geospoc/v-mapbox/commit/52a4f0d))\n* chore(deps-dev): bump @typescript-eslint/parser from 5.61.0 to 5.62.0 ([7efccd1](https://github.com/geospoc/v-mapbox/commit/7efccd1))\n* chore(deps-dev): bump @vitejs/plugin-vue from 4.0.0 to 4.1.0 ([8742dc5](https://github.com/geospoc/v-mapbox/commit/8742dc5))\n* chore(deps-dev): bump @vitejs/plugin-vue from 4.1.0 to 4.2.0 ([eb52d54](https://github.com/geospoc/v-mapbox/commit/eb52d54))\n* chore(deps-dev): bump @vitejs/plugin-vue from 4.2.0 to 4.2.1 ([a1ebd35](https://github.com/geospoc/v-mapbox/commit/a1ebd35))\n* chore(deps-dev): bump @vitejs/plugin-vue from 4.2.1 to 4.2.3 ([0d4eae2](https://github.com/geospoc/v-mapbox/commit/0d4eae2))\n* chore(deps-dev): bump @vitest/coverage-c8 from 0.29.2 to 0.29.3 ([72ebf09](https://github.com/geospoc/v-mapbox/commit/72ebf09))\n* chore(deps-dev): Bump @vitest/coverage-c8 from 0.29.3 to 0.29.7 ([3723ad0](https://github.com/geospoc/v-mapbox/commit/3723ad0))\n* chore(deps-dev): Bump @vitest/coverage-c8 from 0.29.7 to 0.29.8 ([79cbbc2](https://github.com/geospoc/v-mapbox/commit/79cbbc2))\n* chore(deps-dev): bump @vitest/coverage-c8 from 0.29.8 to 0.30.1 ([0f132af](https://github.com/geospoc/v-mapbox/commit/0f132af))\n* chore(deps-dev): bump @vitest/coverage-c8 from 0.30.1 to 0.31.0 ([05e7aa5](https://github.com/geospoc/v-mapbox/commit/05e7aa5))\n* chore(deps-dev): bump @vitest/coverage-c8 from 0.31.0 to 0.31.1 ([ca31b1a](https://github.com/geospoc/v-mapbox/commit/ca31b1a))\n* chore(deps-dev): bump @vitest/coverage-c8 from 0.31.1 to 0.31.2 ([8e4808a](https://github.com/geospoc/v-mapbox/commit/8e4808a))\n* chore(deps-dev): bump @vitest/coverage-c8 from 0.31.2 to 0.31.4 ([77b4647](https://github.com/geospoc/v-mapbox/commit/77b4647))\n* chore(deps-dev): bump @vitest/coverage-c8 from 0.31.4 to 0.32.0 ([d20530a](https://github.com/geospoc/v-mapbox/commit/d20530a))\n* chore(deps-dev): bump @vitest/coverage-c8 from 0.32.0 to 0.32.2 ([7737c46](https://github.com/geospoc/v-mapbox/commit/7737c46))\n* chore(deps-dev): bump @vitest/coverage-c8 from 0.32.2 to 0.32.4 ([30aee4f](https://github.com/geospoc/v-mapbox/commit/30aee4f))\n* chore(deps-dev): bump @vitest/coverage-c8 from 0.32.4 to 0.33.0 ([5d8b1ed](https://github.com/geospoc/v-mapbox/commit/5d8b1ed))\n* chore(deps-dev): Bump eslint from 8.36.0 to 8.37.0 ([b92ee5c](https://github.com/geospoc/v-mapbox/commit/b92ee5c))\n* chore(deps-dev): bump eslint from 8.37.0 to 8.38.0 ([b31bc69](https://github.com/geospoc/v-mapbox/commit/b31bc69))\n* chore(deps-dev): bump eslint from 8.38.0 to 8.39.0 ([e733c7b](https://github.com/geospoc/v-mapbox/commit/e733c7b))\n* chore(deps-dev): bump eslint from 8.39.0 to 8.40.0 ([ab3482e](https://github.com/geospoc/v-mapbox/commit/ab3482e))\n* chore(deps-dev): bump eslint from 8.40.0 to 8.41.0 ([8ca0d5b](https://github.com/geospoc/v-mapbox/commit/8ca0d5b))\n* chore(deps-dev): bump eslint from 8.41.0 to 8.42.0 ([19b7d5e](https://github.com/geospoc/v-mapbox/commit/19b7d5e))\n* chore(deps-dev): bump eslint from 8.42.0 to 8.43.0 ([bd9a749](https://github.com/geospoc/v-mapbox/commit/bd9a749))\n* chore(deps-dev): bump eslint from 8.43.0 to 8.44.0 ([305cb6a](https://github.com/geospoc/v-mapbox/commit/305cb6a))\n* chore(deps-dev): bump eslint from 8.44.0 to 8.45.0 ([5e711b9](https://github.com/geospoc/v-mapbox/commit/5e711b9))\n* chore(deps-dev): bump eslint from 8.45.0 to 8.46.0 ([64c1ac2](https://github.com/geospoc/v-mapbox/commit/64c1ac2))\n* chore(deps-dev): bump eslint from 8.46.0 to 8.47.0 ([a61d493](https://github.com/geospoc/v-mapbox/commit/a61d493))\n* chore(deps-dev): bump eslint-config-prettier from 8.7.0 to 8.8.0 ([096f12f](https://github.com/geospoc/v-mapbox/commit/096f12f))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 40.0.2 to 40.0.3 ([de47831](https://github.com/geospoc/v-mapbox/commit/de47831))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 40.0.3 to 40.1.0 ([9994a52](https://github.com/geospoc/v-mapbox/commit/9994a52))\n* chore(deps-dev): Bump eslint-plugin-jsdoc from 40.1.0 to 40.1.1 ([e5a4d7e](https://github.com/geospoc/v-mapbox/commit/e5a4d7e))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 40.1.1 to 43.0.7 ([f4c8ef5](https://github.com/geospoc/v-mapbox/commit/f4c8ef5))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 43.0.7 to 43.1.1 ([4a9fb94](https://github.com/geospoc/v-mapbox/commit/4a9fb94))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 43.1.1 to 44.0.0 ([b53a569](https://github.com/geospoc/v-mapbox/commit/b53a569))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 44.0.0 to 44.0.2 ([4421023](https://github.com/geospoc/v-mapbox/commit/4421023))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 44.0.2 to 44.2.3 ([f8ce482](https://github.com/geospoc/v-mapbox/commit/f8ce482))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 44.2.3 to 44.2.4 ([2046db1](https://github.com/geospoc/v-mapbox/commit/2046db1))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 44.2.4 to 44.2.5 ([8a94259](https://github.com/geospoc/v-mapbox/commit/8a94259))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 44.2.5 to 46.1.0 ([d993437](https://github.com/geospoc/v-mapbox/commit/d993437))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 46.1.0 to 46.2.3 ([7f1bf4a](https://github.com/geospoc/v-mapbox/commit/7f1bf4a))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 46.2.3 to 46.2.4 ([29fc3cb](https://github.com/geospoc/v-mapbox/commit/29fc3cb))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 46.2.4 to 46.2.5 ([a28d3cf](https://github.com/geospoc/v-mapbox/commit/a28d3cf))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 46.2.5 to 46.2.6 ([97a56ce](https://github.com/geospoc/v-mapbox/commit/97a56ce))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 46.2.6 to 46.3.0 ([e482e29](https://github.com/geospoc/v-mapbox/commit/e482e29))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 46.3.0 to 46.4.0 ([9946350](https://github.com/geospoc/v-mapbox/commit/9946350))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 46.4.0 to 46.4.2 ([1269495](https://github.com/geospoc/v-mapbox/commit/1269495))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 46.4.2 to 46.4.3 ([5fc3b09](https://github.com/geospoc/v-mapbox/commit/5fc3b09))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 46.4.3 to 46.4.4 ([e3b655a](https://github.com/geospoc/v-mapbox/commit/e3b655a))\n* chore(deps-dev): bump eslint-plugin-jsdoc from 46.4.4 to 46.4.6 ([de2dd46](https://github.com/geospoc/v-mapbox/commit/de2dd46))\n* chore(deps-dev): bump eslint-plugin-vue from 9.10.0 to 9.11.0 ([fde5108](https://github.com/geospoc/v-mapbox/commit/fde5108))\n* chore(deps-dev): bump eslint-plugin-vue from 9.11.0 to 9.11.1 ([1dd12be](https://github.com/geospoc/v-mapbox/commit/1dd12be))\n* chore(deps-dev): bump eslint-plugin-vue from 9.11.1 to 9.12.0 ([5d2897d](https://github.com/geospoc/v-mapbox/commit/5d2897d))\n* chore(deps-dev): bump eslint-plugin-vue from 9.12.0 to 9.13.0 ([7989181](https://github.com/geospoc/v-mapbox/commit/7989181))\n* chore(deps-dev): bump eslint-plugin-vue from 9.13.0 to 9.14.0 ([e4bb5ce](https://github.com/geospoc/v-mapbox/commit/e4bb5ce))\n* chore(deps-dev): bump eslint-plugin-vue from 9.14.0 to 9.14.1 ([7ec0eb3](https://github.com/geospoc/v-mapbox/commit/7ec0eb3))\n* chore(deps-dev): bump eslint-plugin-vue from 9.14.1 to 9.15.0 ([0feb03c](https://github.com/geospoc/v-mapbox/commit/0feb03c))\n* chore(deps-dev): bump eslint-plugin-vue from 9.15.0 to 9.15.1 ([6a916bd](https://github.com/geospoc/v-mapbox/commit/6a916bd))\n* chore(deps-dev): bump eslint-plugin-vue from 9.15.1 to 9.17.0 ([66b51f4](https://github.com/geospoc/v-mapbox/commit/66b51f4))\n* chore(deps-dev): Bump eslint-plugin-vue from 9.9.0 to 9.10.0 ([4ec88df](https://github.com/geospoc/v-mapbox/commit/4ec88df))\n* chore(deps-dev): bump follow-redirects from 1.15.2 to 1.15.4 ([130efd5](https://github.com/geospoc/v-mapbox/commit/130efd5))\n* chore(deps-dev): bump happy-dom from 8.9.0 to 9.3.0 ([07a4a7d](https://github.com/geospoc/v-mapbox/commit/07a4a7d))\n* chore(deps-dev): bump happy-dom from 9.10.1 to 9.10.9 ([d3039f0](https://github.com/geospoc/v-mapbox/commit/d3039f0))\n* chore(deps-dev): bump happy-dom from 9.10.9 to 9.18.3 ([406ad43](https://github.com/geospoc/v-mapbox/commit/406ad43))\n* chore(deps-dev): bump happy-dom from 9.18.3 to 9.19.1 ([3808ed8](https://github.com/geospoc/v-mapbox/commit/3808ed8))\n* chore(deps-dev): bump happy-dom from 9.19.1 to 9.19.2 ([4a48b9f](https://github.com/geospoc/v-mapbox/commit/4a48b9f))\n* chore(deps-dev): bump happy-dom from 9.19.2 to 9.20.1 ([de1f368](https://github.com/geospoc/v-mapbox/commit/de1f368))\n* chore(deps-dev): bump happy-dom from 9.20.1 to 9.20.3 ([07812e4](https://github.com/geospoc/v-mapbox/commit/07812e4))\n* chore(deps-dev): bump happy-dom from 9.3.0 to 9.5.0 ([87e5ce2](https://github.com/geospoc/v-mapbox/commit/87e5ce2))\n* chore(deps-dev): bump happy-dom from 9.5.0 to 9.7.1 ([eaec673](https://github.com/geospoc/v-mapbox/commit/eaec673))\n* chore(deps-dev): bump happy-dom from 9.7.1 to 9.8.0 ([5029dfc](https://github.com/geospoc/v-mapbox/commit/5029dfc))\n* chore(deps-dev): bump happy-dom from 9.8.0 to 9.8.1 ([c4a3bd4](https://github.com/geospoc/v-mapbox/commit/c4a3bd4))\n* chore(deps-dev): bump happy-dom from 9.8.1 to 9.8.3 ([0a470b2](https://github.com/geospoc/v-mapbox/commit/0a470b2))\n* chore(deps-dev): bump happy-dom from 9.8.3 to 9.8.4 ([93445f9](https://github.com/geospoc/v-mapbox/commit/93445f9))\n* chore(deps-dev): bump happy-dom from 9.8.4 to 9.9.2 ([52254c9](https://github.com/geospoc/v-mapbox/commit/52254c9))\n* chore(deps-dev): bump happy-dom from 9.9.2 to 9.10.1 ([3f74175](https://github.com/geospoc/v-mapbox/commit/3f74175))\n* chore(deps-dev): bump lint-staged from 13.2.0 to 13.2.1 ([9b35a8e](https://github.com/geospoc/v-mapbox/commit/9b35a8e))\n* chore(deps-dev): bump lint-staged from 13.2.1 to 13.2.2 ([579d12e](https://github.com/geospoc/v-mapbox/commit/579d12e))\n* chore(deps-dev): bump lint-staged from 13.2.2 to 13.2.3 ([5e7e280](https://github.com/geospoc/v-mapbox/commit/5e7e280))\n* chore(deps-dev): bump prettier from 2.8.4 to 2.8.5 ([1ca472e](https://github.com/geospoc/v-mapbox/commit/1ca472e))\n* chore(deps-dev): bump prettier from 2.8.5 to 2.8.6 ([e4caa93](https://github.com/geospoc/v-mapbox/commit/e4caa93))\n* chore(deps-dev): Bump prettier from 2.8.6 to 2.8.7 ([57ac7dd](https://github.com/geospoc/v-mapbox/commit/57ac7dd))\n* chore(deps-dev): bump prettier from 2.8.7 to 2.8.8 ([7b3bacd](https://github.com/geospoc/v-mapbox/commit/7b3bacd))\n* chore(deps-dev): Bump rimraf from 4.4.0 to 4.4.1 ([fff01a4](https://github.com/geospoc/v-mapbox/commit/fff01a4))\n* chore(deps-dev): bump rimraf from 4.4.1 to 5.0.0 ([805b39b](https://github.com/geospoc/v-mapbox/commit/805b39b))\n* chore(deps-dev): bump rimraf from 5.0.0 to 5.0.1 ([70cb06c](https://github.com/geospoc/v-mapbox/commit/70cb06c))\n* chore(deps-dev): bump sass from 1.59.2 to 1.59.3 ([2723676](https://github.com/geospoc/v-mapbox/commit/2723676))\n* chore(deps-dev): Bump sass from 1.59.3 to 1.60.0 ([e79e278](https://github.com/geospoc/v-mapbox/commit/e79e278))\n* chore(deps-dev): bump sass from 1.60.0 to 1.61.0 ([3271857](https://github.com/geospoc/v-mapbox/commit/3271857))\n* chore(deps-dev): bump sass from 1.61.0 to 1.62.0 ([2dcd565](https://github.com/geospoc/v-mapbox/commit/2dcd565))\n* chore(deps-dev): bump sass from 1.62.0 to 1.62.1 ([7eb601d](https://github.com/geospoc/v-mapbox/commit/7eb601d))\n* chore(deps-dev): bump sass from 1.62.1 to 1.63.2 ([f0d08e3](https://github.com/geospoc/v-mapbox/commit/f0d08e3))\n* chore(deps-dev): bump sass from 1.63.2 to 1.63.3 ([d8b118f](https://github.com/geospoc/v-mapbox/commit/d8b118f))\n* chore(deps-dev): bump sass from 1.63.3 to 1.63.4 ([90bd786](https://github.com/geospoc/v-mapbox/commit/90bd786))\n* chore(deps-dev): bump sass from 1.63.4 to 1.63.5 ([db65359](https://github.com/geospoc/v-mapbox/commit/db65359))\n* chore(deps-dev): bump sass from 1.63.5 to 1.63.6 ([da10a78](https://github.com/geospoc/v-mapbox/commit/da10a78))\n* chore(deps-dev): bump sass from 1.63.6 to 1.64.1 ([50b1e44](https://github.com/geospoc/v-mapbox/commit/50b1e44))\n* chore(deps-dev): bump shipjs from 0.25.1 to 0.26.0 ([6c61dd8](https://github.com/geospoc/v-mapbox/commit/6c61dd8))\n* chore(deps-dev): bump shipjs from 0.26.0 to 0.26.1 ([f18e757](https://github.com/geospoc/v-mapbox/commit/f18e757))\n* chore(deps-dev): Bump shipjs from 0.26.1 to 0.26.2 ([27a34cf](https://github.com/geospoc/v-mapbox/commit/27a34cf))\n* chore(deps-dev): bump shipjs from 0.26.2 to 0.26.3 ([62fe546](https://github.com/geospoc/v-mapbox/commit/62fe546))\n* chore(deps-dev): bump stylelint from 15.10.0 to 15.10.1 ([4feaadc](https://github.com/geospoc/v-mapbox/commit/4feaadc))\n* chore(deps-dev): bump stylelint from 15.10.1 to 15.10.2 ([08afefd](https://github.com/geospoc/v-mapbox/commit/08afefd))\n* chore(deps-dev): bump stylelint from 15.2.0 to 15.3.0 ([9d36b99](https://github.com/geospoc/v-mapbox/commit/9d36b99))\n* chore(deps-dev): Bump stylelint from 15.3.0 to 15.4.0 ([e8d9f59](https://github.com/geospoc/v-mapbox/commit/e8d9f59))\n* chore(deps-dev): bump stylelint from 15.4.0 to 15.5.0 ([3612d12](https://github.com/geospoc/v-mapbox/commit/3612d12))\n* chore(deps-dev): bump stylelint from 15.5.0 to 15.6.0 ([48b4fdb](https://github.com/geospoc/v-mapbox/commit/48b4fdb))\n* chore(deps-dev): bump stylelint from 15.6.0 to 15.6.1 ([cfe104e](https://github.com/geospoc/v-mapbox/commit/cfe104e))\n* chore(deps-dev): bump stylelint from 15.6.1 to 15.6.2 ([aefb1f8](https://github.com/geospoc/v-mapbox/commit/aefb1f8))\n* chore(deps-dev): bump stylelint from 15.6.2 to 15.6.3 ([317d11f](https://github.com/geospoc/v-mapbox/commit/317d11f))\n* chore(deps-dev): bump stylelint from 15.6.3 to 15.7.0 ([8eeda99](https://github.com/geospoc/v-mapbox/commit/8eeda99))\n* chore(deps-dev): bump stylelint from 15.7.0 to 15.8.0 ([db07462](https://github.com/geospoc/v-mapbox/commit/db07462))\n* chore(deps-dev): bump stylelint from 15.8.0 to 15.9.0 ([ab1fbe1](https://github.com/geospoc/v-mapbox/commit/ab1fbe1))\n* chore(deps-dev): bump stylelint from 15.9.0 to 15.10.0 ([39a8577](https://github.com/geospoc/v-mapbox/commit/39a8577))\n* chore(deps-dev): bump stylelint-config-recommended-vue ([72321a9](https://github.com/geospoc/v-mapbox/commit/72321a9))\n* chore(deps-dev): bump typescript from 4.9.5 to 5.0.4 ([6e81a0a](https://github.com/geospoc/v-mapbox/commit/6e81a0a))\n* chore(deps-dev): bump typescript from 5.0.4 to 5.1.3 ([d30f879](https://github.com/geospoc/v-mapbox/commit/d30f879))\n* chore(deps-dev): bump typescript from 5.1.3 to 5.1.5 ([3ddf370](https://github.com/geospoc/v-mapbox/commit/3ddf370))\n* chore(deps-dev): bump typescript from 5.1.5 to 5.1.6 ([0821fe8](https://github.com/geospoc/v-mapbox/commit/0821fe8))\n* chore(deps-dev): bump vite from 4.1.4 to 4.2.0 ([6a6d430](https://github.com/geospoc/v-mapbox/commit/6a6d430))\n* chore(deps-dev): bump vite from 4.2.0 to 4.2.1 ([b0c08c1](https://github.com/geospoc/v-mapbox/commit/b0c08c1))\n* chore(deps-dev): bump vite from 4.2.1 to 4.2.2 ([2e9a564](https://github.com/geospoc/v-mapbox/commit/2e9a564))\n* chore(deps-dev): bump vite from 4.2.2 to 4.3.0 ([76be3c1](https://github.com/geospoc/v-mapbox/commit/76be3c1))\n* chore(deps-dev): bump vite from 4.3.0 to 4.3.1 ([105b3d3](https://github.com/geospoc/v-mapbox/commit/105b3d3))\n* chore(deps-dev): bump vite from 4.3.1 to 4.3.2 ([7ec1de9](https://github.com/geospoc/v-mapbox/commit/7ec1de9))\n* chore(deps-dev): bump vite from 4.3.2 to 4.3.3 ([d1cbd86](https://github.com/geospoc/v-mapbox/commit/d1cbd86))\n* chore(deps-dev): bump vite from 4.3.3 to 4.3.5 ([b3fdba7](https://github.com/geospoc/v-mapbox/commit/b3fdba7))\n* chore(deps-dev): bump vite from 4.3.5 to 4.3.7 ([0fb561f](https://github.com/geospoc/v-mapbox/commit/0fb561f))\n* chore(deps-dev): bump vite from 4.3.7 to 4.3.8 ([f34f052](https://github.com/geospoc/v-mapbox/commit/f34f052))\n* chore(deps-dev): bump vite from 4.3.8 to 4.3.9 ([4a78aed](https://github.com/geospoc/v-mapbox/commit/4a78aed))\n* chore(deps-dev): bump vite from 4.3.9 to 4.4.1 ([4991675](https://github.com/geospoc/v-mapbox/commit/4991675))\n* chore(deps-dev): bump vite from 4.4.1 to 4.4.2 ([e324efe](https://github.com/geospoc/v-mapbox/commit/e324efe))\n* chore(deps-dev): bump vite from 4.4.12 to 4.5.2 ([97a448b](https://github.com/geospoc/v-mapbox/commit/97a448b))\n* chore(deps-dev): bump vite from 4.4.2 to 4.4.4 ([5adb1f4](https://github.com/geospoc/v-mapbox/commit/5adb1f4))\n* chore(deps-dev): bump vite from 4.4.4 to 4.4.9 ([163cb1f](https://github.com/geospoc/v-mapbox/commit/163cb1f))\n* chore(deps-dev): bump vite from 4.4.9 to 4.4.12 ([95e67d2](https://github.com/geospoc/v-mapbox/commit/95e67d2))\n* chore(deps-dev): bump vitepress from 1.0.0-alpha.56 to 1.0.0-alpha.60 ([53cdb63](https://github.com/geospoc/v-mapbox/commit/53cdb63))\n* chore(deps-dev): bump vitepress from 1.0.0-alpha.60 to 1.0.0-alpha.61 ([c8f5d84](https://github.com/geospoc/v-mapbox/commit/c8f5d84))\n* chore(deps-dev): Bump vitepress from 1.0.0-alpha.61 to 1.0.0-alpha.63 ([83ac7cc](https://github.com/geospoc/v-mapbox/commit/83ac7cc))\n* chore(deps-dev): Bump vitepress from 1.0.0-alpha.63 to 1.0.0-alpha.64 ([6d42b95](https://github.com/geospoc/v-mapbox/commit/6d42b95))\n* chore(deps-dev): Bump vitepress from 1.0.0-alpha.64 to 1.0.0-alpha.65 ([404b5ac](https://github.com/geospoc/v-mapbox/commit/404b5ac))\n* chore(deps-dev): bump vitepress from 1.0.0-alpha.65 to 1.0.0-alpha.71 ([041f981](https://github.com/geospoc/v-mapbox/commit/041f981))\n* chore(deps-dev): bump vitepress from 1.0.0-alpha.71 to 1.0.0-alpha.72 ([3956295](https://github.com/geospoc/v-mapbox/commit/3956295))\n* chore(deps-dev): bump vitepress from 1.0.0-alpha.72 to 1.0.0-alpha.73 ([52432e2](https://github.com/geospoc/v-mapbox/commit/52432e2))\n* chore(deps-dev): bump vitepress from 1.0.0-alpha.73 to 1.0.0-alpha.74 ([58ba38a](https://github.com/geospoc/v-mapbox/commit/58ba38a))\n* chore(deps-dev): bump vitepress from 1.0.0-alpha.74 to 1.0.0-alpha.75 ([6a33d33](https://github.com/geospoc/v-mapbox/commit/6a33d33))\n* chore(deps-dev): bump vitepress from 1.0.0-alpha.75 to 1.0.0-alpha.76 ([d7b37bd](https://github.com/geospoc/v-mapbox/commit/d7b37bd))\n* chore(deps-dev): bump vitepress from 1.0.0-alpha.76 to 1.0.0-beta.1 ([41c441c](https://github.com/geospoc/v-mapbox/commit/41c441c))\n* chore(deps-dev): bump vitepress from 1.0.0-beta.1 to 1.0.0-beta.2 ([44b42ee](https://github.com/geospoc/v-mapbox/commit/44b42ee))\n* chore(deps-dev): bump vitepress from 1.0.0-beta.2 to 1.0.0-beta.3 ([02af9e2](https://github.com/geospoc/v-mapbox/commit/02af9e2))\n* chore(deps-dev): bump vitepress from 1.0.0-beta.3 to 1.0.0-beta.4 ([20e84e9](https://github.com/geospoc/v-mapbox/commit/20e84e9))\n* chore(deps-dev): bump vitepress from 1.0.0-beta.4 to 1.0.0-beta.5 ([2556a0e](https://github.com/geospoc/v-mapbox/commit/2556a0e))\n* chore(deps-dev): bump vitepress from 1.0.0-beta.5 to 1.0.0-beta.6 ([f276dc5](https://github.com/geospoc/v-mapbox/commit/f276dc5))\n* chore(deps-dev): bump vitepress from 1.0.0-beta.6 to 1.0.0-rc.4 ([10129b6](https://github.com/geospoc/v-mapbox/commit/10129b6))\n* chore(deps-dev): bump vitest from 0.29.2 to 0.29.3 ([0da7dfa](https://github.com/geospoc/v-mapbox/commit/0da7dfa))\n* chore(deps-dev): bump vitest from 0.29.3 to 0.29.7 ([363f45a](https://github.com/geospoc/v-mapbox/commit/363f45a))\n* chore(deps-dev): Bump vitest from 0.29.7 to 0.29.8 ([e877d21](https://github.com/geospoc/v-mapbox/commit/e877d21))\n* chore(deps-dev): bump vitest from 0.29.8 to 0.30.1 ([4f0e6eb](https://github.com/geospoc/v-mapbox/commit/4f0e6eb))\n* chore(deps-dev): bump vitest from 0.30.1 to 0.31.0 ([930e267](https://github.com/geospoc/v-mapbox/commit/930e267))\n* chore(deps-dev): bump vitest from 0.31.0 to 0.31.1 ([f74924f](https://github.com/geospoc/v-mapbox/commit/f74924f))\n* chore(deps-dev): bump vitest from 0.31.1 to 0.31.2 ([0622062](https://github.com/geospoc/v-mapbox/commit/0622062))\n* chore(deps-dev): bump vitest from 0.31.2 to 0.31.3 ([a32a28c](https://github.com/geospoc/v-mapbox/commit/a32a28c))\n* chore(deps-dev): bump vitest from 0.31.3 to 0.31.4 ([f188e66](https://github.com/geospoc/v-mapbox/commit/f188e66))\n* chore(deps-dev): bump vitest from 0.31.4 to 0.32.0 ([5228ce1](https://github.com/geospoc/v-mapbox/commit/5228ce1))\n* chore(deps-dev): bump vitest from 0.32.0 to 0.32.2 ([7e09f00](https://github.com/geospoc/v-mapbox/commit/7e09f00))\n* chore(deps-dev): bump vitest from 0.32.2 to 0.32.4 ([f860b47](https://github.com/geospoc/v-mapbox/commit/f860b47))\n* chore(deps-dev): bump vitest from 0.32.4 to 0.33.0 ([2a10d6d](https://github.com/geospoc/v-mapbox/commit/2a10d6d))\n* chore(deps-dev): bump vitest from 0.33.0 to 0.34.1 ([a66de22](https://github.com/geospoc/v-mapbox/commit/a66de22))\n* chore(deps-dev): bump vue from 3.2.47 to 3.3.2 ([11549aa](https://github.com/geospoc/v-mapbox/commit/11549aa))\n* chore(deps-dev): bump vue from 3.3.2 to 3.3.4 ([fa4a87c](https://github.com/geospoc/v-mapbox/commit/fa4a87c))\n* chore(deps-dev): bump vue-tsc from 1.2.0 to 1.4.0 ([5c2f774](https://github.com/geospoc/v-mapbox/commit/5c2f774))\n* chore(deps-dev): bump vue-tsc from 1.4.0 to 1.4.4 ([81c347e](https://github.com/geospoc/v-mapbox/commit/81c347e))\n* chore(deps-dev): bump vue-tsc from 1.4.4 to 1.6.1 ([07cbe45](https://github.com/geospoc/v-mapbox/commit/07cbe45))\n* chore(deps-dev): bump vue-tsc from 1.6.1 to 1.6.2 ([f61ad7e](https://github.com/geospoc/v-mapbox/commit/f61ad7e))\n* chore(deps-dev): bump vue-tsc from 1.6.2 to 1.6.4 ([4ff7b58](https://github.com/geospoc/v-mapbox/commit/4ff7b58))\n* chore(deps-dev): bump vue-tsc from 1.6.4 to 1.6.5 ([e76e310](https://github.com/geospoc/v-mapbox/commit/e76e310))\n* chore(deps-dev): bump vue-tsc from 1.6.5 to 1.8.0 ([7e31986](https://github.com/geospoc/v-mapbox/commit/7e31986))\n* chore(deps-dev): bump vue-tsc from 1.8.0 to 1.8.1 ([d557cea](https://github.com/geospoc/v-mapbox/commit/d557cea))\n* chore(deps-dev): bump vue-tsc from 1.8.1 to 1.8.2 ([ee2f49d](https://github.com/geospoc/v-mapbox/commit/ee2f49d))\n* chore(deps-dev): bump vue-tsc from 1.8.2 to 1.8.3 ([932bbaf](https://github.com/geospoc/v-mapbox/commit/932bbaf))\n* chore(deps-dev): bump vue-tsc from 1.8.3 to 1.8.4 ([96c4385](https://github.com/geospoc/v-mapbox/commit/96c4385))\n* chore(deps-dev): bump vue-tsc from 1.8.4 to 1.8.5 ([eab8598](https://github.com/geospoc/v-mapbox/commit/eab8598))\n* chore(deps-dev): bump vue-tsc from 1.8.5 to 1.8.6 ([5fe617b](https://github.com/geospoc/v-mapbox/commit/5fe617b))\n* chore(deps-dev): bump vue-tsc from 1.8.6 to 1.8.7 ([440810d](https://github.com/geospoc/v-mapbox/commit/440810d))\n* chore(deps-dev): bump vue-tsc from 1.8.7 to 1.8.8 ([29abe52](https://github.com/geospoc/v-mapbox/commit/29abe52))\n* chore(deps-dev): bump word-wrap from 1.2.3 to 1.2.4 ([9626f76](https://github.com/geospoc/v-mapbox/commit/9626f76))\n* chore(deps): add coverage vitest plugin 🤷‍♂️ ([a7b8f3b](https://github.com/geospoc/v-mapbox/commit/a7b8f3b))\n* chore(deps): add vitest & required devDeps 🍍 ([75b55c6](https://github.com/geospoc/v-mapbox/commit/75b55c6))\n* chore(deps): bump peerDeps ([86a2731](https://github.com/geospoc/v-mapbox/commit/86a2731))\n* chore(deps): update github/codeql-action action to v3 ([766972d](https://github.com/geospoc/v-mapbox/commit/766972d))\n* test: add global setupFiles file for Vitest 🧪 ([8df4bc5](https://github.com/geospoc/v-mapbox/commit/8df4bc5))\n* test: initial tests for Map, Marker & Popup Components 🧪 ([163c7ee](https://github.com/geospoc/v-mapbox/commit/163c7ee))\n* test: renovate settings ✨ ([1d0786f](https://github.com/geospoc/v-mapbox/commit/1d0786f))\n* test: update tsconfig to include `vitest/globals` ([a367985](https://github.com/geospoc/v-mapbox/commit/a367985))\n* build: install optional deps ([a7f0f9a](https://github.com/geospoc/v-mapbox/commit/a7f0f9a))\n* build: update workflow(s) ([aee7279](https://github.com/geospoc/v-mapbox/commit/aee7279))\n* docs: update README ([062d449](https://github.com/geospoc/v-mapbox/commit/062d449))\n* docs: update vite-env declaration file 🎉 ([361fae1](https://github.com/geospoc/v-mapbox/commit/361fae1))\n* Fix typos in controls.md ([6cb6477](https://github.com/geospoc/v-mapbox/commit/6cb6477))\n* refactor!: housekeeping 🧹 ([f893b83](https://github.com/geospoc/v-mapbox/commit/f893b83))\n* fix(deps): bump @deck.gl/core from 8.9.11 to 8.9.12 ([b08589c](https://github.com/geospoc/v-mapbox/commit/b08589c))\n* fix(deps): bump @deck.gl/core from 8.9.12 to 8.9.13 ([590715e](https://github.com/geospoc/v-mapbox/commit/590715e))\n* fix(deps): bump @deck.gl/core from 8.9.13 to 8.9.14 ([75c9bf4](https://github.com/geospoc/v-mapbox/commit/75c9bf4))\n* fix(deps): bump @deck.gl/core from 8.9.14 to 8.9.15 ([5cab969](https://github.com/geospoc/v-mapbox/commit/5cab969))\n* fix(deps): bump @deck.gl/core from 8.9.15 to 8.9.16 ([3a45858](https://github.com/geospoc/v-mapbox/commit/3a45858))\n* fix(deps): bump @deck.gl/core from 8.9.16 to 8.9.17 ([69cab1d](https://github.com/geospoc/v-mapbox/commit/69cab1d))\n* fix(deps): bump @deck.gl/core from 8.9.17 to 8.9.18 ([a68bb20](https://github.com/geospoc/v-mapbox/commit/a68bb20))\n* fix(deps): bump @deck.gl/core from 8.9.18 to 8.9.19 ([8273c4b](https://github.com/geospoc/v-mapbox/commit/8273c4b))\n* fix(deps): bump @deck.gl/core from 8.9.19 to 8.9.21 ([7d6b844](https://github.com/geospoc/v-mapbox/commit/7d6b844))\n* fix(deps): bump @deck.gl/core from 8.9.2 to 8.9.3 ([b10d5e8](https://github.com/geospoc/v-mapbox/commit/b10d5e8))\n* fix(deps): bump @deck.gl/core from 8.9.21 to 8.9.22 ([679027c](https://github.com/geospoc/v-mapbox/commit/679027c))\n* fix(deps): bump @deck.gl/core from 8.9.22 to 8.9.23 ([64fe4e6](https://github.com/geospoc/v-mapbox/commit/64fe4e6))\n* fix(deps): bump @deck.gl/core from 8.9.3 to 8.9.4 ([7a826b1](https://github.com/geospoc/v-mapbox/commit/7a826b1))\n* fix(deps): Bump @deck.gl/core from 8.9.4 to 8.9.6 ([d4bfd8b](https://github.com/geospoc/v-mapbox/commit/d4bfd8b))\n* fix(deps): Bump @deck.gl/core from 8.9.6 to 8.9.7 ([ebcd340](https://github.com/geospoc/v-mapbox/commit/ebcd340))\n* fix(deps): bump @deck.gl/core from 8.9.7 to 8.9.8 ([f178f44](https://github.com/geospoc/v-mapbox/commit/f178f44))\n* fix(deps): bump @deck.gl/core from 8.9.8 to 8.9.9 ([bcc32ac](https://github.com/geospoc/v-mapbox/commit/bcc32ac))\n* fix(deps): bump @deck.gl/core from 8.9.9 to 8.9.11 ([dc85b20](https://github.com/geospoc/v-mapbox/commit/dc85b20))\n* fix(deps): bump @deck.gl/layers from 8.9.12 to 8.9.13 ([cbce502](https://github.com/geospoc/v-mapbox/commit/cbce502))\n* fix(deps): bump @deck.gl/layers from 8.9.13 to 8.9.14 ([3d94dcc](https://github.com/geospoc/v-mapbox/commit/3d94dcc))\n* fix(deps): bump @deck.gl/layers from 8.9.14 to 8.9.15 ([3526435](https://github.com/geospoc/v-mapbox/commit/3526435))\n* fix(deps): bump @deck.gl/layers from 8.9.15 to 8.9.16 ([e3310d6](https://github.com/geospoc/v-mapbox/commit/e3310d6))\n* fix(deps): bump @deck.gl/layers from 8.9.16 to 8.9.17 ([b37bf4e](https://github.com/geospoc/v-mapbox/commit/b37bf4e))\n* fix(deps): bump @deck.gl/layers from 8.9.17 to 8.9.18 ([cb9a941](https://github.com/geospoc/v-mapbox/commit/cb9a941))\n* fix(deps): bump @deck.gl/layers from 8.9.18 to 8.9.19 ([0eb2e4c](https://github.com/geospoc/v-mapbox/commit/0eb2e4c))\n* fix(deps): bump @deck.gl/layers from 8.9.19 to 8.9.20 ([b34c22f](https://github.com/geospoc/v-mapbox/commit/b34c22f))\n* fix(deps): bump @deck.gl/layers from 8.9.2 to 8.9.3 ([c0b1b67](https://github.com/geospoc/v-mapbox/commit/c0b1b67))\n* fix(deps): bump @deck.gl/layers from 8.9.20 to 8.9.21 ([7ad67b8](https://github.com/geospoc/v-mapbox/commit/7ad67b8))\n* fix(deps): bump @deck.gl/layers from 8.9.21 to 8.9.22 ([3c53539](https://github.com/geospoc/v-mapbox/commit/3c53539))\n* fix(deps): Bump @deck.gl/layers from 8.9.3 to 8.9.4 ([9037746](https://github.com/geospoc/v-mapbox/commit/9037746))\n* fix(deps): Bump @deck.gl/layers from 8.9.4 to 8.9.6 ([1ddfb61](https://github.com/geospoc/v-mapbox/commit/1ddfb61))\n* fix(deps): Bump @deck.gl/layers from 8.9.6 to 8.9.7 ([60cd31d](https://github.com/geospoc/v-mapbox/commit/60cd31d))\n* fix(deps): bump @deck.gl/layers from 8.9.7 to 8.9.9 ([186478e](https://github.com/geospoc/v-mapbox/commit/186478e))\n* fix(deps): bump @deck.gl/layers from 8.9.9 to 8.9.12 ([c00bfec](https://github.com/geospoc/v-mapbox/commit/c00bfec))\n* fix(deps): bump @deck.gl/mapbox from 8.9.12 to 8.9.13 ([ea805ec](https://github.com/geospoc/v-mapbox/commit/ea805ec))\n* fix(deps): bump @deck.gl/mapbox from 8.9.13 to 8.9.14 ([a2cad45](https://github.com/geospoc/v-mapbox/commit/a2cad45))\n* fix(deps): bump @deck.gl/mapbox from 8.9.14 to 8.9.15 ([544f618](https://github.com/geospoc/v-mapbox/commit/544f618))\n* fix(deps): bump @deck.gl/mapbox from 8.9.15 to 8.9.16 ([7c4d4ab](https://github.com/geospoc/v-mapbox/commit/7c4d4ab))\n* fix(deps): bump @deck.gl/mapbox from 8.9.16 to 8.9.17 ([224c2f4](https://github.com/geospoc/v-mapbox/commit/224c2f4))\n* fix(deps): bump @deck.gl/mapbox from 8.9.17 to 8.9.18 ([0290126](https://github.com/geospoc/v-mapbox/commit/0290126))\n* fix(deps): bump @deck.gl/mapbox from 8.9.18 to 8.9.19 ([6a11c3e](https://github.com/geospoc/v-mapbox/commit/6a11c3e))\n* fix(deps): bump @deck.gl/mapbox from 8.9.19 to 8.9.20 ([8ae5dba](https://github.com/geospoc/v-mapbox/commit/8ae5dba))\n* fix(deps): bump @deck.gl/mapbox from 8.9.2 to 8.9.3 ([42a6043](https://github.com/geospoc/v-mapbox/commit/42a6043))\n* fix(deps): bump @deck.gl/mapbox from 8.9.20 to 8.9.21 ([f7fa3b2](https://github.com/geospoc/v-mapbox/commit/f7fa3b2))\n* fix(deps): bump @deck.gl/mapbox from 8.9.21 to 8.9.22 ([a73735b](https://github.com/geospoc/v-mapbox/commit/a73735b))\n* fix(deps): bump @deck.gl/mapbox from 8.9.22 to 8.9.23 ([962e5de](https://github.com/geospoc/v-mapbox/commit/962e5de))\n* fix(deps): bump @deck.gl/mapbox from 8.9.3 to 8.9.4 ([9180f7b](https://github.com/geospoc/v-mapbox/commit/9180f7b))\n* fix(deps): Bump @deck.gl/mapbox from 8.9.4 to 8.9.6 ([9d6e355](https://github.com/geospoc/v-mapbox/commit/9d6e355))\n* fix(deps): bump @deck.gl/mapbox from 8.9.6 to 8.9.7 ([e1c045c](https://github.com/geospoc/v-mapbox/commit/e1c045c))\n* fix(deps): bump @deck.gl/mapbox from 8.9.7 to 8.9.8 ([5beb4c5](https://github.com/geospoc/v-mapbox/commit/5beb4c5))\n* fix(deps): bump @deck.gl/mapbox from 8.9.8 to 8.9.9 ([8085a84](https://github.com/geospoc/v-mapbox/commit/8085a84))\n* fix(deps): bump @deck.gl/mapbox from 8.9.9 to 8.9.12 ([a81a6f4](https://github.com/geospoc/v-mapbox/commit/a81a6f4))\n* fix(deps): bump actions/checkout from 3 to 4 ([bd9b193](https://github.com/geospoc/v-mapbox/commit/bd9b193))\n* fix(deps): bump amannn/action-semantic-pull-request from 5.1.0 to 5.2.0 ([1f8e1bd](https://github.com/geospoc/v-mapbox/commit/1f8e1bd))\n* fix(deps): bump amannn/action-semantic-pull-request from 5.2.0 to 5.3.0 ([3dd9d5f](https://github.com/geospoc/v-mapbox/commit/3dd9d5f))\n* fix(deps): bump amannn/action-semantic-pull-request from 5.3.0 to 5.4.0 ([636b369](https://github.com/geospoc/v-mapbox/commit/636b369))\n* fix(deps): bump dependabot/fetch-metadata from 1.3.6 to 1.4.0 ([f0f6279](https://github.com/geospoc/v-mapbox/commit/f0f6279))\n* fix(deps): bump dependabot/fetch-metadata from 1.4.0 to 1.5.0 ([1920d83](https://github.com/geospoc/v-mapbox/commit/1920d83))\n* fix(deps): bump dependabot/fetch-metadata from 1.5.0 to 1.5.1 ([c87b751](https://github.com/geospoc/v-mapbox/commit/c87b751))\n* fix(deps): bump dependabot/fetch-metadata from 1.5.1 to 1.6.0 ([25095af](https://github.com/geospoc/v-mapbox/commit/25095af))\n* fix(deps): bump tough-cookie from 4.1.2 to 4.1.3 ([32e8eb9](https://github.com/geospoc/v-mapbox/commit/32e8eb9))\n* fix(deps): bump yaml from 2.2.1 to 2.2.2 ([60e243a](https://github.com/geospoc/v-mapbox/commit/60e243a))\n* feat(vitest): add config file for Vitest ✨ ([e292903](https://github.com/geospoc/v-mapbox/commit/e292903))\n\n\n\n## [4.0.2](https://github.com/geospoc/v-mapbox/compare/v4.0.1...v4.0.2) (2023-03-14)\n\n\n### Bug Fixes\n\n* **dependabot:** add versioning-strategy 🕺 ([d68058d](https://github.com/geospoc/v-mapbox/commit/d68058ddc9a92f381fd3eb5c0497214a11c0f7c2))\n* deprecated npm i cmd args 🧹 ([32be451](https://github.com/geospoc/v-mapbox/commit/32be451de37d23b20aa249083db1091b0abef922))\n\n\n\n## [4.0.1](https://github.com/geospoc/v-mapbox/compare/v4.0.0...v4.0.1) (2023-03-14)\n\n\n### Bug Fixes\n\n* add onBeforeUnmount hook logic 🕺 ([8e71b2d](https://github.com/geospoc/v-mapbox/commit/8e71b2d57677f8f6dd1bdb5ef95cea96578338cb))\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.8.27 to 8.9.0 ([9261154](https://github.com/geospoc/v-mapbox/commit/9261154a5e4655128982504e65972c4b7a9f29a4))\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.9.0 to 8.9.1 ([e18003d](https://github.com/geospoc/v-mapbox/commit/e18003de1197d9ec39ca6c79271d21cf1df255c4))\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.9.1 to 8.9.2 ([c8258aa](https://github.com/geospoc/v-mapbox/commit/c8258aaf98b41246559a9d3d9f9e9026d1d5ba34))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.8.27 to 8.9.0 ([69d7947](https://github.com/geospoc/v-mapbox/commit/69d7947b32394070bb9edeb2735bc8dcc988a8ff))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.9.0 to 8.9.1 ([af2ed77](https://github.com/geospoc/v-mapbox/commit/af2ed778ab0a9eb8bb73706e032e5c5ada07ff9a))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.9.1 to 8.9.2 ([5d5d499](https://github.com/geospoc/v-mapbox/commit/5d5d4996ddc53c5d85562b6b3f7f605332b434c1))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.8.27 to 8.9.0 ([d0324a2](https://github.com/geospoc/v-mapbox/commit/d0324a2785aeb3ed772e0fb1ede0c12ddc3bd935))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.9.0 to 8.9.1 ([b5f2c2c](https://github.com/geospoc/v-mapbox/commit/b5f2c2c0ed291dfde228dd6d48df2ca440c0f74b))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.9.1 to 8.9.2 ([44c2aff](https://github.com/geospoc/v-mapbox/commit/44c2aff4ee17f79a5d0f336a8437a95d28f87686))\n* popup set DOM Content instead of html str ✨ ([26f80c4](https://github.com/geospoc/v-mapbox/commit/26f80c4241a9eeccc8bad8d956496b9d65ceaafc))\n* ref on slot not working 🚨 ([6228dde](https://github.com/geospoc/v-mapbox/commit/6228dde861470ac1d8eeb780a9acda4e50e6f55c))\n\n\n\n# [4.0.0](https://github.com/geospoc/v-mapbox/compare/v3.3.1...v4.0.0) (2023-03-09)\n\n\n### Bug Fixes\n\n* broken links for netlify 🤖 ([58a587a](https://github.com/geospoc/v-mapbox/commit/58a587a1a934d7967a61f842c8dd575af0273cbe))\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.8.3 to 8.8.4 ([903ab0e](https://github.com/geospoc/v-mapbox/commit/903ab0eb47dbc3572bb4aaed7b06df9cd44c466b))\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.8.4 to 8.8.6 ([f0362bf](https://github.com/geospoc/v-mapbox/commit/f0362bf53b2653c72f96448cee09b7bf49f742db))\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.8.6 to 8.8.8 ([174f5a4](https://github.com/geospoc/v-mapbox/commit/174f5a4d8d7a9e57ffaf46bf36d3b29942cbc793))\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.8.8 to 8.8.9 ([70301c6](https://github.com/geospoc/v-mapbox/commit/70301c6493998b78f20b47ac3e1f5124b8178839))\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.8.9 to 8.8.11 ([11382c0](https://github.com/geospoc/v-mapbox/commit/11382c00c1d3b4f24c4b175ad74bbe3b6cc4ebff))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.8.3 to 8.8.4 ([a0d4ee5](https://github.com/geospoc/v-mapbox/commit/a0d4ee589d8815168ab245e5d0a01b976607c08f))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.8.4 to 8.8.6 ([97d7e82](https://github.com/geospoc/v-mapbox/commit/97d7e82ed69e93255805b1a5629086060c17aebe))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.8.6 to 8.8.8 ([dc9be2f](https://github.com/geospoc/v-mapbox/commit/dc9be2fec6fe8052b928fce0e019ee83c153d505))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.8.8 to 8.8.9 ([c699a16](https://github.com/geospoc/v-mapbox/commit/c699a1685472e31627e184c537abdbc047c4b641))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.8.9 to 8.8.11 ([b6c5aaf](https://github.com/geospoc/v-mapbox/commit/b6c5aafb567ebaba9750389c165e12eb1617b9fd))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.8.3 to 8.8.4 ([e7b3c19](https://github.com/geospoc/v-mapbox/commit/e7b3c198f05150f264b63117e9a786248ccf9b38))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.8.4 to 8.8.6 ([ebdb358](https://github.com/geospoc/v-mapbox/commit/ebdb358dc64836b8579ec2360e6acbcf409345de))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.8.6 to 8.8.8 ([ba6fa5a](https://github.com/geospoc/v-mapbox/commit/ba6fa5a1c64a87ed365f638942e0227720b12277))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.8.8 to 8.8.9 ([198ff95](https://github.com/geospoc/v-mapbox/commit/198ff95924cdad0ea6a6abe5f82b208144dce695))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.8.9 to 8.8.11 ([519c146](https://github.com/geospoc/v-mapbox/commit/519c14657eb83d4af1739709332dbcebd4d24c75))\n* **deps:** bump actions/setup-node from 3.3.0 to 3.4.1 ([ee67514](https://github.com/geospoc/v-mapbox/commit/ee675146dfdb7b8d67fbe3811c4a41b63d02fbe1))\n* **deps:** bump actions/setup-node from 3.4.1 to 3.5.0 ([fc84366](https://github.com/geospoc/v-mapbox/commit/fc8436678d5e75027faeffc15aa82de879959683))\n* **deps:** bump terser from 5.14.1 to 5.14.2 ([6eb12fe](https://github.com/geospoc/v-mapbox/commit/6eb12fe35d5530bc194128cbe03a7022a632d785))\n* update outDir to `dist` 🚨 ([4053e69](https://github.com/geospoc/v-mapbox/commit/4053e6946c59d48f1e32e0e053bc224a7320ebdf))\n\n\n### Features\n\n* add emits as per Vue 3 docs 📖 ([5c873f1](https://github.com/geospoc/v-mapbox/commit/5c873f1d14eb5c4b62ca3937d94d8036c643218b))\n* add engines to package files ([4f20b12](https://github.com/geospoc/v-mapbox/commit/4f20b12d6f7a1bb2058abed648f6cbf455151ed5))\n\n\n\n## [3.3.1](https://github.com/geospoc/v-mapbox/compare/v3.3.0...v3.3.1) (2022-07-07)\n\n\n### Bug Fixes\n\n* **geojson:** clean up of props 📍 ([2cc57b1](https://github.com/geospoc/v-mapbox/commit/2cc57b1691a85bd42f10ca5279a50eeb2c46e78a))\n* issue with `container` undefined 🐛 ([f9269b5](https://github.com/geospoc/v-mapbox/commit/f9269b517eea449a6bfca91169befcc84b413139))\n\n\n\n# [3.3.0](https://github.com/geospoc/v-mapbox/compare/v3.2.4...v3.3.0) (2022-07-07)\n\n\n### Bug Fixes\n\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.8.2 to 8.8.3 ([00ecd85](https://github.com/geospoc/v-mapbox/commit/00ecd8587c9e2d2892fe9291a1c9898849a4bc4d))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.8.2 to 8.8.3 ([bdf1f3a](https://github.com/geospoc/v-mapbox/commit/bdf1f3a2291279735aa78cdab182069460185c0d))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.8.2 to 8.8.3 ([97f1eca](https://github.com/geospoc/v-mapbox/commit/97f1eca477bc71691d6acc2ef521c641d3728089))\n* issue with container not found 🐛 ([6306f73](https://github.com/geospoc/v-mapbox/commit/6306f731b2375b6a550ca9d34462af998b212d03))\n\n\n### Features\n\n* **geojson-layer:** pass source as `GeoJSONSourceRaw` 🕺 ([0ded1f5](https://github.com/geospoc/v-mapbox/commit/0ded1f5b7f22aef426dcce1e45a513209fda4ca7))\n\n\n\n## [3.2.4](https://github.com/geospoc/v-mapbox/compare/v3.2.3...v3.2.4) (2022-07-05)\n\n\n### Bug Fixes\n\n* ci and lint-pr workflows ([1967366](https://github.com/geospoc/v-mapbox/commit/196736681cf48238a7dfebf5be8b6dbec434f115))\n* clean up workflows ([cd0796f](https://github.com/geospoc/v-mapbox/commit/cd0796fdcccd9b13f5fd65d87f9c4dfc0b3b799a))\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.7.10 to 8.7.11 ([95331d4](https://github.com/geospoc/v-mapbox/commit/95331d41b9aaefe375afaf633be1cfdaa5ce4f85))\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.7.11 to 8.8.2 ([fc9fd75](https://github.com/geospoc/v-mapbox/commit/fc9fd75a0062f77c42a6b8f70d82c8a71ebe81f8))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.7.10 to 8.7.11 ([b157338](https://github.com/geospoc/v-mapbox/commit/b1573381cd131c4e0ab19dede0e0d9e8a4551e90))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.7.11 to 8.8.2 ([4b4d87e](https://github.com/geospoc/v-mapbox/commit/4b4d87e6286931a9364006f170252b87972eefc2))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.7.10 to 8.7.11 ([08877e4](https://github.com/geospoc/v-mapbox/commit/08877e49cabc6fd231b1d3a3a04e50ec53f7dc6b))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.7.11 to 8.8.2 ([e9d4017](https://github.com/geospoc/v-mapbox/commit/e9d401763521c13152c563e21e6b5779267a4383))\n* **deps:** bump actions/setup-node from 3.2.0 to 3.3.0 ([007c9b0](https://github.com/geospoc/v-mapbox/commit/007c9b0967a6b7938908de3c6bd6525da8806e4a))\n\n\n### Features\n\n* **husky:** add DAO settings in hook ([575dc51](https://github.com/geospoc/v-mapbox/commit/575dc5159087d4ab4e1073098bb0b2b0d60e6fff))\n\n\n\n## [3.2.3](https://github.com/geospoc/v-mapbox/compare/v3.2.2...v3.2.3) (2022-05-31)\n\n\n### Bug Fixes\n\n* add `lint-staged` as devDep ([20f4f60](https://github.com/geospoc/v-mapbox/commit/20f4f60934c1afb030042f4fb14b0baf9d82dccd))\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.7.7 to 8.7.8 ([c711cf3](https://github.com/geospoc/v-mapbox/commit/c711cf3ef8915bea286f655b113e69398c04107f))\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.7.8 to 8.7.9 ([254fb9d](https://github.com/geospoc/v-mapbox/commit/254fb9d81c7f2c263335bb9bf5c8933512f919a0))\n* **deps:** bump [@deck](https://github.com/deck).gl/core from 8.7.9 to 8.7.10 ([8b311aa](https://github.com/geospoc/v-mapbox/commit/8b311aa0e8da19cdf7ca3adec9074b4ed0c136f8))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.7.7 to 8.7.8 ([5083356](https://github.com/geospoc/v-mapbox/commit/5083356252931c3fdaab6247adb49fc61b3dcadf))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.7.8 to 8.7.9 ([62424d4](https://github.com/geospoc/v-mapbox/commit/62424d4f4176551bf148a12e3df2def7edbebde4))\n* **deps:** bump [@deck](https://github.com/deck).gl/layers from 8.7.9 to 8.7.10 ([e0177a3](https://github.com/geospoc/v-mapbox/commit/e0177a3a639300df4f7f82dd7d08f427f44aa37f))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.7.7 to 8.7.8 ([fb7297c](https://github.com/geospoc/v-mapbox/commit/fb7297c59878feb7b0a0b942819f0d1864274ab4))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.7.8 to 8.7.9 ([09cdb2a](https://github.com/geospoc/v-mapbox/commit/09cdb2a2f38a04c48694ebd0c1fdb5e76ba9656f))\n* **deps:** bump [@deck](https://github.com/deck).gl/mapbox from 8.7.9 to 8.7.10 ([23a01d7](https://github.com/geospoc/v-mapbox/commit/23a01d72690653d9a0f9a3e3c35eba47f51faade))\n* **deps:** bump actions/setup-node from 3.1.1 to 3.2.0 ([d281b5c](https://github.com/geospoc/v-mapbox/commit/d281b5ce3141b7fb74c8156476bc23cc3aacaefb))\n* **deps:** bump ejs from 3.1.6 to 3.1.7 ([7cb23ad](https://github.com/geospoc/v-mapbox/commit/7cb23ad858ee8ad51b4b1c465f23897ca146b9ce))\n* **deps:** bump github/codeql-action from 1 to 2 ([c3ec927](https://github.com/geospoc/v-mapbox/commit/c3ec92715c076ae820549e5664d384aeed79be01))\n* **deps:** bump wearerequired/lint-action from 1 to 2 ([57e0ec6](https://github.com/geospoc/v-mapbox/commit/57e0ec60a33cea16f496d5dc40c39d856ff1bdf5))\n\n\n\n## [3.2.2](https://github.com/geospoc/v-mapbox/compare/v3.2.1...v3.2.2) (2022-04-20)\n\n\n### Bug Fixes\n\n* generate new typings using `vue-tsc` ([a2df6fd](https://github.com/geospoc/v-mapbox/commit/a2df6fdb8826520e9127ff5448d8fb3baf7e95b1))\n\n\n\n## [3.2.1](https://github.com/geospoc/v-mapbox/compare/v3.2.0...v3.2.1) (2022-04-20)\n\n\n### Bug Fixes\n\n* build with `deck.gl/core` ([f684b4d](https://github.com/geospoc/v-mapbox/commit/f684b4dc865c651ca04d7d43b99205b069145343))\n\n\n\n# [3.2.0](https://github.com/geospoc/v-mapbox/compare/v3.1.6...v3.2.0) (2022-04-20)\n\n\n### Bug Fixes\n\n* **docs:** remove environment details in netlify deploy ([c845761](https://github.com/geospoc/v-mapbox/commit/c845761ffb9716d0416446e61c6c778fab938801))\n\n\n### Features\n\n* **deck.gl:** add `deck.gl` Arc layer ([60f728f](https://github.com/geospoc/v-mapbox/commit/60f728fc5e5da8fa35f9ef185f726eeb1cf1d975))\n* **deck.gl:** add `deck.gl` GeoJSON layer ([bfe18f0](https://github.com/geospoc/v-mapbox/commit/bfe18f019f4373a3d1c34500d16bf4ab90fd79d2))\n* enable `[@deck](https://github.com/deck).gl` devDeps ([4fa728f](https://github.com/geospoc/v-mapbox/commit/4fa728ff7b51cc2041104c70be78cbfa59f5e592))\n* upgrade GitHub actions to Node 18 ([20d6fcc](https://github.com/geospoc/v-mapbox/commit/20d6fcc1028a804a7a8f807da24c4e2e60410df4))\n\n\n\n## [3.1.6](https://github.com/geospoc/v-mapbox/compare/v3.1.5...v3.1.6) (2022-04-13)\n\n\n\n## [3.1.5](https://github.com/geospoc/v-mapbox/compare/v3.1.4...v3.1.5) (2022-04-13)\n\n\n### Bug Fixes\n\n* tsconfig config for `vue-tsc` ([f0cd276](https://github.com/geospoc/v-mapbox/commit/f0cd276a765151ffe91d0d506b2b752befb1c24b))\n\n\n### Features\n\n* **deps:** add `vue-tsc` for auto-generating the typings ([535f3c8](https://github.com/geospoc/v-mapbox/commit/535f3c81aef37d0dcd99816d7393737dd23ffaa2))\n\n\n\n## [3.1.4](https://github.com/geospoc/v-mapbox/compare/v3.1.3...v3.1.4) (2022-04-13)\n\n\n\n## [3.1.3](https://github.com/geospoc/v-mapbox/compare/v3.1.2...v3.1.3) (2022-04-13)\n\n\n### Bug Fixes\n\n* vue bundler path in plugin alias ([ca09890](https://github.com/geospoc/v-mapbox/commit/ca09890f06afd4dd0d0c992f82a255a2cc495ada))\n\n\n\n## [3.1.2](https://github.com/geospoc/v-mapbox/compare/v3.1.1...v3.1.2) (2022-04-12)\n\n\n\n## [3.1.1](https://github.com/geospoc/v-mapbox/compare/v3.1.0...v3.1.1) (2022-04-12)\n\n\n### Bug Fixes\n\n* **deps:** bump actions/checkout from 2 to 3 ([207d8f0](https://github.com/geospoc/v-mapbox/commit/207d8f0de31507877be4ca1ec66975e18fe43aeb))\n* **deps:** bump actions/setup-node from 2.5.1 to 3.1.0 ([34153f5](https://github.com/geospoc/v-mapbox/commit/34153f50f4d73d8fcebf3ca6f4ca25319a1b57c9))\n* **deps:** bump actions/setup-node from 3.1.0 to 3.1.1 ([9897d5c](https://github.com/geospoc/v-mapbox/commit/9897d5c0d7f627ea67d63dcf90f155a1eca729d9))\n* issue with passing options to `Map()` ([b09ef8a](https://github.com/geospoc/v-mapbox/commit/b09ef8a55adf934596016b313068dbe2d70e4b06))\n\n\n\n# [3.1.0](https://github.com/geospoc/v-mapbox/compare/v3.0.0...v3.1.0) (2022-03-01)\n\n\n### Bug Fixes\n\n* minor housekeeping ([b24bc9e](https://github.com/geospoc/v-mapbox/commit/b24bc9e29b530bc981a634684de446c30019ffc1))\n\n\n### Features\n\n* **ts:** add `.d.ts` using `vue-tsc` ([745afee](https://github.com/geospoc/v-mapbox/commit/745afeece5f0630000aa01f3ef84359f3160e6e5))\n\n\n\n# [3.0.0](https://github.com/geospoc/v-mapbox/compare/v1.10.1...v3.0.0) (2022-02-24)\n\n\n### Bug Fixes\n\n* **deps:** bump node-fetch from 2.6.1 to 2.6.7 ([d1286f4](https://github.com/geospoc/v-mapbox/commit/d1286f481eab69dc50da7c4f1389b543ea8375f5))\n* unused variables ([1a967e3](https://github.com/geospoc/v-mapbox/commit/1a967e38c37182b6e78c7a612b2964a327d48420))\n\n\n### Features\n\n* add default controls 🎉 ([dd5ad1a](https://github.com/geospoc/v-mapbox/commit/dd5ad1a41707fb047a1c100cf05054d906cb1367))\n* persist layers when style/basemap changes ([d81a70c](https://github.com/geospoc/v-mapbox/commit/d81a70c11b41117f806971bff6200bd322579d04))\n* setup CodeQL ([6fb9fd3](https://github.com/geospoc/v-mapbox/commit/6fb9fd3b679f062c0bf0e279dc5d83e32c9f1dd5))\n\n\n\n## [1.10.1](https://github.com/geospoc/v-mapbox/compare/v1.10.0...v1.10.1) (2022-01-19)\n\n\n### Bug Fixes\n\n* scope the `hidden` class to avoid conflict with tailwind ([559121b](https://github.com/geospoc/v-mapbox/commit/559121b292a1d5d4675e2f46740ad91a8aae2a46))\n* **deps:** bump actions/setup-node from 2.5.0 to 2.5.1 ([8a5c510](https://github.com/geospoc/v-mapbox/commit/8a5c5105a82aebc684772ae067278aa0f9895e84))\n\n\n\n# [1.10.0](https://github.com/geospoc/v-mapbox/compare/v1.9.0...v1.10.0) (2021-12-06)\n\n\n### Bug Fixes\n\n* update pre-push hook ([baa2b6e](https://github.com/geospoc/v-mapbox/commit/baa2b6e9f16f44d7422cf77e1870c5ddbcb7c12c))\n* update typings for Vue components ([ec183fd](https://github.com/geospoc/v-mapbox/commit/ec183fdf82f31c2a5380565bf72ab1f6cae272dc))\n* **deps:** bump actions/setup-node from 2.4.1 to 2.5.0 ([c39d507](https://github.com/geospoc/v-mapbox/commit/c39d5076a254551cbf70ad596af2663b7e680331))\n\n\n### Features\n\n* add `.nvmrc` to use current node version ([3adf1de](https://github.com/geospoc/v-mapbox/commit/3adf1ded474fb06e611ed2ceab789dea84021389))\n\n\n\n# [1.9.0](https://github.com/geospoc/v-mapbox/compare/v1.8.2...v1.9.0) (2021-11-10)\n\n\n### Bug Fixes\n\n* **deps:** bump actions/setup-node from 2.4.0 to 2.4.1 ([36c3434](https://github.com/geospoc/v-mapbox/commit/36c343473e5ab683778bb9370925c4b4e4b04694))\n\n\n### Features\n\n* add iControl ([93fef74](https://github.com/geospoc/v-mapbox/commit/93fef7465b00283e8c366569bd5aa5cc93d2a76d))\n\n\n### Reverts\n\n* don't make `container` as required field prop ([7dc81ad](https://github.com/geospoc/v-mapbox/commit/7dc81ad1123d9486cef64818a3914368261258e4))\n\n\n\n## [1.8.2](https://github.com/geospoc/v-mapbox/compare/v1.8.1...v1.8.2) (2021-09-18)\n\n\n### Bug Fixes\n\n* **deps:** use rollup-plugin-vue v5 to bundle the pkg ([7143c2f](https://github.com/geospoc/v-mapbox/commit/7143c2f41f40875010293bc30148089117faa9f6))\n\n\n\n## [1.8.1](https://github.com/geospoc/v-mapbox/compare/v1.8.0...v1.8.1) (2021-09-13)\n\n\n### Bug Fixes\n\n* map container template ref not found ([145d978](https://github.com/geospoc/v-mapbox/commit/145d97882fb514c96a50e7eb9fd9d4e76bc2cb07))\n\n\n\n# [1.8.0](https://github.com/geospoc/v-mapbox/compare/v1.7.3...v1.8.0) (2021-09-12)\n\n\n### Bug Fixes\n\n* lint issue ([2e2b103](https://github.com/geospoc/v-mapbox/commit/2e2b10336b32454f3ded9729a9941edbee4699d2))\n* update CI workflow ([b1fecd0](https://github.com/geospoc/v-mapbox/commit/b1fecd00bd4bc1636f2432ce4dabb5372e4a03cb))\n* update deps ([f77392c](https://github.com/geospoc/v-mapbox/commit/f77392cddc3f5e3dd10464c8213a672e702b544a))\n* use lint-staged ([34972fa](https://github.com/geospoc/v-mapbox/commit/34972fa6a228e21c0ee907098f9b622ef7950e6c))\n* vuepress build issue ([dfc4658](https://github.com/geospoc/v-mapbox/commit/dfc4658bf3ff204312b4a09d1b1f8e6db7aa71b2))\n* **deps:** bump actions/setup-node from 2.1.5 to 2.2.0 ([0e29024](https://github.com/geospoc/v-mapbox/commit/0e29024965dbb35c05fba4c13916833a397b949d))\n* **deps:** bump actions/setup-node from 2.2.0 to 2.3.0 ([55ba848](https://github.com/geospoc/v-mapbox/commit/55ba84812f888c28bcf2605a896947cdab3c742c))\n\n\n\n## [1.7.3](https://github.com/geospoc/v-mapbox/compare/v1.7.2...v1.7.3) (2021-06-22)\n\n\n### Bug Fixes\n\n* before prop reactive ([9a5a1b2](https://github.com/geospoc/v-mapbox/commit/9a5a1b25eb939ddbc12d045faa395b55d4fa3ddd)), closes [#204](https://github.com/geospoc/v-mapbox/issues/204)\n* control position reactivity & doc ([9f38751](https://github.com/geospoc/v-mapbox/commit/9f387516c45cd9f68a0497ff52f6ae9e808e0498)), closes [#362](https://github.com/geospoc/v-mapbox/issues/362)\n\n\n\n## [1.7.2](https://github.com/geospoc/v-mapbox/compare/v1.7.1...v1.7.2) (2021-06-22)\n\n\n### Bug Fixes\n\n* **deps:** bump actions/cache from 2.1.5 to 2.1.6 ([52401b5](https://github.com/geospoc/v-mapbox/commit/52401b5eb9f3fa822354f804e77811298824488c))\n\n\n\n## [1.7.1](https://github.com/geospoc/v-mapbox/compare/v1.7.0...v1.7.1) (2021-05-18)\n\n\n### Bug Fixes\n\n* add props reflecting Mapbox API ([0a762b3](https://github.com/geospoc/v-mapbox/commit/0a762b32b7283ebcc04987fce747722369b376d6))\n* build fsevents on linux ([b011a2f](https://github.com/geospoc/v-mapbox/commit/b011a2f41c6a5f5ac549d1bbddd36f97046038bb))\n* set `--no-optional` flag to `npm ci` ([2dd7c4e](https://github.com/geospoc/v-mapbox/commit/2dd7c4e516b289e7ce0d5cfdc67f807d23efddcb))\n* typo deafult to default ([f71b030](https://github.com/geospoc/v-mapbox/commit/f71b03059a42788efac0b4ee6f93cce355201426))\n* update eslint config to support `eslint-config-prettier` ([07d7a4a](https://github.com/geospoc/v-mapbox/commit/07d7a4ab86d9c33445daa2fd4139fea3b242f86d))\n* use npm install instead of npm ci ([c8043d1](https://github.com/geospoc/v-mapbox/commit/c8043d156be5c144bbf797fc14e6e6303fdcb7a1))\n* **build:** use sass instead of node-sass ([558f11b](https://github.com/geospoc/v-mapbox/commit/558f11bc0b87299bf87cc44ef7c5d0f8ad1b6503))\n* **deps:** bump actions/cache from v2 to v2.1.4 ([49a1bce](https://github.com/geospoc/v-mapbox/commit/49a1bce7353c1a1d4328c99a8337d5b375300644))\n* **deps:** bump actions/cache from v2.1.4 to v2.1.5 ([bfde50f](https://github.com/geospoc/v-mapbox/commit/bfde50f85504c940f6bd060b510137d4c2071710))\n* **deps:** bump actions/setup-node from v2.1.4 to v2.1.5 ([b087acf](https://github.com/geospoc/v-mapbox/commit/b087acf1b8495277537e99fb7fac41c6319345a7))\n\n\n### Reverts\n\n* use npm ci & restore cached `node_modules` ([d57f8f7](https://github.com/geospoc/v-mapbox/commit/d57f8f716d4f949d65b313efb455659bffe8c08e))\n\n\n\n# [1.7.0](https://github.com/geospoc/v-mapbox/compare/v1.6.4...v1.7.0) (2021-01-29)\n\n\n### Bug Fixes\n\n* prop \"showed\" in popup caused cyclic issue ([0854318](https://github.com/geospoc/v-mapbox/commit/0854318422339a6cd34c5a7c1d144f400c76beab)), closes [#203](https://github.com/geospoc/v-mapbox/issues/203)\n* **deps:** bump actions/setup-node from v2.1.2 to v2.1.3 ([659971d](https://github.com/geospoc/v-mapbox/commit/659971d1489724bc5e599d1118a3a09c165009ba))\n* **deps:** bump actions/setup-node from v2.1.3 to v2.1.4 ([b4728c5](https://github.com/geospoc/v-mapbox/commit/b4728c555c38c3acd3588bcbc9750030ab8b08e2))\n\n\n### Features\n\n* add `closeOnMove` & `focusAfterOpen` props ([f77a4b5](https://github.com/geospoc/v-mapbox/commit/f77a4b5648f03c52c01a134bdf2adbf4010ac747))\n\n\n\n## [1.6.4](https://github.com/geospoc/v-mapbox/compare/v1.6.3...v1.6.4) (2020-10-30)\n\n\n### Bug Fixes\n\n* set css as sideEffect ([9257843](https://github.com/geospoc/v-mapbox/commit/9257843a76b61bdb7da1ae29e1bb7ffa0af0b291))\n* specify lang attribute to style ([ea10ed3](https://github.com/geospoc/v-mapbox/commit/ea10ed3d42b6fbb4d7585f44552286c342a664a5))\n\n\n\n## [1.6.3](https://github.com/geospoc/v-mapbox/compare/v1.6.2...v1.6.3) (2020-10-29)\n\n\n### Bug Fixes\n\n* **deps:** bump actions/setup-node from v1 to v2.1.2 ([38a4cfa](https://github.com/geospoc/v-mapbox/commit/38a4cfa5735dabeaec34647cdeea6f880d1810b9))\n* the `main` entry file was 404 ([e2450e7](https://github.com/geospoc/v-mapbox/commit/e2450e7c3bdc83d965e7a9eacceae07dded7c7fe)), closes [#174](https://github.com/geospoc/v-mapbox/issues/174)\n\n\n\n## [1.6.2](https://github.com/geospoc/v-mapbox/compare/v1.6.1...v1.6.2) (2020-10-29)\n\n\n### Bug Fixes\n\n* update `ship.js` workflow ([7379c54](https://github.com/geospoc/v-mapbox/commit/7379c54020ce0472a281af6f619992fc31021ab3))\n* **deps:** bump dependencies ([23d8253](https://github.com/geospoc/v-mapbox/commit/23d825336fec178f9e9435f8f9f239f0851ffde6))\n* update dependabot config to support github-actions ecosystem ([b2b999e](https://github.com/geospoc/v-mapbox/commit/b2b999e204392dbd9b6090d3369d62e77c71ffe2))\n\n\n\n## [1.6.1](https://github.com/geospoc/v-mapbox/compare/v1.5.0...v1.6.1) (2020-10-06)\n\n\n### Bug Fixes\n\n* failing `npm run build` in shipjs trigger ([8caee76](https://github.com/geospoc/v-mapbox/commit/8caee76f7a8dfb5b681a4b0f098acb7cfca8e870))\n* **ci:** update workflows ([7f3b4d5](https://github.com/geospoc/v-mapbox/commit/7f3b4d51e9352c833410cc7231f8582177d7dc35))\n* add babelHelpers option in babel rollup plugin ([66d1519](https://github.com/geospoc/v-mapbox/commit/66d151995f32e6ae6db208f233055e4c12e907b3))\n\n\n\n# [1.6.0](https://github.com/geospoc/v-mapbox/compare/v1.5.0...v1.6.0) (2020-10-05)\n\n\n### Bug Fixes\n\n* **ci:** update workflows ([7f3b4d5](https://github.com/geospoc/v-mapbox/commit/7f3b4d51e9352c833410cc7231f8582177d7dc35))\n* add babelHelpers option in babel rollup plugin ([66d1519](https://github.com/geospoc/v-mapbox/commit/66d151995f32e6ae6db208f233055e4c12e907b3))\n* added type `object` for maxBounds validation ([4e2802d](https://github.com/geospoc/v-mapbox/commit/4e2802d0cb2b3cd2aa5269512eecafb7340467e2))\n* lint:prettier ([9ab883f](https://github.com/geospoc/v-mapbox/commit/9ab883f3e5165ff99e6a078a538cacb6083351a2))\n* rtl issue ([0eefb33](https://github.com/geospoc/v-mapbox/commit/0eefb33eb3b4c9c6955041282615e2216aa3d2d3))\n\n\n### Features\n\n* make 'bounds' synced prop ([5834608](https://github.com/geospoc/v-mapbox/commit/5834608a7b228fb074b6ef0a42f08aa598ad02b9))\n\n\n\n# [1.5.0](https://github.com/geospoc/v-mapbox/compare/v1.4.0...v1.5.0) (2020-09-17)\n\n\n### Bug Fixes\n\n* add classes for popup ([a7d486b](https://github.com/geospoc/v-mapbox/commit/a7d486be3317f87319124e65bee522b56b108b31))\n* update dependencies ([cdebed1](https://github.com/geospoc/v-mapbox/commit/cdebed19115bfd149fbc0923b8441933d59c9a27))\n* **docs:** update grammar of composition ([7b080c7](https://github.com/geospoc/v-mapbox/commit/7b080c7b2bdeb83cdf69af6c2e449151b15b5f05))\n\n\n### Features\n\n* add `/rebase` workflow ([b0a3140](https://github.com/geospoc/v-mapbox/commit/b0a314030cf5705365fdfe47ae7b88a7c4dc155f))\n* add className option to popup ([bb9abf0](https://github.com/geospoc/v-mapbox/commit/bb9abf021f0e2f9e2fc418f19d1f5855d4b8be21))\n\n\n\n# [1.4.0](https://github.com/geospoc/v-mapbox/compare/v1.3.3...v1.4.0) (2020-08-08)\n\n\n### Bug Fixes\n\n* **docs:** update default mapbox-gl version in docs ([d1ddc11](https://github.com/geospoc/v-mapbox/commit/d1ddc111fba917e8cebbae3a298460d95a4f0def))\n* **props:** update required values for synced props ([0a516c6](https://github.com/geospoc/v-mapbox/commit/0a516c6d255d961705950fb08fa5e7a594c63189))\n* remove eslint overrides ([197717a](https://github.com/geospoc/v-mapbox/commit/197717a958eb7063aece80269f06b390f5f360f7))\n\n\n### Features\n\n* **docs:** update gl-map api docs ([29579a2](https://github.com/geospoc/v-mapbox/commit/29579a2a8aca875a0899e20b3b3233b9fc3a4ea7))\n* add minPitch() & maxPitch() options ([97118e0](https://github.com/geospoc/v-mapbox/commit/97118e01035d668996d5951d850355af780be1d2))\n* update map options as per mapbox-gl api ([2f9e6c6](https://github.com/geospoc/v-mapbox/commit/2f9e6c673dab9561160e8f0d8539e97636ec38e9))\n\n\n\n## [1.3.3](https://github.com/geospoc/v-mapbox/compare/v1.3.2...v1.3.3) (2020-07-26)\n\n\n### Bug Fixes\n\n* update CI workflow ([3267f48](https://github.com/geospoc/v-mapbox/commit/3267f480d6a1f9a38919443f46388870052805a8))\n* **docs:** update mapbox-gl version ([861690a](https://github.com/geospoc/v-mapbox/commit/861690a9de712aaad54dc3fe9dbe786bc5f9e9fb))\n* update rollup plugin babel ([4c77dff](https://github.com/geospoc/v-mapbox/commit/4c77dff0e541aef21a604d199da1ca02cd5b31f9))\n* **ci:** update ship.js trigger to trigger on `main` branch ([62e88f3](https://github.com/geospoc/v-mapbox/commit/62e88f328750e0ca9857c9fd9c61b9256b5637c0))\n* correct `setLigh` event name typo. ([42bdcd1](https://github.com/geospoc/v-mapbox/commit/42bdcd1aa547e7b946b21549d6101ca7429ca7a8))\n\n\n### Features\n\n* enable jsconfig for better VSCode Intellisense ([54a055d](https://github.com/geospoc/v-mapbox/commit/54a055d621bcd7627798b6c38d3e33acdaf2cdbb))\n\n\n\n## [1.3.2](https://github.com/vinayakkulkarni/v-mapbox/compare/v1.3.1...v1.3.2) (2020-06-24)\n\n\n### Features\n\n* add styleimagemissing event ([ade797b](https://github.com/vinayakkulkarni/v-mapbox/commit/ade797b27a5582cf6591c676ac97c731b04d3745))\n\n\n\n## [1.3.1](https://github.com/vinayakkulkarni/v-mapbox/compare/v1.2.0...v1.3.1) (2020-06-22)\n\n\n### Bug Fixes\n\n* **deps:** clean lockfile ([85a7217](https://github.com/vinayakkulkarni/v-mapbox/commit/85a7217b6f93614c7e4642c41c3051f724bf9c22))\n* add deepscan badge ([731ef73](https://github.com/vinayakkulkarni/v-mapbox/commit/731ef7302d3fa4b5e65219b119542e31acd695f7))\n* update docs for Popup open & close events ([08e1502](https://github.com/vinayakkulkarni/v-mapbox/commit/08e15025c38f4222fef8fd8f893f9bdcabe81d72))\n* update README for Layers ([0c4bb4d](https://github.com/vinayakkulkarni/v-mapbox/commit/0c4bb4d6691e3b0d8f97212d15e4442c055899e3))\n\n\n### Features\n\n* add Code Of Conduct ([ea9bfae](https://github.com/vinayakkulkarni/v-mapbox/commit/ea9bfaeb4d370e2f801f736469935c39505cdf67))\n* allow the hash param to be a string or a boolean ([361e7f5](https://github.com/vinayakkulkarni/v-mapbox/commit/361e7f5b581bea2e15326180b40f8748b6b5dbac))\n\n\n\n# [1.3.0](https://github.com/vinayakkulkarni/v-mapbox/compare/v1.2.0...v1.3.0) (2020-06-22)\n\n\n### Bug Fixes\n\n* add deepscan badge ([731ef73](https://github.com/vinayakkulkarni/v-mapbox/commit/731ef7302d3fa4b5e65219b119542e31acd695f7))\n* update docs for Popup open & close events ([08e1502](https://github.com/vinayakkulkarni/v-mapbox/commit/08e15025c38f4222fef8fd8f893f9bdcabe81d72))\n* update README for Layers ([0c4bb4d](https://github.com/vinayakkulkarni/v-mapbox/commit/0c4bb4d6691e3b0d8f97212d15e4442c055899e3))\n\n\n### Features\n\n* add Code Of Conduct ([ea9bfae](https://github.com/vinayakkulkarni/v-mapbox/commit/ea9bfaeb4d370e2f801f736469935c39505cdf67))\n* allow the hash param to be a string or a boolean ([361e7f5](https://github.com/vinayakkulkarni/v-mapbox/commit/361e7f5b581bea2e15326180b40f8748b6b5dbac))\n\n\n\n<a name=\"1.2.0\"></a>\n# [1.2.0](https://github.com/vinayakkulkarni/v-mapbox/compare/v1.0.2...v1.2.0) (2020-06-17)\n\n\n### Bug Fixes\n\n* typo in docs ([ebc03b1](https://github.com/vinayakkulkarni/v-mapbox/commit/ebc03b1))\n* update docs ([edaeb42](https://github.com/vinayakkulkarni/v-mapbox/commit/edaeb42))\n* update docs for props & import links ([463593a](https://github.com/vinayakkulkarni/v-mapbox/commit/463593a))\n* update homepage ([92f7499](https://github.com/vinayakkulkarni/v-mapbox/commit/92f7499))\n* update typo in docs ([b2f1a9f](https://github.com/vinayakkulkarni/v-mapbox/commit/b2f1a9f))\n\n\n### Features\n\n* add few badges ([a79eb48](https://github.com/vinayakkulkarni/v-mapbox/commit/a79eb48))\n* add maxWidth prop for popup ([36d2dfa](https://github.com/vinayakkulkarni/v-mapbox/commit/36d2dfa))\n\n\n\n<a name=\"1.1.0\"></a>\n# [1.1.0](https://github.com/vinayakkulkarni/v-mapbox/compare/v1.0.2...v1.1.0) (2020-06-17)\n\n\n### Bug Fixes\n\n* typo in docs ([ebc03b1](https://github.com/vinayakkulkarni/v-mapbox/commit/ebc03b1))\n* update docs ([edaeb42](https://github.com/vinayakkulkarni/v-mapbox/commit/edaeb42))\n* update docs for props & import links ([463593a](https://github.com/vinayakkulkarni/v-mapbox/commit/463593a))\n* update homepage ([92f7499](https://github.com/vinayakkulkarni/v-mapbox/commit/92f7499))\n* update typo in docs ([b2f1a9f](https://github.com/vinayakkulkarni/v-mapbox/commit/b2f1a9f))\n\n\n### Features\n\n* add few badges ([a79eb48](https://github.com/vinayakkulkarni/v-mapbox/commit/a79eb48))\n* add maxWidth prop for popup ([36d2dfa](https://github.com/vinayakkulkarni/v-mapbox/commit/36d2dfa))\n\n\n\n<a name=\"1.0.2\"></a>\n## [1.0.2](https://github.com/vinayakkulkarni/v-mapbox/compare/0.4.1...1.0.2) (2020-06-17)\n\n\n### Bug Fixes\n\n* update pkg registry ([7273257](https://github.com/vinayakkulkarni/v-mapbox/commit/7273257))\n\n\n\n<a name=\"1.0.1\"></a>\n## [1.0.1](https://github.com/vinayakkulkarni/v-mapbox/compare/0.4.1...1.0.1) (2020-06-17)\n\n\n### Bug Fixes\n\n* remove dist 🧹 ([5140930](https://github.com/vinayakkulkarni/v-mapbox/commit/5140930))\n* remove test from ci workflow ([72cd2da](https://github.com/vinayakkulkarni/v-mapbox/commit/72cd2da))\n* remove yarn 🙌 ([966b112](https://github.com/vinayakkulkarni/v-mapbox/commit/966b112))\n* update eslint ignore rules 🏗 ([1dae683](https://github.com/vinayakkulkarni/v-mapbox/commit/1dae683))\n* update License 👀 ([7483eef](https://github.com/vinayakkulkarni/v-mapbox/commit/7483eef))\n* update lockfiles, prettier & husky configs 💅 ([297cd09](https://github.com/vinayakkulkarni/v-mapbox/commit/297cd09))\n\n\n### Features\n\n* **ci:** add dependabot & semantic pr configs 🤗 ([3d518b5](https://github.com/vinayakkulkarni/v-mapbox/commit/3d518b5))\n\n\n\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, sex characteristics, gender identity and expression,\nlevel of experience, education, socio-economic status, nationality, personal\nappearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or\n advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic\n address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community. Examples of\nrepresenting a project or community include using an official project e-mail\naddress, posting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event. Representation of a project may be\nfurther defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at inbox.vinayak@gmail.com. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see\nhttps://www.contributor-covenant.org/faq\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 soal, 2020-current Vinayak Kulkarni <inbox.vinayak@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# V-Mapbox 🗺\n\n<a title=\"npm\" href=\"https://www.npmjs.com/package/v-mapbox\" rel=\"nofollow\">\n  <img alt=\"npm\" src=\"https://img.shields.io/npm/v/v-mapbox?label=npm%40latest&logo=npm\">\n</a>\n<a title=\"GitHub Release\" href=\"https://github.com/vinayakkulkarni/v-mapbox/releases\" rel=\"nofollow\">\n  <img alt=\"GitHub release (latest by date including pre-releases)\" src=\"https://img.shields.io/github/v/release/vinayakkulkarni/v-mapbox?include_prereleases&logo=github\">\n</a>\n<a title=\"CI Status\" href=\"https://github.com/vinayakkulkarni/v-mapbox/actions?query=workflow%3Aci\" rel=\"nofollow\">\n  <img alt=\"Total alerts\" src=\"https://github.com/vinayakkulkarni/v-mapbox/workflows/ci/badge.svg\">\n</a>\n<a title=\"DeepScan Grade\" href=\"https://deepscan.io/dashboard#view=project&tid=9381&pid=14423&bid=267899\">\n  <img src=\"https://deepscan.io/api/teams/9381/projects/14423/branches/267899/badge/grade.svg\" alt=\"DeepScan grade\">\n</a>\n<a title=\"downloads\" href=\"http://npm-stat.com/charts.html?package=v-mapbox\" rel=\"nofollow\">\n  <img alt=\"npm\" src=\"https://img.shields.io/npm/dm/v-mapbox\">\n</a>\n<a title=\"deploy\" href=\"https://github.com/algolia/shipjs\" rel=\"nofollow\">\n  <img src=\"https://img.shields.io/badge/deploy-🛳%20Ship.js-blue?style=flat\" />\n</a>\n<a title=\"Last Commit\" href=\"https://github.com/vinayakkulkarni/v-mapbox/commits/main\" rel=\"nofollow\">\n  <img alt=\"GitHub last commit\" src=\"https://img.shields.io/github/last-commit/vinayakkulkarni/v-mapbox\">\n</a>\n<a title=\"Contributors\" href=\"https://github.com/vinayakkulkarni/v-mapbox/graphs/contributors\" rel=\"nofollow\">\n  <img alt=\"GitHub contributors\" src=\"https://img.shields.io/github/contributors/vinayakkulkarni/v-mapbox\">\n</a>\n<a title=\"maintenance\" href=\"https://github.com/vinayakkulkarni/v-mapbox/commits/main\" rel=\"nofollow\">\n  <img alt=\"Maintenance\" src=\"https://img.shields.io/maintenance/yes/2024\">\n</a>\n<a href=\"https://app.fossa.com/projects/git%2Bgithub.com%2Fvinayakkulkarni%2Fv-mapbox?ref=badge_shield\" alt=\"FOSSA Status\">\n  <img src=\"https://app.fossa.com/api/projects/git%2Bgithub.com%2Fvinayakkulkarni%2Fv-mapbox.svg?type=shield\"/>\n</a>\n\n> Combine powers of [Vue](https://vuejs.org/) and [Mapbox GL JS](https://mapbox.com/mapbox-gl-js) (v3.x) & [MaplibreGL](https://maplibre.org/maplibre-gl-js/docs/) (v4.x) 🗺\n\nV-Mapbox is wrapper around Mapbox GL JS for >v1.x to <=v3.x & Maplibre GL JS for > v4.x library that provides vueish-way to interact with the map.\n\n[Description and documentation](https://v-mapbox.netlify.app/)\n\n## Installation\n\n```sh\n# For Vue 2\n$ npm i v-mapbox@legacy\n# For Vue 3\n$ npm i v-mapbox\n```\n\n## Demo\n\n[![Edit v-mapbox-vue-3](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/v-mapbox-uq9ri2?fontsize=14&hidenavigation=1&theme=dark)\n\n## Deck.gl 🆕\n\n[![Edit v-mapbox-with-deck-gl-geojson](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/v-mapbox-with-deck-gl-geojson-f8nn5q?fontsize=14&hidenavigation=1&theme=dark)\n\n## Development\n\n```sh\ngit clone git@github.com:vinayakkulkarni/v-mapbox.git\ncd v-mapbox\nnpm install\n```\n\nRunning in dev mode:\n\n```sh\nnpm run serve\n```\n\nBuild for production:\n\n```sh\nnpm run build\n```\n\n### Documentation\n\nStart documentation site in development mode:\n\n```sh\nnpm run docs:dev\n```\n\nBuild documentation:\n\n```sh\nnpm run docs:build\n```\n\nInspired by KoRiGaN's [Vue2Leaflet](https://github.com/KoRiGaN/Vue2Leaflet).\n\n## Contributing\n\n1. Fork it ([https://github.com/vinayakkulkarni/v-mapbox/fork](https://github.com/vinayakkulkarni/v-mapbox/fork))\n2. Create your feature branch (`git checkout -b feat/new-feature`)\n3. Commit your changes (`git commit -Sam 'feat: add feature'`)\n4. Push to the branch (`git push origin feat/new-feature`)\n5. Create a new [Pull Request](https://github.com/vinayakkulkarni/v-mapbox/compare)\n\n_Note_:\n\n1. Please contribute using [GitHub Flow](https://web.archive.org/web/20191104103724/https://guides.github.com/introduction/flow/)\n2. Commits & PRs will be allowed only if the commit messages & PR titles follow the [conventional commit standard](https://www.conventionalcommits.org/), _read more about it [here](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional#type-enum)_\n3. PS. Ensure your commits are signed. _[Read why](https://withblue.ink/2020/05/17/how-and-why-to-sign-git-commits.html)_\n\n## Author\n\n**v-mapbox** © [Vinayak](https://github.com/vinayakkulkarni), Released under the [MIT](./LICENSE) License.<br>\nAuthored and maintained by Vinayak Kulkarni with help from contributors ([list](https://github.com/vinayakkulkarni/v-mapbox/contributors)).\n\n> [vinayakkulkarni.dev](https://vinayakkulkarni.dev) · GitHub [@vinayakkulkarni](https://github.com/vinayakkulkarni) · Twitter [@\\_vinayak_k](https://twitter.com/_vinayak_k)\n\n## License\n\nMIT\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fvinayakkulkarni%2Fv-mapbox.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fvinayakkulkarni%2Fv-mapbox?ref=badge_large)\n"
  },
  {
    "path": "commitlint.config.cjs",
    "content": "module.exports = {\n  extends: ['@commitlint/config-conventional'],\n};\n"
  },
  {
    "path": "docs/.vitepress/config.ts",
    "content": "import { defineConfig } from 'vitepress';\nimport type { DefaultTheme } from 'vitepress/types/default-theme';\n\nconst nav: DefaultTheme.Config['nav'] = [\n  {\n    text: 'Guide',\n    link: '/guide/',\n  },\n  {\n    text: 'API',\n    link: '/api/',\n  },\n  {\n    text: 'Plugin Components',\n    link: '/plugin-components/',\n  },\n];\n\nconst sidebar: DefaultTheme.Config['sidebar'] = {\n  '/guide/': [\n    {\n      text: 'Guide',\n      items: [\n        { text: 'Index', link: '/guide/index.md' },\n        { text: 'Basemap', link: '/guide/basemap.md' },\n        { text: 'Composition', link: '/guide/composition.md' },\n        { text: 'Controls', link: '/guide/controls.md' },\n        { text: 'Markers & Popups', link: '/guide/markers-and-popups.md' },\n        { text: 'Layers & Sources', link: '/guide/layers-and-sources.md' },\n      ],\n    },\n  ],\n  '/api/': [\n    {\n      text: 'API',\n      items: [\n        { text: 'Index', link: '/api/index.md' },\n        { text: 'Controls', link: '/api/controls.md' },\n        { text: 'Markers', link: '/api/marker.md' },\n        { text: 'Popups', link: '/api/popup.md' },\n        { text: 'Layers', link: '/api/Layers/index.md' },\n        { text: 'GeoJSON Layer', link: '/api/Layers/geojsonlayer.md' },\n        { text: 'Vector Layer', link: '/api/Layers/vectorlayer.md' },\n        { text: 'Raster Layer', link: '/api/Layers/rasterlayer.md' },\n        { text: 'Image Layer', link: '/api/Layers/imagelayer.md' },\n        { text: 'Video Layer', link: '/api/Layers/videolayer.md' },\n        { text: 'Canvas Layer', link: '/api/Layers/canvaslayer.md' },\n      ],\n    },\n  ],\n  '/plugin-components/': [\n    {\n      text: 'Plugin Components',\n      items: [\n        { text: 'Index', link: '/plugin-components/index.md' },\n        {\n          text: 'Development',\n          link: '/plugin-components/plugin-components-development.md',\n        },\n      ],\n    },\n  ],\n};\n\nexport default defineConfig({\n  title: 'V-Mapbox',\n  description: 'Combine powers of Mapbox GL JS and Vue.js',\n  themeConfig: {\n    nav,\n    sidebar,\n    footer: {\n      message:\n        'Released under the <a href=\"https://github.com/geospoc/v-mapbox/blob/main/LICENSE\">MIT License</a>.',\n      copyright:\n        'Copyright &copy; 2019-present <a href=\"https://github.com/vinayakkulkarni\">Vinayak Kulkarni</a>',\n    },\n  },\n});\n"
  },
  {
    "path": "docs/api/Layers/canvaslayer.md",
    "content": "# CanvasLayer\n\n::: tip\nMapbox GL JS docs:  \n[CanvasSource](https://docs.mapbox.com/mapbox-gl-js/api/#canvassource)\n:::\n\n## Props\n\nAll common [layers props](/api/Layers/index.md#props)\n\n## Events\n\nAll common layer [events](/api/Layers/#events)\n"
  },
  {
    "path": "docs/api/Layers/geojsonlayer.md",
    "content": "# GeojsonLayer\n\n## Props\n\nAll common [layers props](/api/Layers/index.md#props)\n\n### `source`\n\n- **Type:** `Object | String`\n- **Non-Synced**\n- **Description:** A source containing GeoJSON or URL to it.\n- **See:** `GeoJSONSource` in [Mapbox API Docs](https://docs.mapbox.com/mapbox-gl-js/api/#geojsonsource)\n\n## Computed getters\n\n### `getSourceFeatures(filter?)`\n\n- **Arguments:**\n  - `filter` `Array` A filter to limit query results.\n- **Description** Returns an array of GeoJSON Feature objects from assosiated source filtered by `filter`.\n- **See** `.querySourceFeatures()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#querysourcefeatures)\n\n### `getRenderedFeatures(geometry, filter)`\n\n- **Arguments:**\n  - `filter` `Array` A filter to limit query results.\n  - `geometry` `Array | Object` The geometry of the query region.\n- **Description** Returns an array of visible GeoJSON Feature objects from assosiated source filtered by `filter`.\n- **See** `.queryRenderedFeatures()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#queryrenderedfeatures)\n\n### `getClusterExpansionZoom(clusterId)`\n\n- **Arguments:**\n  - `clusterId` `Number` The value of the cluster's cluster_id property.\n- **Description** For clustered sources, fetches the zoom at which the given cluster expands and returns `Promise` with zoom level as payload.\n- **See** `.getClusterExpansionZoom()` [GeoJSONSource method](https://docs.mapbox.com/mapbox-gl-js/api/#geojsonsource#getclusterexpansionzoom)\n\n### `getClusterChildren(clusterId)`\n\n- **Arguments:**\n  - `clusterId` `Number` The value of the cluster's cluster_id property.\n  - `limit` `Number` The maximum number of features to return.\n  - `offset` `Number` The number of features to skip (e.g. for pagination).\n- **Description** For clustered sources, fetches the original points that belong to the cluster and returns `Promise` with an `Array` of GeoJSON features as payload.\n- **See** `.getClusterChildren()` [GeoJSONSource method](https://docs.mapbox.com/mapbox-gl-js/api/#geojsonsource#getclusterchildren)\n\n### `getClusterLeaves(clusterId, limit, offset)`\n\n- **Arguments:**\n  - `filter` `Array` A filter to limit query results.\n  - `geometry` `Array | Object` The geometry of the query region.\n- **Description** Returns `Promise` with an array of visible GeoJSON Feature objects from assosiated source filtered by `filter` in the payload.\n- **See** `.getClusterLeaves()` [GeoJSONSource method](https://docs.mapbox.com/mapbox-gl-js/api/#geojsonsource#getclusterleaves)\n\n## Methods\n\n### `setFeatureState(featureId, state)`\n\n- **Arguments:**\n  - `featureId` `String | Number` Feature identifier.\n  - `state` `Object` A set of key-value pairs. The values should be valid JSON types.\n- **Description** Sets the state of a feature. The state object is merged in with the existing state of the feature.\n- **See** `.setFeatureState()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#setfeaturestate)\n\n### `getFeatureState(featureId)`\n\n- **Arguments:**\n  - `featureId` `String | Number` Feature identifier.\n- **Description** Gets the state of a feature.\n- **See** `.getFeatureState()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#getfeaturestate)\n\n### `removeFeatureState(featureId?, sourceLayer?, key?)`\n\n- **Arguments:**\n  - `featureId` `String | Number` Feature identifier.\n  - `sourceLayer` `string` Source layer id.\n  - `key` `string` The key in the feature state to reset.\n- **Description** Removes feature state, setting it back to the default behavior. If no featureId or key is specified, removes all states of that source. If featureId is also specified, removes all keys for that feature's state. If key is also specified, removes that key from that feature's state.\n- **See** `.removeFeatureState()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#removefeaturestate)\n\n## Events\n\nAll common layer [events](/api/Layers/#events)\n"
  },
  {
    "path": "docs/api/Layers/imagelayer.md",
    "content": "# ImageLayer\n\n## Props\n\nAll common [layers props](/api/Layers/index.md#props)\n\n### `source`\n\n- **Type:** `Object | String`\n- **Non-Synced**\n- **Description:** A data source containing an image.\n- **See:** `ImageSource` in [Mapbox API Docs](https://docs.mapbox.com/mapbox-gl-js/api/#imagesource)\n\n::: tip Reactivity\n`coordinates` and `url` fields of the `source` prop are reactive.\nIf you change their value, changes automatically applied to the map.\n:::\n\n## Events\n\nAll common layer [events](/api/Layers/#events)\n"
  },
  {
    "path": "docs/api/Layers/index.md",
    "content": "# Layers common\n\n## Props\n\n#### Props for Mapbox GL source\n\n### `sourceId`\n\n- **Type:** `String`\n- **Required**\n- **Non-Synced**\n- **Description:** ID of the source to add. Must not conflict with existing sources.\n- **See:** `.addSource()` [Map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#addsource)\n\n### `source`\n\n- **Type:** `Object | String`\n- **Required**\n- **Non-Synced** A source for layer or URL to it.\n- **Description:**\n- **See:** `sources` in [Mapbox Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/#sources)\n\n#### Props for Mapbox GL layer\n\n### `layerId`\n\n- **Type** `String`\n- **Description:** ID of the layer to add. Must not conflict with existing layers.\n- **Required**\n- **Non-Synced**\n- **See:** `id` in [Mapbox Layer Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/#layer-id)\n\n### `layer`\n\n- **Type** `String`\n- **Description:** Layer configuration object.\n- **Required**\n- **Non-Synced**\n- **See:** `layers` in [Mapbox Layer Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/#layers)\n\n::: tip Reactivity\n`minzoom`, `maxzoom`, `paint`, `layout` and `filter` fields of `layer` prop are reactive. If you change their value, changes automatically applied to the map.\n:::\n\n### `before`\n\n- **Type:** `String`\n- **Default:** `undefined`\n- **Non-Synced**\n- **Description:** The ID of an existing layer to insert the new layer before.\n- **See:** `metadata` in [Mapbox Layer Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/#layer-metadata)\n\n#### Props for V-Mapbox component\n\n### `clearSource`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If `true`, component will remove layer source from map on component destruction.\n\n### `replaceSource`\n\n- **Type:** `Boolean`\n- **Default:** `false`\n- **Non-Synced**\n- **Description:** If source passed to `source` prop of layer component already added ot the map, it will be ignored and existed `source` will be used. If `replaceSource` is `true` source will be replaced with new instead.\n\n### `replace`\n\n- **Type:** `Boolean`\n- **Default:** `false`\n- **Non-Synced**\n- **Description:** If `true`, replaces existing layer with same id. Otherwise, error returns.\n\n## Computed properties\n\n### `sourceLoaded`\n\n- **Type** `Boolean`\n- **Description** Flag that indicated if layer source already loaded.\n\n### `mapLayer`\n\n- **Type** `Object`\n- **Description** Mapbox GL layer object.\n- **See** [`.getLayer()`](https://docs.mapbox.com/mapbox-gl-js/api/#map#getlayer) map method\n\n### `mapSource`\n\n- **Type** `Object`\n- **Description** Source for this layer.\n- **See** [`Mapbox GL source`](https://docs.mapbox.com/mapbox-gl-js/api/#sources)\n\n## Methods\n\n### `.move(beforeId?)`\n\n- **Arguments:**\n- `beforeId` `String` The ID of an existing layer to insert the new layer before. If this argument is omitted, the layer will be appended to the end of the layers array.\n- **Description** Moves a layer to a different z-position.\n- **See** [`.moveLayer()`](https://docs.mapbox.com/mapbox-gl-js/api/#map#movelayer) map method\n\n### `.remove()`\n\n- **Description** Removes the layer with and source assosiated with it.\n- **See** [`.removeLayer()`](https://docs.mapbox.com/mapbox-gl-js/api/#map#removelayer) map method\n\n## Events\n\nPayload of events contains object with properties:\n\n- `mapboxEvent` Original Mapbox GL JS event\n- `layerId` ID of current layer\n- `map` Current map object\n- `component` Component that emits event\n\n### `@mousedown`\n\n### `@mouseup`\n\n### `@click`\n\n### `@dblclick`\n\n### `@mousemove`\n\n### `@mouseenter`\n\n### `@mouseleave`\n\n### `@mouseover`\n\n### `@mouseout`\n\n### `@contextmenu`\n\n### `@touchstart`\n\n### `@touchend`\n\n### `@touchcancel`\n"
  },
  {
    "path": "docs/api/Layers/rasterlayer.md",
    "content": "# RasterLayer\n\n## Props\n\nAll common [layers props](/api/Layers/index.md#props)\n\n### `source`\n\n- **Type:** `Object | String`\n- **Non-Synced**\n- **Description:** A raster tile source.\n- **See:** `Raster source` in [Mapbox Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/#sources-raster)\n\n## Events\n\nAll common layer [events](/api/Layers/#events)\n"
  },
  {
    "path": "docs/api/Layers/vectorlayer.md",
    "content": "# VectorLayer\n\n## Props\n\nAll common [layers props](/api/Layers/index.md#props)\n\n### `source`\n\n- **Type:** `Object | String`\n- **Non-Synced**\n- **Description:** A vector tile source.\n- **See:** `Vector source` in [Mapbox Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/#sources-vector)\n\n## Computed getters\n\n### `getSourceFeatures(filter?)`\n\n- **Arguments:**\n  - `filter` `Array` A filter to limit query results.\n- **Description** Returns an array of GeoJSON Feature objects from assosiated source filtered by `filter`.\n- **See** `.querySourceFeatures()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#querysourcefeatures)\n\n### `getRenderedFeatures(geometry, filter)`\n\n- **Arguments:**\n  - `filter` `Array` A filter to limit query results.\n  - `geometry` `Array | Object` The geometry of the query region.\n- **Description** Returns an array of visible GeoJSON Feature objects from assosiated source filtered by `filter`.\n- **See** `.queryRenderedFeatures()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#queryrenderedfeatures)\n\n## Methods\n\n### `setFeatureState(featureId, state)`\n\n- **Arguments:**\n  - `featureId` `String | Number` Feature identifier.\n  - `state` `Object` A set of key-value pairs. The values should be valid JSON types.\n- **Description** Sets the state of a feature. The state object is merged in with the existing state of the feature.\n- **See** `.setFeatureState()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#setfeaturestate)\n\n### `getFeatureState(featureId)`\n\n- **Arguments:**\n  - `featureId` `String | Number` Feature identifier.\n- **Description** Gets the state of a feature.\n- **See** `.getFeatureState()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#getfeaturestate)\n\n## Events\n\nAll common layer [events](/api/Layers/#events)\n"
  },
  {
    "path": "docs/api/Layers/videolayer.md",
    "content": "# CanvasLayer\n\n## Props\n\nAll common [layers props](/api/Layers/index.md#props)\n\n### `source`\n\n- **Type:** `Object | String`\n- **Non-Synced**\n- **Description:** A data source containing video.\n- **See:** `Video source` in [Mapbox API Docs](https://docs.mapbox.com/mapbox-gl-js/api/#videosource)\n\n::: tip Reactivity\n`coordinates` field of the `source` prop is reactive.\nIf you change it's value, changes automatically applied to the map.\n:::\n\n## Computed getters\n\n### `video`\n\n- **Description** Returns the HTML video element.\n- **See** `.getVideo()` [method](https://docs.mapbox.com/mapbox-gl-js/api/#videosource#getvideo)\n"
  },
  {
    "path": "docs/api/controls.md",
    "content": "# Map control components\n\n### Common Props\n\n### `position`\n\n- **Type:** `String`\n- **Default:** `'top-right'`\n- **Description:** position on the map to which the control will be added. Valid values are 'top-left' , 'top-right' , 'bottom-left' , and 'bottom-right'\n- **See:** `position` in [addControl](https://docs.mapbox.com/mapbox-gl-js/api/map/#map#addcontrol)\n\n### Common Props\n\n### `position`\n\n- **Type:** `String`\n- **Default:** `'top-right'`\n- **Description:** position on the map to which the control will be added. Valid values are 'top-left' , 'top-right' , 'bottom-left' , and 'bottom-right'\n- **See:** `position` in [addControl](https://docs.mapbox.com/mapbox-gl-js/api/map/#map#addcontrol)\n\n## IControl\n\na versatile control box for your content\n\n### Props\n\nnone\n\n### Slots\n\n### `default`\nYour content as text, HTML or Template, will be wrapped in div with `mapboxgl-ctrl mapboxgl-ctrl-group` classes\n\n***See:*** [IControl](https://docs.mapbox.com/mapbox-gl-js/api/markers/#icontrol)\n\n## AttributionControl\n\nAn AttributionControl control presents the map's attribution information.\n\n### Props\n\n### `compact`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If true force a compact attribution\n- **See:** `options.compact` in [AttributionControl](https://docs.mapbox.com/mapbox-gl-js/api/#attributioncontrol)\n\n### `customAttribution`\n\n- **Type:** `string, Array<string>?`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** String or strings to show in addition to any other attributions.\n- **See:** `options.customAttribution` in [AttributionControl](https://docs.mapbox.com/mapbox-gl-js/api/#attributioncontrol)\n\n## FullscreenControl\n\nCreates a button on the map to toggle fulscreen mode.\n\n### Props\n\n### `container`\n\n- **Type:** `HTMLElement`\n- **Non-Synced**\n- **Description:** DOM element which should be made full screen. By default, the map container element will be made full screen.\n- **See:** `options.container` in [FullscreenControl](https://docs.mapbox.com/mapbox-gl-js/api/#fullscreencontrol)\n\n## GeolocateControl\n\nProvides a button that uses the browser's geolocation API to locate the user on the map.\n\n### Props\n\n### `positionOptions`\n\n- **Type:** `Object`\n- **Default:** `{ enableHighAccuracy: false, timeout: 6000}`\n- **Non-Synced**\n- **Description:** A Geolocation API PositionOptions object.\n- **See:** `options.positionOptions` in [GeolocateControl](https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol)\n\n### `fitBoundsOptions`\n\n- **Type:** `Object`\n- **Default:** `{ maxZoom:15 }`\n- **Non-Synced**\n- **Description:** A fitBounds options object to use when the map is panned and zoomed to the user's location.\n- **See:** `options.fitBoundsOptions` in [GeolocateControl](https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol)\n\n### `trackUserLocation`\n\n- **Type:** `Boolean`\n- **Default:** `false`\n- **Non-Synced**\n- **Description:** If true the Geolocate Control becomes a toggle button and when active the map will receive updates to the user's location as it changes.to the user's location.\n- **See:** `options.trackUserLocation` in [GeolocateControl](https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol)\n\n### `showAccuracyCircle`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** By default, if showUserLocation is true , a transparent circle will be drawn around the user location indicating the accuracy (95% confidence level) of the user's location. Set to false to disable. Always disabled when showUserLocation is false . \n- **See:** `options.showUserLocation` in [GeolocateControl](https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol)\n\n### `showUserLocation`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** By default a dot will be shown on the map at the user's location. Set to false to disable.\n- **See:** `options.showUserLocation` in [GeolocateControl](https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol)\n\n### Methods\n\n### `.trigger()`\n\n- **Description:** Trigger a geolocation\n- **Returns:** `boolean`\n- **See:** [trigger](https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol#trigger) GeolocateControl method\n\n## NavigationControl\n\n### Props\n\n### `showCompass`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If true the compass button is included.\n- **See:** `options.showCompass` in [NavigationControl](https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol)\n\n### `showZoom`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If true the zoom-in and zoom-out buttons are included.\n- **See:** `options.showZoom` in [NavigationControl](https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol)\n\n### `visualizePitch`\n\n- **Type:** `Boolean`\n- **Default:** `false`\n- **Non-Synced**\n- **Description:** If true the pitch is visualized by rotating X-axis of compass.\n- **See:** `options.visualizePitch` in [NavigationControl](https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol)\n\n## ScaleControl\n\n### Props\n\n### `maxWidth`\n\n- **Type:** `Number`\n- **Default:** `100`\n- **Non-Synced**\n- **Description:** The maximum length of the scale control in pixels.\n- **See:** `options.maxWidth` in [ScaleControl](https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol)\n\n### `unit`\n\n- **Type:** `String, \"imperial\" | \"metric\" | \"nautical\"`\n- **Default:** `metric`\n- **Non-Synced**\n- **Description:** Unit of the distance\n- **See:** `options.unit` in [ScaleControl](https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol)\n"
  },
  {
    "path": "docs/api/index.md",
    "content": "# GlMap\n\n## Props\n\n### `mapbox-gl`\n\n- **Type**: `Object`\n- **Default:** `null`\n- - **Description:** `mapbox-gl` implementation. Useful for lazy-loading. If omitted, VMapbox imports mapbox-gl js dynamically.\n\n### `map-style`\n\n- **Type**: `String`, `Object`\n- **Default:** `undefined`\n- **Required**\n- **Synced**\n- **Description:** The map's Mapbox style. This must be an a JSON object conforming to the schema described in the Mapbox Style Specification , or a URL to such JSON.\n- **See:** `options.style` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `access-token`\n\n- **Type:** `String`\n- **Default:** `undefined`\n- **Non-Synced**\n- **Description:** Token required to access the tiles provided by Mapbox\n- **See:** [accessToken](https://docs.mapbox.com/mapbox-gl-js/api/#accesstoken)\n\n### `container`\n\n- **Type:** `String`, `HTMLElement`\n- **Default:** `#map-{random number}`\n- **Non-Synced**\n- **Description:** The HTML element in which Mapbox GL JS will render the map\n- **See:** `options.container` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `min-zoom`\n\n- **Type:** `Number`\n- **Default:** `0`\n- **Synced**\n- **Description:** Minimum zoom level of the map (0-24)\n- **See:** `options.minZoom` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `max-zoom`\n\n- **Type:** `Number`\n- **Default:** `22`\n- **Synced**\n- **Description:** Maximum zoom level of the map (0-24)\n- **See:** `options.maxZoom` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `min-pitch`\n\n- **Type:** `Number`\n- **Default:** `0`\n- **Synced**\n- **Description:** The minimum pitch of the map (0-60)\n- **See:** `options.minPitch` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `max-pitch`\n\n- **Type:** `Number`\n- **Default:** `0`\n- **Synced**\n- **Description:** The maximum pitch of the map (0-60)\n- **See:** `options.maxPitch` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `hash`\n\n- **Type:** `Boolean`, `String`\n- **Default:** `false`\n- **Synced**\n- **Description:** If true, the map's position (zoom, center latitude, center longitude, bearing, and pitch) will be synced with the hash fragment of the page's URL. If it's a string, it will be the name of the param in a parameter-styled hash.\n- **See:** `options.hash` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `interactive`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If false, no mouse, touch, or keyboard listeners will be attached to the map, so it will not respond to interaction\n- **See:** `options.interactive` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `bearing-snap`\n\n- **Type:** `Number`\n- **Default:** `7`\n- **Non-Synced**\n- **Description:** The threshold, measured in degrees, that determines when the map's bearing will snap to north\n- **See:** `options.bearingSnap` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `pitch-with-rotate`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If false , the map's pitch (tilt) control with \"drag to rotate\" interaction will be disabled\n- **See:** `options.pitchWithRotate` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `click-tolerance`\n\n- **Type:** `Number`\n- **Default:** `3`\n- **Non-Synced**\n- **Description:** The max number of pixels a user can shift the mouse pointer during a click for it to be considered a valid click (as opposed to a mouse drag)\n- **See:** `options.clickTolerance` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `attribution-control`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If true, an AttributionControl will be added to the map\n- **See:** `options.attributionControl` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `custom-attribution`\n\n- **Type:** `String`, `Array`\n- **Default:** `null`\n- **Non-Synced**\n- **Description:** String or strings to show in an AttributionControl. Only applicable if `options.attributionControl` is `true`\n- **See:** `options.customAttribution` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `logo-position`\n\n- **Type:** `String`, `top-left`, `top-right`, `bottom-right`, `bottom-left`\n- **Default:** `bottom-left`\n- **Non-Synced**\n- **Description:** A string representing the position of the Mapbox wordmark on the map\n- **See:** `options.logoPosition` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `fail-if-major-performance-caveat`\n\n- **Type:** `Boolean`\n- **Default:** `false`\n- **Non-Synced**\n- **Description:** If true, map creation will fail if the performance of Mapbox GL JS would be dramatically worse than expected (i.e. a software renderer would be used)\n- **See:** `options.failIfMajorPerformanceCaveat` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `preserve-drawing-buffer`\n\n- **Type:** `Boolean`\n- **Default:** `false`\n- **Non-Synced**\n- **Description:** If `true`, the map's canvas can be exported to a PNG using `map.getCanvas().toDataURL()`. This is `false` by default as a performance optimization\n- **See:** `options.preserveDrawingBuffer` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `antialias`\n\n- **Type:** `Boolean`\n- **Default:** `false`\n- **Non-Synced**\n- **Description:** If `true`, the gl context will be created with MSAA antialiasing, which can be useful for antialiasing custom layers. This is `false` by default as a performance optimization\n- **See:** `options.antialias` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `refresh-expired-tiles`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If true, the map won't attempt to re-request tiles once they expire per their HTTP cacheControl / expires headers.\n- **See:** `options.refreshExpiredTiles` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `max-bounds`\n\n- **Type:** `Array`, `LngLatBoundsLike object`\n- **Default:** `undefined`\n- **Synced**\n- **Description:** If set, the map will be constrained to the given bounds\n- **See:** `options.maxBounds` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `scroll-zoom`\n\n- **Type:** `Boolean`, `Object`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If true, the \"scroll to zoom\" interaction is enabled. An Object value is passed as options to ScrollZoomHandler#enable\n- **See:** `options.scrollZoom` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `box-zoom`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If true, the \"box zoom\" interaction is enabled\n- **See:** `options.boxZoom` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `drag-rotate`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If true, the \"drag to rotate\" interaction is enabled\n- **See:** `options.dragRotate` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `drag-pan`\n\n- **Type:** `Boolean`, `Object`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If `true`, the \"drag to pan\" interaction is enabled. An Object value is passed as options to [DragPanHandler#enable](https://docs.mapbox.com/mapbox-gl-js/api/handlers/#dragpanhandler#enable).\n- **See:** `options.dragRotate` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `keyboard`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If true, keyboard shortcuts are enabled\n- **See:** `options.keyboard` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `double-click-zoom`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If true, the \"double click to zoom\" interaction is enabled\n- **See:** `options.doubleClickZoom` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `touch-zoom-rotate`\n\n- **Type:** `Boolean`, `Object`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If true, the \"pinch to rotate and zoom\" interaction is enabled. An Object value is passed as options to [TouchZoomRotateHandler#enable](https://docs.mapbox.com/mapbox-gl-js/api/handlers/#touchzoomrotatehandler#enable)\n- **See:** `options.touchZoomRotate` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `touch-pitch`\n\n- **Type:** `Boolean`, `Object`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If `true`, the \"drag to pitch\" interaction is enabled. An Object value is passed as options to [TouchPitchHandler#enable](https://docs.mapbox.com/mapbox-gl-js/api/handlers/#touchpitchhandler#enable)\n- **See:** `options.touchPitch` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `track-resize`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If `true`, the map will automatically resize when the browser window resizes\n- **See:** `options.trackResize` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `center`\n\n- **Type:** `Array, LngLatLike Object`\n- **Default:** `undefined`\n- **Synced**\n- **Description:** Geographical centerpoint of the map. If center is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object.If it is not specified in the style, either, it will default to `[0, 0]`\n- **See:** `options.center` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `zoom`\n\n- **Type:** `Number`\n- **Default:** `undefined`\n- **Synced**\n- **Description:** Zoom level of the map. If zoom is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `0`\n- **See:** `options.zoom` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `bearing`\n\n- **Type:** `Number`\n- **Default:** `undefined`\n- **Synced**\n- **Description:** Bearing (rotation) of the map, measured in degrees counter-clockwise from north. If bearing is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `0`\n- **See:** `options.bearing` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `pitch`\n\n- **Type:** `Number`\n- **Default:** `undefined`\n- **Synced**\n- **Description:** Pitch (tilt) of the map, measured in degrees away from the plane of the screen (0-60). If pitch is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `0`\n- **See:** `options.pitch` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `bounds`\n\n- **Type:** `Array`, `LngLatBoundsLike object`\n- **Default:** `undefined`\n- **Description:** The initial bounds of the map. If set, it overrides `center` and `zoom` construction options\n- **See:** `options.bounds` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `fit-bounds-options`\n\n- **Type:** `fitBounds object`\n- **Default:** `undefined`\n- **Description:** A [`fitBounds`](https://docs.mapbox.com/mapbox-gl-js/api/map/#map#fitbounds) object to use only when fitting the initial `bounds` provided above\n- **See:** `options.fitBoundsOptions` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `render-world-copies`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If `true`, multiple copies of the world will be rendered, when zoomed out\n- **See:** `options.renderWorldCopies` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `max-tile-cache-size`\n\n- **Type:** `Number`\n- **Default:** `null`\n- **Non-Synced**\n- **Description:** The maximum number of tiles stored in the tile cache for a given source. If omitted, the cache will be dynamically sized based on the current viewport.\n- **See:** `options.renderWorldCopies` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `local-ideograph-font-family`\n\n- **Type:** `String`\n- **Default:** `'sans-serif'`\n- **Non-Synced**\n- **Description:** If specified, defines a CSS font-family for locally overriding generation of glyphs in the 'CJK Unified Ideographs' and 'Hangul Syllables' ranges. In these ranges, font settings from the map's style will be ignored, except for font-weight keywords (light/regular/medium/bold). The purpose of this option is to avoid bandwidth-intensive glyph server requests.\n- **See:** `options.localIdeographFontFamily` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `transform-request`\n\n- **Type:** `Function`\n- **Default:** `null`\n- **Non-Synced**\n- **Description:** A callback run before the Map makes a request for an external URL. The callback can be used to modify the url, set headers, or set the credentials property for cross-origin requests. Expected to return an object with a `url` property and optionally `headers` and `credentials` properties.\n- **See:** `options.transformRequest` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `collect-resource-timing`\n\n- **Type:** `Boolean`\n- **Default:** `false`\n- **Non-Synced**\n- **Description:** If `true`, Resource Timing API information will be collected for requests made by GeoJSON and Vector Tile web workers (this information is normally inaccessible from the main Javascript thread). Information will be returned in a `resourceTiming` property of relevant data events\n- **See:** `options.collectResourceTiming` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `fade-duration`\n\n- **Type:** `Number`\n- **Default:** `300`\n- **Non-Synced**\n- **Description:** Controls the duration of the fade-in/fade-out animation for label collisions, in milliseconds. This setting affects all symbol layers. This setting does not affect the duration of runtime styling transitions or raster tile cross-fading.\n- **See:** `options.fadeDuration` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `cross-source-collisions`\n\n- **Type:** `Boolean`\n- **Default:** `true`\n- **Non-Synced**\n- **Description:** If true, symbols from multiple sources can collide with each other during collision detection. If false , collision detection is run separately for the symbols in each source.\n- **See:** `options.crossSourceCollisions` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n### `locale`\n\n- **Type:** `Object`\n- **Default:** `undefined`\n- **Non-Synced**\n- **Description:** A patch to apply to the default localization table for UI strings, e.g. control tooltips. The `locale` object maps namespaced UI string IDs to translated strings in the target language; see [`src/ui/default_locale.js`](https://github.com/mapbox/mapbox-gl-js/blob/main/src/ui/default_locale.js) for an example with all supported string IDs. The object may specify all UI strings (thereby adding support for a new translation) or only a subset of strings (thereby patching the default translation table).\n- **See:** `options.locale` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)\n\n<!-- Specific for v-mapbox -->\n### `r-t-l-text-plugin-url`\n\n- **Type:** `String`\n- **Default:** `undefined`\n- **Synced**\n- **Description:** Sets the map's [RTL text plugin](https://docs.mapbox.com/mapbox-gl-js/plugins/#mapbox-gl-rtl-text). Necessary for supporting the Arabic and Hebrew languages, which are written right-to-left. Mapbox Studio loads this plugin by default.\n- **See:** See [setrtltextplugin](https://docs.mapbox.com/mapbox-gl-js/api/properties/#setrtltextplugin) Map method and [an example](https://docs.mapbox.com/mapbox-gl-js/example/mapbox-gl-rtl-text/)\n\n### `light`\n\n- **Type:** `Object`\n- **Default:** `undefined`\n- **Synced**\n- **Description:** Light properties. Must conform to the Mapbox Style Specification\n- **See:** See [setLight](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#setlight) Map method\n\n### `tile-boundaries`\n\n- **Type:** `Boolean`\n- **Default:** `false`\n- **Synced**\n- **Description:** A Boolean indicating whether the map will render an outline around each tile. These tile boundaries are useful for debugging\n- **See:** See [showTileBoundaries](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#showtileboundaries) Map property\n\n### `collision-boxes`\n\n- **Type:** `Boolean`\n- **Default:** `false`\n- **Synced**\n- **Description:** A Boolean indicating whether the map will render boxes around all symbols in the data source, revealing which symbols were rendered or which were hidden due to collisions. This information is useful for debugging\n- **See:** See [showCollisionBoxes](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#showcollisionboxes) Map property\n\n### `repaint`\n\n- **Type:** `Boolean`\n- **Default:** `false`\n- **Synced**\n- **Description:** A Boolean indicating whether the map will continuously repaint. This information is useful for analyzing performance.\n- **See:** See [repaint](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#repaint) Map property\n\n## Actions\n\nAsynchronous actions exposed via `GlMap.actions`\n\n::: tip\n[Map-promisified](https://github.com/soal/map-promisified) is used as wrapper around Mapbox GL JS methods. That library can be used independently from VueMapbox.\n:::\n\n### `.stop(eventData?)`\n\n- **Arguments:**\n  - `eventData` `{Object}` Custom data passed to corresponfing event.\n- **Description:** Stops all animations on the map\n- **Returns:** `{Promise<{ pitch, zoom, bearing, center }>}`\n  Promise that resolves object with map parameters on the moment of call `stop()`\n\n### `.panBy(offset, options?, eventData?)`\n\n- **Arguments:**\n  - `offset` `{Point | number[]}` x and y coordinates by which to pan the map\n  - `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)\n  - `eventData` `{Object}` Custom data passed to corresponfing event.\n- **Description:** Pans the map by the specified offest\n- **Returns:** `{Promise<{ eventData, center }>}`\n  Promise that resolves object with event data and new center of the map when animation ends\n- **See:** [panBy](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#panby) Map method\n\n### `.panTo(coordinates, options?, eventData?)`\n\n- **Arguments:**\n  - `coordinates` `{LngLat | number[][]}` The location to pan the map to. See also: [LngLat](https://docs.mapbox.com/mapbox-gl-js/api/#lnglat)\n  - `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)\n  - `eventData` `{Object}` Custom data passed to corresponfing event.\n- **Description:** Pans the map to the specified location, with an animated transition\n- **Returns:** `{Promise<{ eventData, center }>}`\n  Promise that resolves object with event data and new center of the map when animation ends\n- **See:** [panTo](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#panto) Map method\n\n### `.zoomTo(zoom, options?, eventData?)`\n\n- **Arguments:**\n  - `zoom` `{number}` The zoom level to transition to\n  - `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)\n  - `eventData` `{Object}` Custom data passed to corresponfing event.\n- **Description:** Zooms the map to the specified zoom level, with an animated transition\n- **Returns:** `{Promise<{ eventData, zoom }>}`\n  Promise that resolves object with event data and new zoom level of the map when animation ends\n- **See:** [zoomTo](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#zoomto) Map method\n\n### `.zoomIn(options?, eventData?)`\n\n- **Arguments:**\n  - `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)\n  - `eventData` `{Object}` Custom data passed to corresponfing event.\n- **Description:** Increases the map's zoom level by 1\n- **Returns:** `{Promise<{ eventData, zoom }>}`\n  Promise that resolves object with event data and new zoom level of the map when animation ends\n- **See:** [zoomIn](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#zoomin) Map method\n\n### `.zoomOut(options?, eventData?)`\n\n- **Arguments:**\n  - `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)\n  - `eventData` `{Object}` Custom data passed to corresponfing event.\n- **Description:** Decreases the map's zoom level by 1\n- **Returns:** `{Promise<{ eventData, zoom }>}`\n  Promise that resolves object with event data and new zoom level of the map when animation ends\n- **See:** [zoomOut](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#zoomOut) Map method\n\n### `.rotateTo(bearing, options?, eventData?)`\n\n- **Arguments:**\n  - `bearing` `{number}` The desired bearing\n  - `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)\n  - `eventData` `{Object}` Custom data passed to corresponfing event.\n- **Description:** Rotates the map to the specified bearing, with an animated transition. The bearing is the compass direction that is \\\"up\\\"; for example, a bearing of 90° orients the map so that east is up.\n- **Returns:** `{Promise<{ eventData, bearing }>}`\n  Promise that resolves object with event data and new bearing of the map when animation ends\n- **See:** [rotateTo](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#rotateto) Map method\n\n### `.resetNorth(options?, eventData?)`\n\n- **Arguments:**\n  - `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)\n- **Description:** Rotates the map so that north is up (0° bearing), with an animated transition\n- **Returns:** `{Promise<{ eventData, bearing }>}`\n  Promise that resolves object with event data and new bearing of the map when animation ends\n- **See:** [resetNorth](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#resetnorth) Map method\n\n### `.snapToNorth(options?, eventData?)`\n\n- **Arguments:**\n  - `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)\n  - `eventData` `{Object}` Custom data passed to corresponfing event.\n- **Description:** Snaps the map so that north is up (0° bearing), if the current bearing is close enough to it (i.e. within the `bearingSnap` prop threshold).\n- **Returns:** `{Promise<{ eventData, bearing }>}`\n  Promise that resolves object with event data and new bearing of the map when animation ends\n- **See:** [snapToNorth](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#snaptonorth) Map method\n\n### `.fitBounds(bounds, options?, eventData?)`\n\n- **Arguments:**\n  - `bounds` `{ number[][] | LngLatBounds }` Center these bounds in the viewport and use the highest zoom level up to and including `maxZoom` that fits them in the viewport\n  - `options` `{Object}`\n    - `options.padding?` `{number}` The amount of padding in pixels to add to the given bounds\n    - `options.linear` `{boolean}` _default_: `false` If true , the map transitions using `Map#easeTo`. If false , the map transitions using `Map#flyTo`. See those functions and AnimationOptions for information about options available.\n    - `options.easing?` An easing function for the animated transition. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)\n    - `options.offset` `{ number[] | Point }` _default:_ `[0, 0]` The center of the given bounds relative to the map's center, measured in pixels\n    - `options.maxZoom?` `{number}` The maximum zoom level to allow when the map view transitions to the specified bounds\n  - `eventData` `{Object}` Custom data passed to corresponfing event.\n- **Description:** Pans and zooms the map to contain its visible area within the specified geographical bounds. This function will also reset the map's bearing to 0 if bearing is nonzero\n- **Returns:** `{Promise<{ eventData, bounds }>}`\n  Promise that resolves object with event data and new bounds of the map when animation ends\n- **See:** [fitBounds](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#fitbounds) Map method\n\n### `.jumpTo(options, eventData?)`\n\n- **Arguments:**\n  - `options` `{Object}` See [CameraOptions](https://docs.mapbox.com/mapbox-gl-js/api/#cameraoptions)\n    - `options.pitch?` `{number}` The desired pitch, in degrees\n    - `options.zoom?` `{number}` The desired zoom level\n    - `options.center?` `{number[] | LngLat}` The desired center\n    - `options.bearing?` `{number}` The desired bearing, in degrees\n    - `options.around?` `{number[] | LngLat}` If `zoom` is specified, `around` determines the point around which the zoom is centered.\n  - `eventData` `{Object}` Custom data passed to corresponfing event.\n- **Description:** Changes any combination of center, zoom, bearing, and pitch, without an animated transition. The map will retain its current values for any details not specified in options\n- **Returns:** `{Promise<{ eventData, pitch, zoom, center, bearing }>}`\n  Promise that resolves object with event data and new pitch, zoom, center and bearing of the map\n- **See:** [jumpTo](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#jumpto) Map method\n\n### `.easeTo(options, eventData?)`\n\n- **Arguments:**\n\n  - `options` `{Object}` Combination of [CameraOptions](https://docs.mapbox.com/mapbox-gl-js/api/#cameraoptions) and [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)\n\n    - `options.pitch?` `{number}` The desired pitch, in degrees\n    - `options.zoom?` `{number}` The desired zoom level\n    - `options.center?` `{number[] | LngLat}` The desired center\n    - `options.bearing?` `{number}` The desired bearing, in degrees\n    - `options.around?` `{number[] | LngLat}` If `zoom` is specified, `around` determines the point around which the zoom is centered.\n    - `options.duration?` `{number}` The animation's duration, measured in milliseconds.\n    - `options.easing?` `{Function}` A function taking a time in the range 0..1 and returning a number where 0 is the initial state and 1 is the final state.\n    - `options.offset?` `{number[] | Point}` of the target center relative to real map container center at the end of animation.\n    - `options.animate?` `{boolean}`: If `false`, no animation will occur\n\n  - `eventData` `{Object}` Custom data passed to corresponfing event.\n\n- **Description:** Changes any combination of center, zoom, bearing, and pitch, with an animated transition between old and new values. The map will retain its current values for any details not specified in `options`\n- **Returns:** `{Promise<{ eventData, pitch, zoom, center, bearing }>}`\n  Promise that resolves object with event data and new pitch, zoom, center and bearing of the map when animations ends\n- **See:** [easeTo](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#easeto) Map method\n\n### `.flyTo(options, eventData?)`\n\n- **Arguments:**\n  - `options` `{Object}`\n    - `options.curve?` `{number}` _default_ `1.42` The zooming \"curve\" that will occur along the flight path. A high value maximizes zooming for an exaggerated animation, while a low value minimizes zooming for an effect closer to Map#easeTo. 1.42 is the average value selected by participants in the user study discussed in van Wijk (2003). A value of Math.pow(6, 0.25) would be equivalent to the root mean squared average velocity. A value of 1 would produce a circular motion\n    - `options.minZoom?` `{number}` The zero-based zoom level at the peak of the flight path. If `options.curve` is specified, this option is ignored\n    - `options.speed?` `{number}` _default_ `1.2` The average speed of the animation defined in relation to `options.curve`. A speed of 1.2 means that the map appears to move along the flight path by 1.2 times `options.curve` screenfuls every second. A screenful is the map's visible span. It does not correspond to a fixed physical distance, but varies by zoom level\n    - `options.screenSpeed?` `{number}` The average speed of the animation measured in screenfuls per second, assuming a linear timing curve. If `options.speed` is specified, this option is ignored\n    - `options.maxDuration?` `{number}` The animation's maximum duration, measured in milliseconds. If duration exceeds maximum duration, it resets to 0\n  - `eventData` `{Object}` Custom data passed to corresponfing event.\n- **Description:** Changes any combination of center, zoom, bearing, and pitch, animating the transition along a curve that evokes flight. The animation seamlessly incorporates zooming and panning to help the user maintain her bearings even after traversing a great distance\n- **Returns:** `{Promise<{ eventData, pitch, zoom, center, bearing }>}`\n  Promise that resolves object with event data and new pitch, zoom, center and bearing of the map when animations ends\n- **See:** [flyTo](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#flyto) Map method\n\n## Events\n\nPayload of events contains object with properties:\n\n- `mapboxEvent` Original Mapbox GL JS event\n- `map` Current map object\n- `component` Component that emits event\n\n### `@load`\n\n- **Description:** Fires after map fully loaded\n- **Payload** `{ map, component }` `map` is Mapbox Gl JS Map object, `component` is instance of GlMap component\n\nGlMap passes all Mapbox GL JS Map events. Full list of map events see [here](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-events)\n"
  },
  {
    "path": "docs/api/marker.md",
    "content": "# Marker\n\n## Props\n\n### `offset`\n\n- **Type**: `Array<number>`\n- **Description:** The offset in pixels as a PointLike object to apply relative to the element's center. Negatives indicate left and up.\n- **See:** `offset` in [Marker](https://docs.mapbox.com/mapbox-gl-js/api/#marker)\n\n### `coordinates`\n\n- **Type**: `Array<number>`\n- **Required**\n- **Synced**\n- **Description:** Marker coordinates in format `[longitude, latitude]`\n\n### `color`\n\n- **Type**: `string`\n- **Description:** The color to use for the default marker if custom marker is not provided. The default is light blue.\n\n### `anchor`\n\n- **Type**: `string`\n- **Non-Synced**\n- **Default** `center`\n- **Description:** A string indicating the part of the Marker that should be positioned closest to the coordinate set via Marker#setLngLat . Options are 'center' , 'top' , 'bottom' , 'left' , 'right' , 'top-left' , 'top-right' , 'bottom-left' , and 'bottom-right' . The default is 'center'.\n- **See** `options.anchor` in [Marker](https://docs.mapbox.com/mapbox-gl-js/api/#marker)\n\n### `draggable`\n\n- **Type**: `boolean`\n- **Non-Synced**\n- **Default** `false`\n- **Description:** A boolean indicating whether or not a marker is able to be dragged to a new position on the map.\n- **See** `options.draggable` in [Marker](https://docs.mapbox.com/mapbox-gl-js/api/#marker)\n\n## Slots\n\n### `marker`\n\n- **Description:** Slot for custom marker. Can be HTML element or Vue component.\n\n### `default`\n\n- **Description:** Slot for popup component. When popup put inside marker, popup automaticaly mounted to marker, similiar as [setPopup](https://docs.mapbox.com/mapbox-gl-js/api/#marker#setpopup)\n\n## Methods\n\n### `.remove()`\n\n- **Description:** Removes marker from the map.\n- **Returns** `Marker` MapboxGL marker.\n- **See** [Marker.remove](https://docs.mapbox.com/mapbox-gl-js/api/#marker#remove)\n\n### `.togglePopup()`\n\n- **Description:** Opens or closes the bound popup, depending on the current state.\n- **Returns** `Marker` MapboxGL marker.\n- **See** [Marker.togglePopup](https://docs.mapbox.com/mapbox-gl-js/api/#marker#togglepopup)\n\n## Events\n\n### `@added`\n\n- **Description:** Fires when marker added on the map.\n- **Payload** `{ component: MarkerComponent, map: Map, marker: Marker }` Object with `Marker` component, parent map and MapboxGl `Marker` object\n\n### `@removed`\n\n- **Description:** Fires when marker removed the map.\n- **Payload** `{ component: MarkerComponent, map: Map, marker: Marker }` Object with `Marker` component, parent map and MapboxGl `Marker` object\n\n### `@drag`\n\n- **Description:** Fires when marker dragged if marker `draggable` prop is `true`\n- **Payload** `{ component: MarkerComponent, map: Map, mapboxEvent: Event }` Object with `Marker` component, parent map and original MapboxGl event\n\n### `@dragstart`\n\n- **Description:** Fires when marker dragging starts if marker `draggable` prop is `true`\n- **Payload** `{ component: MarkerComponent, map: Map, mapboxEvent: Event }` Object with `Marker` component, parent map and original MapboxGl event\n\n### `@dragend`\n\n- **Description:** Fires when marker dragging ends if marker `draggable` prop is `true`\n- **Payload** `{ component: MarkerComponent, map: Map, mapboxEvent: Event }` Object with `Marker` component, parent map and original MapboxGl event\n\n### `@click` <Badge text=\"experimental\" type=\"warn\"/>\n\n- **Description:** Fires marker is clicked.\n- **Payload**\n\n```\n    {\n        component: MarkerComponent,\n        map: Map,\n        mapboxEvent: DOMEvent,\n        marker: Marker\n    }\n```\n\nObject with `Marker` component, parent map and original MapboxGl event\n\n### `@mouseenter` <Badge text=\"experimental\" type=\"warn\"/>\n\n- **Description:** Fires when mouse cursor enters marker area.\n- **Payload**\n\n```\n    {\n        component: MarkerComponent,\n        map: Map,\n        mapboxEvent: DOMEvent,\n        marker: Marker\n    }\n```\n\nObject with `Marker` component, parent map and original MapboxGl event\n\n### `@mouseleave` <Badge text=\"experimental\" type=\"warn\"/>\n\n- **Description:** Fires when mouse cursor leaves marker area.\n- **Payload**\n\n```\n    {\n        component: MarkerComponent,\n        map: Map,\n        mapboxEvent: DOMEvent,\n        marker: Marker\n    }\n```\n\nObject with `Marker` component, parent map and original MapboxGl event\n"
  },
  {
    "path": "docs/api/popup.md",
    "content": "# Popup\n\n## Props\n\n### `showed`\n\n- **Type**: `Boolean`\n- **non-synced**\n- **Description:** If `true`, the popup showes immediately after the component is mounted.\n\n### `closeButton`\n\n- **Type**: `Boolean`\n- **Description:** If `true`, a close button will appear in the top right corner of the popup.\n- **See:** `closeButton` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup)\n\n### `closeOnClick`\n\n- **Type**: `Boolean`\n- **Description:** If `true`, the popup will closed when the map is clicked.\n- **See:** `closeOnClick` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup)\n\n### `closeOnMove`\n\n- **Type**: `Boolean`\n- **Description:** If `true`, the popup will closed when the map moves.\n- **See:** `closeOnMove` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup)\n\n### `focusAfterOpen`\n\n- **Type**: `Boolean`\n- **Description:** If `true`, the popup will try to focus the first focusable element inside the popup.\n- **See:** `closeOnClick` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup)\n\n### `anchor`\n\n- **Type**: `String`\n- **Description:** A string indicating the part of the Popup that should be positioned closest to the Popup location. Options are 'top' , 'bottom' , 'left' , 'right' , 'top-left' , 'top-right' , 'bottom-left' , and 'bottom-right' . If unset the anchor will be dynamically set to ensure the popup falls within the map container with a preference for 'bottom'.\n- **See:** `anchor` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup)\n\n### `offset`\n\n- **Type**: `Number | Object | Array`\n- **Description:** A pixel offset applied to the popup's location.\n\n  - a single number specifying a distance from the popup's location\n  - a PointLike specifying a constant offset\n  - an object of Points specifing an offset for each anchor position Negative offsets indicate left and up.\n\n- **See:** `offset` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup)\n\n### `coordinates`\n\n- **Type**: `Array`\n- **Description:** Popup coordinates in format `[longitude, latitude]`\n- **See:** `setLngLat()` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup#setlnglat)\n\n### `onlyText`\n\n- **Type**: `Boolean`\n- **Description:** If `true` content of the Popup treated as plain text\n- **See:** `setText` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup#settext)\n\n### `maxWidth`\n\n- **Type**: `String`\n- **Description:** A string representing the value for the maximum width. (ex: '400px')\n- **See:** `maxWidth` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup#setmaxwidth)\n\n### `className`\n\n- **Type**: `String`\n- **Description:** Space-separated CSS class names to add to popup container\n- **See:** `className` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/markers/#popup#addclassname)\n\n## Slots\n\n### `default`\n\n- **Description:** Slot for Popup content. Can be plain text, HTML or Vue component. If `onlyText` set to `true` content in this slot treated as plaint text.\n\n## Events\n\n### `@added`\n\n- **Description:** Fires when popup added on the map.\n- **Payload** `{ popup: Popup }` Object with MapboxGL `Popup` object\n\n### `@removed`\n\n- **Description:** Fires when popup removed from the map.\n- **Payload** `{ popup: Popup }` Object with MapboxGL `Popup` object\n\n### `@open`\n\n- **Description:** Fires when popup is opened manually or programatically.\n- **Payload** `{ popup: Popup }` Object with MapboxGL `Popup` object\n\n### `@close`\n\n- **Description:** Fires when popup is closed manually or programatically.\n- **Payload** `{ popup: Popup }` Object with MapboxGL `Popup` object\n"
  },
  {
    "path": "docs/guide/basemap.md",
    "content": "# Base map\n\n## Adding map component\n\nFor using maps with Mapbox GL JS you need a [map style](https://mapbox.com/mapbox-gl-js/style-spec).\nIf you using Mapbox-hosted maps, you need to set `access_token`. Look for details in Mapbox [documentation](https://mapbox.com/help/define-access-token/).\nIf you using self-hosting maps on your own server you can omit this parameter.\n\n```vue\n<template>\n  <VMap :accessToken=\"accessToken\" :mapStyle=\"mapStyle\" />\n</template>\n\n<script>\nimport 'mapbox-gl/dist/mapbox-gl.css'\nimport mapbox from \"mapbox-gl\";\nimport { VMap } from \"v-mapbox\";\n\nexport default {\n  components: {\n    VMap\n  },\n  data() {\n    return {\n      accessToken: ACCESS_TOKEN, // your access token. Needed if you using Mapbox maps\n      mapStyle: MAP_STYLE // your map style\n    };\n  },\n\n  created() {\n    // We need to set mapbox-gl library here in order to use it in template\n    this.mapbox = mapbox;\n  }\n};\n</script>\n```\n\n::: tip\nIf you need, you can pass Mapbox-gl-js implementation as `mapboxGl` prop. May be useful for lazy-loading.\nExample:\n\n```vue\n<template>\n  <VMap\n    :mapbox-gl=\"mapbox-gl\"\n    :access-token=\"accessToken\"\n    :map-style.sync=\"mapStyle\"\n    @load=\"onMapLoaded\"\n  />\n</template>\n```\n\nIf none is passed, VueMapbox imports Mapbox-gl internally.\n:::\n\n### Interact with map properties as GlMap props\n\nYou can control map parameters like zoom, bearing, pitch etc. by changing props.\nIf you set `.sync` modifier ([Vue docs](https://vuejs.org/v2/guide/components.html#sync-Modifier)) to prop, it will updates when you use operations that takes time to proceed. For example, if you use `flyTo` method, props `zoom`, `center`, `bearing`, `pitch` will be updated when animation ends.\n\nFull list of props see in [API docs](/api/#props), note field 'Synced' in description\n\n## Map loading\n\nWhen map loads, `VMap` component emits `load` event. Payload of the event contains Mapbox GL JS `Map` object.\nAll components placed under `VMap` will be rendered only after map fully loaded.\n\n::: warning Storing Map object\nTake note that it's generally bad idea to add to Vuex or component's `data` anything but primitive types and plain objects. Vue adds getters and setters to every property, so if you add `Map` object to Vuex store or component `data`, it may lead to weird bugs.\nIf you want to store map object, store it as non-reactive property like in example below.\n:::\n\n```vue\n<template>\n  <VMap\n    :access-token=\"accessToken\"\n    :map-style.sync=\"mapStyle\"\n    @load=\"onMapLoaded\"\n  />\n</template>\n\n<script>\nexport default {\n  // …component code…\n  created() {\n    this.map = null;\n  },\n  methods: {\n    onMapLoaded(event) {\n      // in component\n      this.map = event.map;\n      // or just to store if you want have access from other components\n      this.$store.map = event.map;\n    }\n  }\n};\n</script>\n```\n\n## Map actions\n\nAsynchronous map methods exposed at VMap component in `actions` property. They returns `Promise`, that resolves when action completed.\nPromise resolves with map properties that has been changed by used action.\nFor example:\n\n```vue\n<script>\nexport default {\n  name: 'App',\n\n  methods: {\n    async onMapLoad(event) {\n      // Here we cathing 'load' map event\n      const asyncActions = event.component.actions\n\n      const newParams = await asyncActions.flyTo({\n        center: [30, 30],\n        zoom: 9,\n        speed: 1\n      })\n      console.log(newParams)\n      /* => {\n              center: [30, 30],\n              zoom: 9,\n              bearing: 9,\n              pitch: 7\n            }\n      */\n    }\n  }\n}\n</script>\n```\n\nSee full list of actions on [API](/api/#actions) page.\n\n### Method `actions.stop()`\n\nMethod `.stop()` just stops all animations on map, updates props with new positions and return Promise with map parameters at the moment when `.stop()` called.\n\n### Events\n\nSee list of events on [API](/api/#events) page.\n"
  },
  {
    "path": "docs/guide/composition.md",
    "content": "# Composition\n\nYou can use Mapbox GL feature as Vue component and compose it as a child of GlMap. During creation all components waits until map properly initialized.\n\nFor example, adding map controls:\n\n```vue\n<template>\n<div id=\"#app\">\n  <VMap\n    :accessToken=\"accessToken\"\n    :mapStyle.sync=\"mapStyle\"\n  >\n    <MglNavigationControl position=\"top-right\"/>\n    <MglGeolocateControl position=\"top-right\" />\n  </mgl-map>\n</div>\n</template>\n\n<script>\nimport { VMap, MglNavigationControl, MglGeolocateControl } from \"v-mapbox\";\n\nexport default {\n  components: {\n    VMap,\n    MglNavigationControl,\n    MglGeolocateControl\n  },\n  data() {\n    return {\n      accessToken: \"some_token\",\n      mapStyle: \"style_object\"\n    };\n  }\n};\n</script>\n```\n\nAdding a popup:\n\n```vue\n<template>\n  <div id=\"#app\">\n    <VMap :accessToken=\"accessToken\" :mapStyle.sync=\"mapStyle\">\n      <MglNavigationControl position=\"top-right\" />\n      <MglGeolocateControl position=\"top-right\" />\n      <VPopup :coordinates=\"popupCoordinates\">\n        <span>Hello world!</span>\n      </VPopup>\n    </VMap>\n  </div>\n</template>\n\n<script>\nimport {\n  VMap,\n  MglNavigationControl,\n  MglGeolocateControl,\n  VPopup\n} from \"v-mapbox\";\n\nexport default {\n  components: {\n    VMap,\n    MglNavigationControl,\n    MglGeolocateControl,\n    VPopup\n  },\n  data() {\n    return {\n      accessToken: \"some_token\",\n      mapStyle: \"style_object\",\n      popupCoordinates: [10, 10]\n    };\n  }\n};\n</script>\n```\n\nv-mapbox components will work even if wrapped in another component as long as they are in the components sub-tree of the base map component.\n\nFor example:\n\n**_Popup wrapper_**:\n\n```vue\n<template>\n  <div class=\"popup-wrapper\">\n    <VPopup :coordinates=\"popupCoordinates\">\n      <span>Hello world from wrapped popup!</span>\n    </VPopup>\n  </div>\n</template>\n\n<script>\nimport { VPopup } from 'v-mapbox';\n\nexport default {\n  name: 'PopupWrapper'\n  components: {\n    VPopup\n  },\n  computed() {\n    popupCoordinates() {\n      // Here we can do some work for calculate proper coordinates\n      //...\n      return [10, 10]\n    }\n  }\n}\n</script>\n```\n\n**_Main component_**:\n\n```vue\n<template>\n  <div id=\"#app\">\n    <VMap :accessToken=\"accessToken\" :mapStyle.sync=\"mapStyle\">\n      <PopupWrapper />\n      <!-- works! -->\n    </VMap>\n  </div>\n</template>\n\n<script>\nimport { VMap } from \"v-mapbox\";\nimport PopupWrapper from \"PopupWrapper\"; // wrapper for popup\n\nexport default {\n  components: {\n    VMap,\n    PopupWrapper // wrapper for popup\n  },\n  data() {\n    return {\n      accessToken: \"some_token\",\n      mapStyle: \"style_object\"\n    };\n  }\n};\n</script>\n```\n\n::: tip\nVueMapbox internally use dependency injection mechanism (`provide/inject` in Vue [docs](https://vuejs.org)). It means that any component in `VMap` sub-tree can access to `map`, `mapbox` and `actions` through `inject` property.\n:::\n\nAfter successful mount all components emits `added` envent with Vue component object and additional data, such as corresponding Mapbox GL JS object or object containing layer id in payload.\n"
  },
  {
    "path": "docs/guide/controls.md",
    "content": "# Map controls\n\n## Overview\n\nControls are UI elements for controlling the view of the map, such as scale or bearing.\nYou can check them out in Mapbox GL JS [documentation](https://docs.mapbox.com/mapbox-gl-js/api/#user%20interface)\nIn v-mapbox they exposed as Vue components, so you can control their properties and behavior dynamically by changing props.\n\n_All controls_:\n\n```vue\n<template>\n  <div id=\"#app\">\n    <VMap\n      :accessToken=\"accessToken\"\n      :mapStyle.sync=\"mapStyle\"\n      :attributionControl=\"false\"\n    >\n      <MglAttributionControl />\n      <MglNavigationControl position=\"top-right\" />\n      <MglGeolocateControl position=\"top-right\" />\n      <MglNavigationControl position=\"top-right\" />\n      <MglGeolocateControl position=\"top-right\" />\n      <MglScaleControl />\n    </VMap>\n  </div>\n</template>\n\n<script>\nimport {\n  VMap,\n  MglAttributionControl,\n  MglNavigationControl,\n  MglGeolocateControl,\n  MglFullscreenControl,\n  MglScaleControl\n} from \"v-mapbox\";\n\nexport default {\n  components: {\n    VMap,\n    MglNavigationControl,\n    MglGeolocateControl\n  },\n  data() {\n    return {\n      accessToken: \"some_token\",\n      mapStyle: \"style_object\"\n    };\n  }\n};\n</script>\n```\n\nSee list of controls and they properties in [API docs](/api/controls.md).\n\n### Attribution control\n\nDue to Mapbox [policy](https://docs.mapbox.com/help/how-attribution-works/) attribution control\nis enabled by default. You can disable default attributions by setting\n`attributionControl` prop of VMap to `false` and set your own attribution\nusing AttributionControl component.\n"
  },
  {
    "path": "docs/guide/index.md",
    "content": "# Quickstart\n\n## Using as ES module\n\n### Installation\n\nYou can install v-mapbox via npm. Take note that you need to install mapbox-gl as peer dependency:\n\n```bash\nnpm install --save v-mapbox mapbox-gl\n```\n\nAdd Mapbox JS and CSS files to the files where you need them:\n\n```js\nimport 'mapbox-gl/dist/mapbox-gl.css'\nimport 'v-mapbox/dist/v-mapbox.css';\nimport Mapbox from \"mapbox-gl\"\nimport { VMap } from \"v-mapbox\"\n```\n\n## Using in browser\n\n### Installation\n\nAdd Vue, MapboxGL and v-mapbox scripts on your page:\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- ... -->\n    <!-- Mapbox GL CSS -->\n    <link\n      href=\"https://api.tiles.mapbox.com/mapbox-gl-js/v1.13.2/mapbox-gl.css\"\n      rel=\"stylesheet\"\n    />\n    <!-- v-mapbox CSS -->\n    <link\n      href=\"https://cdn.jsdelivr.net/npm/v-mapbox@latest/dist/v-mapbox.css\"\n      rel=\"stylesheet\"\n    />\n    <!-- Mapbox GL JS -->\n    <script src=\"https://api.tiles.mapbox.com/mapbox-gl-js/v1.13.2/mapbox-gl.js\"></script>\n    <!-- VueJS -->\n    <script src=\"https://cdn.jsdelivr.net/npm/vue@latest/dist/vue.min.js\"></script>\n    <!-- v-mapbox -->\n    <script\n      type=\"text/javascript\"\n      src=\"https://cdn.jsdelivr.net/npm/v-mapbox@latest/dist/v-mapbox.min.js\"\n    ></script>\n    <!-- ... -->\n  </head>\n</html>\n```\n\nAll components will be placed in global VueMapbox object (`VueMapbox.VMap` etc.)\n\n\n"
  },
  {
    "path": "docs/guide/layers-and-sources.md",
    "content": "# Layers and sources\n\n## Adding layers\n\nGeographic features on the map draws as layers.\nLayer use `source` object that contains data for layer (for example, GeoJSON object). Source must be added to map and several layers can use common `source` and draw it's data differently.\nAlso, layer has own configuration object that declares how layer draws on the map. You can read more about it in Mapbox GL JS docs for [sources](https://docs.mapbox.com/mapbox-gl-js/api/#sources) and [layers](https://docs.mapbox.com/mapbox-gl-js/style-spec/#layers).\n\nv-mapbox exposes layers as Vue components.\n`source` and `layer` configuration object passed to layer component as props. There is several layers types for drawing different types of sources.\nFor example adding a layer with GeoJSON data:\n\n```vue\n<template>\n  <VMap :accessToken=\"accessToken\" :mapStyle.sync=\"mapStyle\">\n    <!-- Adding navigation control -->\n    <MglNavigationControl position=\"top-right\" />\n    <!-- Adding GeoJSON layer -->\n    <VLayerMapboxGeojson\n      :sourceId=\"geoJsonSource.id\"\n      :source=\"geoJsonSource\"\n      layerId=\"myLayer\"\n      :layer=\"geoJsonlayer\"\n    />\n  </VMap>\n</template>\n\n<script>\nimport { VMap, MglNavigationControl, VLayerMapboxGeojson } from \"v-mapbox\";\n\nexport default {\n  components: {\n    VMap,\n    MglNavigationControl,\n    VLayerMapboxGeojson\n  },\n  data() {\n    return {\n      accessToken: \"some_token\",\n      mapStyle: \"style_object\",\n      geoJsonSource: {\n        //...some GeoJSON object\n      },\n      geoJsonLayer: {\n        //...some GeoJSON layer configuration object\n      }\n    };\n  }\n};\n</script>\n```\n\nIn this example `geoJsonSource` can be an `object`, representing GeoJSON feature or `string` with URL to GeoJSON.\n\nSources are stored in Mapbox GL JS `Map` object by `sourceId`. If you sure that source already added to map, you can skip `source` prop and just pass `sourceId` and use same source for different layers. If you try to add same source with same `id` twice, VueMapbox would just use `source` that already existed on the map, but you can set `replaceSource` prop to `true` to just replace old source with new one passed in `source` prop.\n\nBy default when Layer components destroying, it removes source from map. If you want to keep source on Map (for example, for future using or if other layers use this source), set `clearSource` prop to `false`.\n\n## Reactivity\n\nLayer components watch for changes in object in their `layer` prop and translate changes to map accordingly. For example, if you change content of `filter` prop in GeojsonLayer, changes will be automatically applied to layer on the map. Not all layer settings can be set dynamically, currently reactive properties are `minzoom`, `maxzoom`, `paint`, `layout` and `filter`.\n\n## Layer getters\n\nGeoJSON and Vector layers has getters for their features: `.getRenderedFeatures(filter?)`, `.getSourceFeatures(geometry?, filter?)` and `.getFeatureState(featureId)`. They works similar to [`.queryRenderedFeatures()`](https://docs.mapbox.com/mapbox-gl-js/api/#map#queryrenderedfeatures) and [`.querySourceFeatures()`](https://docs.mapbox.com/mapbox-gl-js/api/#map#querysourcefeatures) Map methods, but returns features only from source of current layer.\n\n## Layer methods\n\nLayer components has methods `move()` and `remove()`.\nFirst moves a layer to a different z-position. Second destroys component and removes layer and source from map event if layer created with prop `clearSource: false`.\n\n## Layer events\n\nLayers emits events when loading data or on user interaction like `click`. See full list of events in [API section](/api/Layers/index.md#events)\n\n## Migration from 0.1\n\nIn versoin `0.1` layer and source options was exposed via separate props.\nSince `0.2` there are consolidated `source` object props for data source and `layer` for layer options. See [sources](https://docs.mapbox.com/mapbox-gl-js/api/#sources) and [layers](https://docs.mapbox.com/mapbox-gl-js/style-spec/#layers) in Mapbox GL JS docs.\n"
  },
  {
    "path": "docs/guide/markers-and-popups.md",
    "content": "# Markers and Popups\n\n## Marker\n\nThe Marker component is a wrapper around the [Mapbox GL Marker API](https://docs.mapbox.com/mapbox-gl-js/api/#marker).\n\n```vue\n<template>\n  <VMap\n    :accessToken=\"mapboxAccessToken\"\n    :mapStyle.sync=\"mapStyle\"\n    :center=\"coordinates\"\n  >\n    <VMarker :coordinates=\"coordinates\" color=\"blue\" />\n  </VMap>\n</template>\n\n<script>\nimport { VMap, VMarker } from \"v-mapbox\";\n\nexport default {\n  components: {\n    VMap,\n    VMarker\n  },\n  data() {\n    return {\n      mapStyle: \"mapbox://styles/mapbox/basic-v10\",\n      coordinates: [-111.549668, 39.014]\n    };\n  }\n};\n</script>\n```\n\n### Props\n\n- `color {String}` Set the color of the default marker (not applicable when using the `marker` slot)\n- `coordinates {Array}` The GeoJSON coordinates for marker placement on the map\n- `offset {Object, Array}` Display the marker at an offset distance from the coordinates\n\nFull list of props you cab see on [API page](/api/marker.md#props)\n\n### Slots\n\nThe Marker component has two slots: the `marker` slot and default slot used for popup.\n\n#### The `marker` slot\n\nThe `marker` slot allows you to customize the look of the marker. Here is an example of using the [Vuetify `v-icon` component](https://vuetifyjs.com/en/components/icons) instead of the default marker icon:\n\n```vue\n<template>\n  <VMap\n    :accessToken=\"mapboxAccessToken\"\n    :mapStyle.sync=\"mapStyle\"\n    :center=\"coordinates\"\n  >\n    <VMarker :coordinates=\"coordinates\">\n      <v-icon slot=\"marker\">mdi-map-marker</v-icon>\n    </VMarker>\n  </VMap>\n</template>\n\n<script>\nimport { VMap, VMarker } from \"v-mapbox\";\n\nexport default {\n  components: {\n    VMap,\n    VMarker\n  },\n\n  data() {\n    return {\n      mapStyle: \"mapbox://styles/mapbox/basic-v10\",\n      coordinates: [-111.549668, 39.014]\n    };\n  }\n};\n</script>\n```\n\n### Default slot\n\nDefault slot allows you to specify content to display in a Mapbox popup when the marker is clicked. See [below](#markers-popups-together)\n\n## Popup\n\nThe Popup component is wrapper around the [Mapbox GL Popup API](https://docs.mapbox.com/mapbox-gl-js/api/#popup).\n\nYou can specify content inside popup in default slot. It can be HTML or Vue component.\nIn this example [Vuetify card component](https://vuetifyjs.com/en/components/cards) used as a content for popup:\n\n```vue\n<template>\n  <VMap\n    :accessToken=\"mapboxAccessToken\"\n    :mapStyle.sync=\"mapStyle\"\n    :center=\"coordinates\"\n  >\n    <VPopup :coordinates=\"coordinates\" anchor=\"top\">\n      <VCard> <div>Hello, I'm popup!</div> </VCard>\n    </VPopup>\n  </VMap>\n</template>\n\n<script>\nimport { VMap, VPopup } from \"v-mapbox\";\n\nexport default {\n  components: {\n    VMap,\n    VPopup\n  },\n  data() {\n    return {\n      mapStyle: \"mapbox://styles/mapbox/basic-v10\",\n      coordinates: [-111.549668, 39.014]\n    };\n  }\n};\n</script>\n```\n\nIf you set `onlyText` prop to `true` content in Popup default slot will be treated as plain text. It can be useful if you loading popup content from external untrusted source.\n\nPopups added to the map is hidden by default. If you want to show the popup immediately you need to set the prop `showed` to `true`\n\n### Props\n\n- `showed {Boolean}` If `true`, the popup shows immediately after component is created.\n\n- `closeButton {Boolean}` If `true`, a close button will appear in the top right corner of the popup.\n\n- `closeOnClick {Boolean}` If true, the popup will closed when the map is clicked.\n\n- `closeOnMove {Boolean}` If true, the popup will closed when the map moves.\n\n- `focusAfterOpen {Boolean}` If true, the popup will try to focus the first focusable element inside the popup.\n\n- `coordinates {Array}` The GeoJSON coordinates for popup placement on the map. If popup used inside marker this prop will be ignored.\n\n- `anchor {string}` prop specifies the part of the Popup that should be positioned closest to the coordinates point.\n\nFull list of props you can see on [API page](/api/popup.md#props)\n\n## Markers & Popups together\n\nPopup often used inside of map markers. You can achive this by passing Popup inside Marker in default slot:\n\n```vue\n<template>\n  <VMap\n    :accessToken=\"mapboxAccessToken\"\n    :mapStyle.sync=\"mapStyle\"\n    :center=\"coordinates\"\n  >\n    <VMarker :coordinates=\"coordinates\">\n      <VPopup>\n        <VCard>\n          <div>Hello, I'm popup!</div>\n        </VCard>\n      </VPopup>\n    </VMarker>\n  </VMap>\n</template>\n\n<script>\nimport { VMap, VPopup, VMarker } from \"v-mapbox\";\n\nexport default {\n  components: {\n    VMap,\n    VMarker,\n    VPopup\n  },\n\n  data() {\n    return {\n      mapStyle: \"mapbox://styles/mapbox/basic-v10\",\n      coordinates: [-111.549668, 39.014]\n    };\n  }\n};\n</script>\n```\n\nIn this case, Popup will be automatically bound to Marker. You can use `togglePopup` Marker method to toggle visibility of bound Popup.\nTake note that Popup `coordinates` prop will be ignored.\n"
  },
  {
    "path": "docs/index.md",
    "content": "---\nlayout: home\nhero:\n  name: V-Mapbox 🌏\n  image:\n    src: /logo.svg\n    alt: V-Mapbox Logo\n  tagline: Combine powers of Mapbox GL JS and Vue.js\n  actions:\n    - theme: brand\n      text: Get Started →\n      link: /guide/\n    - theme: alt\n      text: View on GitHub\n      link: https://github.com/vinayakkulkarni/v-mapbox\nfeatures:\n  - title: Declarative style\n    details: You can use map elements like layers, markers, popups as Vue components and control them via synchronized props\n  - title: Vuefied\n    details: Map elements declared as components respect Vue lifecycle, emit map events like Vue events and can be used in OOP-style\nfooter: MIT Licensed | Copyright © 2020-present Vinayak Kulkarni\n---\n<!-- \n<iframe src=\"https://codesandbox.io/embed/v-mapbox-uq9ri2?fontsize=14&hidenavigation=1&theme=dark\"\n   style=\"width:50%; height:200px; border:0; border-radius: 4px; overflow:hidden;\"\n   title=\"v-mapbox-vue-3\"\n   allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n   sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n ></iframe>\n\n<br />\n\n::: tip Dependencies\n[Vue.js 3.x+](https://github.com/vuejs/vue)  \n[maplibre-gl](https://github.com/maplibre/maplibre-gl-js)\n:::\n\n<br />\n\n::: tip Size\n~ 15 kB minified and gzipped\n::: -->\n"
  },
  {
    "path": "docs/plugin-components/index.md",
    "content": "# Plugin components\n\nVueMapbox implements wrapper for core Mapbox Gl JS library API.  \nAny other functions, like [Mapbox Gl JS plugins](https://docs.mapbox.com/mapbox-gl-js/plugins/) is out of scope.\nHowever, they can be implemented as plugin components.\n\n## Using plugin components\n\nUsing plugin components is easy. Just put component inside `VMap` components tree and pass necessary props to it.\nBelow is example for using [VueMapbox Geocoder](https://github.com/soal/vue-mapbox-geocoder).\n\n```vue\n<template>\n  <VMap :accessToken=\"accessToken\" :mapStyle=\"mapStyle\">\n    <MglGeocoderControl\n      :accessToken=\"accessToken\"\n      :input.sync=\"defaultInput\"\n      @results=\"handleSearch\"\n    />\n  </VMap>\n</template>\n\n<script>\nimport { VMap } from \"v-mapbox\";\nimport MglGeocoderControl from \"v-mapbox-geocoder\";\n\nexport default {\n  name: \"App\",\n\n  components: {\n    VMap,\n    MglGeocoderControl\n  },\n  data() {\n    return {\n      accessToken: \"some_token\",\n      mapStyle: \"some_style\",\n      defaultInput: \"Bodhgaya\"\n    };\n  },\n  methods: {\n    handleSearch(event) {\n      console.log(event);\n    }\n  }\n};\n</script>\n```\n\nIf you didn't find plugin your need, it's easy to implement plugin component yourself.\nVueMapbox solves map loading task and give some useful helpers.\nCheck out development [documentation](/plugin-components/plugin-components-development.md).\n\n## Available plugin components\n\n- [VueMapbox Geocoder](https://github.com/soal/vue-mapbox-geocoder)\n"
  },
  {
    "path": "docs/plugin-components/plugin-components-development.md",
    "content": "# Create a plugin component\n\n## Overview\n\nThe purpose VueMapbox is to wrap up Mapbox Gl JS library. Any other functions are out of scope. However, there are some plugins for Mapbox Gl JS, that provides additional capabilities, and it where plugin components come into play.\n\nPlugin components are essentially just Vue components that utilize `mapbox` and `map` objects provided by basic `VMap`.\n\nVueMapbox internally use dependency injection mechanism of Vue ([provide/inject](https://vuejs.org/v2/api/#provide-inject) in Vue docs).\nWhen `VMap` created, it waits for map loads and initializes then renders it's child components, and provide them `mapbox` (Mapbox GL JS library), `map` (initialized instance of the [Map](https://docs.mapbox.com/mapbox-gl-js/api/#map)) and `actions` ([promisified](/api/#actions) Mapbox Map methods).\nInject these objects in your component, and you can add to map features you need.\n\nThe basic idea is to keep the declarative style of Vue, so it's good to add for example additional controls or layer types to map as a component. It's a right place to wrap Mapbox Gl JS plugins, but it can be used for various purpose.\n\n## Basic example for plugin component\n\n**App template**\n\n```vue\n<template>\n  <VMap :accessToken=\"accessToken\" :mapStyle=\"mapStyle\">\n    <MyPluginComponent />\n  </VMap>\n</template>\n\n<script>\nimport Mapbox from \"mapbox-gl\";\nimport { VMap } from \"v-mapbox\";\n\nexport default {\n  components: {\n    VMap\n  },\n  data() {\n    return {\n      accessToken: ACCESS_TOKEN,\n      mapStyle: MAP_STYLE\n    };\n  }\n};\n</script>\n```\n\n**Plugin comonent**\n\n```vue\n<template>\n  <button @click=\"fly\">Fly!</button>\n  <div>Map center is: Lng={{ center.lng }}, Lat={{ center.lat }}</div>\n</template>\n\n<script>\nimport Mapbox from \"mapbox-gl\";\nimport { VMap } from \"v-mapbox\";\n\nexport default {\n  name: \"MyPluginComponent\"\n  inject: [\"mapbox\", \"map\", \"actions\"],\n\n  data() {\n    return {\n      center: null\n    };\n  },\n\n  created() {\n    this.center = this.map.getCenter();\n  },\n\n  methods: {\n    async fly() {\n      const flyResult = await this.actions.flyTo({ center: [10, 10] });\n      this.center = flyResult.center;\n    }\n  }\n};\n</script>\n```\n\n## VueMapbox helpers <Badge text=\"experimental\" type=\"warn\"/>\n\n::: danger Experimental\nHelpers are experimenatal feature and will change in future, but we will try keep backward compatibility for a long time and provide deprecation warnings.\nFor now they just mixins that used in VueMapbox internal implementation.\n:::\n\nBeside providing base objects, VueMapbox give some useful helper mixins, that can be used in plugin components.\nYou can access to them via `$helpers` named export:\n\n```js\nimport { $helpers } from \"v-mapbox\";\n\nconst { withEvents, withSelfEvents, asControl, asLayer } = $helpers;\n```\n\n### `withEvents`\n\n[Source](https://github.com/vinayakkulkarni/v-mapbox/blob/master/src/lib/withEvents.js).  \nProvides `$_emitEvent` and `$_emitMapEvent` methods to emit events in VueMapbox style.\n\n### `withSelfEvents`\n\n[Source](https://github.com/vinayakkulkarni/v-mapbox/blob/master/src/components/UI/withSelfEvents.js)  \nProvides `$_bindSelfEvents`, `$_unbindSelfEvents` and `$_emitSelfEvent`.\nThey can be used to bind events to Mapbox GL JS objects that emit self events instead of `Map` object like controls, markers and popups.\n\n### `asControl`\n\n[Source](https://github.com/vinayakkulkarni/v-mapbox/blob/master/src/components/UI/controls/controlMixin.js).  \nProvides backbone for Map controls (like )\n\n### `asLayer`\n\n[Source](https://github.com/vinayakkulkarni/v-mapbox/blob/master/src/components/layer/layerMixin.js).  \nProvides backbone for Map layer.  \nSee also [layers API doc](/api/Layers/index.md)\n\n## Creating component for Mapbox GL JS plugin\n\nExample below can give you an idea how to create component for Mapbox GL JS plugin.\n\n**[VueMaboxGeocoder](https://github.com/vinayakkulkarni/v-mapbox-geocoder) — wrapper for [mapbox-gl-geocoder](https://github.com/mapbox/mapbox-gl-geocoder)**:\n\n```js\n// First, there is no separate HTML to render, so we don't need template and SFC, so it's just JS file\n\nimport MapboxGeocoder from \"@mapbox/mapbox-gl-geocoder\";\nimport { $helpers } from \"v-mapbox\"; // Get $helpers from VueMapbox\n\n// Define list of mapbox-gl-geocoder events\nconst geocoderEvents = {\n  clear: \"clear\",\n  loading: \"loading\",\n  results: \"results\",\n  result: \"result\",\n  error: \"error\"\n};\n\nexport default {\n  name: \"GeocoderControl\",\n  mixins: [$helpers.asControl], // MapboxGeocoder is a control, so we use mixin\n\n  inject: [\"mapbox\", \"map\"], // Here we inject objects provided by VMap\n\n  props: {\n    // MapboxGeocoder requires access token\n    accessToken: {\n      type: String,\n      required: true\n    },\n    input: {\n      type: String,\n      default: null\n    },\n    proximity: {\n      type: Object,\n      default: null\n    }\n    // ...here goes other props...\n  },\n\n  data() {\n    return {\n      initial: true\n    };\n  },\n\n  // Here we watch for props and and apply changes to MapboxGeocoder if needed\n  watch: {\n    input: {\n      handler(next, prev) {\n        if (this.control && next !== prev) {\n          this.control.setInput(next);\n        }\n      },\n      immediate: true\n    },\n    proximity(next, prev) {\n      if (this.control && next !== prev) {\n        this.control.setProximity(next);\n      }\n    }\n  },\n\n  created() {\n    this.control = null; // Here we will store MapboxGeocoder instance. We don't want Vue reactivity system mess with it, so we store it non-reactive\n    if (this.accessToken && !this.mapbox.accessToken) {\n      this.mapbox.accessToken = this.accessToken;\n    }\n    this.control = new MapboxGeocoder(this.$props); // Creating MapboxGeocoder instance and pass props as options to it\n    this.control.on(\"results\", this.$_updateInput); // We need to update synchronized prop \"input\" when user enters some query to search field\n\n    // Now we can add control to the map\n    this.$_deferredMount();\n  },\n\n  beforeDestroy() {\n    this.control.off(\"results\", this.$_updateInput);\n    // Also, control will be removed from map in beforeDestroy() lifecycle hook in `asControl` mixin\n  },\n\n  methods: {\n    $_deferredMount() {\n      // Because this component placed in VMap sub-tree, map already initialized and injected above\n      this.map.addControl(this.control);\n      if (this.input) {\n        // Set input in MapboxGeocoder if there is default data\n        this.control.setInput(this.input);\n      }\n      // Emit added event. `$_emitEvent` method is came from `asControl` mixin\n      this.$_emitEvent(\"added\", { geocoder: this.control });\n      this.$_bindSelfEvents(Object.keys(geocoderEvents)); // Bin events to emit them as Vue events\n      this.initial = false; // Initialization done\n    },\n\n    $_bindSelfEvents(events) {\n      // $_bindSelfEvents is provided by `asControl` mixin. but we need to replace it because MapboxGeocoder do not follow Mapbox Gl JS events schema and we need custom processing for them\n      const vm = this;\n      // Here we use this.$listeners to subscribe only on events that user listens on component\n      Object.keys(this.$listeners).forEach(eventName => {\n        if (events.includes(eventName)) {\n          this.control.on(eventName, vm.$_emitControlEvent.bind(vm, eventName));\n        }\n      });\n    },\n\n    // Process event to line up with VueMapbox events format\n    $_emitControlEvent(eventName, eventData) {\n      return this.$_emitSelfEvent({ type: eventName }, eventData);\n    },\n\n    $_updateInput(results) {\n      if (!this.initial) {\n        const input = results.query ? results.query.join(\"\") : \"\";\n        this.$emit(\"update:input\", input); // update synchormized prop \"input\"\n      }\n    }\n\n    //...here goes other public methods\n  }\n};\n```\n\n<!-- ## Component API recommendations -->\n"
  },
  {
    "path": "jsr.json",
    "content": "{\n  \"name\": \"@vinayakkulkarni/v-mapbox\",\n  \"version\": \"5.1.0\",\n  \"exports\": \"./dist/v-mapbox.js\",\n  \"publish\": {\n    \"exclude\": [\n      \"!dist\"\n    ]\n  }\n}"
  },
  {
    "path": "lint-staged.config.cjs",
    "content": "module.exports = {\n  '*.{js,ts,vue}': 'bun run lint:js',\n  '*.{css,vue}': 'bun run lint:css',\n};\n"
  },
  {
    "path": "netlify.toml",
    "content": "[dev]\ncommand = \"bun run docs:dev\"\n\n[build]\ncommand = \"./scripts/build.sh\"\npublish = \"docs/.vitepress/dist\"\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"v-mapbox\",\n  \"version\": \"5.1.0\",\n  \"description\": \"Maplibre (and Mapbox) with Vue 💚\",\n  \"main\": \"./dist/v-mapbox.js\",\n  \"module\": \"./dist/v-mapbox.js\",\n  \"umd\": \"./dist/v-mapbox.umd.cjs\",\n  \"unpkg\": \"./dist/v-mapbox.cjs\",\n  \"jsdelivr\": \"./dist/v-mapbox.cjs\",\n  \"cdn\": \"./dist/v-mapbox.min.js\",\n  \"exports\": {\n    \".\": {\n      \"import\": \"./dist/v-mapbox.js\",\n      \"require\": \"./dist/v-mapbox.umd.cjs\"\n    },\n    \"./dist/v-mapbox.css\": {\n      \"import\": \"./dist/v-mapbox.css\",\n      \"require\": \"./dist/v-mapbox.css\"\n    }\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"types\": \"./dist/index.d.ts\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"rimraf dist && vite build && vue-tsc --declaration --emitDeclarationOnly && prettier --write ./dist/*{cjs,js,ts}\",\n    \"test\": \"vitest\",\n    \"test:coverage\": \"vitest run --coverage\",\n    \"docs:dev\": \"vitepress dev docs\",\n    \"docs:build\": \"vitepress build docs\",\n    \"docs:serve\": \"vitepress serve docs\",\n    \"lint\": \"npm run lint:prettier && npm run lint:eslint && npm run lint:css\",\n    \"lintfix\": \"npm run lint:prettier:fix && npm run lint:eslint:fix && npm run lint:css:fix\",\n    \"lint:js\": \"npm run lint:eslint && npm run lint:prettier\",\n    \"lint:eslint\": \"eslint \\\"{,!(node_modules|dist)/**/}*.{js,ts,vue}\\\" --ignore-path .gitignore\",\n    \"lint:eslint:fix\": \"eslint --fix \\\"{,!(node_modules|dist)/**/}*.{js,ts,vue}\\\" --ignore-path .gitignore\",\n    \"lint:prettier\": \"prettier --check \\\"{,!(node_modules|dist)/**/}*.{js,ts,vue}\\\" --ignore-path .gitignore\",\n    \"lint:prettier:fix\": \"prettier --write \\\"{,!(node_modules|dist)/**/}*.{js,ts,vue}\\\" --ignore-path .gitignore\",\n    \"lint:css\": \"stylelint \\\"{,!(node_modules|dist)/**/}*.{css,scss,vue}\\\" --ignore-path .gitignore\",\n    \"lint:css:fix\": \"stylelint --fix \\\"{,!(node_modules|dist)/**/}*.{css,scss,vue}\\\" --ignore-path .gitignore\",\n    \"prepare\": \"is-ci || husky\",\n    \"release\": \"shipjs prepare\",\n    \"release:auto\": \"shipjs prepare --yes\",\n    \"release:dry\": \"shipjs prepare --dry-run\"\n  },\n  \"peerDependencies\": {\n    \"maplibre-gl\": \"^4.0.0\",\n    \"vue\": \"^3.4.15\"\n  },\n  \"optionalDependencies\": {\n    \"@deck.gl/core\": \"^8.9.34\",\n    \"@deck.gl/layers\": \"^8.9.34\",\n    \"@deck.gl/mapbox\": \"^8.9.34\"\n  },\n  \"devDependencies\": {\n    \"@commitlint/cli\": \"^19.3.0\",\n    \"@commitlint/config-conventional\": \"^19.2.2\",\n    \"@deck.gl/core\": \"^8.9.34\",\n    \"@deck.gl/layers\": \"^8.9.34\",\n    \"@deck.gl/mapbox\": \"^8.9.34\",\n    \"@types/node\": \"^20.12.12\",\n    \"@typescript-eslint/eslint-plugin\": \"^7.9.0\",\n    \"@typescript-eslint/parser\": \"^7.9.0\",\n    \"@vinayakkulkarni/prettier-config-vue\": \"^1.0.0\",\n    \"@vitejs/plugin-vue\": \"^5.0.4\",\n    \"@vitest/coverage-v8\": \"^1.6.0\",\n    \"@vue/component-compiler-utils\": \"^3.3.0\",\n    \"@vue/runtime-dom\": \"^3.4.27\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-config-prettier\": \"^9.1.0\",\n    \"eslint-plugin-import\": \"^2.29.1\",\n    \"eslint-plugin-jsdoc\": \"^48.2.5\",\n    \"eslint-plugin-prettier\": \"^5.1.3\",\n    \"eslint-plugin-regexp\": \"^2.5.0\",\n    \"eslint-plugin-security\": \"^1.7.1\",\n    \"eslint-plugin-vue\": \"^9.26.0\",\n    \"happy-dom\": \"^14.11.0\",\n    \"husky\": \"^9.0.11\",\n    \"is-ci\": \"^3.0.1\",\n    \"lint-staged\": \"^15.2.2\",\n    \"maplibre-gl\": \"^4.3.2\",\n    \"postcss-html\": \"^1.7.0\",\n    \"prettier\": \"^3.2.5\",\n    \"rimraf\": \"^5.0.7\",\n    \"sass\": \"^1.77.2\",\n    \"shipjs\": \"^0.26.3\",\n    \"stylelint\": \"16.5.0\",\n    \"stylelint-config-recommended-vue\": \"1.5.0\",\n    \"stylelint-prettier\": \"5.0.0\",\n    \"typescript\": \"^5.4.5\",\n    \"vite\": \"^5.2.11\",\n    \"vitepress\": \"^1.2.0\",\n    \"vitest\": \"^1.6.0\",\n    \"vue\": \"^3.4.27\",\n    \"vue-tsc\": \"^2.0.19\"\n  },\n  \"keywords\": [\n    \"vue\",\n    \"vuejs\",\n    \"mapbox\",\n    \"mapbox-gl-js\",\n    \"mapbox-gl\",\n    \"maplibre-gl-js\",\n    \"maplibre-gl\"\n  ],\n  \"publishConfig\": {\n    \"access\": \"public\",\n    \"registry\": \"https://registry.npmjs.org\"\n  },\n  \"author\": {\n    \"name\": \"Vinayak Kulkarni\",\n    \"email\": \"inbox.vinayak@gmail.com\",\n    \"url\": \"https://vinayakkulkarni.dev\"\n  },\n  \"contributors\": [\n    {\n      \"email\": \"developers@geospoc.com\",\n      \"name\": \"GeoSpoc Dev Team\",\n      \"url\": \"https://geospoc.com\"\n    }\n  ],\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=18\",\n    \"npm\": \">=9\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git@github.com:geospoc/v-mapbox.git\"\n  },\n  \"private\": false,\n  \"sideEffects\": [\n    \"*.css\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/geospoc/v-mapbox/issues\"\n  },\n  \"homepage\": \"https://v-mapbox.geospoc.io/\"\n}\n"
  },
  {
    "path": "prettier.config.cjs",
    "content": "module.exports = {\n  ...require('@vinayakkulkarni/prettier-config-vue'),\n};\n"
  },
  {
    "path": "scripts/build.sh",
    "content": "#!/bin/bash\nset -e\ncurl -fsSL https://bun.sh/install | bash\nexport PATH=\"/opt/buildhome/.bun/bin:$PATH\"\nbun --version\nbun install\nbun --bun run docs:build\n"
  },
  {
    "path": "scripts/bump-jsr-version.cjs",
    "content": "#!/usr/bin/env node\nconst fs = require('fs');\n// Read package.json and parse the version\nconst pkg = JSON.parse(fs.readFileSync('package.json').toString());\n// Read jsr.json and parse it\nconst jsr = JSON.parse(fs.readFileSync('jsr.json').toString());\n// Update the version property in jsr object\njsr.version = pkg.version;\n// Write the updated jsr.json file\nfs.writeFileSync('jsr.json', JSON.stringify(jsr, null, 2));\n"
  },
  {
    "path": "ship.config.cjs",
    "content": "module.exports = {\n  installCommand: () => 'bun i',\n  beforeCommitChanges: ({ exec }) => {\n    exec('./scripts/bump-jsr-version.cjs');\n  },\n};\n"
  },
  {
    "path": "src/constants/events/index.ts",
    "content": "export { mapLayerEvents } from './layer';\nexport { mapEvents } from './map';\nexport { markerDOMEvents, markerMapEvents } from './marker';\nexport { popupEvents } from './popup';\n"
  },
  {
    "path": "src/constants/events/layer.ts",
    "content": "import { MapLayerEventType } from 'maplibre-gl';\n\nexport const mapLayerEvents: Array<keyof MapLayerEventType> = [\n  'click',\n  'dblclick',\n  'mousedown',\n  'mouseup',\n  'mousemove',\n  'mouseenter',\n  'mouseleave',\n  'mouseover',\n  'mouseout',\n  'contextmenu',\n  'touchstart',\n  'touchend',\n  'touchcancel',\n];\n"
  },
  {
    "path": "src/constants/events/map.ts",
    "content": "import { MapEventType } from 'maplibre-gl';\n\nexport const mapEvents: Array<keyof MapEventType> = [\n  'error',\n  'load',\n  'idle',\n  'remove',\n  'render',\n  'resize',\n  'webglcontextlost',\n  'webglcontextrestored',\n  'dataloading',\n  'data',\n  'tiledataloading',\n  'sourcedataloading',\n  'styledataloading',\n  'sourcedata',\n  'styledata',\n  'boxzoomcancel',\n  'boxzoomstart',\n  'boxzoomend',\n  'touchcancel',\n  'touchmove',\n  'touchend',\n  'touchstart',\n  'click',\n  'contextmenu',\n  'dblclick',\n  'mousemove',\n  'mouseup',\n  'mousedown',\n  'mouseout',\n  'mouseover',\n  'movestart',\n  'move',\n  'moveend',\n  'zoomstart',\n  'zoom',\n  'zoomend',\n  'rotatestart',\n  'rotate',\n  'rotateend',\n  'dragstart',\n  'drag',\n  'dragend',\n  'pitchstart',\n  'pitch',\n  'pitchend',\n  'wheel',\n];\n"
  },
  {
    "path": "src/constants/events/marker.ts",
    "content": "export const markerMapEvents = ['dragstart', 'drag', 'dragend'];\nexport const markerDOMEvents = ['click', 'mouseenter', 'mouseleave'];\n"
  },
  {
    "path": "src/constants/events/popup.ts",
    "content": "export const popupEvents = ['open', 'close'];\n"
  },
  {
    "path": "src/controls/attribution/VControlAttribution.vue",
    "content": "<script setup lang=\"ts\">\n  import type { ControlPosition, AttributionControlOptions } from './types';\n  import { AttributionControl } from 'maplibre-gl';\n  import { useSlots, onMounted } from 'vue';\n  import { MapKey, injectStrict } from '../../utils';\n\n  const defaultOptions: AttributionControlOptions = {\n    compact: false,\n    customAttribution: undefined,\n  };\n\n  const props = withDefaults(\n    defineProps<{\n      options?: AttributionControlOptions;\n      position?: ControlPosition;\n    }>(),\n    {\n      options: undefined,\n      position: 'bottom-right',\n    },\n  );\n\n  const slots = useSlots();\n\n  let map = injectStrict(MapKey);\n\n  onMounted(() => {\n    addControl();\n  });\n\n  const addControl = (): void => {\n    let options = defaultOptions;\n    if (props.options) {\n      options = {\n        ...props.options,\n      };\n    }\n    if (slots && slots.default?.()) {\n      options.customAttribution = slots.default()[0]\n        .children as unknown as string;\n    }\n    const control = new AttributionControl(options);\n    map.value.addControl(control, props.position);\n  };\n</script>\n\n<template>\n  <slot />\n</template>\n"
  },
  {
    "path": "src/controls/attribution/index.ts",
    "content": "export { default as AttributionControl } from './VControlAttribution.vue';\n"
  },
  {
    "path": "src/controls/attribution/types.ts",
    "content": "export type { ControlPosition, AttributionControlOptions } from 'maplibre-gl';\n"
  },
  {
    "path": "src/controls/fullscreen/VControlFullscreen.vue",
    "content": "<script setup lang=\"ts\">\n  import type { ControlPosition, FullscreenControlOptions } from './types';\n  import { FullscreenControl } from 'maplibre-gl';\n  import { onMounted } from 'vue';\n  import { MapKey, injectStrict } from '../../utils';\n\n  const defaultOptions: FullscreenControlOptions = {\n    container: undefined,\n  };\n\n  const props = withDefaults(\n    defineProps<{\n      options?: FullscreenControlOptions;\n      position?: ControlPosition;\n    }>(),\n    {\n      options: undefined,\n      position: 'top-left',\n    },\n  );\n\n  let map = injectStrict(MapKey);\n\n  onMounted(() => {\n    addControl();\n  });\n\n  const addControl = (): void => {\n    const control = new FullscreenControl(props.options || defaultOptions);\n    map.value.addControl(control, props.position);\n  };\n</script>\n"
  },
  {
    "path": "src/controls/fullscreen/index.ts",
    "content": "export { default as FullscreenControl } from './VControlFullscreen.vue';\n"
  },
  {
    "path": "src/controls/fullscreen/types.ts",
    "content": "export type { ControlPosition, FullscreenControlOptions } from 'maplibre-gl';\n"
  },
  {
    "path": "src/controls/geolocate/VControlGeolocate.vue",
    "content": "<script setup lang=\"ts\">\n  import type { ControlPosition, GeolocateControlOptions } from './types';\n  import { GeolocateControl } from 'maplibre-gl';\n  import { onMounted } from 'vue';\n  import { geolocateControlEvents as events } from './events';\n  import { MapKey, injectStrict } from '../../utils';\n\n  const defaultOptions: GeolocateControlOptions = {\n    fitBoundsOptions: {\n      linear: false,\n      offset: [0, 0],\n      maxZoom: 22,\n    },\n    positionOptions: {\n      enableHighAccuracy: true,\n      maximumAge: 0,\n      timeout: 6000,\n    },\n    trackUserLocation: true,\n    showAccuracyCircle: true,\n    showUserLocation: true,\n  };\n\n  const props = withDefaults(\n    defineProps<{\n      options?: GeolocateControlOptions;\n      position?: ControlPosition;\n    }>(),\n    {\n      options: undefined,\n      position: 'top-left',\n    },\n  );\n\n  const emit = defineEmits(events);\n\n  let map = injectStrict(MapKey);\n\n  onMounted(() => {\n    addControl();\n  });\n\n  const addControl = (): void => {\n    const control = new GeolocateControl(props.options || defaultOptions);\n    map.value.addControl(control, props.position);\n    events.forEach((event: string) => {\n      control.on(event, () => {\n        emit(event);\n      });\n    });\n  };\n</script>\n"
  },
  {
    "path": "src/controls/geolocate/events.ts",
    "content": "export const geolocateControlEvents: string[] = [\n  'geolocate',\n  'error',\n  'outofmaxbounds',\n  'trackuserlocationstart',\n  'trackuserlocationend',\n];\n"
  },
  {
    "path": "src/controls/geolocate/index.ts",
    "content": "export { default as GeolocateControl } from './VControlGeolocate.vue';\n"
  },
  {
    "path": "src/controls/geolocate/types.ts",
    "content": "export type { ControlPosition, GeolocateControlOptions } from 'maplibre-gl';\n"
  },
  {
    "path": "src/controls/index.ts",
    "content": "export { AttributionControl as VControlAttribution } from './attribution';\nexport { FullscreenControl as VControlFullscreen } from './fullscreen';\nexport { GeolocateControl as VControlGeolocate } from './geolocate';\nexport { NavigationControl as VControlNavigation } from './navigation';\nexport { ScaleControl as VControlScale } from './scale';\n"
  },
  {
    "path": "src/controls/navigation/VControlNavigation.vue",
    "content": "<script setup lang=\"ts\">\n  import type { ControlPosition, NavigationControlOptions } from './types';\n  import { NavigationControl } from 'maplibre-gl';\n  import { onMounted, inject } from 'vue';\n  import { MapKey } from '../../utils';\n\n  const defaultOptions: NavigationControlOptions = {\n    showCompass: true,\n    showZoom: true,\n    visualizePitch: true,\n  };\n\n  const props = withDefaults(\n    defineProps<{\n      options?: NavigationControlOptions;\n      position?: ControlPosition;\n    }>(),\n    {\n      options: undefined,\n      position: 'top-left',\n    },\n  );\n\n  const map = inject(MapKey);\n\n  onMounted(() => {\n    addControl();\n  });\n\n  const addControl = (): void => {\n    const control = new NavigationControl(props.options || defaultOptions);\n    map?.value.addControl(control, props.position);\n  };\n</script>\n"
  },
  {
    "path": "src/controls/navigation/index.ts",
    "content": "export { default as NavigationControl } from './VControlNavigation.vue';\n"
  },
  {
    "path": "src/controls/navigation/types.ts",
    "content": "export type { ControlPosition, NavigationControlOptions } from 'maplibre-gl';\n"
  },
  {
    "path": "src/controls/scale/VControlScale.vue",
    "content": "<script setup lang=\"ts\">\n  import type { ControlPosition, ScaleControlOptions } from './types';\n  import { onMounted, inject } from 'vue';\n  import { ScaleControl } from 'maplibre-gl';\n  import { MapKey } from '../../utils';\n\n  const defaultOptions: ScaleControlOptions = {\n    maxWidth: 100,\n    unit: 'metric',\n  };\n\n  const props = withDefaults(\n    defineProps<{\n      options?: ScaleControlOptions;\n      position?: ControlPosition;\n    }>(),\n    {\n      options: undefined,\n      position: 'bottom-left',\n    },\n  );\n\n  const map = inject(MapKey);\n\n  onMounted(() => {\n    addControl();\n  });\n\n  const addControl = (): void => {\n    const control = new ScaleControl(props.options || defaultOptions);\n    map?.value.addControl(control, props.position);\n  };\n</script>\n"
  },
  {
    "path": "src/controls/scale/index.ts",
    "content": "export { default as ScaleControl } from './VControlScale.vue';\n"
  },
  {
    "path": "src/controls/scale/types.ts",
    "content": "export type { ControlPosition, ScaleControlOptions } from 'maplibre-gl';\n"
  },
  {
    "path": "src/index.ts",
    "content": "// Controls\nimport {\n  VControlAttribution,\n  VControlFullscreen,\n  VControlGeolocate,\n  VControlNavigation,\n  VControlScale,\n} from './controls';\n// Layers – Deck.gl\nimport VLayerDeckArc from './layers/deck.gl/VLayerDeckArc.vue';\nimport VLayerDeckGeojson from './layers/deck.gl/VLayerDeckGeojson.vue';\n// Layers – Mapbox\nimport VLayerMapboxCanvas from './layers/mapbox/VLayerMapboxCanvas.vue';\nimport VLayerMapboxGeojson from './layers/mapbox/VLayerMapboxGeojson.vue';\nimport VLayerMapboxImage from './layers/mapbox/VLayerMapboxImage.vue';\nimport VLayerMapboxRaster from './layers/mapbox/VLayerMapboxRaster.vue';\nimport VLayerMapboxVector from './layers/mapbox/VLayerMapboxVector.vue';\nimport VLayerMapboxVideo from './layers/mapbox/VLayerMapboxVideo.vue';\n// Map\nimport VMap from './map/VMap.vue';\n// Marker\nimport VMarker from './markers/VMarker.vue';\n// Popup\nimport VPopup from './popups/VPopup.vue';\n\nexport {\n  VMap,\n  // Marker\n  VMarker,\n  // Popup\n  VPopup,\n  // Layers\n  VLayerDeckArc,\n  VLayerDeckGeojson,\n  VLayerMapboxCanvas,\n  VLayerMapboxGeojson,\n  VLayerMapboxImage,\n  VLayerMapboxRaster,\n  VLayerMapboxVector,\n  VLayerMapboxVideo,\n  // Controls\n  VControlAttribution,\n  VControlFullscreen,\n  VControlGeolocate,\n  VControlNavigation,\n  VControlScale,\n};\n\nexport default VMap;\n"
  },
  {
    "path": "src/layers/deck.gl/VLayerDeckArc.vue",
    "content": "<script lang=\"ts\">\n  // @ts-ignore\n  import { ArcLayer } from '@deck.gl/layers';\n  // @ts-ignore\n  import { MapboxLayer } from '@deck.gl/mapbox';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerDeckArc',\n    props: {\n      layerId: {\n        type: String as PropType<string>,\n        default: 'deck.gl-arc-layer',\n        required: true,\n      },\n      data: {\n        type: Object as PropType<any>,\n        required: true,\n      },\n      options: {\n        type: Object,\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = new MapboxLayer({\n        ...props.options,\n        id: props.layerId,\n        data: props.data,\n        type: ArcLayer,\n      });\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n"
  },
  {
    "path": "src/layers/deck.gl/VLayerDeckGeojson.vue",
    "content": "<script lang=\"ts\">\n  // @ts-ignore\n  import { GeoJsonLayer } from '@deck.gl/layers';\n  // @ts-ignore\n  import { MapboxLayer } from '@deck.gl/mapbox';\n  import { FeatureCollection } from 'geojson';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerDeckGeojson',\n    props: {\n      layerId: {\n        type: String as PropType<string>,\n        default: 'deck.gl-geojson-layer',\n        required: true,\n      },\n      data: {\n        type: Object as PropType<FeatureCollection>,\n        required: true,\n      },\n      options: {\n        type: Object,\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = new MapboxLayer({\n        ...props.options,\n        id: props.layerId,\n        data: props.data,\n        type: GeoJsonLayer,\n      });\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n"
  },
  {
    "path": "src/layers/mapbox/VLayerMapboxCanvas.vue",
    "content": "<template>\n  <div>\n    <slot />\n  </div>\n</template>\n<script lang=\"ts\">\n  import type { FeatureCollection } from 'geojson';\n  import type {\n    LayerSpecification as AnyLayer,\n    GeoJSONSourceSpecification as GeoJSONSourceRaw,\n  } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerMapboxCanvas',\n    props: {\n      sourceId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-canvas-source',\n        required: true,\n      },\n      layerId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-canvas-layer',\n        required: true,\n      },\n      source: {\n        type: Object as PropType<FeatureCollection>,\n        required: true,\n      },\n      layer: {\n        type: Object as PropType<AnyLayer>,\n        default: () => ({}),\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = {\n        ...props.layer,\n        id: props.layerId,\n        source: props.sourceId,\n      };\n      const source: GeoJSONSourceRaw = {\n        type: 'geojson',\n        data: props.source,\n      };\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addSource(props.sourceId, source);\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n"
  },
  {
    "path": "src/layers/mapbox/VLayerMapboxGeojson.vue",
    "content": "<template>\n  <div>\n    <slot />\n  </div>\n</template>\n<script lang=\"ts\">\n  import type {\n    LayerSpecification as AnyLayer,\n    SourceSpecification as AnySource,\n  } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, onBeforeUnmount, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerMapboxGeojson',\n    props: {\n      sourceId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-geojson-source',\n        required: true,\n      },\n      layerId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-geojson-layer',\n        required: true,\n      },\n      source: {\n        type: Object as PropType<AnySource>,\n        required: true,\n      },\n      layer: {\n        type: Object as PropType<AnyLayer>,\n        default: () => ({}),\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = {\n        ...props.layer,\n        id: props.layerId,\n        source: props.sourceId,\n      };\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      onBeforeUnmount(() => {\n        if (map.value.getLayer(props.layerId)) {\n          map.value.removeLayer(props.layerId);\n          map.value.removeSource(props.sourceId);\n        }\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addSource(props.sourceId, props.source);\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n"
  },
  {
    "path": "src/layers/mapbox/VLayerMapboxImage.vue",
    "content": "<template>\n  <div>\n    <slot />\n  </div>\n</template>\n<script lang=\"ts\">\n  import type {\n    LayerSpecification as AnyLayer,\n    ImageSourceSpecification as ImageSourceRaw,\n  } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerMapboxImage',\n    props: {\n      sourceId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-image-source',\n        required: true,\n      },\n      layerId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-image-layer',\n        required: true,\n      },\n      source: {\n        type: Object as PropType<ImageSourceRaw>,\n        required: true,\n      },\n      layer: {\n        type: Object as PropType<AnyLayer>,\n        default: () => ({}),\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = {\n        ...props.layer,\n        id: props.layerId,\n        source: props.sourceId,\n      };\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addSource(props.sourceId, props.source);\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n"
  },
  {
    "path": "src/layers/mapbox/VLayerMapboxRaster.vue",
    "content": "<template>\n  <div>\n    <slot />\n  </div>\n</template>\n<script lang=\"ts\">\n  import type { FeatureCollection } from 'geojson';\n  import type {\n    LayerSpecification as AnyLayer,\n    GeoJSONSourceSpecification as GeoJSONSourceRaw,\n  } from 'maplibre-gl';\n  import { defineComponent, onMounted, PropType, ref, Ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerMapboxRaster',\n    props: {\n      sourceId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-raster-source',\n        required: true,\n      },\n      layerId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-raster-layer',\n        required: true,\n      },\n      source: {\n        type: Object as PropType<FeatureCollection>,\n        required: true,\n      },\n      layer: {\n        type: Object as PropType<AnyLayer>,\n        default: () => ({}),\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = {\n        ...props.layer,\n        id: props.layerId,\n        source: props.sourceId,\n      };\n      const source: GeoJSONSourceRaw = {\n        type: 'geojson',\n        data: props.source,\n      };\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addSource(props.sourceId, source);\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n"
  },
  {
    "path": "src/layers/mapbox/VLayerMapboxVector.vue",
    "content": "<template>\n  <div>\n    <slot />\n  </div>\n</template>\n<script lang=\"ts\">\n  import type {\n    LayerSpecification as AnyLayer,\n    VectorSourceSpecification as VectorSource,\n  } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerMapboxVector',\n    props: {\n      sourceId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-vector-source',\n        required: true,\n      },\n      layerId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-vector-layer',\n        required: true,\n      },\n      source: {\n        type: Object as PropType<VectorSource>,\n        required: true,\n      },\n      layer: {\n        type: Object as PropType<AnyLayer>,\n        default: () => ({}),\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = {\n        ...props.layer,\n        id: props.layerId,\n        source: props.sourceId,\n      };\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addSource(props.sourceId, props.source);\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n"
  },
  {
    "path": "src/layers/mapbox/VLayerMapboxVideo.vue",
    "content": "<template>\n  <div>\n    <slot />\n  </div>\n</template>\n<script lang=\"ts\">\n  import type {\n    LayerSpecification as AnyLayer,\n    VectorSourceSpecification as VectorSource,\n  } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerMapboxVideo',\n    props: {\n      sourceId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-video-source',\n        required: true,\n      },\n      layerId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-video-layer',\n        required: true,\n      },\n      source: {\n        type: Object as PropType<VectorSource>,\n        required: true,\n      },\n      layer: {\n        type: Object as PropType<AnyLayer>,\n        default: () => ({}),\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = {\n        ...props.layer,\n        id: props.layerId,\n        source: props.sourceId,\n      };\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addSource(props.sourceId, props.source);\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n"
  },
  {
    "path": "src/map/VMap.vue",
    "content": "<script setup lang=\"ts\">\n  import type { MapOptions, MapEventType } from 'maplibre-gl';\n  import type { Ref } from 'vue';\n  import { Map } from 'maplibre-gl';\n  import { onMounted, provide, ref, shallowRef } from 'vue';\n  import { mapEvents } from '../constants/events';\n  import { MapKey } from '../utils/symbols';\n\n  const props = withDefaults(\n    defineProps<{\n      options: MapOptions;\n    }>(),\n    {\n      // @ts-ignore\n      options: { container: 'map' },\n    },\n  );\n\n  const emit = defineEmits(['loaded', ...mapEvents]);\n\n  let map: Ref<Map> = shallowRef({} as Map);\n  let loaded: Ref<boolean> = ref(false);\n  let events: Ref<Array<keyof MapEventType>> = ref(mapEvents);\n\n  onMounted(() => {\n    map.value = new Map(props.options);\n    loaded.value = true;\n    provide(MapKey, map);\n    listenMapEvents();\n  });\n\n  const listenMapEvents = () => {\n    events.value.forEach((e) => {\n      map.value.on(e, (evt) => {\n        switch (e) {\n          case 'load':\n            emit('loaded', map.value);\n            break;\n          default:\n            emit(e, evt);\n            break;\n        }\n      });\n    });\n  };\n</script>\n\n<template>\n  <div :id=\"`${options?.container}`\" class=\"v-map-container\">\n    <slot />\n  </div>\n</template>\n\n<style scoped>\n  canvas {\n    outline: none;\n  }\n  .v-map-container {\n    width: 100%;\n    height: 100%;\n  }\n</style>\n"
  },
  {
    "path": "src/markers/VMarker.vue",
    "content": "<script lang=\"ts\">\n  import type { LngLatLike, MarkerOptions, PopupOptions } from 'maplibre-gl';\n  import { Marker } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, onBeforeUnmount, ref, watch } from 'vue';\n  import { markerDOMEvents, markerMapEvents } from '../constants/events';\n  import VPopup from '../popups/VPopup.vue';\n  import { injectStrict, MapKey } from '../utils';\n\n  export default defineComponent({\n    name: 'VMarker',\n    components: {\n      VPopup,\n    },\n    props: {\n      coordinates: {\n        type: [Object, Array] as PropType<LngLatLike>,\n        default: () => ({}),\n        required: true,\n      },\n      options: {\n        type: Object as PropType<MarkerOptions>,\n        default: () => ({}) as MarkerOptions,\n        required: false,\n      },\n      popupOptions: {\n        type: Object as PropType<PopupOptions>,\n        default: () => ({}) as PopupOptions,\n        required: false,\n      },\n      cursor: {\n        type: String as PropType<string>,\n        default: 'pointer',\n        required: false,\n      },\n    },\n    emits: [\n      'added',\n      'update:coordinates',\n      'removed',\n      ...markerMapEvents,\n      ...markerDOMEvents,\n    ],\n    setup(props, { emit }) {\n      let map = injectStrict(MapKey);\n      let marker: Ref<Marker> = ref({}) as Ref<Marker>;\n      let loaded: Ref<boolean> = ref(true);\n      let isMarkerAvailable = ref(false);\n      let slotRef: Ref<HTMLElement | null> = ref(null);\n\n      const setSlotRef = (el: HTMLElement) => {\n        slotRef.value = el;\n      };\n\n      watch(marker, (marker) => {\n        if ('_map' in marker) {\n          isMarkerAvailable.value = true;\n        } else {\n          isMarkerAvailable.value = false;\n        }\n      });\n\n      onMounted(() => {\n        if (loaded.value) {\n          if (slotRef.value !== null) {\n            // add marker to map\n            marker.value = new Marker({\n              element: slotRef.value!,\n              ...props.options,\n            });\n            setMarkerCoordinates(marker.value);\n            addToMap(marker.value);\n            setCursorPointer(marker.value);\n            listenMarkerEvents(marker.value);\n          } else {\n            marker.value = new Marker(props.options);\n            setMarkerCoordinates(marker.value);\n            addToMap(marker.value);\n            setCursorPointer(marker.value);\n            listenMarkerEvents(marker.value);\n          }\n        } else {\n          removeFromMap(marker.value);\n        }\n      });\n\n      onBeforeUnmount(() => {\n        removeFromMap(marker.value);\n      });\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Set marker coordinates\n       * @param {Marker} marker - Marker\n       * @returns {void}\n       */\n      function setMarkerCoordinates(marker: Marker): void {\n        marker.setLngLat(props.coordinates);\n      }\n      /**\n       * Sets the Cursor to Pointer\n       * @param {Marker} marker - Marker\n       * @returns {void}\n       */\n      function setCursorPointer(marker: Marker): void {\n        marker.getElement().style.cursor = props.cursor || 'default';\n      }\n\n      /**\n       * Add marker to map\n       * @param {Marker} marker - Marker\n       * @returns {void}\n       */\n      function addToMap(marker: Marker): void {\n        marker.addTo(map.value);\n        emit('added', { marker });\n      }\n      /**\n       * Remove marker from map\n       * @param {Marker} marker - Marker\n       * @returns {void}\n       */\n      function removeFromMap(marker: Marker): void {\n        if (isMarkerAvailable.value) {\n          marker.remove();\n          emit('removed');\n        }\n      }\n\n      /**\n       * Listen to events\n       * @param {Marker} marker - Marker\n       * @returns {void}\n       */\n      function listenMarkerEvents(marker: Marker): void {\n        let coordinates: LngLatLike;\n        // Listen to Marker Mapbox events\n        markerMapEvents.forEach((event: string) => {\n          marker.on(event, (e: { target: Marker }) => {\n            if (event === 'dragend') {\n              if (props.coordinates instanceof Array) {\n                coordinates = [e.target._lngLat.lng, e.target._lngLat.lat];\n              } else {\n                coordinates = e.target._lngLat;\n              }\n              emit('update:coordinates', coordinates);\n            }\n            emit(event, e);\n          });\n        });\n        // Listen to Marker DOM events\n        markerDOMEvents.forEach((event: string) => {\n          marker.getElement().addEventListener(event, (e) => {\n            emit(event, e);\n          });\n        });\n      }\n\n      return {\n        isMarkerAvailable,\n        marker,\n        setSlotRef,\n      };\n    },\n  });\n</script>\n\n<template>\n  <section :id=\"`marker-${Date.now()}`\" class=\"absolute\">\n    <slot :set-ref=\"setSlotRef\" name=\"markers\" />\n    <template v-if=\"isMarkerAvailable\">\n      <v-popup\n        :marker=\"marker\"\n        :options=\"popupOptions\"\n        :coordinates=\"coordinates\"\n      >\n        <slot />\n      </v-popup>\n    </template>\n  </section>\n</template>\n\n<style>\n  .absolute {\n    position: absolute !important;\n  }\n</style>\n"
  },
  {
    "path": "src/popups/VPopup.vue",
    "content": "<script lang=\"ts\">\n  import type { LngLatLike, Map, Marker, PopupOptions } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { Popup } from 'maplibre-gl';\n  import { defineComponent, onBeforeUnmount, onMounted, ref } from 'vue';\n  import { popupEvents } from '../constants/events';\n  import { injectStrict, MapKey } from '../utils';\n\n  export default defineComponent({\n    name: 'VPopup',\n    props: {\n      marker: {\n        type: Object as PropType<Marker>,\n        default: () => ({}) as Marker,\n        required: false,\n      },\n      options: {\n        type: Object as PropType<PopupOptions>,\n        default: () => ({}) as PopupOptions,\n        required: true,\n      },\n      coordinates: {\n        type: Object as PropType<LngLatLike>,\n        default: () => ({}),\n        required: true,\n      },\n    },\n    emits: ['added', 'removed', ...popupEvents],\n    setup(props, { emit }) {\n      let map: Ref<Map> = injectStrict(MapKey);\n      let popup: Popup = new Popup(props.options);\n      let loaded: Ref<boolean> = ref(true);\n      const content: Ref<null | HTMLElement> = ref(null);\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      onMounted(() => {\n        if (loaded.value) {\n          setPopupContent();\n          setPopupCoordinates();\n          addToMarker();\n          listenPopupEvents();\n        } else {\n          remove();\n          removePopupEvents();\n        }\n      });\n\n      onBeforeUnmount(() => {\n        remove();\n        removePopupEvents();\n      });\n\n      /**\n       * Sets the HTML content for the popup\n       * @returns {void}\n       */\n      function setPopupContent(): void {\n        popup.setDOMContent(content.value as Node);\n      }\n      /**\n       * Set popup coordinates\n       * @returns {void}\n       */\n      function setPopupCoordinates(): void {\n        popup.setLngLat(props.coordinates);\n      }\n\n      /**\n       * Add popup to marker if marker exists\n       * else add it to the map.\n       * @returns {void}\n       */\n      function addToMarker(): void {\n        if (props.marker) {\n          props.marker.setPopup(popup);\n        } else {\n          popup.addTo(map.value);\n        }\n        emit('added', { popup });\n      }\n      /**\n       * Remove popup from map\n       * @returns {void}\n       */\n      function remove(): void {\n        popup.remove();\n        emit('removed');\n      }\n\n      /**\n       * Listen to events\n       * @returns {void}\n       */\n      function listenPopupEvents(): void {\n        popupEvents.forEach((event: string) => {\n          popup.on(event, () => {\n            emit(event);\n          });\n        });\n      }\n      /**\n       * Turn off listener\n       * @returns {void}\n       */\n      function removePopupEvents(): void {\n        popupEvents.forEach((event: string) => {\n          popup.off(event, () => {\n            emit(event);\n          });\n        });\n      }\n\n      return {\n        content,\n      };\n    },\n  });\n</script>\n\n<template>\n  <section :id=\"`popup-${Date.now()}`\" ref=\"content\">\n    <slot />\n  </section>\n</template>\n"
  },
  {
    "path": "src/utils/index.ts",
    "content": "export { injectStrict } from './injects';\nexport { MapKey } from './symbols';\n"
  },
  {
    "path": "src/utils/injects.ts",
    "content": "import type { InjectionKey } from 'vue';\nimport { inject } from 'vue';\n\n/**\n * Dependency injection 🥳\n * @param {InjectionKey} key - The key to inject\n * @param {string | undefined} fallback - The fallback value\n * @returns {undefined} - The value\n */\nexport function injectStrict<T>(key: InjectionKey<T>, fallback?: T): T {\n  const resolved = inject(key, fallback);\n  if (!resolved) {\n    throw new Error(`Could not resolve ${key.description}`);\n  }\n  return resolved;\n}\n"
  },
  {
    "path": "src/utils/symbols.ts",
    "content": "import type { Map } from 'maplibre-gl';\nimport type { InjectionKey, Ref } from 'vue';\n\nconst MapKey: InjectionKey<Ref<Map>> = Symbol('Map');\n\nexport { MapKey };\n"
  },
  {
    "path": "stylelint.config.cjs",
    "content": "module.exports = {\n  plugins: ['stylelint-prettier'],\n  extends: ['stylelint-config-recommended-vue'],\n  ignoreFiles: ['node_modules/*', 'src/assets/**'],\n  rules: {\n    'prettier/prettier': [\n      true,\n      {\n        singleQuote: true,\n        tabWidth: 2,\n      },\n    ],\n  },\n};\n"
  },
  {
    "path": "test/map/VMap.spec.ts",
    "content": "import { test, expect } from 'vitest';\nimport VMap from '../../src/map/VMap.vue';\n\ntest('mount component', async () => {\n  expect(VMap).toBeTruthy();\n});\n"
  },
  {
    "path": "test/markers/VMarker.spec.ts",
    "content": "import { test, expect } from 'vitest';\nimport VMarker from '../../src/markers/VMarker.vue';\n\ntest('mount component', async () => {\n  expect(VMarker).toBeTruthy();\n});\n"
  },
  {
    "path": "test/popups/VPopup.spec.ts",
    "content": "import { test, expect } from 'vitest';\nimport VPopup from '../../src/popups/VPopup.vue';\n\ntest('mount component', async () => {\n  expect(VPopup).toBeTruthy();\n});\n"
  },
  {
    "path": "test/setup/index.ts",
    "content": "import { URL } from 'node:url';\nimport { Blob } from 'buffer';\n\n// @ts-ignore\nglobalThis.URL = URL;\n// https://github.com/vitest-dev/vitest/issues/1377#issuecomment-1141411249\n// @ts-ignore\nglobalThis.Blob = Blob;\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"skipLibCheck\": true,\n    \"lib\": [\"esnext\", \"esnext.asynciterable\", \"dom\"],\n    \"jsx\": \"preserve\",\n    \"outDir\": \"./dist\",\n    \"rootDir\": \"./src\",\n    \"esModuleInterop\": true,\n    \"allowJs\": true,\n    \"sourceMap\": true,\n    \"strict\": true,\n    \"noEmit\": false,\n    \"resolveJsonModule\": true,\n    \"experimentalDecorators\": true,\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"~/*\": [\"./*\"],\n      \"@/*\": [\"./*\"]\n    },\n    \"types\": [\"@types/node\", \"vitest/globals\"]\n  },\n  \"include\": [\"src\"],\n  \"exclude\": [\"node_modules\", \"dist\", \"docs\"]\n}\n"
  },
  {
    "path": "vite-env.d.ts",
    "content": "/// <reference types=\"vite/client\" />\n\ndeclare module '*.vue' {\n  import type { DefineComponent } from 'vue';\n  const component: DefineComponent<{}, {}, any>;\n  export default component;\n}\n"
  },
  {
    "path": "vite.config.ts",
    "content": "import { resolve } from 'node:path';\nimport { defineConfig } from 'vite';\nimport vue from '@vitejs/plugin-vue';\nimport pkg from './package.json';\n\nimport type { OutputOptions, PreRenderedAsset } from 'rollup';\n\nconst banner = `/*!\n* ${pkg.name} v${pkg.version}\n* (c) ${new Date().getFullYear()} ${pkg.author.name}\n* @license ${pkg.license}\n*/`;\n\nconst assetFileNames: OutputOptions['assetFileNames'] = (\n  chunkInfo: PreRenderedAsset,\n): string => {\n  if (chunkInfo.name === 'style.css') return 'v-mapbox.css';\n  return chunkInfo.name || 'v-mapbox.css';\n};\n\nexport default defineConfig({\n  plugins: [vue()],\n  build: {\n    target: 'esnext',\n    minify: 'esbuild',\n    sourcemap: true,\n    lib: {\n      entry: resolve(__dirname, 'src/index.ts'),\n      name: 'VMapbox',\n      formats: ['es', 'cjs', 'umd'],\n      fileName: pkg.name,\n    },\n    commonjsOptions: {\n      extensions: ['.js', '.ts', '.vue'],\n      exclude: 'src/**',\n      include: 'node_modules/**',\n    },\n    rollupOptions: {\n      external: [\n        'vue',\n        'maplibre-gl',\n        '@deck.gl/layers',\n        '@deck.gl/mapbox',\n        '@deck.gl/core',\n      ],\n      output: {\n        exports: 'named',\n        banner,\n        strict: true,\n        globals: {\n          vue: 'vue',\n          'maplibre-gl': 'maplibreGl',\n          '@deck.gl/mapbox': 'deckGlMapbox',\n          '@deck.gl/layers': 'deckGlLayers',\n          '@deck.gl/core': 'deckGlCore',\n        },\n        assetFileNames,\n      },\n    },\n  },\n});\n"
  },
  {
    "path": "vitest.config.ts",
    "content": "/// <reference types=\"vitest\" />\n\nimport { defineConfig } from 'vite';\nimport Vue from '@vitejs/plugin-vue';\n\nexport default defineConfig({\n  plugins: [Vue()],\n  test: {\n    setupFiles: ['./test/setup/index.ts'],\n    globals: true,\n    environment: 'happy-dom',\n  },\n});\n"
  }
]