Showing preview only (245K chars total). Download the full file or copy to clipboard to get everything.
Repository: geospoc/v-mapbox
Branch: main
Commit: c3177730c100
Files: 101
Total size: 221.6 KB
Directory structure:
gitextract_p1oo094f/
├── .browserslistrc
├── .editorconfig
├── .eslintignore
├── .eslintrc.cjs
├── .gitattributes
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ ├── automerger.yml
│ ├── ci.yml
│ ├── codeql.yml
│ ├── ct.yml
│ ├── lint-pr.yml
│ ├── pipeline.yml
│ └── shipjs-trigger.yml
├── .gitignore
├── .husky/
│ ├── commit-msg
│ └── pre-commit
├── .npmrc
├── .nvmrc
├── .vscode/
│ ├── extensions.json
│ └── settings.json
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── bun.lockb
├── commitlint.config.cjs
├── docs/
│ ├── .vitepress/
│ │ └── config.ts
│ ├── api/
│ │ ├── Layers/
│ │ │ ├── canvaslayer.md
│ │ │ ├── geojsonlayer.md
│ │ │ ├── imagelayer.md
│ │ │ ├── index.md
│ │ │ ├── rasterlayer.md
│ │ │ ├── vectorlayer.md
│ │ │ └── videolayer.md
│ │ ├── controls.md
│ │ ├── index.md
│ │ ├── marker.md
│ │ └── popup.md
│ ├── guide/
│ │ ├── basemap.md
│ │ ├── composition.md
│ │ ├── controls.md
│ │ ├── index.md
│ │ ├── layers-and-sources.md
│ │ └── markers-and-popups.md
│ ├── index.md
│ └── plugin-components/
│ ├── index.md
│ └── plugin-components-development.md
├── jsr.json
├── lint-staged.config.cjs
├── netlify.toml
├── package.json
├── prettier.config.cjs
├── scripts/
│ ├── build.sh
│ └── bump-jsr-version.cjs
├── ship.config.cjs
├── src/
│ ├── constants/
│ │ └── events/
│ │ ├── index.ts
│ │ ├── layer.ts
│ │ ├── map.ts
│ │ ├── marker.ts
│ │ └── popup.ts
│ ├── controls/
│ │ ├── attribution/
│ │ │ ├── VControlAttribution.vue
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ │ ├── fullscreen/
│ │ │ ├── VControlFullscreen.vue
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ │ ├── geolocate/
│ │ │ ├── VControlGeolocate.vue
│ │ │ ├── events.ts
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ │ ├── index.ts
│ │ ├── navigation/
│ │ │ ├── VControlNavigation.vue
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ │ └── scale/
│ │ ├── VControlScale.vue
│ │ ├── index.ts
│ │ └── types.ts
│ ├── index.ts
│ ├── layers/
│ │ ├── deck.gl/
│ │ │ ├── VLayerDeckArc.vue
│ │ │ └── VLayerDeckGeojson.vue
│ │ └── mapbox/
│ │ ├── VLayerMapboxCanvas.vue
│ │ ├── VLayerMapboxGeojson.vue
│ │ ├── VLayerMapboxImage.vue
│ │ ├── VLayerMapboxRaster.vue
│ │ ├── VLayerMapboxVector.vue
│ │ └── VLayerMapboxVideo.vue
│ ├── map/
│ │ └── VMap.vue
│ ├── markers/
│ │ └── VMarker.vue
│ ├── popups/
│ │ └── VPopup.vue
│ └── utils/
│ ├── index.ts
│ ├── injects.ts
│ └── symbols.ts
├── stylelint.config.cjs
├── test/
│ ├── map/
│ │ └── VMap.spec.ts
│ ├── markers/
│ │ └── VMarker.spec.ts
│ ├── popups/
│ │ └── VPopup.spec.ts
│ └── setup/
│ └── index.ts
├── tsconfig.json
├── vite-env.d.ts
├── vite.config.ts
└── vitest.config.ts
================================================
FILE CONTENTS
================================================
================================================
FILE: .browserslistrc
================================================
defaults, not IE 11, maintained node versions
================================================
FILE: .editorconfig
================================================
# editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
================================================
FILE: .eslintignore
================================================
node_modules
docs
dist
================================================
FILE: .eslintrc.cjs
================================================
module.exports = {
root: true,
env: {
browser: true,
node: true,
es2022: true,
},
parserOptions: {
parser: '@typescript-eslint/parser',
ecmaVersion: 2022,
sourceType: 'module',
lib: ['es2022'],
ecmaFeatures: {
jsx: true,
tsx: true,
},
extraFileExtensions: ['.vue'],
},
plugins: [
'@typescript-eslint',
'import',
'jsdoc',
'regexp',
'security',
'vue',
'prettier',
],
extends: [
'plugin:@typescript-eslint/recommended',
'plugin:import/recommended',
'plugin:import/typescript',
'plugin:jsdoc/recommended',
'plugin:regexp/recommended',
'plugin:security/recommended',
'plugin:vue/vue3-recommended',
'plugin:prettier/recommended',
'prettier',
],
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'vue/component-tags-order': [
'error',
{
order: ['script[setup]', 'template', 'style[scoped]'],
},
],
},
};
================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: npm
versioning-strategy: increase
directory: '/'
schedule:
interval: daily
time: '00:00'
timezone: Asia/Calcutta
groups:
npm-development:
dependency-type: development
update-types:
- minor
- patch
npm-production:
dependency-type: production
update-types:
- patch
reviewers:
- vinayakkulkarni
assignees:
- vinayakkulkarni
commit-message:
prefix: fix
prefix-development: chore
include: scope
- package-ecosystem: github-actions
directory: '/'
schedule:
interval: daily
time: '00:00'
timezone: Asia/Calcutta
groups:
actions-minor:
update-types:
- minor
- patch
reviewers:
- vinayakkulkarni
assignees:
- vinayakkulkarni
commit-message:
prefix: fix
prefix-development: chore
include: scope
================================================
FILE: .github/workflows/automerger.yml
================================================
name: 'Automerge Dependabot PRs'
on: pull_request_target
permissions:
pull-requests: write
contents: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata 🤖
id: metadata
uses: dependabot/fetch-metadata@v2.1.0
with:
alert-lookup: true
compat-lookup: true
github-token: ${{ secrets.DEPENDABOT_TOKEN }}
- name: Authenticate CLI with PAT 🔐
run: echo "${{ secrets.DEPENDABOT_TOKEN }}" | gh auth login --with-token
- name: Approve Dependabot PRs 👍
run: gh pr review --approve "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GITHUB_TOKEN: ${{ secrets.DEPENDABOT_TOKEN }}
- name: Auto-merge Dependabot PRs 🕺
if: steps.metadata.outputs.update-type == 'version-update:semver-minor' || steps.metadata.outputs.update-type == 'version-update:semver-patch'
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GITHUB_TOKEN: ${{ secrets.DEPENDABOT_TOKEN }}
================================================
FILE: .github/workflows/ci.yml
================================================
name: 'Continuous Integration'
on:
workflow_call:
permissions:
checks: write
contents: read
jobs:
ci:
name: 'CI'
runs-on: ubuntu-latest
steps:
- name: Check out repository 🎉
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Setup bun env 🐰
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: Install dependencies 🚀
run: bun install
- name: Run linter(s) 👀
uses: wearerequired/lint-action@v2
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
continue_on_error: false
git_name: github-actions[bot]
git_email: github-actions[bot]@users.noreply.github.com
auto_fix: false
neutral_check_on_warning: true
stylelint: false
stylelint_extensions: css,scss,vue
eslint: true
eslint_extensions: js,ts,vue
prettier: true
prettier_extensions: js,ts,vue
- name: Build the package 🎉
run: bun run build
================================================
FILE: .github/workflows/codeql.yml
================================================
name: CodeQL
on:
push:
branches:
- main
pull_request:
branches:
- main
schedule:
- cron: '45 23 * * 2'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [javascript]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
queries: +security-and-quality
- name: Autobuild
uses: github/codeql-action/autobuild@v3
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: /language:${{ matrix.language }}
================================================
FILE: .github/workflows/ct.yml
================================================
name: 'Continuous Testing'
on:
workflow_call:
permissions:
checks: write
contents: read
jobs:
ct:
name: 'CT'
runs-on: ubuntu-latest
steps:
- name: Check out repository 🎉
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Setup bun env 🐰
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: Install dependencies 🚀
run: bun install
- name: Run tests 🧪
run: bun run test
- name: Run coverage 🧪
run: bun run test:coverage
================================================
FILE: .github/workflows/lint-pr.yml
================================================
name: 'Lint PR'
on:
pull_request_target:
types:
- opened
- edited
- synchronize
jobs:
validate-pr-title:
name: Validate PR title
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@v5.5.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
check-sign-off:
if: startsWith(github.head_ref, 'releases/v') == false
name: Write comment if unsigned commits found
env:
FORCE_COLOR: 1
runs-on: ubuntu-latest
steps:
- uses: live627/check-pr-signoff-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/pipeline.yml
================================================
name: 'The Pipeline'
on:
push:
branches:
- main
pull_request:
branches:
- main
concurrency:
group: ci-${{ github.ref }}-1
cancel-in-progress: true
jobs:
extract-branch:
name: 'Fetch branch'
runs-on: ubuntu-latest
outputs:
current_branch: ${{ steps.get-branch.outputs.current_branch }}
steps:
- name: Extract branch name 🕊
id: get-branch
run: echo "current_branch=${GITHUB_REF##*/}" >> $GITHUB_OUTPUT
ci:
name: 'CI'
needs:
- extract-branch
uses: ./.github/workflows/ci.yml
ct:
name: 'CT'
needs:
- extract-branch
uses: ./.github/workflows/ct.yml
================================================
FILE: .github/workflows/shipjs-trigger.yml
================================================
name: Ship js trigger
on:
pull_request:
types:
- closed
jobs:
publish-to-npm:
name: 'Publishing to NPM ✨'
runs-on: ubuntu-latest
if: github.event.pull_request.merged == true && startsWith(github.head_ref, 'releases/v')
steps:
- name: Checkout code 🛎
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: main
- name: Setup GitHub Actor
run: |
git config --global user.email "action@github.com"
git config --global user.name "GitHub Action"
- name: Setup bun env 🐰
uses: oven-sh/setup-bun@v1
with:
bun-version: 1.0.25+a8ff7be64
- name: Install dependencies 🚀
run: bun install
- name: Trigger a release (NPM) 🥳
run: bunx shipjs trigger
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
SLACK_INCOMING_HOOK: ${{ secrets.SLACK_INCOMING_HOOK }}
publish-to-jsr:
name: 'Publishing to JSR ✨'
runs-on: ubuntu-latest
needs: publish-to-npm
permissions:
contents: read
id-token: write
steps:
- name: Checkout code 🛎
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: main
- name: Setup bun env 🐰
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: Install dependencies 🚀
run: bun install
- name: Build the package 🎉
run: bun run build
- name: Trigger a release (JSR) 🥳
run: bunx jsr publish
================================================
FILE: .gitignore
================================================
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# TypeScript v1 declaration files
typings/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
.env.test
# parcel-bundler cache (https://parceljs.org/)
.cache
# Next.js build output
.next
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and *not* Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
.DS_Store
.temp
cache/
================================================
FILE: .husky/commit-msg
================================================
NAME=$(git config user.name)
EMAIL=$(git config user.email)
if [ -z "$NAME" ]; then
echo "empty git config user.name"
exit 1
fi
if [ -z "$EMAIL" ]; then
echo "empty git config user.email"
exit 1
fi
git interpret-trailers --if-exists doNothing --trailer \
"Signed-off-by: $NAME <$EMAIL>" \
--in-place "$1"
bun commitlint --edit $1
================================================
FILE: .husky/pre-commit
================================================
bun lint-staged --no-stash
================================================
FILE: .npmrc
================================================
registry=https://registry.npmjs.org
@jsr:registry=https://npm.jsr.io
================================================
FILE: .nvmrc
================================================
20
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"Vue.volar",
"Vue.vscode-typescript-vue-plugin"
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"files.eol": "\n",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll": "explicit"
},
}
================================================
FILE: CHANGELOG.md
================================================
# [5.1.0](https://github.com/geospoc/v-mapbox/compare/v5.0.0...v5.1.0) (2024-05-19)
## 5.0.0 (2024-02-05)
* chore: update job name in CT workflow ([e97fedf](https://github.com/geospoc/v-mapbox/commit/e97fedf))
* chore: upgrade vite 5.x 🤷♂️ ([646ec36](https://github.com/geospoc/v-mapbox/commit/646ec36))
* chore(deps-dev): bump @babel/core from 7.21.0 to 7.21.3 ([f1a692e](https://github.com/geospoc/v-mapbox/commit/f1a692e))
* chore(deps-dev): Bump @babel/core from 7.21.3 to 7.21.4 ([ab57f85](https://github.com/geospoc/v-mapbox/commit/ab57f85))
* chore(deps-dev): bump @babel/core from 7.21.4 to 7.21.5 ([9ac94ac](https://github.com/geospoc/v-mapbox/commit/9ac94ac))
* chore(deps-dev): bump @babel/core from 7.21.5 to 7.21.8 ([96edaa5](https://github.com/geospoc/v-mapbox/commit/96edaa5))
* chore(deps-dev): bump @babel/core from 7.21.8 to 7.22.1 ([95881df](https://github.com/geospoc/v-mapbox/commit/95881df))
* chore(deps-dev): bump @babel/core from 7.22.1 to 7.22.5 ([2de4173](https://github.com/geospoc/v-mapbox/commit/2de4173))
* chore(deps-dev): bump @babel/core from 7.22.5 to 7.22.6 ([e403a13](https://github.com/geospoc/v-mapbox/commit/e403a13))
* chore(deps-dev): bump @babel/core from 7.22.6 to 7.22.9 ([300a209](https://github.com/geospoc/v-mapbox/commit/300a209))
* chore(deps-dev): bump @babel/core from 7.22.9 to 7.22.10 ([01cad36](https://github.com/geospoc/v-mapbox/commit/01cad36))
* chore(deps-dev): bump @babel/traverse from 7.22.10 to 7.23.2 ([015630b](https://github.com/geospoc/v-mapbox/commit/015630b))
* chore(deps-dev): Bump @commitlint/cli from 17.4.4 to 17.5.0 ([1e9dafc](https://github.com/geospoc/v-mapbox/commit/1e9dafc))
* chore(deps-dev): Bump @commitlint/cli from 17.5.0 to 17.5.1 ([2951d45](https://github.com/geospoc/v-mapbox/commit/2951d45))
* chore(deps-dev): bump @commitlint/cli from 17.5.1 to 17.6.1 ([a33a9f0](https://github.com/geospoc/v-mapbox/commit/a33a9f0))
* chore(deps-dev): bump @commitlint/cli from 17.6.1 to 17.6.3 ([a524e17](https://github.com/geospoc/v-mapbox/commit/a524e17))
* chore(deps-dev): bump @commitlint/cli from 17.6.3 to 17.6.5 ([f44630e](https://github.com/geospoc/v-mapbox/commit/f44630e))
* chore(deps-dev): bump @commitlint/cli from 17.6.5 to 17.6.6 ([6be3a51](https://github.com/geospoc/v-mapbox/commit/6be3a51))
* chore(deps-dev): bump @commitlint/cli from 17.6.6 to 17.6.7 ([2e3d55e](https://github.com/geospoc/v-mapbox/commit/2e3d55e))
* chore(deps-dev): bump @commitlint/cli from 17.6.7 to 17.7.1 ([d676131](https://github.com/geospoc/v-mapbox/commit/d676131))
* chore(deps-dev): bump @commitlint/config-conventional ([222c846](https://github.com/geospoc/v-mapbox/commit/222c846))
* chore(deps-dev): bump @commitlint/config-conventional ([0786904](https://github.com/geospoc/v-mapbox/commit/0786904))
* chore(deps-dev): bump @commitlint/config-conventional ([46ffc63](https://github.com/geospoc/v-mapbox/commit/46ffc63))
* chore(deps-dev): bump @commitlint/config-conventional ([447be7d](https://github.com/geospoc/v-mapbox/commit/447be7d))
* chore(deps-dev): bump @commitlint/config-conventional ([0900fe6](https://github.com/geospoc/v-mapbox/commit/0900fe6))
* chore(deps-dev): bump @commitlint/config-conventional ([6f46221](https://github.com/geospoc/v-mapbox/commit/6f46221))
* chore(deps-dev): bump @commitlint/config-conventional ([e93b71a](https://github.com/geospoc/v-mapbox/commit/e93b71a))
* chore(deps-dev): Bump @types/node from 18.15.10 to 18.15.11 ([7315cce](https://github.com/geospoc/v-mapbox/commit/7315cce))
* chore(deps-dev): bump @types/node from 18.15.11 to 18.16.0 ([96f5087](https://github.com/geospoc/v-mapbox/commit/96f5087))
* chore(deps-dev): Bump @types/node from 18.15.3 to 18.15.5 ([55601f2](https://github.com/geospoc/v-mapbox/commit/55601f2))
* chore(deps-dev): Bump @types/node from 18.15.5 to 18.15.10 ([d71cb63](https://github.com/geospoc/v-mapbox/commit/d71cb63))
* chore(deps-dev): bump @types/node from 18.16.0 to 18.16.1 ([c25e209](https://github.com/geospoc/v-mapbox/commit/c25e209))
* chore(deps-dev): bump @types/node from 18.16.1 to 18.16.3 ([31b398e](https://github.com/geospoc/v-mapbox/commit/31b398e))
* chore(deps-dev): bump @types/node from 18.16.3 to 20.1.0 ([dc5f660](https://github.com/geospoc/v-mapbox/commit/dc5f660))
* chore(deps-dev): bump @types/node from 20.1.0 to 20.1.1 ([92decf1](https://github.com/geospoc/v-mapbox/commit/92decf1))
* chore(deps-dev): bump @types/node from 20.1.1 to 20.1.3 ([fa026ac](https://github.com/geospoc/v-mapbox/commit/fa026ac))
* chore(deps-dev): bump @types/node from 20.1.3 to 20.1.4 ([f062043](https://github.com/geospoc/v-mapbox/commit/f062043))
* chore(deps-dev): bump @types/node from 20.1.4 to 20.1.6 ([bcc89b7](https://github.com/geospoc/v-mapbox/commit/bcc89b7))
* chore(deps-dev): bump @types/node from 20.1.6 to 20.1.7 ([2b4898c](https://github.com/geospoc/v-mapbox/commit/2b4898c))
* chore(deps-dev): bump @types/node from 20.1.7 to 20.2.1 ([9b4faf5](https://github.com/geospoc/v-mapbox/commit/9b4faf5))
* chore(deps-dev): bump @types/node from 20.2.1 to 20.2.3 ([3a1e684](https://github.com/geospoc/v-mapbox/commit/3a1e684))
* chore(deps-dev): bump @types/node from 20.2.3 to 20.2.5 ([5268ed0](https://github.com/geospoc/v-mapbox/commit/5268ed0))
* chore(deps-dev): bump @types/node from 20.2.5 to 20.3.0 ([03983e0](https://github.com/geospoc/v-mapbox/commit/03983e0))
* chore(deps-dev): bump @types/node from 20.3.0 to 20.3.1 ([fb6b166](https://github.com/geospoc/v-mapbox/commit/fb6b166))
* chore(deps-dev): bump @types/node from 20.3.1 to 20.3.2 ([d4cbbda](https://github.com/geospoc/v-mapbox/commit/d4cbbda))
* chore(deps-dev): bump @types/node from 20.3.2 to 20.3.3 ([995da01](https://github.com/geospoc/v-mapbox/commit/995da01))
* chore(deps-dev): bump @types/node from 20.3.3 to 20.4.1 ([8f48cee](https://github.com/geospoc/v-mapbox/commit/8f48cee))
* chore(deps-dev): bump @types/node from 20.4.1 to 20.4.6 ([ba901b2](https://github.com/geospoc/v-mapbox/commit/ba901b2))
* chore(deps-dev): bump @types/node from 20.4.6 to 20.4.9 ([b1091fc](https://github.com/geospoc/v-mapbox/commit/b1091fc))
* chore(deps-dev): bump @types/node from 20.4.9 to 20.5.0 ([19b6916](https://github.com/geospoc/v-mapbox/commit/19b6916))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([177fd8f](https://github.com/geospoc/v-mapbox/commit/177fd8f))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([d11c2bf](https://github.com/geospoc/v-mapbox/commit/d11c2bf))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([d78ac8a](https://github.com/geospoc/v-mapbox/commit/d78ac8a))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([4b5cc2f](https://github.com/geospoc/v-mapbox/commit/4b5cc2f))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([d869762](https://github.com/geospoc/v-mapbox/commit/d869762))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([9d8e4e8](https://github.com/geospoc/v-mapbox/commit/9d8e4e8))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([770ef42](https://github.com/geospoc/v-mapbox/commit/770ef42))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([dd17ab0](https://github.com/geospoc/v-mapbox/commit/dd17ab0))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([b573cd3](https://github.com/geospoc/v-mapbox/commit/b573cd3))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([ac66d13](https://github.com/geospoc/v-mapbox/commit/ac66d13))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([d3ed528](https://github.com/geospoc/v-mapbox/commit/d3ed528))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([e375df1](https://github.com/geospoc/v-mapbox/commit/e375df1))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([5ac6d80](https://github.com/geospoc/v-mapbox/commit/5ac6d80))
* chore(deps-dev): bump @typescript-eslint/eslint-plugin ([01aa107](https://github.com/geospoc/v-mapbox/commit/01aa107))
* chore(deps-dev): Bump @typescript-eslint/eslint-plugin ([50c2412](https://github.com/geospoc/v-mapbox/commit/50c2412))
* chore(deps-dev): Bump @typescript-eslint/eslint-plugin ([9590776](https://github.com/geospoc/v-mapbox/commit/9590776))
* chore(deps-dev): bump @typescript-eslint/parser from 5.55.0 to 5.56.0 ([1cea8d2](https://github.com/geospoc/v-mapbox/commit/1cea8d2))
* chore(deps-dev): Bump @typescript-eslint/parser from 5.56.0 to 5.57.0 ([e0d95ae](https://github.com/geospoc/v-mapbox/commit/e0d95ae))
* chore(deps-dev): Bump @typescript-eslint/parser from 5.57.0 to 5.57.1 ([41fa1d0](https://github.com/geospoc/v-mapbox/commit/41fa1d0))
* chore(deps-dev): bump @typescript-eslint/parser from 5.57.1 to 5.58.0 ([58cfbb0](https://github.com/geospoc/v-mapbox/commit/58cfbb0))
* chore(deps-dev): bump @typescript-eslint/parser from 5.58.0 to 5.59.0 ([e8d09d4](https://github.com/geospoc/v-mapbox/commit/e8d09d4))
* chore(deps-dev): bump @typescript-eslint/parser from 5.59.0 to 5.59.1 ([f4cdcac](https://github.com/geospoc/v-mapbox/commit/f4cdcac))
* chore(deps-dev): bump @typescript-eslint/parser from 5.59.1 to 5.59.2 ([4cab3ac](https://github.com/geospoc/v-mapbox/commit/4cab3ac))
* chore(deps-dev): bump @typescript-eslint/parser from 5.59.11 to 5.60.0 ([6955225](https://github.com/geospoc/v-mapbox/commit/6955225))
* chore(deps-dev): bump @typescript-eslint/parser from 5.59.2 to 5.59.5 ([471b496](https://github.com/geospoc/v-mapbox/commit/471b496))
* chore(deps-dev): bump @typescript-eslint/parser from 5.59.5 to 5.59.6 ([1d65133](https://github.com/geospoc/v-mapbox/commit/1d65133))
* chore(deps-dev): bump @typescript-eslint/parser from 5.59.6 to 5.59.7 ([063ce93](https://github.com/geospoc/v-mapbox/commit/063ce93))
* chore(deps-dev): bump @typescript-eslint/parser from 5.59.7 to 5.59.8 ([3ff3784](https://github.com/geospoc/v-mapbox/commit/3ff3784))
* chore(deps-dev): bump @typescript-eslint/parser from 5.59.8 to 5.59.9 ([daeb00e](https://github.com/geospoc/v-mapbox/commit/daeb00e))
* chore(deps-dev): bump @typescript-eslint/parser from 5.59.9 to 5.59.11 ([8b6ba1b](https://github.com/geospoc/v-mapbox/commit/8b6ba1b))
* chore(deps-dev): bump @typescript-eslint/parser from 5.60.0 to 5.60.1 ([b17e441](https://github.com/geospoc/v-mapbox/commit/b17e441))
* chore(deps-dev): bump @typescript-eslint/parser from 5.60.1 to 5.61.0 ([52a4f0d](https://github.com/geospoc/v-mapbox/commit/52a4f0d))
* chore(deps-dev): bump @typescript-eslint/parser from 5.61.0 to 5.62.0 ([7efccd1](https://github.com/geospoc/v-mapbox/commit/7efccd1))
* chore(deps-dev): bump @vitejs/plugin-vue from 4.0.0 to 4.1.0 ([8742dc5](https://github.com/geospoc/v-mapbox/commit/8742dc5))
* chore(deps-dev): bump @vitejs/plugin-vue from 4.1.0 to 4.2.0 ([eb52d54](https://github.com/geospoc/v-mapbox/commit/eb52d54))
* chore(deps-dev): bump @vitejs/plugin-vue from 4.2.0 to 4.2.1 ([a1ebd35](https://github.com/geospoc/v-mapbox/commit/a1ebd35))
* chore(deps-dev): bump @vitejs/plugin-vue from 4.2.1 to 4.2.3 ([0d4eae2](https://github.com/geospoc/v-mapbox/commit/0d4eae2))
* chore(deps-dev): bump @vitest/coverage-c8 from 0.29.2 to 0.29.3 ([72ebf09](https://github.com/geospoc/v-mapbox/commit/72ebf09))
* chore(deps-dev): Bump @vitest/coverage-c8 from 0.29.3 to 0.29.7 ([3723ad0](https://github.com/geospoc/v-mapbox/commit/3723ad0))
* chore(deps-dev): Bump @vitest/coverage-c8 from 0.29.7 to 0.29.8 ([79cbbc2](https://github.com/geospoc/v-mapbox/commit/79cbbc2))
* chore(deps-dev): bump @vitest/coverage-c8 from 0.29.8 to 0.30.1 ([0f132af](https://github.com/geospoc/v-mapbox/commit/0f132af))
* chore(deps-dev): bump @vitest/coverage-c8 from 0.30.1 to 0.31.0 ([05e7aa5](https://github.com/geospoc/v-mapbox/commit/05e7aa5))
* chore(deps-dev): bump @vitest/coverage-c8 from 0.31.0 to 0.31.1 ([ca31b1a](https://github.com/geospoc/v-mapbox/commit/ca31b1a))
* chore(deps-dev): bump @vitest/coverage-c8 from 0.31.1 to 0.31.2 ([8e4808a](https://github.com/geospoc/v-mapbox/commit/8e4808a))
* chore(deps-dev): bump @vitest/coverage-c8 from 0.31.2 to 0.31.4 ([77b4647](https://github.com/geospoc/v-mapbox/commit/77b4647))
* chore(deps-dev): bump @vitest/coverage-c8 from 0.31.4 to 0.32.0 ([d20530a](https://github.com/geospoc/v-mapbox/commit/d20530a))
* chore(deps-dev): bump @vitest/coverage-c8 from 0.32.0 to 0.32.2 ([7737c46](https://github.com/geospoc/v-mapbox/commit/7737c46))
* chore(deps-dev): bump @vitest/coverage-c8 from 0.32.2 to 0.32.4 ([30aee4f](https://github.com/geospoc/v-mapbox/commit/30aee4f))
* chore(deps-dev): bump @vitest/coverage-c8 from 0.32.4 to 0.33.0 ([5d8b1ed](https://github.com/geospoc/v-mapbox/commit/5d8b1ed))
* chore(deps-dev): Bump eslint from 8.36.0 to 8.37.0 ([b92ee5c](https://github.com/geospoc/v-mapbox/commit/b92ee5c))
* chore(deps-dev): bump eslint from 8.37.0 to 8.38.0 ([b31bc69](https://github.com/geospoc/v-mapbox/commit/b31bc69))
* chore(deps-dev): bump eslint from 8.38.0 to 8.39.0 ([e733c7b](https://github.com/geospoc/v-mapbox/commit/e733c7b))
* chore(deps-dev): bump eslint from 8.39.0 to 8.40.0 ([ab3482e](https://github.com/geospoc/v-mapbox/commit/ab3482e))
* chore(deps-dev): bump eslint from 8.40.0 to 8.41.0 ([8ca0d5b](https://github.com/geospoc/v-mapbox/commit/8ca0d5b))
* chore(deps-dev): bump eslint from 8.41.0 to 8.42.0 ([19b7d5e](https://github.com/geospoc/v-mapbox/commit/19b7d5e))
* chore(deps-dev): bump eslint from 8.42.0 to 8.43.0 ([bd9a749](https://github.com/geospoc/v-mapbox/commit/bd9a749))
* chore(deps-dev): bump eslint from 8.43.0 to 8.44.0 ([305cb6a](https://github.com/geospoc/v-mapbox/commit/305cb6a))
* chore(deps-dev): bump eslint from 8.44.0 to 8.45.0 ([5e711b9](https://github.com/geospoc/v-mapbox/commit/5e711b9))
* chore(deps-dev): bump eslint from 8.45.0 to 8.46.0 ([64c1ac2](https://github.com/geospoc/v-mapbox/commit/64c1ac2))
* chore(deps-dev): bump eslint from 8.46.0 to 8.47.0 ([a61d493](https://github.com/geospoc/v-mapbox/commit/a61d493))
* chore(deps-dev): bump eslint-config-prettier from 8.7.0 to 8.8.0 ([096f12f](https://github.com/geospoc/v-mapbox/commit/096f12f))
* chore(deps-dev): bump eslint-plugin-jsdoc from 40.0.2 to 40.0.3 ([de47831](https://github.com/geospoc/v-mapbox/commit/de47831))
* chore(deps-dev): bump eslint-plugin-jsdoc from 40.0.3 to 40.1.0 ([9994a52](https://github.com/geospoc/v-mapbox/commit/9994a52))
* chore(deps-dev): Bump eslint-plugin-jsdoc from 40.1.0 to 40.1.1 ([e5a4d7e](https://github.com/geospoc/v-mapbox/commit/e5a4d7e))
* chore(deps-dev): bump eslint-plugin-jsdoc from 40.1.1 to 43.0.7 ([f4c8ef5](https://github.com/geospoc/v-mapbox/commit/f4c8ef5))
* chore(deps-dev): bump eslint-plugin-jsdoc from 43.0.7 to 43.1.1 ([4a9fb94](https://github.com/geospoc/v-mapbox/commit/4a9fb94))
* chore(deps-dev): bump eslint-plugin-jsdoc from 43.1.1 to 44.0.0 ([b53a569](https://github.com/geospoc/v-mapbox/commit/b53a569))
* chore(deps-dev): bump eslint-plugin-jsdoc from 44.0.0 to 44.0.2 ([4421023](https://github.com/geospoc/v-mapbox/commit/4421023))
* chore(deps-dev): bump eslint-plugin-jsdoc from 44.0.2 to 44.2.3 ([f8ce482](https://github.com/geospoc/v-mapbox/commit/f8ce482))
* chore(deps-dev): bump eslint-plugin-jsdoc from 44.2.3 to 44.2.4 ([2046db1](https://github.com/geospoc/v-mapbox/commit/2046db1))
* chore(deps-dev): bump eslint-plugin-jsdoc from 44.2.4 to 44.2.5 ([8a94259](https://github.com/geospoc/v-mapbox/commit/8a94259))
* chore(deps-dev): bump eslint-plugin-jsdoc from 44.2.5 to 46.1.0 ([d993437](https://github.com/geospoc/v-mapbox/commit/d993437))
* chore(deps-dev): bump eslint-plugin-jsdoc from 46.1.0 to 46.2.3 ([7f1bf4a](https://github.com/geospoc/v-mapbox/commit/7f1bf4a))
* chore(deps-dev): bump eslint-plugin-jsdoc from 46.2.3 to 46.2.4 ([29fc3cb](https://github.com/geospoc/v-mapbox/commit/29fc3cb))
* chore(deps-dev): bump eslint-plugin-jsdoc from 46.2.4 to 46.2.5 ([a28d3cf](https://github.com/geospoc/v-mapbox/commit/a28d3cf))
* chore(deps-dev): bump eslint-plugin-jsdoc from 46.2.5 to 46.2.6 ([97a56ce](https://github.com/geospoc/v-mapbox/commit/97a56ce))
* chore(deps-dev): bump eslint-plugin-jsdoc from 46.2.6 to 46.3.0 ([e482e29](https://github.com/geospoc/v-mapbox/commit/e482e29))
* chore(deps-dev): bump eslint-plugin-jsdoc from 46.3.0 to 46.4.0 ([9946350](https://github.com/geospoc/v-mapbox/commit/9946350))
* chore(deps-dev): bump eslint-plugin-jsdoc from 46.4.0 to 46.4.2 ([1269495](https://github.com/geospoc/v-mapbox/commit/1269495))
* chore(deps-dev): bump eslint-plugin-jsdoc from 46.4.2 to 46.4.3 ([5fc3b09](https://github.com/geospoc/v-mapbox/commit/5fc3b09))
* chore(deps-dev): bump eslint-plugin-jsdoc from 46.4.3 to 46.4.4 ([e3b655a](https://github.com/geospoc/v-mapbox/commit/e3b655a))
* chore(deps-dev): bump eslint-plugin-jsdoc from 46.4.4 to 46.4.6 ([de2dd46](https://github.com/geospoc/v-mapbox/commit/de2dd46))
* chore(deps-dev): bump eslint-plugin-vue from 9.10.0 to 9.11.0 ([fde5108](https://github.com/geospoc/v-mapbox/commit/fde5108))
* chore(deps-dev): bump eslint-plugin-vue from 9.11.0 to 9.11.1 ([1dd12be](https://github.com/geospoc/v-mapbox/commit/1dd12be))
* chore(deps-dev): bump eslint-plugin-vue from 9.11.1 to 9.12.0 ([5d2897d](https://github.com/geospoc/v-mapbox/commit/5d2897d))
* chore(deps-dev): bump eslint-plugin-vue from 9.12.0 to 9.13.0 ([7989181](https://github.com/geospoc/v-mapbox/commit/7989181))
* chore(deps-dev): bump eslint-plugin-vue from 9.13.0 to 9.14.0 ([e4bb5ce](https://github.com/geospoc/v-mapbox/commit/e4bb5ce))
* chore(deps-dev): bump eslint-plugin-vue from 9.14.0 to 9.14.1 ([7ec0eb3](https://github.com/geospoc/v-mapbox/commit/7ec0eb3))
* chore(deps-dev): bump eslint-plugin-vue from 9.14.1 to 9.15.0 ([0feb03c](https://github.com/geospoc/v-mapbox/commit/0feb03c))
* chore(deps-dev): bump eslint-plugin-vue from 9.15.0 to 9.15.1 ([6a916bd](https://github.com/geospoc/v-mapbox/commit/6a916bd))
* chore(deps-dev): bump eslint-plugin-vue from 9.15.1 to 9.17.0 ([66b51f4](https://github.com/geospoc/v-mapbox/commit/66b51f4))
* chore(deps-dev): Bump eslint-plugin-vue from 9.9.0 to 9.10.0 ([4ec88df](https://github.com/geospoc/v-mapbox/commit/4ec88df))
* chore(deps-dev): bump follow-redirects from 1.15.2 to 1.15.4 ([130efd5](https://github.com/geospoc/v-mapbox/commit/130efd5))
* chore(deps-dev): bump happy-dom from 8.9.0 to 9.3.0 ([07a4a7d](https://github.com/geospoc/v-mapbox/commit/07a4a7d))
* chore(deps-dev): bump happy-dom from 9.10.1 to 9.10.9 ([d3039f0](https://github.com/geospoc/v-mapbox/commit/d3039f0))
* chore(deps-dev): bump happy-dom from 9.10.9 to 9.18.3 ([406ad43](https://github.com/geospoc/v-mapbox/commit/406ad43))
* chore(deps-dev): bump happy-dom from 9.18.3 to 9.19.1 ([3808ed8](https://github.com/geospoc/v-mapbox/commit/3808ed8))
* chore(deps-dev): bump happy-dom from 9.19.1 to 9.19.2 ([4a48b9f](https://github.com/geospoc/v-mapbox/commit/4a48b9f))
* chore(deps-dev): bump happy-dom from 9.19.2 to 9.20.1 ([de1f368](https://github.com/geospoc/v-mapbox/commit/de1f368))
* chore(deps-dev): bump happy-dom from 9.20.1 to 9.20.3 ([07812e4](https://github.com/geospoc/v-mapbox/commit/07812e4))
* chore(deps-dev): bump happy-dom from 9.3.0 to 9.5.0 ([87e5ce2](https://github.com/geospoc/v-mapbox/commit/87e5ce2))
* chore(deps-dev): bump happy-dom from 9.5.0 to 9.7.1 ([eaec673](https://github.com/geospoc/v-mapbox/commit/eaec673))
* chore(deps-dev): bump happy-dom from 9.7.1 to 9.8.0 ([5029dfc](https://github.com/geospoc/v-mapbox/commit/5029dfc))
* chore(deps-dev): bump happy-dom from 9.8.0 to 9.8.1 ([c4a3bd4](https://github.com/geospoc/v-mapbox/commit/c4a3bd4))
* chore(deps-dev): bump happy-dom from 9.8.1 to 9.8.3 ([0a470b2](https://github.com/geospoc/v-mapbox/commit/0a470b2))
* chore(deps-dev): bump happy-dom from 9.8.3 to 9.8.4 ([93445f9](https://github.com/geospoc/v-mapbox/commit/93445f9))
* chore(deps-dev): bump happy-dom from 9.8.4 to 9.9.2 ([52254c9](https://github.com/geospoc/v-mapbox/commit/52254c9))
* chore(deps-dev): bump happy-dom from 9.9.2 to 9.10.1 ([3f74175](https://github.com/geospoc/v-mapbox/commit/3f74175))
* chore(deps-dev): bump lint-staged from 13.2.0 to 13.2.1 ([9b35a8e](https://github.com/geospoc/v-mapbox/commit/9b35a8e))
* chore(deps-dev): bump lint-staged from 13.2.1 to 13.2.2 ([579d12e](https://github.com/geospoc/v-mapbox/commit/579d12e))
* chore(deps-dev): bump lint-staged from 13.2.2 to 13.2.3 ([5e7e280](https://github.com/geospoc/v-mapbox/commit/5e7e280))
* chore(deps-dev): bump prettier from 2.8.4 to 2.8.5 ([1ca472e](https://github.com/geospoc/v-mapbox/commit/1ca472e))
* chore(deps-dev): bump prettier from 2.8.5 to 2.8.6 ([e4caa93](https://github.com/geospoc/v-mapbox/commit/e4caa93))
* chore(deps-dev): Bump prettier from 2.8.6 to 2.8.7 ([57ac7dd](https://github.com/geospoc/v-mapbox/commit/57ac7dd))
* chore(deps-dev): bump prettier from 2.8.7 to 2.8.8 ([7b3bacd](https://github.com/geospoc/v-mapbox/commit/7b3bacd))
* chore(deps-dev): Bump rimraf from 4.4.0 to 4.4.1 ([fff01a4](https://github.com/geospoc/v-mapbox/commit/fff01a4))
* chore(deps-dev): bump rimraf from 4.4.1 to 5.0.0 ([805b39b](https://github.com/geospoc/v-mapbox/commit/805b39b))
* chore(deps-dev): bump rimraf from 5.0.0 to 5.0.1 ([70cb06c](https://github.com/geospoc/v-mapbox/commit/70cb06c))
* chore(deps-dev): bump sass from 1.59.2 to 1.59.3 ([2723676](https://github.com/geospoc/v-mapbox/commit/2723676))
* chore(deps-dev): Bump sass from 1.59.3 to 1.60.0 ([e79e278](https://github.com/geospoc/v-mapbox/commit/e79e278))
* chore(deps-dev): bump sass from 1.60.0 to 1.61.0 ([3271857](https://github.com/geospoc/v-mapbox/commit/3271857))
* chore(deps-dev): bump sass from 1.61.0 to 1.62.0 ([2dcd565](https://github.com/geospoc/v-mapbox/commit/2dcd565))
* chore(deps-dev): bump sass from 1.62.0 to 1.62.1 ([7eb601d](https://github.com/geospoc/v-mapbox/commit/7eb601d))
* chore(deps-dev): bump sass from 1.62.1 to 1.63.2 ([f0d08e3](https://github.com/geospoc/v-mapbox/commit/f0d08e3))
* chore(deps-dev): bump sass from 1.63.2 to 1.63.3 ([d8b118f](https://github.com/geospoc/v-mapbox/commit/d8b118f))
* chore(deps-dev): bump sass from 1.63.3 to 1.63.4 ([90bd786](https://github.com/geospoc/v-mapbox/commit/90bd786))
* chore(deps-dev): bump sass from 1.63.4 to 1.63.5 ([db65359](https://github.com/geospoc/v-mapbox/commit/db65359))
* chore(deps-dev): bump sass from 1.63.5 to 1.63.6 ([da10a78](https://github.com/geospoc/v-mapbox/commit/da10a78))
* chore(deps-dev): bump sass from 1.63.6 to 1.64.1 ([50b1e44](https://github.com/geospoc/v-mapbox/commit/50b1e44))
* chore(deps-dev): bump shipjs from 0.25.1 to 0.26.0 ([6c61dd8](https://github.com/geospoc/v-mapbox/commit/6c61dd8))
* chore(deps-dev): bump shipjs from 0.26.0 to 0.26.1 ([f18e757](https://github.com/geospoc/v-mapbox/commit/f18e757))
* chore(deps-dev): Bump shipjs from 0.26.1 to 0.26.2 ([27a34cf](https://github.com/geospoc/v-mapbox/commit/27a34cf))
* chore(deps-dev): bump shipjs from 0.26.2 to 0.26.3 ([62fe546](https://github.com/geospoc/v-mapbox/commit/62fe546))
* chore(deps-dev): bump stylelint from 15.10.0 to 15.10.1 ([4feaadc](https://github.com/geospoc/v-mapbox/commit/4feaadc))
* chore(deps-dev): bump stylelint from 15.10.1 to 15.10.2 ([08afefd](https://github.com/geospoc/v-mapbox/commit/08afefd))
* chore(deps-dev): bump stylelint from 15.2.0 to 15.3.0 ([9d36b99](https://github.com/geospoc/v-mapbox/commit/9d36b99))
* chore(deps-dev): Bump stylelint from 15.3.0 to 15.4.0 ([e8d9f59](https://github.com/geospoc/v-mapbox/commit/e8d9f59))
* chore(deps-dev): bump stylelint from 15.4.0 to 15.5.0 ([3612d12](https://github.com/geospoc/v-mapbox/commit/3612d12))
* chore(deps-dev): bump stylelint from 15.5.0 to 15.6.0 ([48b4fdb](https://github.com/geospoc/v-mapbox/commit/48b4fdb))
* chore(deps-dev): bump stylelint from 15.6.0 to 15.6.1 ([cfe104e](https://github.com/geospoc/v-mapbox/commit/cfe104e))
* chore(deps-dev): bump stylelint from 15.6.1 to 15.6.2 ([aefb1f8](https://github.com/geospoc/v-mapbox/commit/aefb1f8))
* chore(deps-dev): bump stylelint from 15.6.2 to 15.6.3 ([317d11f](https://github.com/geospoc/v-mapbox/commit/317d11f))
* chore(deps-dev): bump stylelint from 15.6.3 to 15.7.0 ([8eeda99](https://github.com/geospoc/v-mapbox/commit/8eeda99))
* chore(deps-dev): bump stylelint from 15.7.0 to 15.8.0 ([db07462](https://github.com/geospoc/v-mapbox/commit/db07462))
* chore(deps-dev): bump stylelint from 15.8.0 to 15.9.0 ([ab1fbe1](https://github.com/geospoc/v-mapbox/commit/ab1fbe1))
* chore(deps-dev): bump stylelint from 15.9.0 to 15.10.0 ([39a8577](https://github.com/geospoc/v-mapbox/commit/39a8577))
* chore(deps-dev): bump stylelint-config-recommended-vue ([72321a9](https://github.com/geospoc/v-mapbox/commit/72321a9))
* chore(deps-dev): bump typescript from 4.9.5 to 5.0.4 ([6e81a0a](https://github.com/geospoc/v-mapbox/commit/6e81a0a))
* chore(deps-dev): bump typescript from 5.0.4 to 5.1.3 ([d30f879](https://github.com/geospoc/v-mapbox/commit/d30f879))
* chore(deps-dev): bump typescript from 5.1.3 to 5.1.5 ([3ddf370](https://github.com/geospoc/v-mapbox/commit/3ddf370))
* chore(deps-dev): bump typescript from 5.1.5 to 5.1.6 ([0821fe8](https://github.com/geospoc/v-mapbox/commit/0821fe8))
* chore(deps-dev): bump vite from 4.1.4 to 4.2.0 ([6a6d430](https://github.com/geospoc/v-mapbox/commit/6a6d430))
* chore(deps-dev): bump vite from 4.2.0 to 4.2.1 ([b0c08c1](https://github.com/geospoc/v-mapbox/commit/b0c08c1))
* chore(deps-dev): bump vite from 4.2.1 to 4.2.2 ([2e9a564](https://github.com/geospoc/v-mapbox/commit/2e9a564))
* chore(deps-dev): bump vite from 4.2.2 to 4.3.0 ([76be3c1](https://github.com/geospoc/v-mapbox/commit/76be3c1))
* chore(deps-dev): bump vite from 4.3.0 to 4.3.1 ([105b3d3](https://github.com/geospoc/v-mapbox/commit/105b3d3))
* chore(deps-dev): bump vite from 4.3.1 to 4.3.2 ([7ec1de9](https://github.com/geospoc/v-mapbox/commit/7ec1de9))
* chore(deps-dev): bump vite from 4.3.2 to 4.3.3 ([d1cbd86](https://github.com/geospoc/v-mapbox/commit/d1cbd86))
* chore(deps-dev): bump vite from 4.3.3 to 4.3.5 ([b3fdba7](https://github.com/geospoc/v-mapbox/commit/b3fdba7))
* chore(deps-dev): bump vite from 4.3.5 to 4.3.7 ([0fb561f](https://github.com/geospoc/v-mapbox/commit/0fb561f))
* chore(deps-dev): bump vite from 4.3.7 to 4.3.8 ([f34f052](https://github.com/geospoc/v-mapbox/commit/f34f052))
* chore(deps-dev): bump vite from 4.3.8 to 4.3.9 ([4a78aed](https://github.com/geospoc/v-mapbox/commit/4a78aed))
* chore(deps-dev): bump vite from 4.3.9 to 4.4.1 ([4991675](https://github.com/geospoc/v-mapbox/commit/4991675))
* chore(deps-dev): bump vite from 4.4.1 to 4.4.2 ([e324efe](https://github.com/geospoc/v-mapbox/commit/e324efe))
* chore(deps-dev): bump vite from 4.4.12 to 4.5.2 ([97a448b](https://github.com/geospoc/v-mapbox/commit/97a448b))
* chore(deps-dev): bump vite from 4.4.2 to 4.4.4 ([5adb1f4](https://github.com/geospoc/v-mapbox/commit/5adb1f4))
* chore(deps-dev): bump vite from 4.4.4 to 4.4.9 ([163cb1f](https://github.com/geospoc/v-mapbox/commit/163cb1f))
* chore(deps-dev): bump vite from 4.4.9 to 4.4.12 ([95e67d2](https://github.com/geospoc/v-mapbox/commit/95e67d2))
* 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))
* 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))
* 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))
* 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))
* 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))
* 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))
* 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))
* 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))
* 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))
* 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))
* 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))
* 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))
* 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))
* 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))
* 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))
* 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))
* 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))
* 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))
* chore(deps-dev): bump vitest from 0.29.2 to 0.29.3 ([0da7dfa](https://github.com/geospoc/v-mapbox/commit/0da7dfa))
* chore(deps-dev): bump vitest from 0.29.3 to 0.29.7 ([363f45a](https://github.com/geospoc/v-mapbox/commit/363f45a))
* chore(deps-dev): Bump vitest from 0.29.7 to 0.29.8 ([e877d21](https://github.com/geospoc/v-mapbox/commit/e877d21))
* chore(deps-dev): bump vitest from 0.29.8 to 0.30.1 ([4f0e6eb](https://github.com/geospoc/v-mapbox/commit/4f0e6eb))
* chore(deps-dev): bump vitest from 0.30.1 to 0.31.0 ([930e267](https://github.com/geospoc/v-mapbox/commit/930e267))
* chore(deps-dev): bump vitest from 0.31.0 to 0.31.1 ([f74924f](https://github.com/geospoc/v-mapbox/commit/f74924f))
* chore(deps-dev): bump vitest from 0.31.1 to 0.31.2 ([0622062](https://github.com/geospoc/v-mapbox/commit/0622062))
* chore(deps-dev): bump vitest from 0.31.2 to 0.31.3 ([a32a28c](https://github.com/geospoc/v-mapbox/commit/a32a28c))
* chore(deps-dev): bump vitest from 0.31.3 to 0.31.4 ([f188e66](https://github.com/geospoc/v-mapbox/commit/f188e66))
* chore(deps-dev): bump vitest from 0.31.4 to 0.32.0 ([5228ce1](https://github.com/geospoc/v-mapbox/commit/5228ce1))
* chore(deps-dev): bump vitest from 0.32.0 to 0.32.2 ([7e09f00](https://github.com/geospoc/v-mapbox/commit/7e09f00))
* chore(deps-dev): bump vitest from 0.32.2 to 0.32.4 ([f860b47](https://github.com/geospoc/v-mapbox/commit/f860b47))
* chore(deps-dev): bump vitest from 0.32.4 to 0.33.0 ([2a10d6d](https://github.com/geospoc/v-mapbox/commit/2a10d6d))
* chore(deps-dev): bump vitest from 0.33.0 to 0.34.1 ([a66de22](https://github.com/geospoc/v-mapbox/commit/a66de22))
* chore(deps-dev): bump vue from 3.2.47 to 3.3.2 ([11549aa](https://github.com/geospoc/v-mapbox/commit/11549aa))
* chore(deps-dev): bump vue from 3.3.2 to 3.3.4 ([fa4a87c](https://github.com/geospoc/v-mapbox/commit/fa4a87c))
* chore(deps-dev): bump vue-tsc from 1.2.0 to 1.4.0 ([5c2f774](https://github.com/geospoc/v-mapbox/commit/5c2f774))
* chore(deps-dev): bump vue-tsc from 1.4.0 to 1.4.4 ([81c347e](https://github.com/geospoc/v-mapbox/commit/81c347e))
* chore(deps-dev): bump vue-tsc from 1.4.4 to 1.6.1 ([07cbe45](https://github.com/geospoc/v-mapbox/commit/07cbe45))
* chore(deps-dev): bump vue-tsc from 1.6.1 to 1.6.2 ([f61ad7e](https://github.com/geospoc/v-mapbox/commit/f61ad7e))
* chore(deps-dev): bump vue-tsc from 1.6.2 to 1.6.4 ([4ff7b58](https://github.com/geospoc/v-mapbox/commit/4ff7b58))
* chore(deps-dev): bump vue-tsc from 1.6.4 to 1.6.5 ([e76e310](https://github.com/geospoc/v-mapbox/commit/e76e310))
* chore(deps-dev): bump vue-tsc from 1.6.5 to 1.8.0 ([7e31986](https://github.com/geospoc/v-mapbox/commit/7e31986))
* chore(deps-dev): bump vue-tsc from 1.8.0 to 1.8.1 ([d557cea](https://github.com/geospoc/v-mapbox/commit/d557cea))
* chore(deps-dev): bump vue-tsc from 1.8.1 to 1.8.2 ([ee2f49d](https://github.com/geospoc/v-mapbox/commit/ee2f49d))
* chore(deps-dev): bump vue-tsc from 1.8.2 to 1.8.3 ([932bbaf](https://github.com/geospoc/v-mapbox/commit/932bbaf))
* chore(deps-dev): bump vue-tsc from 1.8.3 to 1.8.4 ([96c4385](https://github.com/geospoc/v-mapbox/commit/96c4385))
* chore(deps-dev): bump vue-tsc from 1.8.4 to 1.8.5 ([eab8598](https://github.com/geospoc/v-mapbox/commit/eab8598))
* chore(deps-dev): bump vue-tsc from 1.8.5 to 1.8.6 ([5fe617b](https://github.com/geospoc/v-mapbox/commit/5fe617b))
* chore(deps-dev): bump vue-tsc from 1.8.6 to 1.8.7 ([440810d](https://github.com/geospoc/v-mapbox/commit/440810d))
* chore(deps-dev): bump vue-tsc from 1.8.7 to 1.8.8 ([29abe52](https://github.com/geospoc/v-mapbox/commit/29abe52))
* chore(deps-dev): bump word-wrap from 1.2.3 to 1.2.4 ([9626f76](https://github.com/geospoc/v-mapbox/commit/9626f76))
* chore(deps): add coverage vitest plugin 🤷♂️ ([a7b8f3b](https://github.com/geospoc/v-mapbox/commit/a7b8f3b))
* chore(deps): add vitest & required devDeps 🍍 ([75b55c6](https://github.com/geospoc/v-mapbox/commit/75b55c6))
* chore(deps): bump peerDeps ([86a2731](https://github.com/geospoc/v-mapbox/commit/86a2731))
* chore(deps): update github/codeql-action action to v3 ([766972d](https://github.com/geospoc/v-mapbox/commit/766972d))
* test: add global setupFiles file for Vitest 🧪 ([8df4bc5](https://github.com/geospoc/v-mapbox/commit/8df4bc5))
* test: initial tests for Map, Marker & Popup Components 🧪 ([163c7ee](https://github.com/geospoc/v-mapbox/commit/163c7ee))
* test: renovate settings ✨ ([1d0786f](https://github.com/geospoc/v-mapbox/commit/1d0786f))
* test: update tsconfig to include `vitest/globals` ([a367985](https://github.com/geospoc/v-mapbox/commit/a367985))
* build: install optional deps ([a7f0f9a](https://github.com/geospoc/v-mapbox/commit/a7f0f9a))
* build: update workflow(s) ([aee7279](https://github.com/geospoc/v-mapbox/commit/aee7279))
* docs: update README ([062d449](https://github.com/geospoc/v-mapbox/commit/062d449))
* docs: update vite-env declaration file 🎉 ([361fae1](https://github.com/geospoc/v-mapbox/commit/361fae1))
* Fix typos in controls.md ([6cb6477](https://github.com/geospoc/v-mapbox/commit/6cb6477))
* refactor!: housekeeping 🧹 ([f893b83](https://github.com/geospoc/v-mapbox/commit/f893b83))
* fix(deps): bump @deck.gl/core from 8.9.11 to 8.9.12 ([b08589c](https://github.com/geospoc/v-mapbox/commit/b08589c))
* fix(deps): bump @deck.gl/core from 8.9.12 to 8.9.13 ([590715e](https://github.com/geospoc/v-mapbox/commit/590715e))
* fix(deps): bump @deck.gl/core from 8.9.13 to 8.9.14 ([75c9bf4](https://github.com/geospoc/v-mapbox/commit/75c9bf4))
* fix(deps): bump @deck.gl/core from 8.9.14 to 8.9.15 ([5cab969](https://github.com/geospoc/v-mapbox/commit/5cab969))
* fix(deps): bump @deck.gl/core from 8.9.15 to 8.9.16 ([3a45858](https://github.com/geospoc/v-mapbox/commit/3a45858))
* fix(deps): bump @deck.gl/core from 8.9.16 to 8.9.17 ([69cab1d](https://github.com/geospoc/v-mapbox/commit/69cab1d))
* fix(deps): bump @deck.gl/core from 8.9.17 to 8.9.18 ([a68bb20](https://github.com/geospoc/v-mapbox/commit/a68bb20))
* fix(deps): bump @deck.gl/core from 8.9.18 to 8.9.19 ([8273c4b](https://github.com/geospoc/v-mapbox/commit/8273c4b))
* fix(deps): bump @deck.gl/core from 8.9.19 to 8.9.21 ([7d6b844](https://github.com/geospoc/v-mapbox/commit/7d6b844))
* fix(deps): bump @deck.gl/core from 8.9.2 to 8.9.3 ([b10d5e8](https://github.com/geospoc/v-mapbox/commit/b10d5e8))
* fix(deps): bump @deck.gl/core from 8.9.21 to 8.9.22 ([679027c](https://github.com/geospoc/v-mapbox/commit/679027c))
* fix(deps): bump @deck.gl/core from 8.9.22 to 8.9.23 ([64fe4e6](https://github.com/geospoc/v-mapbox/commit/64fe4e6))
* fix(deps): bump @deck.gl/core from 8.9.3 to 8.9.4 ([7a826b1](https://github.com/geospoc/v-mapbox/commit/7a826b1))
* fix(deps): Bump @deck.gl/core from 8.9.4 to 8.9.6 ([d4bfd8b](https://github.com/geospoc/v-mapbox/commit/d4bfd8b))
* fix(deps): Bump @deck.gl/core from 8.9.6 to 8.9.7 ([ebcd340](https://github.com/geospoc/v-mapbox/commit/ebcd340))
* fix(deps): bump @deck.gl/core from 8.9.7 to 8.9.8 ([f178f44](https://github.com/geospoc/v-mapbox/commit/f178f44))
* fix(deps): bump @deck.gl/core from 8.9.8 to 8.9.9 ([bcc32ac](https://github.com/geospoc/v-mapbox/commit/bcc32ac))
* fix(deps): bump @deck.gl/core from 8.9.9 to 8.9.11 ([dc85b20](https://github.com/geospoc/v-mapbox/commit/dc85b20))
* fix(deps): bump @deck.gl/layers from 8.9.12 to 8.9.13 ([cbce502](https://github.com/geospoc/v-mapbox/commit/cbce502))
* fix(deps): bump @deck.gl/layers from 8.9.13 to 8.9.14 ([3d94dcc](https://github.com/geospoc/v-mapbox/commit/3d94dcc))
* fix(deps): bump @deck.gl/layers from 8.9.14 to 8.9.15 ([3526435](https://github.com/geospoc/v-mapbox/commit/3526435))
* fix(deps): bump @deck.gl/layers from 8.9.15 to 8.9.16 ([e3310d6](https://github.com/geospoc/v-mapbox/commit/e3310d6))
* fix(deps): bump @deck.gl/layers from 8.9.16 to 8.9.17 ([b37bf4e](https://github.com/geospoc/v-mapbox/commit/b37bf4e))
* fix(deps): bump @deck.gl/layers from 8.9.17 to 8.9.18 ([cb9a941](https://github.com/geospoc/v-mapbox/commit/cb9a941))
* fix(deps): bump @deck.gl/layers from 8.9.18 to 8.9.19 ([0eb2e4c](https://github.com/geospoc/v-mapbox/commit/0eb2e4c))
* fix(deps): bump @deck.gl/layers from 8.9.19 to 8.9.20 ([b34c22f](https://github.com/geospoc/v-mapbox/commit/b34c22f))
* fix(deps): bump @deck.gl/layers from 8.9.2 to 8.9.3 ([c0b1b67](https://github.com/geospoc/v-mapbox/commit/c0b1b67))
* fix(deps): bump @deck.gl/layers from 8.9.20 to 8.9.21 ([7ad67b8](https://github.com/geospoc/v-mapbox/commit/7ad67b8))
* fix(deps): bump @deck.gl/layers from 8.9.21 to 8.9.22 ([3c53539](https://github.com/geospoc/v-mapbox/commit/3c53539))
* fix(deps): Bump @deck.gl/layers from 8.9.3 to 8.9.4 ([9037746](https://github.com/geospoc/v-mapbox/commit/9037746))
* fix(deps): Bump @deck.gl/layers from 8.9.4 to 8.9.6 ([1ddfb61](https://github.com/geospoc/v-mapbox/commit/1ddfb61))
* fix(deps): Bump @deck.gl/layers from 8.9.6 to 8.9.7 ([60cd31d](https://github.com/geospoc/v-mapbox/commit/60cd31d))
* fix(deps): bump @deck.gl/layers from 8.9.7 to 8.9.9 ([186478e](https://github.com/geospoc/v-mapbox/commit/186478e))
* fix(deps): bump @deck.gl/layers from 8.9.9 to 8.9.12 ([c00bfec](https://github.com/geospoc/v-mapbox/commit/c00bfec))
* fix(deps): bump @deck.gl/mapbox from 8.9.12 to 8.9.13 ([ea805ec](https://github.com/geospoc/v-mapbox/commit/ea805ec))
* fix(deps): bump @deck.gl/mapbox from 8.9.13 to 8.9.14 ([a2cad45](https://github.com/geospoc/v-mapbox/commit/a2cad45))
* fix(deps): bump @deck.gl/mapbox from 8.9.14 to 8.9.15 ([544f618](https://github.com/geospoc/v-mapbox/commit/544f618))
* fix(deps): bump @deck.gl/mapbox from 8.9.15 to 8.9.16 ([7c4d4ab](https://github.com/geospoc/v-mapbox/commit/7c4d4ab))
* fix(deps): bump @deck.gl/mapbox from 8.9.16 to 8.9.17 ([224c2f4](https://github.com/geospoc/v-mapbox/commit/224c2f4))
* fix(deps): bump @deck.gl/mapbox from 8.9.17 to 8.9.18 ([0290126](https://github.com/geospoc/v-mapbox/commit/0290126))
* fix(deps): bump @deck.gl/mapbox from 8.9.18 to 8.9.19 ([6a11c3e](https://github.com/geospoc/v-mapbox/commit/6a11c3e))
* fix(deps): bump @deck.gl/mapbox from 8.9.19 to 8.9.20 ([8ae5dba](https://github.com/geospoc/v-mapbox/commit/8ae5dba))
* fix(deps): bump @deck.gl/mapbox from 8.9.2 to 8.9.3 ([42a6043](https://github.com/geospoc/v-mapbox/commit/42a6043))
* fix(deps): bump @deck.gl/mapbox from 8.9.20 to 8.9.21 ([f7fa3b2](https://github.com/geospoc/v-mapbox/commit/f7fa3b2))
* fix(deps): bump @deck.gl/mapbox from 8.9.21 to 8.9.22 ([a73735b](https://github.com/geospoc/v-mapbox/commit/a73735b))
* fix(deps): bump @deck.gl/mapbox from 8.9.22 to 8.9.23 ([962e5de](https://github.com/geospoc/v-mapbox/commit/962e5de))
* fix(deps): bump @deck.gl/mapbox from 8.9.3 to 8.9.4 ([9180f7b](https://github.com/geospoc/v-mapbox/commit/9180f7b))
* fix(deps): Bump @deck.gl/mapbox from 8.9.4 to 8.9.6 ([9d6e355](https://github.com/geospoc/v-mapbox/commit/9d6e355))
* fix(deps): bump @deck.gl/mapbox from 8.9.6 to 8.9.7 ([e1c045c](https://github.com/geospoc/v-mapbox/commit/e1c045c))
* fix(deps): bump @deck.gl/mapbox from 8.9.7 to 8.9.8 ([5beb4c5](https://github.com/geospoc/v-mapbox/commit/5beb4c5))
* fix(deps): bump @deck.gl/mapbox from 8.9.8 to 8.9.9 ([8085a84](https://github.com/geospoc/v-mapbox/commit/8085a84))
* fix(deps): bump @deck.gl/mapbox from 8.9.9 to 8.9.12 ([a81a6f4](https://github.com/geospoc/v-mapbox/commit/a81a6f4))
* fix(deps): bump actions/checkout from 3 to 4 ([bd9b193](https://github.com/geospoc/v-mapbox/commit/bd9b193))
* 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))
* 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))
* 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))
* fix(deps): bump dependabot/fetch-metadata from 1.3.6 to 1.4.0 ([f0f6279](https://github.com/geospoc/v-mapbox/commit/f0f6279))
* fix(deps): bump dependabot/fetch-metadata from 1.4.0 to 1.5.0 ([1920d83](https://github.com/geospoc/v-mapbox/commit/1920d83))
* fix(deps): bump dependabot/fetch-metadata from 1.5.0 to 1.5.1 ([c87b751](https://github.com/geospoc/v-mapbox/commit/c87b751))
* fix(deps): bump dependabot/fetch-metadata from 1.5.1 to 1.6.0 ([25095af](https://github.com/geospoc/v-mapbox/commit/25095af))
* fix(deps): bump tough-cookie from 4.1.2 to 4.1.3 ([32e8eb9](https://github.com/geospoc/v-mapbox/commit/32e8eb9))
* fix(deps): bump yaml from 2.2.1 to 2.2.2 ([60e243a](https://github.com/geospoc/v-mapbox/commit/60e243a))
* feat(vitest): add config file for Vitest ✨ ([e292903](https://github.com/geospoc/v-mapbox/commit/e292903))
## [4.0.2](https://github.com/geospoc/v-mapbox/compare/v4.0.1...v4.0.2) (2023-03-14)
### Bug Fixes
* **dependabot:** add versioning-strategy 🕺 ([d68058d](https://github.com/geospoc/v-mapbox/commit/d68058ddc9a92f381fd3eb5c0497214a11c0f7c2))
* deprecated npm i cmd args 🧹 ([32be451](https://github.com/geospoc/v-mapbox/commit/32be451de37d23b20aa249083db1091b0abef922))
## [4.0.1](https://github.com/geospoc/v-mapbox/compare/v4.0.0...v4.0.1) (2023-03-14)
### Bug Fixes
* add onBeforeUnmount hook logic 🕺 ([8e71b2d](https://github.com/geospoc/v-mapbox/commit/8e71b2d57677f8f6dd1bdb5ef95cea96578338cb))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* popup set DOM Content instead of html str ✨ ([26f80c4](https://github.com/geospoc/v-mapbox/commit/26f80c4241a9eeccc8bad8d956496b9d65ceaafc))
* ref on slot not working 🚨 ([6228dde](https://github.com/geospoc/v-mapbox/commit/6228dde861470ac1d8eeb780a9acda4e50e6f55c))
# [4.0.0](https://github.com/geospoc/v-mapbox/compare/v3.3.1...v4.0.0) (2023-03-09)
### Bug Fixes
* broken links for netlify 🤖 ([58a587a](https://github.com/geospoc/v-mapbox/commit/58a587a1a934d7967a61f842c8dd575af0273cbe))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **deps:** bump actions/setup-node from 3.3.0 to 3.4.1 ([ee67514](https://github.com/geospoc/v-mapbox/commit/ee675146dfdb7b8d67fbe3811c4a41b63d02fbe1))
* **deps:** bump actions/setup-node from 3.4.1 to 3.5.0 ([fc84366](https://github.com/geospoc/v-mapbox/commit/fc8436678d5e75027faeffc15aa82de879959683))
* **deps:** bump terser from 5.14.1 to 5.14.2 ([6eb12fe](https://github.com/geospoc/v-mapbox/commit/6eb12fe35d5530bc194128cbe03a7022a632d785))
* update outDir to `dist` 🚨 ([4053e69](https://github.com/geospoc/v-mapbox/commit/4053e6946c59d48f1e32e0e053bc224a7320ebdf))
### Features
* add emits as per Vue 3 docs 📖 ([5c873f1](https://github.com/geospoc/v-mapbox/commit/5c873f1d14eb5c4b62ca3937d94d8036c643218b))
* add engines to package files ([4f20b12](https://github.com/geospoc/v-mapbox/commit/4f20b12d6f7a1bb2058abed648f6cbf455151ed5))
## [3.3.1](https://github.com/geospoc/v-mapbox/compare/v3.3.0...v3.3.1) (2022-07-07)
### Bug Fixes
* **geojson:** clean up of props 📍 ([2cc57b1](https://github.com/geospoc/v-mapbox/commit/2cc57b1691a85bd42f10ca5279a50eeb2c46e78a))
* issue with `container` undefined 🐛 ([f9269b5](https://github.com/geospoc/v-mapbox/commit/f9269b517eea449a6bfca91169befcc84b413139))
# [3.3.0](https://github.com/geospoc/v-mapbox/compare/v3.2.4...v3.3.0) (2022-07-07)
### Bug Fixes
* **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))
* **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))
* **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))
* issue with container not found 🐛 ([6306f73](https://github.com/geospoc/v-mapbox/commit/6306f731b2375b6a550ca9d34462af998b212d03))
### Features
* **geojson-layer:** pass source as `GeoJSONSourceRaw` 🕺 ([0ded1f5](https://github.com/geospoc/v-mapbox/commit/0ded1f5b7f22aef426dcce1e45a513209fda4ca7))
## [3.2.4](https://github.com/geospoc/v-mapbox/compare/v3.2.3...v3.2.4) (2022-07-05)
### Bug Fixes
* ci and lint-pr workflows ([1967366](https://github.com/geospoc/v-mapbox/commit/196736681cf48238a7dfebf5be8b6dbec434f115))
* clean up workflows ([cd0796f](https://github.com/geospoc/v-mapbox/commit/cd0796fdcccd9b13f5fd65d87f9c4dfc0b3b799a))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **deps:** bump actions/setup-node from 3.2.0 to 3.3.0 ([007c9b0](https://github.com/geospoc/v-mapbox/commit/007c9b0967a6b7938908de3c6bd6525da8806e4a))
### Features
* **husky:** add DAO settings in hook ([575dc51](https://github.com/geospoc/v-mapbox/commit/575dc5159087d4ab4e1073098bb0b2b0d60e6fff))
## [3.2.3](https://github.com/geospoc/v-mapbox/compare/v3.2.2...v3.2.3) (2022-05-31)
### Bug Fixes
* add `lint-staged` as devDep ([20f4f60](https://github.com/geospoc/v-mapbox/commit/20f4f60934c1afb030042f4fb14b0baf9d82dccd))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **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))
* **deps:** bump actions/setup-node from 3.1.1 to 3.2.0 ([d281b5c](https://github.com/geospoc/v-mapbox/commit/d281b5ce3141b7fb74c8156476bc23cc3aacaefb))
* **deps:** bump ejs from 3.1.6 to 3.1.7 ([7cb23ad](https://github.com/geospoc/v-mapbox/commit/7cb23ad858ee8ad51b4b1c465f23897ca146b9ce))
* **deps:** bump github/codeql-action from 1 to 2 ([c3ec927](https://github.com/geospoc/v-mapbox/commit/c3ec92715c076ae820549e5664d384aeed79be01))
* **deps:** bump wearerequired/lint-action from 1 to 2 ([57e0ec6](https://github.com/geospoc/v-mapbox/commit/57e0ec60a33cea16f496d5dc40c39d856ff1bdf5))
## [3.2.2](https://github.com/geospoc/v-mapbox/compare/v3.2.1...v3.2.2) (2022-04-20)
### Bug Fixes
* generate new typings using `vue-tsc` ([a2df6fd](https://github.com/geospoc/v-mapbox/commit/a2df6fdb8826520e9127ff5448d8fb3baf7e95b1))
## [3.2.1](https://github.com/geospoc/v-mapbox/compare/v3.2.0...v3.2.1) (2022-04-20)
### Bug Fixes
* build with `deck.gl/core` ([f684b4d](https://github.com/geospoc/v-mapbox/commit/f684b4dc865c651ca04d7d43b99205b069145343))
# [3.2.0](https://github.com/geospoc/v-mapbox/compare/v3.1.6...v3.2.0) (2022-04-20)
### Bug Fixes
* **docs:** remove environment details in netlify deploy ([c845761](https://github.com/geospoc/v-mapbox/commit/c845761ffb9716d0416446e61c6c778fab938801))
### Features
* **deck.gl:** add `deck.gl` Arc layer ([60f728f](https://github.com/geospoc/v-mapbox/commit/60f728fc5e5da8fa35f9ef185f726eeb1cf1d975))
* **deck.gl:** add `deck.gl` GeoJSON layer ([bfe18f0](https://github.com/geospoc/v-mapbox/commit/bfe18f019f4373a3d1c34500d16bf4ab90fd79d2))
* enable `[@deck](https://github.com/deck).gl` devDeps ([4fa728f](https://github.com/geospoc/v-mapbox/commit/4fa728ff7b51cc2041104c70be78cbfa59f5e592))
* upgrade GitHub actions to Node 18 ([20d6fcc](https://github.com/geospoc/v-mapbox/commit/20d6fcc1028a804a7a8f807da24c4e2e60410df4))
## [3.1.6](https://github.com/geospoc/v-mapbox/compare/v3.1.5...v3.1.6) (2022-04-13)
## [3.1.5](https://github.com/geospoc/v-mapbox/compare/v3.1.4...v3.1.5) (2022-04-13)
### Bug Fixes
* tsconfig config for `vue-tsc` ([f0cd276](https://github.com/geospoc/v-mapbox/commit/f0cd276a765151ffe91d0d506b2b752befb1c24b))
### Features
* **deps:** add `vue-tsc` for auto-generating the typings ([535f3c8](https://github.com/geospoc/v-mapbox/commit/535f3c81aef37d0dcd99816d7393737dd23ffaa2))
## [3.1.4](https://github.com/geospoc/v-mapbox/compare/v3.1.3...v3.1.4) (2022-04-13)
## [3.1.3](https://github.com/geospoc/v-mapbox/compare/v3.1.2...v3.1.3) (2022-04-13)
### Bug Fixes
* vue bundler path in plugin alias ([ca09890](https://github.com/geospoc/v-mapbox/commit/ca09890f06afd4dd0d0c992f82a255a2cc495ada))
## [3.1.2](https://github.com/geospoc/v-mapbox/compare/v3.1.1...v3.1.2) (2022-04-12)
## [3.1.1](https://github.com/geospoc/v-mapbox/compare/v3.1.0...v3.1.1) (2022-04-12)
### Bug Fixes
* **deps:** bump actions/checkout from 2 to 3 ([207d8f0](https://github.com/geospoc/v-mapbox/commit/207d8f0de31507877be4ca1ec66975e18fe43aeb))
* **deps:** bump actions/setup-node from 2.5.1 to 3.1.0 ([34153f5](https://github.com/geospoc/v-mapbox/commit/34153f50f4d73d8fcebf3ca6f4ca25319a1b57c9))
* **deps:** bump actions/setup-node from 3.1.0 to 3.1.1 ([9897d5c](https://github.com/geospoc/v-mapbox/commit/9897d5c0d7f627ea67d63dcf90f155a1eca729d9))
* issue with passing options to `Map()` ([b09ef8a](https://github.com/geospoc/v-mapbox/commit/b09ef8a55adf934596016b313068dbe2d70e4b06))
# [3.1.0](https://github.com/geospoc/v-mapbox/compare/v3.0.0...v3.1.0) (2022-03-01)
### Bug Fixes
* minor housekeeping ([b24bc9e](https://github.com/geospoc/v-mapbox/commit/b24bc9e29b530bc981a634684de446c30019ffc1))
### Features
* **ts:** add `.d.ts` using `vue-tsc` ([745afee](https://github.com/geospoc/v-mapbox/commit/745afeece5f0630000aa01f3ef84359f3160e6e5))
# [3.0.0](https://github.com/geospoc/v-mapbox/compare/v1.10.1...v3.0.0) (2022-02-24)
### Bug Fixes
* **deps:** bump node-fetch from 2.6.1 to 2.6.7 ([d1286f4](https://github.com/geospoc/v-mapbox/commit/d1286f481eab69dc50da7c4f1389b543ea8375f5))
* unused variables ([1a967e3](https://github.com/geospoc/v-mapbox/commit/1a967e38c37182b6e78c7a612b2964a327d48420))
### Features
* add default controls 🎉 ([dd5ad1a](https://github.com/geospoc/v-mapbox/commit/dd5ad1a41707fb047a1c100cf05054d906cb1367))
* persist layers when style/basemap changes ([d81a70c](https://github.com/geospoc/v-mapbox/commit/d81a70c11b41117f806971bff6200bd322579d04))
* setup CodeQL ([6fb9fd3](https://github.com/geospoc/v-mapbox/commit/6fb9fd3b679f062c0bf0e279dc5d83e32c9f1dd5))
## [1.10.1](https://github.com/geospoc/v-mapbox/compare/v1.10.0...v1.10.1) (2022-01-19)
### Bug Fixes
* scope the `hidden` class to avoid conflict with tailwind ([559121b](https://github.com/geospoc/v-mapbox/commit/559121b292a1d5d4675e2f46740ad91a8aae2a46))
* **deps:** bump actions/setup-node from 2.5.0 to 2.5.1 ([8a5c510](https://github.com/geospoc/v-mapbox/commit/8a5c5105a82aebc684772ae067278aa0f9895e84))
# [1.10.0](https://github.com/geospoc/v-mapbox/compare/v1.9.0...v1.10.0) (2021-12-06)
### Bug Fixes
* update pre-push hook ([baa2b6e](https://github.com/geospoc/v-mapbox/commit/baa2b6e9f16f44d7422cf77e1870c5ddbcb7c12c))
* update typings for Vue components ([ec183fd](https://github.com/geospoc/v-mapbox/commit/ec183fdf82f31c2a5380565bf72ab1f6cae272dc))
* **deps:** bump actions/setup-node from 2.4.1 to 2.5.0 ([c39d507](https://github.com/geospoc/v-mapbox/commit/c39d5076a254551cbf70ad596af2663b7e680331))
### Features
* add `.nvmrc` to use current node version ([3adf1de](https://github.com/geospoc/v-mapbox/commit/3adf1ded474fb06e611ed2ceab789dea84021389))
# [1.9.0](https://github.com/geospoc/v-mapbox/compare/v1.8.2...v1.9.0) (2021-11-10)
### Bug Fixes
* **deps:** bump actions/setup-node from 2.4.0 to 2.4.1 ([36c3434](https://github.com/geospoc/v-mapbox/commit/36c343473e5ab683778bb9370925c4b4e4b04694))
### Features
* add iControl ([93fef74](https://github.com/geospoc/v-mapbox/commit/93fef7465b00283e8c366569bd5aa5cc93d2a76d))
### Reverts
* don't make `container` as required field prop ([7dc81ad](https://github.com/geospoc/v-mapbox/commit/7dc81ad1123d9486cef64818a3914368261258e4))
## [1.8.2](https://github.com/geospoc/v-mapbox/compare/v1.8.1...v1.8.2) (2021-09-18)
### Bug Fixes
* **deps:** use rollup-plugin-vue v5 to bundle the pkg ([7143c2f](https://github.com/geospoc/v-mapbox/commit/7143c2f41f40875010293bc30148089117faa9f6))
## [1.8.1](https://github.com/geospoc/v-mapbox/compare/v1.8.0...v1.8.1) (2021-09-13)
### Bug Fixes
* map container template ref not found ([145d978](https://github.com/geospoc/v-mapbox/commit/145d97882fb514c96a50e7eb9fd9d4e76bc2cb07))
# [1.8.0](https://github.com/geospoc/v-mapbox/compare/v1.7.3...v1.8.0) (2021-09-12)
### Bug Fixes
* lint issue ([2e2b103](https://github.com/geospoc/v-mapbox/commit/2e2b10336b32454f3ded9729a9941edbee4699d2))
* update CI workflow ([b1fecd0](https://github.com/geospoc/v-mapbox/commit/b1fecd00bd4bc1636f2432ce4dabb5372e4a03cb))
* update deps ([f77392c](https://github.com/geospoc/v-mapbox/commit/f77392cddc3f5e3dd10464c8213a672e702b544a))
* use lint-staged ([34972fa](https://github.com/geospoc/v-mapbox/commit/34972fa6a228e21c0ee907098f9b622ef7950e6c))
* vuepress build issue ([dfc4658](https://github.com/geospoc/v-mapbox/commit/dfc4658bf3ff204312b4a09d1b1f8e6db7aa71b2))
* **deps:** bump actions/setup-node from 2.1.5 to 2.2.0 ([0e29024](https://github.com/geospoc/v-mapbox/commit/0e29024965dbb35c05fba4c13916833a397b949d))
* **deps:** bump actions/setup-node from 2.2.0 to 2.3.0 ([55ba848](https://github.com/geospoc/v-mapbox/commit/55ba84812f888c28bcf2605a896947cdab3c742c))
## [1.7.3](https://github.com/geospoc/v-mapbox/compare/v1.7.2...v1.7.3) (2021-06-22)
### Bug Fixes
* before prop reactive ([9a5a1b2](https://github.com/geospoc/v-mapbox/commit/9a5a1b25eb939ddbc12d045faa395b55d4fa3ddd)), closes [#204](https://github.com/geospoc/v-mapbox/issues/204)
* control position reactivity & doc ([9f38751](https://github.com/geospoc/v-mapbox/commit/9f387516c45cd9f68a0497ff52f6ae9e808e0498)), closes [#362](https://github.com/geospoc/v-mapbox/issues/362)
## [1.7.2](https://github.com/geospoc/v-mapbox/compare/v1.7.1...v1.7.2) (2021-06-22)
### Bug Fixes
* **deps:** bump actions/cache from 2.1.5 to 2.1.6 ([52401b5](https://github.com/geospoc/v-mapbox/commit/52401b5eb9f3fa822354f804e77811298824488c))
## [1.7.1](https://github.com/geospoc/v-mapbox/compare/v1.7.0...v1.7.1) (2021-05-18)
### Bug Fixes
* add props reflecting Mapbox API ([0a762b3](https://github.com/geospoc/v-mapbox/commit/0a762b32b7283ebcc04987fce747722369b376d6))
* build fsevents on linux ([b011a2f](https://github.com/geospoc/v-mapbox/commit/b011a2f41c6a5f5ac549d1bbddd36f97046038bb))
* set `--no-optional` flag to `npm ci` ([2dd7c4e](https://github.com/geospoc/v-mapbox/commit/2dd7c4e516b289e7ce0d5cfdc67f807d23efddcb))
* typo deafult to default ([f71b030](https://github.com/geospoc/v-mapbox/commit/f71b03059a42788efac0b4ee6f93cce355201426))
* update eslint config to support `eslint-config-prettier` ([07d7a4a](https://github.com/geospoc/v-mapbox/commit/07d7a4ab86d9c33445daa2fd4139fea3b242f86d))
* use npm install instead of npm ci ([c8043d1](https://github.com/geospoc/v-mapbox/commit/c8043d156be5c144bbf797fc14e6e6303fdcb7a1))
* **build:** use sass instead of node-sass ([558f11b](https://github.com/geospoc/v-mapbox/commit/558f11bc0b87299bf87cc44ef7c5d0f8ad1b6503))
* **deps:** bump actions/cache from v2 to v2.1.4 ([49a1bce](https://github.com/geospoc/v-mapbox/commit/49a1bce7353c1a1d4328c99a8337d5b375300644))
* **deps:** bump actions/cache from v2.1.4 to v2.1.5 ([bfde50f](https://github.com/geospoc/v-mapbox/commit/bfde50f85504c940f6bd060b510137d4c2071710))
* **deps:** bump actions/setup-node from v2.1.4 to v2.1.5 ([b087acf](https://github.com/geospoc/v-mapbox/commit/b087acf1b8495277537e99fb7fac41c6319345a7))
### Reverts
* use npm ci & restore cached `node_modules` ([d57f8f7](https://github.com/geospoc/v-mapbox/commit/d57f8f716d4f949d65b313efb455659bffe8c08e))
# [1.7.0](https://github.com/geospoc/v-mapbox/compare/v1.6.4...v1.7.0) (2021-01-29)
### Bug Fixes
* 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)
* **deps:** bump actions/setup-node from v2.1.2 to v2.1.3 ([659971d](https://github.com/geospoc/v-mapbox/commit/659971d1489724bc5e599d1118a3a09c165009ba))
* **deps:** bump actions/setup-node from v2.1.3 to v2.1.4 ([b4728c5](https://github.com/geospoc/v-mapbox/commit/b4728c555c38c3acd3588bcbc9750030ab8b08e2))
### Features
* add `closeOnMove` & `focusAfterOpen` props ([f77a4b5](https://github.com/geospoc/v-mapbox/commit/f77a4b5648f03c52c01a134bdf2adbf4010ac747))
## [1.6.4](https://github.com/geospoc/v-mapbox/compare/v1.6.3...v1.6.4) (2020-10-30)
### Bug Fixes
* set css as sideEffect ([9257843](https://github.com/geospoc/v-mapbox/commit/9257843a76b61bdb7da1ae29e1bb7ffa0af0b291))
* specify lang attribute to style ([ea10ed3](https://github.com/geospoc/v-mapbox/commit/ea10ed3d42b6fbb4d7585f44552286c342a664a5))
## [1.6.3](https://github.com/geospoc/v-mapbox/compare/v1.6.2...v1.6.3) (2020-10-29)
### Bug Fixes
* **deps:** bump actions/setup-node from v1 to v2.1.2 ([38a4cfa](https://github.com/geospoc/v-mapbox/commit/38a4cfa5735dabeaec34647cdeea6f880d1810b9))
* 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)
## [1.6.2](https://github.com/geospoc/v-mapbox/compare/v1.6.1...v1.6.2) (2020-10-29)
### Bug Fixes
* update `ship.js` workflow ([7379c54](https://github.com/geospoc/v-mapbox/commit/7379c54020ce0472a281af6f619992fc31021ab3))
* **deps:** bump dependencies ([23d8253](https://github.com/geospoc/v-mapbox/commit/23d825336fec178f9e9435f8f9f239f0851ffde6))
* update dependabot config to support github-actions ecosystem ([b2b999e](https://github.com/geospoc/v-mapbox/commit/b2b999e204392dbd9b6090d3369d62e77c71ffe2))
## [1.6.1](https://github.com/geospoc/v-mapbox/compare/v1.5.0...v1.6.1) (2020-10-06)
### Bug Fixes
* failing `npm run build` in shipjs trigger ([8caee76](https://github.com/geospoc/v-mapbox/commit/8caee76f7a8dfb5b681a4b0f098acb7cfca8e870))
* **ci:** update workflows ([7f3b4d5](https://github.com/geospoc/v-mapbox/commit/7f3b4d51e9352c833410cc7231f8582177d7dc35))
* add babelHelpers option in babel rollup plugin ([66d1519](https://github.com/geospoc/v-mapbox/commit/66d151995f32e6ae6db208f233055e4c12e907b3))
# [1.6.0](https://github.com/geospoc/v-mapbox/compare/v1.5.0...v1.6.0) (2020-10-05)
### Bug Fixes
* **ci:** update workflows ([7f3b4d5](https://github.com/geospoc/v-mapbox/commit/7f3b4d51e9352c833410cc7231f8582177d7dc35))
* add babelHelpers option in babel rollup plugin ([66d1519](https://github.com/geospoc/v-mapbox/commit/66d151995f32e6ae6db208f233055e4c12e907b3))
* added type `object` for maxBounds validation ([4e2802d](https://github.com/geospoc/v-mapbox/commit/4e2802d0cb2b3cd2aa5269512eecafb7340467e2))
* lint:prettier ([9ab883f](https://github.com/geospoc/v-mapbox/commit/9ab883f3e5165ff99e6a078a538cacb6083351a2))
* rtl issue ([0eefb33](https://github.com/geospoc/v-mapbox/commit/0eefb33eb3b4c9c6955041282615e2216aa3d2d3))
### Features
* make 'bounds' synced prop ([5834608](https://github.com/geospoc/v-mapbox/commit/5834608a7b228fb074b6ef0a42f08aa598ad02b9))
# [1.5.0](https://github.com/geospoc/v-mapbox/compare/v1.4.0...v1.5.0) (2020-09-17)
### Bug Fixes
* add classes for popup ([a7d486b](https://github.com/geospoc/v-mapbox/commit/a7d486be3317f87319124e65bee522b56b108b31))
* update dependencies ([cdebed1](https://github.com/geospoc/v-mapbox/commit/cdebed19115bfd149fbc0923b8441933d59c9a27))
* **docs:** update grammar of composition ([7b080c7](https://github.com/geospoc/v-mapbox/commit/7b080c7b2bdeb83cdf69af6c2e449151b15b5f05))
### Features
* add `/rebase` workflow ([b0a3140](https://github.com/geospoc/v-mapbox/commit/b0a314030cf5705365fdfe47ae7b88a7c4dc155f))
* add className option to popup ([bb9abf0](https://github.com/geospoc/v-mapbox/commit/bb9abf021f0e2f9e2fc418f19d1f5855d4b8be21))
# [1.4.0](https://github.com/geospoc/v-mapbox/compare/v1.3.3...v1.4.0) (2020-08-08)
### Bug Fixes
* **docs:** update default mapbox-gl version in docs ([d1ddc11](https://github.com/geospoc/v-mapbox/commit/d1ddc111fba917e8cebbae3a298460d95a4f0def))
* **props:** update required values for synced props ([0a516c6](https://github.com/geospoc/v-mapbox/commit/0a516c6d255d961705950fb08fa5e7a594c63189))
* remove eslint overrides ([197717a](https://github.com/geospoc/v-mapbox/commit/197717a958eb7063aece80269f06b390f5f360f7))
### Features
* **docs:** update gl-map api docs ([29579a2](https://github.com/geospoc/v-mapbox/commit/29579a2a8aca875a0899e20b3b3233b9fc3a4ea7))
* add minPitch() & maxPitch() options ([97118e0](https://github.com/geospoc/v-mapbox/commit/97118e01035d668996d5951d850355af780be1d2))
* update map options as per mapbox-gl api ([2f9e6c6](https://github.com/geospoc/v-mapbox/commit/2f9e6c673dab9561160e8f0d8539e97636ec38e9))
## [1.3.3](https://github.com/geospoc/v-mapbox/compare/v1.3.2...v1.3.3) (2020-07-26)
### Bug Fixes
* update CI workflow ([3267f48](https://github.com/geospoc/v-mapbox/commit/3267f480d6a1f9a38919443f46388870052805a8))
* **docs:** update mapbox-gl version ([861690a](https://github.com/geospoc/v-mapbox/commit/861690a9de712aaad54dc3fe9dbe786bc5f9e9fb))
* update rollup plugin babel ([4c77dff](https://github.com/geospoc/v-mapbox/commit/4c77dff0e541aef21a604d199da1ca02cd5b31f9))
* **ci:** update ship.js trigger to trigger on `main` branch ([62e88f3](https://github.com/geospoc/v-mapbox/commit/62e88f328750e0ca9857c9fd9c61b9256b5637c0))
* correct `setLigh` event name typo. ([42bdcd1](https://github.com/geospoc/v-mapbox/commit/42bdcd1aa547e7b946b21549d6101ca7429ca7a8))
### Features
* enable jsconfig for better VSCode Intellisense ([54a055d](https://github.com/geospoc/v-mapbox/commit/54a055d621bcd7627798b6c38d3e33acdaf2cdbb))
## [1.3.2](https://github.com/vinayakkulkarni/v-mapbox/compare/v1.3.1...v1.3.2) (2020-06-24)
### Features
* add styleimagemissing event ([ade797b](https://github.com/vinayakkulkarni/v-mapbox/commit/ade797b27a5582cf6591c676ac97c731b04d3745))
## [1.3.1](https://github.com/vinayakkulkarni/v-mapbox/compare/v1.2.0...v1.3.1) (2020-06-22)
### Bug Fixes
* **deps:** clean lockfile ([85a7217](https://github.com/vinayakkulkarni/v-mapbox/commit/85a7217b6f93614c7e4642c41c3051f724bf9c22))
* add deepscan badge ([731ef73](https://github.com/vinayakkulkarni/v-mapbox/commit/731ef7302d3fa4b5e65219b119542e31acd695f7))
* update docs for Popup open & close events ([08e1502](https://github.com/vinayakkulkarni/v-mapbox/commit/08e15025c38f4222fef8fd8f893f9bdcabe81d72))
* update README for Layers ([0c4bb4d](https://github.com/vinayakkulkarni/v-mapbox/commit/0c4bb4d6691e3b0d8f97212d15e4442c055899e3))
### Features
* add Code Of Conduct ([ea9bfae](https://github.com/vinayakkulkarni/v-mapbox/commit/ea9bfaeb4d370e2f801f736469935c39505cdf67))
* allow the hash param to be a string or a boolean ([361e7f5](https://github.com/vinayakkulkarni/v-mapbox/commit/361e7f5b581bea2e15326180b40f8748b6b5dbac))
# [1.3.0](https://github.com/vinayakkulkarni/v-mapbox/compare/v1.2.0...v1.3.0) (2020-06-22)
### Bug Fixes
* add deepscan badge ([731ef73](https://github.com/vinayakkulkarni/v-mapbox/commit/731ef7302d3fa4b5e65219b119542e31acd695f7))
* update docs for Popup open & close events ([08e1502](https://github.com/vinayakkulkarni/v-mapbox/commit/08e15025c38f4222fef8fd8f893f9bdcabe81d72))
* update README for Layers ([0c4bb4d](https://github.com/vinayakkulkarni/v-mapbox/commit/0c4bb4d6691e3b0d8f97212d15e4442c055899e3))
### Features
* add Code Of Conduct ([ea9bfae](https://github.com/vinayakkulkarni/v-mapbox/commit/ea9bfaeb4d370e2f801f736469935c39505cdf67))
* allow the hash param to be a string or a boolean ([361e7f5](https://github.com/vinayakkulkarni/v-mapbox/commit/361e7f5b581bea2e15326180b40f8748b6b5dbac))
<a name="1.2.0"></a>
# [1.2.0](https://github.com/vinayakkulkarni/v-mapbox/compare/v1.0.2...v1.2.0) (2020-06-17)
### Bug Fixes
* typo in docs ([ebc03b1](https://github.com/vinayakkulkarni/v-mapbox/commit/ebc03b1))
* update docs ([edaeb42](https://github.com/vinayakkulkarni/v-mapbox/commit/edaeb42))
* update docs for props & import links ([463593a](https://github.com/vinayakkulkarni/v-mapbox/commit/463593a))
* update homepage ([92f7499](https://github.com/vinayakkulkarni/v-mapbox/commit/92f7499))
* update typo in docs ([b2f1a9f](https://github.com/vinayakkulkarni/v-mapbox/commit/b2f1a9f))
### Features
* add few badges ([a79eb48](https://github.com/vinayakkulkarni/v-mapbox/commit/a79eb48))
* add maxWidth prop for popup ([36d2dfa](https://github.com/vinayakkulkarni/v-mapbox/commit/36d2dfa))
<a name="1.1.0"></a>
# [1.1.0](https://github.com/vinayakkulkarni/v-mapbox/compare/v1.0.2...v1.1.0) (2020-06-17)
### Bug Fixes
* typo in docs ([ebc03b1](https://github.com/vinayakkulkarni/v-mapbox/commit/ebc03b1))
* update docs ([edaeb42](https://github.com/vinayakkulkarni/v-mapbox/commit/edaeb42))
* update docs for props & import links ([463593a](https://github.com/vinayakkulkarni/v-mapbox/commit/463593a))
* update homepage ([92f7499](https://github.com/vinayakkulkarni/v-mapbox/commit/92f7499))
* update typo in docs ([b2f1a9f](https://github.com/vinayakkulkarni/v-mapbox/commit/b2f1a9f))
### Features
* add few badges ([a79eb48](https://github.com/vinayakkulkarni/v-mapbox/commit/a79eb48))
* add maxWidth prop for popup ([36d2dfa](https://github.com/vinayakkulkarni/v-mapbox/commit/36d2dfa))
<a name="1.0.2"></a>
## [1.0.2](https://github.com/vinayakkulkarni/v-mapbox/compare/0.4.1...1.0.2) (2020-06-17)
### Bug Fixes
* update pkg registry ([7273257](https://github.com/vinayakkulkarni/v-mapbox/commit/7273257))
<a name="1.0.1"></a>
## [1.0.1](https://github.com/vinayakkulkarni/v-mapbox/compare/0.4.1...1.0.1) (2020-06-17)
### Bug Fixes
* remove dist 🧹 ([5140930](https://github.com/vinayakkulkarni/v-mapbox/commit/5140930))
* remove test from ci workflow ([72cd2da](https://github.com/vinayakkulkarni/v-mapbox/commit/72cd2da))
* remove yarn 🙌 ([966b112](https://github.com/vinayakkulkarni/v-mapbox/commit/966b112))
* update eslint ignore rules 🏗 ([1dae683](https://github.com/vinayakkulkarni/v-mapbox/commit/1dae683))
* update License 👀 ([7483eef](https://github.com/vinayakkulkarni/v-mapbox/commit/7483eef))
* update lockfiles, prettier & husky configs 💅 ([297cd09](https://github.com/vinayakkulkarni/v-mapbox/commit/297cd09))
### Features
* **ci:** add dependabot & semantic pr configs 🤗 ([3d518b5](https://github.com/vinayakkulkarni/v-mapbox/commit/3d518b5))
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at inbox.vinayak@gmail.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2017 soal, 2020-current Vinayak Kulkarni <inbox.vinayak@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# V-Mapbox 🗺
<a title="npm" href="https://www.npmjs.com/package/v-mapbox" rel="nofollow">
<img alt="npm" src="https://img.shields.io/npm/v/v-mapbox?label=npm%40latest&logo=npm">
</a>
<a title="GitHub Release" href="https://github.com/vinayakkulkarni/v-mapbox/releases" rel="nofollow">
<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">
</a>
<a title="CI Status" href="https://github.com/vinayakkulkarni/v-mapbox/actions?query=workflow%3Aci" rel="nofollow">
<img alt="Total alerts" src="https://github.com/vinayakkulkarni/v-mapbox/workflows/ci/badge.svg">
</a>
<a title="DeepScan Grade" href="https://deepscan.io/dashboard#view=project&tid=9381&pid=14423&bid=267899">
<img src="https://deepscan.io/api/teams/9381/projects/14423/branches/267899/badge/grade.svg" alt="DeepScan grade">
</a>
<a title="downloads" href="http://npm-stat.com/charts.html?package=v-mapbox" rel="nofollow">
<img alt="npm" src="https://img.shields.io/npm/dm/v-mapbox">
</a>
<a title="deploy" href="https://github.com/algolia/shipjs" rel="nofollow">
<img src="https://img.shields.io/badge/deploy-🛳%20Ship.js-blue?style=flat" />
</a>
<a title="Last Commit" href="https://github.com/vinayakkulkarni/v-mapbox/commits/main" rel="nofollow">
<img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/vinayakkulkarni/v-mapbox">
</a>
<a title="Contributors" href="https://github.com/vinayakkulkarni/v-mapbox/graphs/contributors" rel="nofollow">
<img alt="GitHub contributors" src="https://img.shields.io/github/contributors/vinayakkulkarni/v-mapbox">
</a>
<a title="maintenance" href="https://github.com/vinayakkulkarni/v-mapbox/commits/main" rel="nofollow">
<img alt="Maintenance" src="https://img.shields.io/maintenance/yes/2024">
</a>
<a href="https://app.fossa.com/projects/git%2Bgithub.com%2Fvinayakkulkarni%2Fv-mapbox?ref=badge_shield" alt="FOSSA Status">
<img src="https://app.fossa.com/api/projects/git%2Bgithub.com%2Fvinayakkulkarni%2Fv-mapbox.svg?type=shield"/>
</a>
> 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) 🗺
V-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.
[Description and documentation](https://v-mapbox.netlify.app/)
## Installation
```sh
# For Vue 2
$ npm i v-mapbox@legacy
# For Vue 3
$ npm i v-mapbox
```
## Demo
[](https://codesandbox.io/s/v-mapbox-uq9ri2?fontsize=14&hidenavigation=1&theme=dark)
## Deck.gl 🆕
[](https://codesandbox.io/s/v-mapbox-with-deck-gl-geojson-f8nn5q?fontsize=14&hidenavigation=1&theme=dark)
## Development
```sh
git clone git@github.com:vinayakkulkarni/v-mapbox.git
cd v-mapbox
npm install
```
Running in dev mode:
```sh
npm run serve
```
Build for production:
```sh
npm run build
```
### Documentation
Start documentation site in development mode:
```sh
npm run docs:dev
```
Build documentation:
```sh
npm run docs:build
```
Inspired by KoRiGaN's [Vue2Leaflet](https://github.com/KoRiGaN/Vue2Leaflet).
## Contributing
1. Fork it ([https://github.com/vinayakkulkarni/v-mapbox/fork](https://github.com/vinayakkulkarni/v-mapbox/fork))
2. Create your feature branch (`git checkout -b feat/new-feature`)
3. Commit your changes (`git commit -Sam 'feat: add feature'`)
4. Push to the branch (`git push origin feat/new-feature`)
5. Create a new [Pull Request](https://github.com/vinayakkulkarni/v-mapbox/compare)
_Note_:
1. Please contribute using [GitHub Flow](https://web.archive.org/web/20191104103724/https://guides.github.com/introduction/flow/)
2. 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)_
3. PS. Ensure your commits are signed. _[Read why](https://withblue.ink/2020/05/17/how-and-why-to-sign-git-commits.html)_
## Author
**v-mapbox** © [Vinayak](https://github.com/vinayakkulkarni), Released under the [MIT](./LICENSE) License.<br>
Authored and maintained by Vinayak Kulkarni with help from contributors ([list](https://github.com/vinayakkulkarni/v-mapbox/contributors)).
> [vinayakkulkarni.dev](https://vinayakkulkarni.dev) · GitHub [@vinayakkulkarni](https://github.com/vinayakkulkarni) · Twitter [@\_vinayak_k](https://twitter.com/_vinayak_k)
## License
MIT
[](https://app.fossa.com/projects/git%2Bgithub.com%2Fvinayakkulkarni%2Fv-mapbox?ref=badge_large)
================================================
FILE: commitlint.config.cjs
================================================
module.exports = {
extends: ['@commitlint/config-conventional'],
};
================================================
FILE: docs/.vitepress/config.ts
================================================
import { defineConfig } from 'vitepress';
import type { DefaultTheme } from 'vitepress/types/default-theme';
const nav: DefaultTheme.Config['nav'] = [
{
text: 'Guide',
link: '/guide/',
},
{
text: 'API',
link: '/api/',
},
{
text: 'Plugin Components',
link: '/plugin-components/',
},
];
const sidebar: DefaultTheme.Config['sidebar'] = {
'/guide/': [
{
text: 'Guide',
items: [
{ text: 'Index', link: '/guide/index.md' },
{ text: 'Basemap', link: '/guide/basemap.md' },
{ text: 'Composition', link: '/guide/composition.md' },
{ text: 'Controls', link: '/guide/controls.md' },
{ text: 'Markers & Popups', link: '/guide/markers-and-popups.md' },
{ text: 'Layers & Sources', link: '/guide/layers-and-sources.md' },
],
},
],
'/api/': [
{
text: 'API',
items: [
{ text: 'Index', link: '/api/index.md' },
{ text: 'Controls', link: '/api/controls.md' },
{ text: 'Markers', link: '/api/marker.md' },
{ text: 'Popups', link: '/api/popup.md' },
{ text: 'Layers', link: '/api/Layers/index.md' },
{ text: 'GeoJSON Layer', link: '/api/Layers/geojsonlayer.md' },
{ text: 'Vector Layer', link: '/api/Layers/vectorlayer.md' },
{ text: 'Raster Layer', link: '/api/Layers/rasterlayer.md' },
{ text: 'Image Layer', link: '/api/Layers/imagelayer.md' },
{ text: 'Video Layer', link: '/api/Layers/videolayer.md' },
{ text: 'Canvas Layer', link: '/api/Layers/canvaslayer.md' },
],
},
],
'/plugin-components/': [
{
text: 'Plugin Components',
items: [
{ text: 'Index', link: '/plugin-components/index.md' },
{
text: 'Development',
link: '/plugin-components/plugin-components-development.md',
},
],
},
],
};
export default defineConfig({
title: 'V-Mapbox',
description: 'Combine powers of Mapbox GL JS and Vue.js',
themeConfig: {
nav,
sidebar,
footer: {
message:
'Released under the <a href="https://github.com/geospoc/v-mapbox/blob/main/LICENSE">MIT License</a>.',
copyright:
'Copyright © 2019-present <a href="https://github.com/vinayakkulkarni">Vinayak Kulkarni</a>',
},
},
});
================================================
FILE: docs/api/Layers/canvaslayer.md
================================================
# CanvasLayer
::: tip
Mapbox GL JS docs:
[CanvasSource](https://docs.mapbox.com/mapbox-gl-js/api/#canvassource)
:::
## Props
All common [layers props](/api/Layers/index.md#props)
## Events
All common layer [events](/api/Layers/#events)
================================================
FILE: docs/api/Layers/geojsonlayer.md
================================================
# GeojsonLayer
## Props
All common [layers props](/api/Layers/index.md#props)
### `source`
- **Type:** `Object | String`
- **Non-Synced**
- **Description:** A source containing GeoJSON or URL to it.
- **See:** `GeoJSONSource` in [Mapbox API Docs](https://docs.mapbox.com/mapbox-gl-js/api/#geojsonsource)
## Computed getters
### `getSourceFeatures(filter?)`
- **Arguments:**
- `filter` `Array` A filter to limit query results.
- **Description** Returns an array of GeoJSON Feature objects from assosiated source filtered by `filter`.
- **See** `.querySourceFeatures()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#querysourcefeatures)
### `getRenderedFeatures(geometry, filter)`
- **Arguments:**
- `filter` `Array` A filter to limit query results.
- `geometry` `Array | Object` The geometry of the query region.
- **Description** Returns an array of visible GeoJSON Feature objects from assosiated source filtered by `filter`.
- **See** `.queryRenderedFeatures()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#queryrenderedfeatures)
### `getClusterExpansionZoom(clusterId)`
- **Arguments:**
- `clusterId` `Number` The value of the cluster's cluster_id property.
- **Description** For clustered sources, fetches the zoom at which the given cluster expands and returns `Promise` with zoom level as payload.
- **See** `.getClusterExpansionZoom()` [GeoJSONSource method](https://docs.mapbox.com/mapbox-gl-js/api/#geojsonsource#getclusterexpansionzoom)
### `getClusterChildren(clusterId)`
- **Arguments:**
- `clusterId` `Number` The value of the cluster's cluster_id property.
- `limit` `Number` The maximum number of features to return.
- `offset` `Number` The number of features to skip (e.g. for pagination).
- **Description** For clustered sources, fetches the original points that belong to the cluster and returns `Promise` with an `Array` of GeoJSON features as payload.
- **See** `.getClusterChildren()` [GeoJSONSource method](https://docs.mapbox.com/mapbox-gl-js/api/#geojsonsource#getclusterchildren)
### `getClusterLeaves(clusterId, limit, offset)`
- **Arguments:**
- `filter` `Array` A filter to limit query results.
- `geometry` `Array | Object` The geometry of the query region.
- **Description** Returns `Promise` with an array of visible GeoJSON Feature objects from assosiated source filtered by `filter` in the payload.
- **See** `.getClusterLeaves()` [GeoJSONSource method](https://docs.mapbox.com/mapbox-gl-js/api/#geojsonsource#getclusterleaves)
## Methods
### `setFeatureState(featureId, state)`
- **Arguments:**
- `featureId` `String | Number` Feature identifier.
- `state` `Object` A set of key-value pairs. The values should be valid JSON types.
- **Description** Sets the state of a feature. The state object is merged in with the existing state of the feature.
- **See** `.setFeatureState()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#setfeaturestate)
### `getFeatureState(featureId)`
- **Arguments:**
- `featureId` `String | Number` Feature identifier.
- **Description** Gets the state of a feature.
- **See** `.getFeatureState()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#getfeaturestate)
### `removeFeatureState(featureId?, sourceLayer?, key?)`
- **Arguments:**
- `featureId` `String | Number` Feature identifier.
- `sourceLayer` `string` Source layer id.
- `key` `string` The key in the feature state to reset.
- **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.
- **See** `.removeFeatureState()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#removefeaturestate)
## Events
All common layer [events](/api/Layers/#events)
================================================
FILE: docs/api/Layers/imagelayer.md
================================================
# ImageLayer
## Props
All common [layers props](/api/Layers/index.md#props)
### `source`
- **Type:** `Object | String`
- **Non-Synced**
- **Description:** A data source containing an image.
- **See:** `ImageSource` in [Mapbox API Docs](https://docs.mapbox.com/mapbox-gl-js/api/#imagesource)
::: tip Reactivity
`coordinates` and `url` fields of the `source` prop are reactive.
If you change their value, changes automatically applied to the map.
:::
## Events
All common layer [events](/api/Layers/#events)
================================================
FILE: docs/api/Layers/index.md
================================================
# Layers common
## Props
#### Props for Mapbox GL source
### `sourceId`
- **Type:** `String`
- **Required**
- **Non-Synced**
- **Description:** ID of the source to add. Must not conflict with existing sources.
- **See:** `.addSource()` [Map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#addsource)
### `source`
- **Type:** `Object | String`
- **Required**
- **Non-Synced** A source for layer or URL to it.
- **Description:**
- **See:** `sources` in [Mapbox Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/#sources)
#### Props for Mapbox GL layer
### `layerId`
- **Type** `String`
- **Description:** ID of the layer to add. Must not conflict with existing layers.
- **Required**
- **Non-Synced**
- **See:** `id` in [Mapbox Layer Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/#layer-id)
### `layer`
- **Type** `String`
- **Description:** Layer configuration object.
- **Required**
- **Non-Synced**
- **See:** `layers` in [Mapbox Layer Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/#layers)
::: tip Reactivity
`minzoom`, `maxzoom`, `paint`, `layout` and `filter` fields of `layer` prop are reactive. If you change their value, changes automatically applied to the map.
:::
### `before`
- **Type:** `String`
- **Default:** `undefined`
- **Non-Synced**
- **Description:** The ID of an existing layer to insert the new layer before.
- **See:** `metadata` in [Mapbox Layer Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/#layer-metadata)
#### Props for V-Mapbox component
### `clearSource`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If `true`, component will remove layer source from map on component destruction.
### `replaceSource`
- **Type:** `Boolean`
- **Default:** `false`
- **Non-Synced**
- **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.
### `replace`
- **Type:** `Boolean`
- **Default:** `false`
- **Non-Synced**
- **Description:** If `true`, replaces existing layer with same id. Otherwise, error returns.
## Computed properties
### `sourceLoaded`
- **Type** `Boolean`
- **Description** Flag that indicated if layer source already loaded.
### `mapLayer`
- **Type** `Object`
- **Description** Mapbox GL layer object.
- **See** [`.getLayer()`](https://docs.mapbox.com/mapbox-gl-js/api/#map#getlayer) map method
### `mapSource`
- **Type** `Object`
- **Description** Source for this layer.
- **See** [`Mapbox GL source`](https://docs.mapbox.com/mapbox-gl-js/api/#sources)
## Methods
### `.move(beforeId?)`
- **Arguments:**
- `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.
- **Description** Moves a layer to a different z-position.
- **See** [`.moveLayer()`](https://docs.mapbox.com/mapbox-gl-js/api/#map#movelayer) map method
### `.remove()`
- **Description** Removes the layer with and source assosiated with it.
- **See** [`.removeLayer()`](https://docs.mapbox.com/mapbox-gl-js/api/#map#removelayer) map method
## Events
Payload of events contains object with properties:
- `mapboxEvent` Original Mapbox GL JS event
- `layerId` ID of current layer
- `map` Current map object
- `component` Component that emits event
### `@mousedown`
### `@mouseup`
### `@click`
### `@dblclick`
### `@mousemove`
### `@mouseenter`
### `@mouseleave`
### `@mouseover`
### `@mouseout`
### `@contextmenu`
### `@touchstart`
### `@touchend`
### `@touchcancel`
================================================
FILE: docs/api/Layers/rasterlayer.md
================================================
# RasterLayer
## Props
All common [layers props](/api/Layers/index.md#props)
### `source`
- **Type:** `Object | String`
- **Non-Synced**
- **Description:** A raster tile source.
- **See:** `Raster source` in [Mapbox Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/#sources-raster)
## Events
All common layer [events](/api/Layers/#events)
================================================
FILE: docs/api/Layers/vectorlayer.md
================================================
# VectorLayer
## Props
All common [layers props](/api/Layers/index.md#props)
### `source`
- **Type:** `Object | String`
- **Non-Synced**
- **Description:** A vector tile source.
- **See:** `Vector source` in [Mapbox Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/#sources-vector)
## Computed getters
### `getSourceFeatures(filter?)`
- **Arguments:**
- `filter` `Array` A filter to limit query results.
- **Description** Returns an array of GeoJSON Feature objects from assosiated source filtered by `filter`.
- **See** `.querySourceFeatures()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#querysourcefeatures)
### `getRenderedFeatures(geometry, filter)`
- **Arguments:**
- `filter` `Array` A filter to limit query results.
- `geometry` `Array | Object` The geometry of the query region.
- **Description** Returns an array of visible GeoJSON Feature objects from assosiated source filtered by `filter`.
- **See** `.queryRenderedFeatures()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#queryrenderedfeatures)
## Methods
### `setFeatureState(featureId, state)`
- **Arguments:**
- `featureId` `String | Number` Feature identifier.
- `state` `Object` A set of key-value pairs. The values should be valid JSON types.
- **Description** Sets the state of a feature. The state object is merged in with the existing state of the feature.
- **See** `.setFeatureState()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#setfeaturestate)
### `getFeatureState(featureId)`
- **Arguments:**
- `featureId` `String | Number` Feature identifier.
- **Description** Gets the state of a feature.
- **See** `.getFeatureState()` [map method](https://docs.mapbox.com/mapbox-gl-js/api/#map#getfeaturestate)
## Events
All common layer [events](/api/Layers/#events)
================================================
FILE: docs/api/Layers/videolayer.md
================================================
# CanvasLayer
## Props
All common [layers props](/api/Layers/index.md#props)
### `source`
- **Type:** `Object | String`
- **Non-Synced**
- **Description:** A data source containing video.
- **See:** `Video source` in [Mapbox API Docs](https://docs.mapbox.com/mapbox-gl-js/api/#videosource)
::: tip Reactivity
`coordinates` field of the `source` prop is reactive.
If you change it's value, changes automatically applied to the map.
:::
## Computed getters
### `video`
- **Description** Returns the HTML video element.
- **See** `.getVideo()` [method](https://docs.mapbox.com/mapbox-gl-js/api/#videosource#getvideo)
================================================
FILE: docs/api/controls.md
================================================
# Map control components
### Common Props
### `position`
- **Type:** `String`
- **Default:** `'top-right'`
- **Description:** position on the map to which the control will be added. Valid values are 'top-left' , 'top-right' , 'bottom-left' , and 'bottom-right'
- **See:** `position` in [addControl](https://docs.mapbox.com/mapbox-gl-js/api/map/#map#addcontrol)
### Common Props
### `position`
- **Type:** `String`
- **Default:** `'top-right'`
- **Description:** position on the map to which the control will be added. Valid values are 'top-left' , 'top-right' , 'bottom-left' , and 'bottom-right'
- **See:** `position` in [addControl](https://docs.mapbox.com/mapbox-gl-js/api/map/#map#addcontrol)
## IControl
a versatile control box for your content
### Props
none
### Slots
### `default`
Your content as text, HTML or Template, will be wrapped in div with `mapboxgl-ctrl mapboxgl-ctrl-group` classes
***See:*** [IControl](https://docs.mapbox.com/mapbox-gl-js/api/markers/#icontrol)
## AttributionControl
An AttributionControl control presents the map's attribution information.
### Props
### `compact`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If true force a compact attribution
- **See:** `options.compact` in [AttributionControl](https://docs.mapbox.com/mapbox-gl-js/api/#attributioncontrol)
### `customAttribution`
- **Type:** `string, Array<string>?`
- **Default:** `true`
- **Non-Synced**
- **Description:** String or strings to show in addition to any other attributions.
- **See:** `options.customAttribution` in [AttributionControl](https://docs.mapbox.com/mapbox-gl-js/api/#attributioncontrol)
## FullscreenControl
Creates a button on the map to toggle fulscreen mode.
### Props
### `container`
- **Type:** `HTMLElement`
- **Non-Synced**
- **Description:** DOM element which should be made full screen. By default, the map container element will be made full screen.
- **See:** `options.container` in [FullscreenControl](https://docs.mapbox.com/mapbox-gl-js/api/#fullscreencontrol)
## GeolocateControl
Provides a button that uses the browser's geolocation API to locate the user on the map.
### Props
### `positionOptions`
- **Type:** `Object`
- **Default:** `{ enableHighAccuracy: false, timeout: 6000}`
- **Non-Synced**
- **Description:** A Geolocation API PositionOptions object.
- **See:** `options.positionOptions` in [GeolocateControl](https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol)
### `fitBoundsOptions`
- **Type:** `Object`
- **Default:** `{ maxZoom:15 }`
- **Non-Synced**
- **Description:** A fitBounds options object to use when the map is panned and zoomed to the user's location.
- **See:** `options.fitBoundsOptions` in [GeolocateControl](https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol)
### `trackUserLocation`
- **Type:** `Boolean`
- **Default:** `false`
- **Non-Synced**
- **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.
- **See:** `options.trackUserLocation` in [GeolocateControl](https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol)
### `showAccuracyCircle`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **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 .
- **See:** `options.showUserLocation` in [GeolocateControl](https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol)
### `showUserLocation`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** By default a dot will be shown on the map at the user's location. Set to false to disable.
- **See:** `options.showUserLocation` in [GeolocateControl](https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol)
### Methods
### `.trigger()`
- **Description:** Trigger a geolocation
- **Returns:** `boolean`
- **See:** [trigger](https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol#trigger) GeolocateControl method
## NavigationControl
### Props
### `showCompass`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If true the compass button is included.
- **See:** `options.showCompass` in [NavigationControl](https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol)
### `showZoom`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If true the zoom-in and zoom-out buttons are included.
- **See:** `options.showZoom` in [NavigationControl](https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol)
### `visualizePitch`
- **Type:** `Boolean`
- **Default:** `false`
- **Non-Synced**
- **Description:** If true the pitch is visualized by rotating X-axis of compass.
- **See:** `options.visualizePitch` in [NavigationControl](https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol)
## ScaleControl
### Props
### `maxWidth`
- **Type:** `Number`
- **Default:** `100`
- **Non-Synced**
- **Description:** The maximum length of the scale control in pixels.
- **See:** `options.maxWidth` in [ScaleControl](https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol)
### `unit`
- **Type:** `String, "imperial" | "metric" | "nautical"`
- **Default:** `metric`
- **Non-Synced**
- **Description:** Unit of the distance
- **See:** `options.unit` in [ScaleControl](https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol)
================================================
FILE: docs/api/index.md
================================================
# GlMap
## Props
### `mapbox-gl`
- **Type**: `Object`
- **Default:** `null`
- - **Description:** `mapbox-gl` implementation. Useful for lazy-loading. If omitted, VMapbox imports mapbox-gl js dynamically.
### `map-style`
- **Type**: `String`, `Object`
- **Default:** `undefined`
- **Required**
- **Synced**
- **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.
- **See:** `options.style` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `access-token`
- **Type:** `String`
- **Default:** `undefined`
- **Non-Synced**
- **Description:** Token required to access the tiles provided by Mapbox
- **See:** [accessToken](https://docs.mapbox.com/mapbox-gl-js/api/#accesstoken)
### `container`
- **Type:** `String`, `HTMLElement`
- **Default:** `#map-{random number}`
- **Non-Synced**
- **Description:** The HTML element in which Mapbox GL JS will render the map
- **See:** `options.container` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `min-zoom`
- **Type:** `Number`
- **Default:** `0`
- **Synced**
- **Description:** Minimum zoom level of the map (0-24)
- **See:** `options.minZoom` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `max-zoom`
- **Type:** `Number`
- **Default:** `22`
- **Synced**
- **Description:** Maximum zoom level of the map (0-24)
- **See:** `options.maxZoom` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `min-pitch`
- **Type:** `Number`
- **Default:** `0`
- **Synced**
- **Description:** The minimum pitch of the map (0-60)
- **See:** `options.minPitch` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `max-pitch`
- **Type:** `Number`
- **Default:** `0`
- **Synced**
- **Description:** The maximum pitch of the map (0-60)
- **See:** `options.maxPitch` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `hash`
- **Type:** `Boolean`, `String`
- **Default:** `false`
- **Synced**
- **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.
- **See:** `options.hash` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `interactive`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If false, no mouse, touch, or keyboard listeners will be attached to the map, so it will not respond to interaction
- **See:** `options.interactive` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `bearing-snap`
- **Type:** `Number`
- **Default:** `7`
- **Non-Synced**
- **Description:** The threshold, measured in degrees, that determines when the map's bearing will snap to north
- **See:** `options.bearingSnap` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `pitch-with-rotate`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If false , the map's pitch (tilt) control with "drag to rotate" interaction will be disabled
- **See:** `options.pitchWithRotate` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `click-tolerance`
- **Type:** `Number`
- **Default:** `3`
- **Non-Synced**
- **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)
- **See:** `options.clickTolerance` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `attribution-control`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If true, an AttributionControl will be added to the map
- **See:** `options.attributionControl` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `custom-attribution`
- **Type:** `String`, `Array`
- **Default:** `null`
- **Non-Synced**
- **Description:** String or strings to show in an AttributionControl. Only applicable if `options.attributionControl` is `true`
- **See:** `options.customAttribution` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `logo-position`
- **Type:** `String`, `top-left`, `top-right`, `bottom-right`, `bottom-left`
- **Default:** `bottom-left`
- **Non-Synced**
- **Description:** A string representing the position of the Mapbox wordmark on the map
- **See:** `options.logoPosition` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `fail-if-major-performance-caveat`
- **Type:** `Boolean`
- **Default:** `false`
- **Non-Synced**
- **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)
- **See:** `options.failIfMajorPerformanceCaveat` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `preserve-drawing-buffer`
- **Type:** `Boolean`
- **Default:** `false`
- **Non-Synced**
- **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
- **See:** `options.preserveDrawingBuffer` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `antialias`
- **Type:** `Boolean`
- **Default:** `false`
- **Non-Synced**
- **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
- **See:** `options.antialias` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `refresh-expired-tiles`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If true, the map won't attempt to re-request tiles once they expire per their HTTP cacheControl / expires headers.
- **See:** `options.refreshExpiredTiles` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `max-bounds`
- **Type:** `Array`, `LngLatBoundsLike object`
- **Default:** `undefined`
- **Synced**
- **Description:** If set, the map will be constrained to the given bounds
- **See:** `options.maxBounds` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `scroll-zoom`
- **Type:** `Boolean`, `Object`
- **Default:** `true`
- **Non-Synced**
- **Description:** If true, the "scroll to zoom" interaction is enabled. An Object value is passed as options to ScrollZoomHandler#enable
- **See:** `options.scrollZoom` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `box-zoom`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If true, the "box zoom" interaction is enabled
- **See:** `options.boxZoom` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `drag-rotate`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If true, the "drag to rotate" interaction is enabled
- **See:** `options.dragRotate` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `drag-pan`
- **Type:** `Boolean`, `Object`
- **Default:** `true`
- **Non-Synced**
- **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).
- **See:** `options.dragRotate` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `keyboard`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If true, keyboard shortcuts are enabled
- **See:** `options.keyboard` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `double-click-zoom`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If true, the "double click to zoom" interaction is enabled
- **See:** `options.doubleClickZoom` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `touch-zoom-rotate`
- **Type:** `Boolean`, `Object`
- **Default:** `true`
- **Non-Synced**
- **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)
- **See:** `options.touchZoomRotate` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `touch-pitch`
- **Type:** `Boolean`, `Object`
- **Default:** `true`
- **Non-Synced**
- **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)
- **See:** `options.touchPitch` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `track-resize`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If `true`, the map will automatically resize when the browser window resizes
- **See:** `options.trackResize` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `center`
- **Type:** `Array, LngLatLike Object`
- **Default:** `undefined`
- **Synced**
- **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]`
- **See:** `options.center` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `zoom`
- **Type:** `Number`
- **Default:** `undefined`
- **Synced**
- **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`
- **See:** `options.zoom` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `bearing`
- **Type:** `Number`
- **Default:** `undefined`
- **Synced**
- **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`
- **See:** `options.bearing` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `pitch`
- **Type:** `Number`
- **Default:** `undefined`
- **Synced**
- **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`
- **See:** `options.pitch` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `bounds`
- **Type:** `Array`, `LngLatBoundsLike object`
- **Default:** `undefined`
- **Description:** The initial bounds of the map. If set, it overrides `center` and `zoom` construction options
- **See:** `options.bounds` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `fit-bounds-options`
- **Type:** `fitBounds object`
- **Default:** `undefined`
- **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
- **See:** `options.fitBoundsOptions` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `render-world-copies`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **Description:** If `true`, multiple copies of the world will be rendered, when zoomed out
- **See:** `options.renderWorldCopies` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `max-tile-cache-size`
- **Type:** `Number`
- **Default:** `null`
- **Non-Synced**
- **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.
- **See:** `options.renderWorldCopies` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `local-ideograph-font-family`
- **Type:** `String`
- **Default:** `'sans-serif'`
- **Non-Synced**
- **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.
- **See:** `options.localIdeographFontFamily` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `transform-request`
- **Type:** `Function`
- **Default:** `null`
- **Non-Synced**
- **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.
- **See:** `options.transformRequest` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `collect-resource-timing`
- **Type:** `Boolean`
- **Default:** `false`
- **Non-Synced**
- **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
- **See:** `options.collectResourceTiming` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `fade-duration`
- **Type:** `Number`
- **Default:** `300`
- **Non-Synced**
- **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.
- **See:** `options.fadeDuration` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `cross-source-collisions`
- **Type:** `Boolean`
- **Default:** `true`
- **Non-Synced**
- **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.
- **See:** `options.crossSourceCollisions` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
### `locale`
- **Type:** `Object`
- **Default:** `undefined`
- **Non-Synced**
- **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).
- **See:** `options.locale` in [Map](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)
<!-- Specific for v-mapbox -->
### `r-t-l-text-plugin-url`
- **Type:** `String`
- **Default:** `undefined`
- **Synced**
- **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.
- **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/)
### `light`
- **Type:** `Object`
- **Default:** `undefined`
- **Synced**
- **Description:** Light properties. Must conform to the Mapbox Style Specification
- **See:** See [setLight](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#setlight) Map method
### `tile-boundaries`
- **Type:** `Boolean`
- **Default:** `false`
- **Synced**
- **Description:** A Boolean indicating whether the map will render an outline around each tile. These tile boundaries are useful for debugging
- **See:** See [showTileBoundaries](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#showtileboundaries) Map property
### `collision-boxes`
- **Type:** `Boolean`
- **Default:** `false`
- **Synced**
- **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
- **See:** See [showCollisionBoxes](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#showcollisionboxes) Map property
### `repaint`
- **Type:** `Boolean`
- **Default:** `false`
- **Synced**
- **Description:** A Boolean indicating whether the map will continuously repaint. This information is useful for analyzing performance.
- **See:** See [repaint](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#repaint) Map property
## Actions
Asynchronous actions exposed via `GlMap.actions`
::: tip
[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.
:::
### `.stop(eventData?)`
- **Arguments:**
- `eventData` `{Object}` Custom data passed to corresponfing event.
- **Description:** Stops all animations on the map
- **Returns:** `{Promise<{ pitch, zoom, bearing, center }>}`
Promise that resolves object with map parameters on the moment of call `stop()`
### `.panBy(offset, options?, eventData?)`
- **Arguments:**
- `offset` `{Point | number[]}` x and y coordinates by which to pan the map
- `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)
- `eventData` `{Object}` Custom data passed to corresponfing event.
- **Description:** Pans the map by the specified offest
- **Returns:** `{Promise<{ eventData, center }>}`
Promise that resolves object with event data and new center of the map when animation ends
- **See:** [panBy](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#panby) Map method
### `.panTo(coordinates, options?, eventData?)`
- **Arguments:**
- `coordinates` `{LngLat | number[][]}` The location to pan the map to. See also: [LngLat](https://docs.mapbox.com/mapbox-gl-js/api/#lnglat)
- `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)
- `eventData` `{Object}` Custom data passed to corresponfing event.
- **Description:** Pans the map to the specified location, with an animated transition
- **Returns:** `{Promise<{ eventData, center }>}`
Promise that resolves object with event data and new center of the map when animation ends
- **See:** [panTo](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#panto) Map method
### `.zoomTo(zoom, options?, eventData?)`
- **Arguments:**
- `zoom` `{number}` The zoom level to transition to
- `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)
- `eventData` `{Object}` Custom data passed to corresponfing event.
- **Description:** Zooms the map to the specified zoom level, with an animated transition
- **Returns:** `{Promise<{ eventData, zoom }>}`
Promise that resolves object with event data and new zoom level of the map when animation ends
- **See:** [zoomTo](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#zoomto) Map method
### `.zoomIn(options?, eventData?)`
- **Arguments:**
- `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)
- `eventData` `{Object}` Custom data passed to corresponfing event.
- **Description:** Increases the map's zoom level by 1
- **Returns:** `{Promise<{ eventData, zoom }>}`
Promise that resolves object with event data and new zoom level of the map when animation ends
- **See:** [zoomIn](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#zoomin) Map method
### `.zoomOut(options?, eventData?)`
- **Arguments:**
- `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)
- `eventData` `{Object}` Custom data passed to corresponfing event.
- **Description:** Decreases the map's zoom level by 1
- **Returns:** `{Promise<{ eventData, zoom }>}`
Promise that resolves object with event data and new zoom level of the map when animation ends
- **See:** [zoomOut](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#zoomOut) Map method
### `.rotateTo(bearing, options?, eventData?)`
- **Arguments:**
- `bearing` `{number}` The desired bearing
- `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)
- `eventData` `{Object}` Custom data passed to corresponfing event.
- **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.
- **Returns:** `{Promise<{ eventData, bearing }>}`
Promise that resolves object with event data and new bearing of the map when animation ends
- **See:** [rotateTo](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#rotateto) Map method
### `.resetNorth(options?, eventData?)`
- **Arguments:**
- `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)
- **Description:** Rotates the map so that north is up (0° bearing), with an animated transition
- **Returns:** `{Promise<{ eventData, bearing }>}`
Promise that resolves object with event data and new bearing of the map when animation ends
- **See:** [resetNorth](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#resetnorth) Map method
### `.snapToNorth(options?, eventData?)`
- **Arguments:**
- `options` `{AnimationOptions object}` animation options. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)
- `eventData` `{Object}` Custom data passed to corresponfing event.
- **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).
- **Returns:** `{Promise<{ eventData, bearing }>}`
Promise that resolves object with event data and new bearing of the map when animation ends
- **See:** [snapToNorth](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#snaptonorth) Map method
### `.fitBounds(bounds, options?, eventData?)`
- **Arguments:**
- `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
- `options` `{Object}`
- `options.padding?` `{number}` The amount of padding in pixels to add to the given bounds
- `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.
- `options.easing?` An easing function for the animated transition. See [AnimationOptions](https://docs.mapbox.com/mapbox-gl-js/api/#animationoptions)
- `options.offset` `{ number[] | Point }` _default:_ `[0, 0]` The center of the given bounds relative to the map's center, measured in pixels
- `options.maxZoom?` `{number}` The maximum zoom level to allow when the map view transitions to the specified bounds
- `eventData` `{Object}` Custom data passed to corresponfing event.
- **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
- **Returns:** `{Promise<{ eventData, bounds }>}`
Promise that resolves object with event data and new bounds of the map when animation ends
- **See:** [fitBounds](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#fitbounds) Map method
### `.jumpTo(options, eventData?)`
- **Arguments:**
- `options` `{Object}` See [CameraOptions](https://docs.mapbox.com/mapbox-gl-js/api/#cameraoptions)
- `options.pitch?` `{number}` The desired pitch, in degrees
- `options.zoom?` `{number}` The desired zoom level
- `options.center?` `{number[] | LngLat}` The desired center
- `options.bearing?` `{number}` The desired bearing, in degrees
- `options.around?` `{number[] | LngLat}` If `zoom` is specified, `around` determines the point around which the zoom is centered.
- `eventData` `{Object}` Custom data passed to corresponfing event.
- **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
- **Returns:** `{Promise<{ eventData, pitch, zoom, center, bearing }>}`
Promise that resolves object with event data and new pitch, zoom, center and bearing of the map
- **See:** [jumpTo](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#jumpto) Map method
### `.easeTo(options, eventData?)`
- **Arguments:**
- `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)
- `options.pitch?` `{number}` The desired pitch, in degrees
- `options.zoom?` `{number}` The desired zoom level
- `options.center?` `{number[] | LngLat}` The desired center
- `options.bearing?` `{number}` The desired bearing, in degrees
- `options.around?` `{number[] | LngLat}` If `zoom` is specified, `around` determines the point around which the zoom is centered.
- `options.duration?` `{number}` The animation's duration, measured in milliseconds.
- `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.
- `options.offset?` `{number[] | Point}` of the target center relative to real map container center at the end of animation.
- `options.animate?` `{boolean}`: If `false`, no animation will occur
- `eventData` `{Object}` Custom data passed to corresponfing event.
- **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`
- **Returns:** `{Promise<{ eventData, pitch, zoom, center, bearing }>}`
Promise that resolves object with event data and new pitch, zoom, center and bearing of the map when animations ends
- **See:** [easeTo](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#easeto) Map method
### `.flyTo(options, eventData?)`
- **Arguments:**
- `options` `{Object}`
- `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
- `options.minZoom?` `{number}` The zero-based zoom level at the peak of the flight path. If `options.curve` is specified, this option is ignored
- `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
- `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
- `options.maxDuration?` `{number}` The animation's maximum duration, measured in milliseconds. If duration exceeds maximum duration, it resets to 0
- `eventData` `{Object}` Custom data passed to corresponfing event.
- **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
- **Returns:** `{Promise<{ eventData, pitch, zoom, center, bearing }>}`
Promise that resolves object with event data and new pitch, zoom, center and bearing of the map when animations ends
- **See:** [flyTo](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters#flyto) Map method
## Events
Payload of events contains object with properties:
- `mapboxEvent` Original Mapbox GL JS event
- `map` Current map object
- `component` Component that emits event
### `@load`
- **Description:** Fires after map fully loaded
- **Payload** `{ map, component }` `map` is Mapbox Gl JS Map object, `component` is instance of GlMap component
GlMap 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)
================================================
FILE: docs/api/marker.md
================================================
# Marker
## Props
### `offset`
- **Type**: `Array<number>`
- **Description:** The offset in pixels as a PointLike object to apply relative to the element's center. Negatives indicate left and up.
- **See:** `offset` in [Marker](https://docs.mapbox.com/mapbox-gl-js/api/#marker)
### `coordinates`
- **Type**: `Array<number>`
- **Required**
- **Synced**
- **Description:** Marker coordinates in format `[longitude, latitude]`
### `color`
- **Type**: `string`
- **Description:** The color to use for the default marker if custom marker is not provided. The default is light blue.
### `anchor`
- **Type**: `string`
- **Non-Synced**
- **Default** `center`
- **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'.
- **See** `options.anchor` in [Marker](https://docs.mapbox.com/mapbox-gl-js/api/#marker)
### `draggable`
- **Type**: `boolean`
- **Non-Synced**
- **Default** `false`
- **Description:** A boolean indicating whether or not a marker is able to be dragged to a new position on the map.
- **See** `options.draggable` in [Marker](https://docs.mapbox.com/mapbox-gl-js/api/#marker)
## Slots
### `marker`
- **Description:** Slot for custom marker. Can be HTML element or Vue component.
### `default`
- **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)
## Methods
### `.remove()`
- **Description:** Removes marker from the map.
- **Returns** `Marker` MapboxGL marker.
- **See** [Marker.remove](https://docs.mapbox.com/mapbox-gl-js/api/#marker#remove)
### `.togglePopup()`
- **Description:** Opens or closes the bound popup, depending on the current state.
- **Returns** `Marker` MapboxGL marker.
- **See** [Marker.togglePopup](https://docs.mapbox.com/mapbox-gl-js/api/#marker#togglepopup)
## Events
### `@added`
- **Description:** Fires when marker added on the map.
- **Payload** `{ component: MarkerComponent, map: Map, marker: Marker }` Object with `Marker` component, parent map and MapboxGl `Marker` object
### `@removed`
- **Description:** Fires when marker removed the map.
- **Payload** `{ component: MarkerComponent, map: Map, marker: Marker }` Object with `Marker` component, parent map and MapboxGl `Marker` object
### `@drag`
- **Description:** Fires when marker dragged if marker `draggable` prop is `true`
- **Payload** `{ component: MarkerComponent, map: Map, mapboxEvent: Event }` Object with `Marker` component, parent map and original MapboxGl event
### `@dragstart`
- **Description:** Fires when marker dragging starts if marker `draggable` prop is `true`
- **Payload** `{ component: MarkerComponent, map: Map, mapboxEvent: Event }` Object with `Marker` component, parent map and original MapboxGl event
### `@dragend`
- **Description:** Fires when marker dragging ends if marker `draggable` prop is `true`
- **Payload** `{ component: MarkerComponent, map: Map, mapboxEvent: Event }` Object with `Marker` component, parent map and original MapboxGl event
### `@click` <Badge text="experimental" type="warn"/>
- **Description:** Fires marker is clicked.
- **Payload**
```
{
component: MarkerComponent,
map: Map,
mapboxEvent: DOMEvent,
marker: Marker
}
```
Object with `Marker` component, parent map and original MapboxGl event
### `@mouseenter` <Badge text="experimental" type="warn"/>
- **Description:** Fires when mouse cursor enters marker area.
- **Payload**
```
{
component: MarkerComponent,
map: Map,
mapboxEvent: DOMEvent,
marker: Marker
}
```
Object with `Marker` component, parent map and original MapboxGl event
### `@mouseleave` <Badge text="experimental" type="warn"/>
- **Description:** Fires when mouse cursor leaves marker area.
- **Payload**
```
{
component: MarkerComponent,
map: Map,
mapboxEvent: DOMEvent,
marker: Marker
}
```
Object with `Marker` component, parent map and original MapboxGl event
================================================
FILE: docs/api/popup.md
================================================
# Popup
## Props
### `showed`
- **Type**: `Boolean`
- **non-synced**
- **Description:** If `true`, the popup showes immediately after the component is mounted.
### `closeButton`
- **Type**: `Boolean`
- **Description:** If `true`, a close button will appear in the top right corner of the popup.
- **See:** `closeButton` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup)
### `closeOnClick`
- **Type**: `Boolean`
- **Description:** If `true`, the popup will closed when the map is clicked.
- **See:** `closeOnClick` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup)
### `closeOnMove`
- **Type**: `Boolean`
- **Description:** If `true`, the popup will closed when the map moves.
- **See:** `closeOnMove` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup)
### `focusAfterOpen`
- **Type**: `Boolean`
- **Description:** If `true`, the popup will try to focus the first focusable element inside the popup.
- **See:** `closeOnClick` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup)
### `anchor`
- **Type**: `String`
- **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'.
- **See:** `anchor` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup)
### `offset`
- **Type**: `Number | Object | Array`
- **Description:** A pixel offset applied to the popup's location.
- a single number specifying a distance from the popup's location
- a PointLike specifying a constant offset
- an object of Points specifing an offset for each anchor position Negative offsets indicate left and up.
- **See:** `offset` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup)
### `coordinates`
- **Type**: `Array`
- **Description:** Popup coordinates in format `[longitude, latitude]`
- **See:** `setLngLat()` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup#setlnglat)
### `onlyText`
- **Type**: `Boolean`
- **Description:** If `true` content of the Popup treated as plain text
- **See:** `setText` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup#settext)
### `maxWidth`
- **Type**: `String`
- **Description:** A string representing the value for the maximum width. (ex: '400px')
- **See:** `maxWidth` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/#popup#setmaxwidth)
### `className`
- **Type**: `String`
- **Description:** Space-separated CSS class names to add to popup container
- **See:** `className` in [Popup](https://docs.mapbox.com/mapbox-gl-js/api/markers/#popup#addclassname)
## Slots
### `default`
- **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.
## Events
### `@added`
- **Description:** Fires when popup added on the map.
- **Payload** `{ popup: Popup }` Object with MapboxGL `Popup` object
### `@removed`
- **Description:** Fires when popup removed from the map.
- **Payload** `{ popup: Popup }` Object with MapboxGL `Popup` object
### `@open`
- **Description:** Fires when popup is opened manually or programatically.
- **Payload** `{ popup: Popup }` Object with MapboxGL `Popup` object
### `@close`
- **Description:** Fires when popup is closed manually or programatically.
- **Payload** `{ popup: Popup }` Object with MapboxGL `Popup` object
================================================
FILE: docs/guide/basemap.md
================================================
# Base map
## Adding map component
For using maps with Mapbox GL JS you need a [map style](https://mapbox.com/mapbox-gl-js/style-spec).
If you using Mapbox-hosted maps, you need to set `access_token`. Look for details in Mapbox [documentation](https://mapbox.com/help/define-access-token/).
If you using self-hosting maps on your own server you can omit this parameter.
```vue
<template>
<VMap :accessToken="accessToken" :mapStyle="mapStyle" />
</template>
<script>
import 'mapbox-gl/dist/mapbox-gl.css'
import mapbox from "mapbox-gl";
import { VMap } from "v-mapbox";
export default {
components: {
VMap
},
data() {
return {
accessToken: ACCESS_TOKEN, // your access token. Needed if you using Mapbox maps
mapStyle: MAP_STYLE // your map style
};
},
created() {
// We need to set mapbox-gl library here in order to use it in template
this.mapbox = mapbox;
}
};
</script>
```
::: tip
If you need, you can pass Mapbox-gl-js implementation as `mapboxGl` prop. May be useful for lazy-loading.
Example:
```vue
<template>
<VMap
:mapbox-gl="mapbox-gl"
:access-token="accessToken"
:map-style.sync="mapStyle"
@load="onMapLoaded"
/>
</template>
```
If none is passed, VueMapbox imports Mapbox-gl internally.
:::
### Interact with map properties as GlMap props
You can control map parameters like zoom, bearing, pitch etc. by changing props.
If 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.
Full list of props see in [API docs](/api/#props), note field 'Synced' in description
## Map loading
When map loads, `VMap` component emits `load` event. Payload of the event contains Mapbox GL JS `Map` object.
All components placed under `VMap` will be rendered only after map fully loaded.
::: warning Storing Map object
Take 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.
If you want to store map object, store it as non-reactive property like in example below.
:::
```vue
<template>
<VMap
:access-token="accessToken"
:map-style.sync="mapStyle"
@load="onMapLoaded"
/>
</template>
<script>
export default {
// …component code…
created() {
this.map = null;
},
methods: {
onMapLoaded(event) {
// in component
this.map = event.map;
// or just to store if you want have access from other components
this.$store.map = event.map;
}
}
};
</script>
```
## Map actions
Asynchronous map methods exposed at VMap component in `actions` property. They returns `Promise`, that resolves when action completed.
Promise resolves with map properties that has been changed by used action.
For example:
```vue
<script>
export default {
name: 'App',
methods: {
async onMapLoad(event) {
// Here we cathing 'load' map event
const asyncActions = event.component.actions
const newParams = await asyncActions.flyTo({
center: [30, 30],
zoom: 9,
speed: 1
})
console.log(newParams)
/* => {
center: [30, 30],
zoom: 9,
bearing: 9,
pitch: 7
}
*/
}
}
}
</script>
```
See full list of actions on [API](/api/#actions) page.
### Method `actions.stop()`
Method `.stop()` just stops all animations on map, updates props with new positions and return Promise with map parameters at the moment when `.stop()` called.
### Events
See list of events on [API](/api/#events) page.
================================================
FILE: docs/guide/composition.md
================================================
# Composition
You 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.
For example, adding map controls:
```vue
<template>
<div id="#app">
<VMap
:accessToken="accessToken"
:mapStyle.sync="mapStyle"
>
<MglNavigationControl position="top-right"/>
<MglGeolocateControl position="top-right" />
</mgl-map>
</div>
</template>
<script>
import { VMap, MglNavigationControl, MglGeolocateControl } from "v-mapbox";
export default {
components: {
VMap,
MglNavigationControl,
MglGeolocateControl
},
data() {
return {
accessToken: "some_token",
mapStyle: "style_object"
};
}
};
</script>
```
Adding a popup:
```vue
<template>
<div id="#app">
<VMap :accessToken="accessToken" :mapStyle.sync="mapStyle">
<MglNavigationControl position="top-right" />
<MglGeolocateControl position="top-right" />
<VPopup :coordinates="popupCoordinates">
<span>Hello world!</span>
</VPopup>
</VMap>
</div>
</template>
<script>
import {
VMap,
MglNavigationControl,
MglGeolocateControl,
VPopup
} from "v-mapbox";
export default {
components: {
VMap,
MglNavigationControl,
MglGeolocateControl,
VPopup
},
data() {
return {
accessToken: "some_token",
mapStyle: "style_object",
popupCoordinates: [10, 10]
};
}
};
</script>
```
v-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.
For example:
**_Popup wrapper_**:
```vue
<template>
<div class="popup-wrapper">
<VPopup :coordinates="popupCoordinates">
<span>Hello world from wrapped popup!</span>
</VPopup>
</div>
</template>
<script>
import { VPopup } from 'v-mapbox';
export default {
name: 'PopupWrapper'
components: {
VPopup
},
computed() {
popupCoordinates() {
// Here we can do some work for calculate proper coordinates
//...
return [10, 10]
}
}
}
</script>
```
**_Main component_**:
```vue
<template>
<div id="#app">
<VMap :accessToken="accessToken" :mapStyle.sync="mapStyle">
<PopupWrapper />
<!-- works! -->
</VMap>
</div>
</template>
<script>
import { VMap } from "v-mapbox";
import PopupWrapper from "PopupWrapper"; // wrapper for popup
export default {
components: {
VMap,
PopupWrapper // wrapper for popup
},
data() {
return {
accessToken: "some_token",
mapStyle: "style_object"
};
}
};
</script>
```
::: tip
VueMapbox 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.
:::
After 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.
================================================
FILE: docs/guide/controls.md
================================================
# Map controls
## Overview
Controls are UI elements for controlling the view of the map, such as scale or bearing.
You can check them out in Mapbox GL JS [documentation](https://docs.mapbox.com/mapbox-gl-js/api/#user%20interface)
In v-mapbox they exposed as Vue components, so you can control their properties and behavior dynamically by changing props.
_All controls_:
```vue
<template>
<div id="#app">
<VMap
:accessToken="accessToken"
:mapStyle.sync="mapStyle"
:attributionControl="false"
>
<MglAttributionControl />
<MglNavigationControl position="top-right" />
<MglGeolocateControl position="top-right" />
<MglNavigationControl position="top-right" />
<MglGeolocateControl position="top-right" />
<MglScaleControl />
</VMap>
</div>
</template>
<script>
import {
VMap,
MglAttributionControl,
MglNavigationControl,
MglGeolocateControl,
MglFullscreenControl,
MglScaleControl
} from "v-mapbox";
export default {
components: {
VMap,
MglNavigationControl,
MglGeolocateControl
},
data() {
return {
accessToken: "some_token",
mapStyle: "style_object"
};
}
};
</script>
```
See list of controls and they properties in [API docs](/api/controls.md).
### Attribution control
Due to Mapbox [policy](https://docs.mapbox.com/help/how-attribution-works/) attribution control
is enabled by default. You can disable default attributions by setting
`attributionControl` prop of VMap to `false` and set your own attribution
using AttributionControl component.
================================================
FILE: docs/guide/index.md
================================================
# Quickstart
## Using as ES module
### Installation
You can install v-mapbox via npm. Take note that you need to install mapbox-gl as peer dependency:
```bash
npm install --save v-mapbox mapbox-gl
```
Add Mapbox JS and CSS files to the files where you need them:
```js
import 'mapbox-gl/dist/mapbox-gl.css'
import 'v-mapbox/dist/v-mapbox.css';
import Mapbox from "mapbox-gl"
import { VMap } from "v-mapbox"
```
## Using in browser
### Installation
Add Vue, MapboxGL and v-mapbox scripts on your page:
```html
<!DOCTYPE html>
<html>
<head>
<!-- ... -->
<!-- Mapbox GL CSS -->
<link
href="https://api.tiles.mapbox.com/mapbox-gl-js/v1.13.2/mapbox-gl.css"
rel="stylesheet"
/>
<!-- v-mapbox CSS -->
<link
href="https://cdn.jsdelivr.net/npm/v-mapbox@latest/dist/v-mapbox.css"
rel="stylesheet"
/>
<!-- Mapbox GL JS -->
<script src="https://api.tiles.mapbox.com/mapbox-gl-js/v1.13.2/mapbox-gl.js"></script>
<!-- VueJS -->
<script src="https://cdn.jsdelivr.net/npm/vue@latest/dist/vue.min.js"></script>
<!-- v-mapbox -->
<script
type="text/javascript"
src="https://cdn.jsdelivr.net/npm/v-mapbox@latest/dist/v-mapbox.min.js"
></script>
<!-- ... -->
</head>
</html>
```
All components will be placed in global VueMapbox object (`VueMapbox.VMap` etc.)
================================================
FILE: docs/guide/layers-and-sources.md
================================================
# Layers and sources
## Adding layers
Geographic features on the map draws as layers.
Layer 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.
Also, 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).
v-mapbox exposes layers as Vue components.
`source` and `layer` configuration object passed to layer component as props. There is several layers types for drawing different types of sources.
For example adding a layer with GeoJSON data:
```vue
<template>
<VMap :accessToken="accessToken" :mapStyle.sync="mapStyle">
<!-- Adding navigation control -->
<MglNavigationControl position="top-right" />
<!-- Adding GeoJSON layer -->
<VLayerMapboxGeojson
:sourceId="geoJsonSource.id"
:source="geoJsonSource"
layerId="myLayer"
:layer="geoJsonlayer"
/>
</VMap>
</template>
<script>
import { VMap, MglNavigationControl, VLayerMapboxGeojson } from "v-mapbox";
export default {
components: {
VMap,
MglNavigationControl,
VLayerMapboxGeojson
},
data() {
return {
accessToken: "some_token",
mapStyle: "style_object",
geoJsonSource: {
//...some GeoJSON object
},
geoJsonLayer: {
//...some GeoJSON layer configuration object
}
};
}
};
</script>
```
In this example `geoJsonSource` can be an `object`, representing GeoJSON feature or `string` with URL to GeoJSON.
Sources 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.
By 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`.
## Reactivity
Layer 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`.
## Layer getters
GeoJSON 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.
## Layer methods
Layer components has methods `move()` and `remove()`.
First 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`.
## Layer events
Layers emits events when loading data or on user interaction like `click`. See full list of events in [API section](/api/Layers/index.md#events)
## Migration from 0.1
In versoin `0.1` layer and source options was exposed via separate props.
Since `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.
================================================
FILE: docs/guide/markers-and-popups.md
================================================
# Markers and Popups
## Marker
The Marker component is a wrapper around the [Mapbox GL Marker API](https://docs.mapbox.com/mapbox-gl-js/api/#marker).
```vue
<template>
<VMap
:accessToken="mapboxAccessToken"
:mapStyle.sync="mapStyle"
:center="coordinates"
>
<VMarker :coordinates="coordinates" color="blue" />
</VMap>
</template>
<script>
import { VMap, VMarker } from "v-mapbox";
export default {
components: {
VMap,
VMarker
},
data() {
return {
mapStyle: "mapbox://styles/mapbox/basic-v10",
coordinates: [-111.549668, 39.014]
};
}
};
</script>
```
### Props
- `color {String}` Set the color of the default marker (not applicable when using the `marker` slot)
- `coordinates {Array}` The GeoJSON coordinates for marker placement on the map
- `offset {Object, Array}` Display the marker at an offset distance from the coordinates
Full list of props you cab see on [API page](/api/marker.md#props)
### Slots
The Marker component has two slots: the `marker` slot and default slot used for popup.
#### The `marker` slot
The `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:
```vue
<template>
<VMap
:accessToken="mapboxAccessToken"
:mapStyle.sync="mapStyle"
:center="coordinates"
>
<VMarker :coordinates="coordinates">
<v-icon slot="marker">mdi-map-marker</v-icon>
</VMarker>
</VMap>
</template>
<script>
import { VMap, VMarker } from "v-mapbox";
export default {
components: {
VMap,
VMarker
},
data() {
return {
mapStyle: "mapbox://styles/mapbox/basic-v10",
coordinates: [-111.549668, 39.014]
};
}
};
</script>
```
### Default slot
Default slot allows you to specify content to display in a Mapbox popup when the marker is clicked. See [below](#markers-popups-together)
## Popup
The Popup component is wrapper around the [Mapbox GL Popup API](https://docs.mapbox.com/mapbox-gl-js/api/#popup).
You can specify content inside popup in default slot. It can be HTML or Vue component.
In this example [Vuetify card component](https://vuetifyjs.com/en/components/cards) used as a content for popup:
```vue
<template>
<VMap
:accessToken="mapboxAccessToken"
:mapStyle.sync="mapStyle"
:center="coordinates"
>
<VPopup :coordinates="coordinates" anchor="top">
<VCard> <div>Hello, I'm popup!</div> </VCard>
</VPopup>
</VMap>
</template>
<script>
import { VMap, VPopup } from "v-mapbox";
export default {
components: {
VMap,
VPopup
},
data() {
return {
mapStyle: "mapbox://styles/mapbox/basic-v10",
coordinates: [-111.549668, 39.014]
};
}
};
</script>
```
If 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.
Popups 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`
### Props
- `showed {Boolean}` If `true`, the popup shows immediately after component is created.
- `closeButton {Boolean}` If `true`, a close button will appear in the top right corner of the popup.
- `closeOnClick {Boolean}` If true, the popup will closed when the map is clicked.
- `closeOnMove {Boolean}` If true, the popup will closed when the map moves.
- `focusAfterOpen {Boolean}` If true, the popup will try to focus the first focusable element inside the popup.
- `coordinates {Array}` The GeoJSON coordinates for popup placement on the map. If popup used inside marker this prop will be ignored.
- `anchor {string}` prop specifies the part of the Popup that should be positioned closest to the coordinates point.
Full list of props you can see on [API page](/api/popup.md#props)
## Markers & Popups together
Popup often used inside of map markers. You can achive this by passing Popup inside Marker in default slot:
```vue
<template>
<VMap
:accessToken="mapboxAccessToken"
:mapStyle.sync="mapStyle"
:center="coordinates"
>
<VMarker :coordinates="coordinates">
<VPopup>
<VCard>
<div>Hello, I'm popup!</div>
</VCard>
</VPopup>
</VMarker>
</VMap>
</template>
<script>
import { VMap, VPopup, VMarker } from "v-mapbox";
export default {
components: {
VMap,
VMarker,
VPopup
},
data() {
return {
mapStyle: "mapbox://styles/mapbox/basic-v10",
coordinates: [-111.549668, 39.014]
};
}
};
</script>
```
In this case, Popup will be automatically bound to Marker. You can use `togglePopup` Marker method to toggle visibility of bound Popup.
Take note that Popup `coordinates` prop will be ignored.
================================================
FILE: docs/index.md
================================================
---
layout: home
hero:
name: V-Mapbox 🌏
image:
src: /logo.svg
alt: V-Mapbox Logo
tagline: Combine powers of Mapbox GL JS and Vue.js
actions:
- theme: brand
text: Get Started →
link: /guide/
- theme: alt
text: View on GitHub
link: https://github.com/vinayakkulkarni/v-mapbox
features:
- title: Declarative style
details: You can use map elements like layers, markers, popups as Vue components and control them via synchronized props
- title: Vuefied
details: Map elements declared as components respect Vue lifecycle, emit map events like Vue events and can be used in OOP-style
footer: MIT Licensed | Copyright © 2020-present Vinayak Kulkarni
---
<!--
<iframe src="https://codesandbox.io/embed/v-mapbox-uq9ri2?fontsize=14&hidenavigation=1&theme=dark"
style="width:50%; height:200px; border:0; border-radius: 4px; overflow:hidden;"
title="v-mapbox-vue-3"
allow="accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking"
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
></iframe>
<br />
::: tip Dependencies
[Vue.js 3.x+](https://github.com/vuejs/vue)
[maplibre-gl](https://github.com/maplibre/maplibre-gl-js)
:::
<br />
::: tip Size
~ 15 kB minified and gzipped
::: -->
================================================
FILE: docs/plugin-components/index.md
================================================
# Plugin components
VueMapbox implements wrapper for core Mapbox Gl JS library API.
Any other functions, like [Mapbox Gl JS plugins](https://docs.mapbox.com/mapbox-gl-js/plugins/) is out of scope.
However, they can be implemented as plugin components.
## Using plugin components
Using plugin components is easy. Just put component inside `VMap` components tree and pass necessary props to it.
Below is example for using [VueMapbox Geocoder](https://github.com/soal/vue-mapbox-geocoder).
```vue
<template>
<VMap :accessToken="accessToken" :mapStyle="mapStyle">
<MglGeocoderControl
:accessToken="accessToken"
:input.sync="defaultInput"
@results="handleSearch"
/>
</VMap>
</template>
<script>
import { VMap } from "v-mapbox";
import MglGeocoderControl from "v-mapbox-geocoder";
export default {
name: "App",
components: {
VMap,
MglGeocoderControl
},
data() {
return {
accessToken: "some_token",
mapStyle: "some_style",
defaultInput: "Bodhgaya"
};
},
methods: {
handleSearch(event) {
console.log(event);
}
}
};
</script>
```
If you didn't find plugin your need, it's easy to implement plugin component yourself.
VueMapbox solves map loading task and give some useful helpers.
Check out development [documentation](/plugin-components/plugin-components-development.md).
## Available plugin components
- [VueMapbox Geocoder](https://github.com/soal/vue-mapbox-geocoder)
================================================
FILE: docs/plugin-components/plugin-components-development.md
================================================
# Create a plugin component
## Overview
The 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.
Plugin components are essentially just Vue components that utilize `mapbox` and `map` objects provided by basic `VMap`.
VueMapbox internally use dependency injection mechanism of Vue ([provide/inject](https://vuejs.org/v2/api/#provide-inject) in Vue docs).
When `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).
Inject these objects in your component, and you can add to map features you need.
The 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.
## Basic example for plugin component
**App template**
```vue
<template>
<VMap :accessToken="accessToken" :mapStyle="mapStyle">
<MyPluginComponent />
</VMap>
</template>
<script>
import Mapbox from "mapbox-gl";
import { VMap } from "v-mapbox";
export default {
components: {
VMap
},
data() {
return {
accessToken: ACCESS_TOKEN,
mapStyle: MAP_STYLE
};
}
};
</script>
```
**Plugin comonent**
```vue
<template>
<button @click="fly">Fly!</button>
<div>Map center is: Lng={{ center.lng }}, Lat={{ center.lat }}</div>
</template>
<script>
import Mapbox from "mapbox-gl";
import { VMap } from "v-mapbox";
export default {
name: "MyPluginComponent"
inject: ["mapbox", "map", "actions"],
data() {
return {
center: null
};
},
created() {
this.center = this.map.getCenter();
},
methods: {
async fly() {
const flyResult = await this.actions.flyTo({ center: [10, 10] });
this.center = flyResult.center;
}
}
};
</script>
```
## VueMapbox helpers <Badge text="experimental" type="warn"/>
::: danger Experimental
Helpers are experimenatal feature and will change in future, but we will try keep backward compatibility for a long time and provide deprecation warnings.
For now they just mixins that used in VueMapbox internal implementation.
:::
Beside providing base objects, VueMapbox give some useful helper mixins, that can be used in plugin components.
You can access to them via `$helpers` named export:
```js
import { $helpers } from "v-mapbox";
const { withEvents, withSelfEvents, asControl, asLayer } = $helpers;
```
### `withEvents`
[Source](https://github.com/vinayakkulkarni/v-mapbox/blob/master/src/lib/withEvents.js).
Provides `$_emitEvent` and `$_emitMapEvent` methods to emit events in VueMapbox style.
### `withSelfEvents`
[Source](https://github.com/vinayakkulkarni/v-mapbox/blob/master/src/components/UI/withSelfEvents.js)
Provides `$_bindSelfEvents`, `$_unbindSelfEvents` and `$_emitSelfEvent`.
They can be used to bind events to Mapbox GL JS objects that emit self events instead of `Map` object like controls, markers and popups.
### `asControl`
[Source](https://github.com/vinayakkulkarni/v-mapbox/blob/master/src/components/UI/controls/controlMixin.js).
Provides backbone for Map controls (like )
### `asLayer`
[Source](https://github.com/vinayakkulkarni/v-mapbox/blob/master/src/components/layer/layerMixin.js).
Provides backbone for Map layer.
See also [layers API doc](/api/Layers/index.md)
## Creating component for Mapbox GL JS plugin
Example below can give you an idea how to create component for Mapbox GL JS plugin.
**[VueMaboxGeocoder](https://github.com/vinayakkulkarni/v-mapbox-geocoder) — wrapper for [mapbox-gl-geocoder](https://github.com/mapbox/mapbox-gl-geocoder)**:
```js
// First, there is no separate HTML to render, so we don't need template and SFC, so it's just JS file
import MapboxGeocoder from "@mapbox/mapbox-gl-geocoder";
import { $helpers } from "v-mapbox"; // Get $helpers from VueMapbox
// Define list of mapbox-gl-geocoder events
const geocoderEvents = {
clear: "clear",
loading: "loading",
results: "results",
result: "result",
error: "error"
};
export default {
name: "GeocoderControl",
mixins: [$helpers.asControl], // MapboxGeocoder is a control, so we use mixin
inject: ["mapbox", "map"], // Here we inject objects provided by VMap
props: {
// MapboxGeocoder requires access token
accessToken: {
type: String,
required: true
},
input: {
type: String,
default: null
},
proximity: {
type: Object,
default: null
}
// ...here goes other props...
},
data() {
return {
initial: true
};
},
// Here we watch for props and and apply changes to MapboxGeocoder if needed
watch: {
input: {
handler(next, prev) {
if (this.control && next !== prev) {
this.control.setInput(next);
}
},
immediate: true
},
proximity(next, prev) {
if (this.control && next !== prev) {
this.control.setProximity(next);
}
}
},
created() {
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
if (this.accessToken && !this.mapbox.accessToken) {
this.mapbox.accessToken = this.accessToken;
}
this.control = new MapboxGeocoder(this.$props); // Creating MapboxGeocoder instance and pass props as options to it
this.control.on("results", this.$_updateInput); // We need to update synchronized prop "input" when user enters some query to search field
// Now we can add control to the map
this.$_deferredMount();
},
beforeDestroy() {
this.control.off("results", this.$_updateInput);
// Also, control will be removed from map in beforeDestroy() lifecycle hook in `asControl` mixin
},
methods: {
$_deferredMount() {
// Because this component placed in VMap sub-tree, map already initialized and injected above
this.map.addControl(this.control);
if (this.input) {
// Set input in MapboxGeocoder if there is default data
this.control.setInput(this.input);
}
// Emit added event. `$_emitEvent` method is came from `asControl` mixin
this.$_emitEvent("added", { geocoder: this.control });
this.$_bindSelfEvents(Object.keys(geocoderEvents)); // Bin events to emit them as Vue events
this.initial = false; // Initialization done
},
$_bindSelfEvents(events) {
// $_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
const vm = this;
// Here we use this.$listeners to subscribe only on events that user listens on component
Object.keys(this.$listeners).forEach(eventName => {
if (events.includes(eventName)) {
this.control.on(eventName, vm.$_emitControlEvent.bind(vm, eventName));
}
});
},
// Process event to line up with VueMapbox events format
$_emitControlEvent(eventName, eventData) {
return this.$_emitSelfEvent({ type: eventName }, eventData);
},
$_updateInput(results) {
if (!this.initial) {
const input = results.query ? results.query.join("") : "";
this.$emit("update:input", input); // update synchormized prop "input"
}
}
//...here goes other public methods
}
};
```
<!-- ## Component API recommendations -->
================================================
FILE: jsr.json
================================================
{
"name": "@vinayakkulkarni/v-mapbox",
"version": "5.1.0",
"exports": "./dist/v-mapbox.js",
"publish": {
"exclude": [
"!dist"
]
}
}
================================================
FILE: lint-staged.config.cjs
================================================
module.exports = {
'*.{js,ts,vue}': 'bun run lint:js',
'*.{css,vue}': 'bun run lint:css',
};
================================================
FILE: netlify.toml
================================================
[dev]
command = "bun run docs:dev"
[build]
command = "./scripts/build.sh"
publish = "docs/.vitepress/dist"
================================================
FILE: package.json
================================================
{
"name": "v-mapbox",
"version": "5.1.0",
"description": "Maplibre (and Mapbox) with Vue 💚",
"main": "./dist/v-mapbox.js",
"module": "./dist/v-mapbox.js",
"umd": "./dist/v-mapbox.umd.cjs",
"unpkg": "./dist/v-mapbox.cjs",
"jsdelivr": "./dist/v-mapbox.cjs",
"cdn": "./dist/v-mapbox.min.js",
"exports": {
".": {
"import": "./dist/v-mapbox.js",
"require": "./dist/v-mapbox.umd.cjs"
},
"./dist/v-mapbox.css": {
"import": "./dist/v-mapbox.css",
"require": "./dist/v-mapbox.css"
}
},
"files": [
"dist"
],
"types": "./dist/index.d.ts",
"type": "module",
"scripts": {
"build": "rimraf dist && vite build && vue-tsc --declaration --emitDeclarationOnly && prettier --write ./dist/*{cjs,js,ts}",
"test": "vitest",
"test:coverage": "vitest run --coverage",
"docs:dev": "vitepress dev docs",
"docs:build": "vitepress build docs",
"docs:serve": "vitepress serve docs",
"lint": "npm run lint:prettier && npm run lint:eslint && npm run lint:css",
"lintfix": "npm run lint:prettier:fix && npm run lint:eslint:fix && npm run lint:css:fix",
"lint:js": "npm run lint:eslint && npm run lint:prettier",
"lint:eslint": "eslint \"{,!(node_modules|dist)/**/}*.{js,ts,vue}\" --ignore-path .gitignore",
"lint:eslint:fix": "eslint --fix \"{,!(node_modules|dist)/**/}*.{js,ts,vue}\" --ignore-path .gitignore",
"lint:prettier": "prettier --check \"{,!(node_modules|dist)/**/}*.{js,ts,vue}\" --ignore-path .gitignore",
"lint:prettier:fix": "prettier --write \"{,!(node_modules|dist)/**/}*.{js,ts,vue}\" --ignore-path .gitignore",
"lint:css": "stylelint \"{,!(node_modules|dist)/**/}*.{css,scss,vue}\" --ignore-path .gitignore",
"lint:css:fix": "stylelint --fix \"{,!(node_modules|dist)/**/}*.{css,scss,vue}\" --ignore-path .gitignore",
"prepare": "is-ci || husky",
"release": "shipjs prepare",
"release:auto": "shipjs prepare --yes",
"release:dry": "shipjs prepare --dry-run"
},
"peerDependencies": {
"maplibre-gl": "^4.0.0",
"vue": "^3.4.15"
},
"optionalDependencies": {
"@deck.gl/core": "^8.9.34",
"@deck.gl/layers": "^8.9.34",
"@deck.gl/mapbox": "^8.9.34"
},
"devDependencies": {
"@commitlint/cli": "^19.3.0",
"@commitlint/config-conventional": "^19.2.2",
"@deck.gl/core": "^8.9.34",
"@deck.gl/layers": "^8.9.34",
"@deck.gl/mapbox": "^8.9.34",
"@types/node": "^20.12.12",
"@typescript-eslint/eslint-plugin": "^7.9.0",
"@typescript-eslint/parser": "^7.9.0",
"@vinayakkulkarni/prettier-config-vue": "^1.0.0",
"@vitejs/plugin-vue": "^5.0.4",
"@vitest/coverage-v8": "^1.6.0",
"@vue/component-compiler-utils": "^3.3.0",
"@vue/runtime-dom": "^3.4.27",
"eslint": "^8.56.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsdoc": "^48.2.5",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-regexp": "^2.5.0",
"eslint-plugin-security": "^1.7.1",
"eslint-plugin-vue": "^9.26.0",
"happy-dom": "^14.11.0",
"husky": "^9.0.11",
"is-ci": "^3.0.1",
"lint-staged": "^15.2.2",
"maplibre-gl": "^4.3.2",
"postcss-html": "^1.7.0",
"prettier": "^3.2.5",
"rimraf": "^5.0.7",
"sass": "^1.77.2",
"shipjs": "^0.26.3",
"stylelint": "16.5.0",
"stylelint-config-recommended-vue": "1.5.0",
"stylelint-prettier": "5.0.0",
"typescript": "^5.4.5",
"vite": "^5.2.11",
"vitepress": "^1.2.0",
"vitest": "^1.6.0",
"vue": "^3.4.27",
"vue-tsc": "^2.0.19"
},
"keywords": [
"vue",
"vuejs",
"mapbox",
"mapbox-gl-js",
"mapbox-gl",
"maplibre-gl-js",
"maplibre-gl"
],
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
},
"author": {
"name": "Vinayak Kulkarni",
"email": "inbox.vinayak@gmail.com",
"url": "https://vinayakkulkarni.dev"
},
"contributors": [
{
"email": "developers@geospoc.com",
"name": "GeoSpoc Dev Team",
"url": "https://geospoc.com"
}
],
"license": "MIT",
"engines": {
"node": ">=18",
"npm": ">=9"
},
"repository": {
"type": "git",
"url": "git@github.com:geospoc/v-mapbox.git"
},
"private": false,
"sideEffects": [
"*.css"
],
"bugs": {
"url": "https://github.com/geospoc/v-mapbox/issues"
},
"homepage": "https://v-mapbox.geospoc.io/"
}
================================================
FILE: prettier.config.cjs
================================================
module.exports = {
...require('@vinayakkulkarni/prettier-config-vue'),
};
================================================
FILE: scripts/build.sh
================================================
#!/bin/bash
set -e
curl -fsSL https://bun.sh/install | bash
export PATH="/opt/buildhome/.bun/bin:$PATH"
bun --version
bun install
bun --bun run docs:build
================================================
FILE: scripts/bump-jsr-version.cjs
================================================
#!/usr/bin/env node
const fs = require('fs');
// Read package.json and parse the version
const pkg = JSON.parse(fs.readFileSync('package.json').toString());
// Read jsr.json and parse it
const jsr = JSON.parse(fs.readFileSync('jsr.json').toString());
// Update the version property in jsr object
jsr.version = pkg.version;
// Write the updated jsr.json file
fs.writeFileSync('jsr.json', JSON.stringify(jsr, null, 2));
================================================
FILE: ship.config.cjs
================================================
module.exports = {
installCommand: () => 'bun i',
beforeCommitChanges: ({ exec }) => {
exec('./scripts/bump-jsr-version.cjs');
},
};
================================================
FILE: src/constants/events/index.ts
================================================
export { mapLayerEvents } from './layer';
export { mapEvents } from './map';
export { markerDOMEvents, markerMapEvents } from './marker';
export { popupEvents } from './popup';
================================================
FILE: src/constants/events/layer.ts
================================================
import { MapLayerEventType } from 'maplibre-gl';
export const mapLayerEvents: Array<keyof MapLayerEventType> = [
'click',
'dblclick',
'mousedown',
'mouseup',
'mousemove',
'mouseenter',
'mouseleave',
'mouseover',
'mouseout',
'contextmenu',
'touchstart',
'touchend',
'touchcancel',
];
================================================
FILE: src/constants/events/map.ts
================================================
import { MapEventType } from 'maplibre-gl';
export const mapEvents: Array<keyof MapEventType> = [
'error',
'load',
'idle',
'remove',
'render',
'resize',
'webglcontextlost',
'webglcontextrestored',
'dataloading',
'data',
'tiledataloading',
'sourcedataloading',
'styledataloading',
'sourcedata',
'styledata',
'boxzoomcancel',
'boxzoomstart',
'boxzoomend',
'touchcancel',
'touchmove',
'touchend',
'touchstart',
'click',
'contextmenu',
'dblclick',
'mousemove',
'mouseup',
'mousedown',
'mouseout',
'mouseover',
'movestart',
'move',
'moveend',
'zoomstart',
'zoom',
'zoomend',
'rotatestart',
'rotate',
'rotateend',
'dragstart',
'drag',
'dragend',
'pitchstart',
'pitch',
'pitchend',
'wheel',
];
================================================
FILE: src/constants/events/marker.ts
================================================
export const markerMapEvents = ['dragstart', 'drag', 'dragend'];
export const markerDOMEvents = ['click', 'mouseenter', 'mouseleave'];
================================================
FILE: src/constants/events/popup.ts
================================================
export const popupEvents = ['open', 'close'];
================================================
FILE: src/controls/attribution/VControlAttribution.vue
================================================
<script setup lang="ts">
import type { ControlPosition, AttributionControlOptions } from './types';
import { AttributionControl } from 'maplibre-gl';
import { useSlots, onMounted } from 'vue';
import { MapKey, injectStrict } from '../../utils';
const defaultOptions: AttributionControlOptions = {
compact: false,
customAttribution: undefined,
};
const props = withDefaults(
defineProps<{
options?: AttributionControlOptions;
position?: ControlPosition;
}>(),
{
options: undefined,
position: 'bottom-right',
},
);
const slots = useSlots();
let map = injectStrict(MapKey);
onMounted(() => {
addControl();
});
const addControl = (): void => {
let options = defaultOptions;
if (props.options) {
options = {
...props.options,
};
}
if (slots && slots.default?.()) {
options.customAttribution = slots.default()[0]
.children as unknown as string;
}
const control = new AttributionControl(options);
map.value.addControl(control, props.position);
};
</script>
<template>
<slot />
</template>
================================================
FILE: src/controls/attribution/index.ts
================================================
export { default as AttributionControl } from './VControlAttribution.vue';
================================================
FILE: src/controls/attribution/types.ts
================================================
export type { ControlPosition, AttributionControlOptions } from 'maplibre-gl';
================================================
FILE: src/controls/fullscreen/VControlFullscreen.vue
================================================
<script setup lang="ts">
import type { ControlPosition, FullscreenControlOptions } from './types';
import { FullscreenControl } from 'maplibre-gl';
import { onMounted } from 'vue';
import { MapKey, injectStrict } from '../../utils';
const defaultOptions: FullscreenControlOptions = {
container: undefined,
};
const props = withDefaults(
defineProps<{
options?: FullscreenControlOptions;
position?: ControlPosition;
}>(),
{
options: undefined,
position: 'top-left',
},
);
let map = injectStrict(MapKey);
onMounted(() => {
addControl();
});
const addControl = (): void => {
const control = new FullscreenControl(props.options || defaultOptions);
map.value.addControl(control, props.position);
};
</script>
================================================
FILE: src/controls/fullscreen/index.ts
================================================
export { default as FullscreenControl } from './VControlFullscreen.vue';
================================================
FILE: src/controls/fullscreen/types.ts
================================================
export type { ControlPosition, FullscreenControlOptions } from 'maplibre-gl';
================================================
FILE: src/controls/geolocate/VControlGeolocate.vue
================================================
<script setup lang="ts">
import type { ControlPosition, GeolocateControlOptions } from './types';
import { GeolocateControl } from 'maplibre-gl';
import { onMounted } from 'vue';
import { geolocateControlEvents as events } from './events';
import { MapKey, injectStrict } from '../../utils';
const defaultOptions: GeolocateControlOptions = {
fitBoundsOptions: {
linear: false,
offset: [0, 0],
maxZoom: 22,
},
positionOptions: {
enableHighAccuracy: true,
maximumAge: 0,
timeout: 6000,
},
trackUserLocation: true,
showAccuracyCircle: true,
showUserLocation: true,
};
const props = withDefaults(
defineProps<{
options?: GeolocateControlOptions;
position?: ControlPosition;
}>(),
{
options: undefined,
position: 'top-left',
},
);
const emit = defineEmits(events);
let map = injectStrict(MapKey);
onMounted(() => {
addControl();
});
const addControl = (): void => {
const control = new GeolocateControl(props.o
gitextract_p1oo094f/ ├── .browserslistrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.cjs ├── .gitattributes ├── .github/ │ ├── dependabot.yml │ └── workflows/ │ ├── automerger.yml │ ├── ci.yml │ ├── codeql.yml │ ├── ct.yml │ ├── lint-pr.yml │ ├── pipeline.yml │ └── shipjs-trigger.yml ├── .gitignore ├── .husky/ │ ├── commit-msg │ └── pre-commit ├── .npmrc ├── .nvmrc ├── .vscode/ │ ├── extensions.json │ └── settings.json ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── bun.lockb ├── commitlint.config.cjs ├── docs/ │ ├── .vitepress/ │ │ └── config.ts │ ├── api/ │ │ ├── Layers/ │ │ │ ├── canvaslayer.md │ │ │ ├── geojsonlayer.md │ │ │ ├── imagelayer.md │ │ │ ├── index.md │ │ │ ├── rasterlayer.md │ │ │ ├── vectorlayer.md │ │ │ └── videolayer.md │ │ ├── controls.md │ │ ├── index.md │ │ ├── marker.md │ │ └── popup.md │ ├── guide/ │ │ ├── basemap.md │ │ ├── composition.md │ │ ├── controls.md │ │ ├── index.md │ │ ├── layers-and-sources.md │ │ └── markers-and-popups.md │ ├── index.md │ └── plugin-components/ │ ├── index.md │ └── plugin-components-development.md ├── jsr.json ├── lint-staged.config.cjs ├── netlify.toml ├── package.json ├── prettier.config.cjs ├── scripts/ │ ├── build.sh │ └── bump-jsr-version.cjs ├── ship.config.cjs ├── src/ │ ├── constants/ │ │ └── events/ │ │ ├── index.ts │ │ ├── layer.ts │ │ ├── map.ts │ │ ├── marker.ts │ │ └── popup.ts │ ├── controls/ │ │ ├── attribution/ │ │ │ ├── VControlAttribution.vue │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── fullscreen/ │ │ │ ├── VControlFullscreen.vue │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── geolocate/ │ │ │ ├── VControlGeolocate.vue │ │ │ ├── events.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── index.ts │ │ ├── navigation/ │ │ │ ├── VControlNavigation.vue │ │ │ ├── index.ts │ │ │ └── types.ts │ │ └── scale/ │ │ ├── VControlScale.vue │ │ ├── index.ts │ │ └── types.ts │ ├── index.ts │ ├── layers/ │ │ ├── deck.gl/ │ │ │ ├── VLayerDeckArc.vue │ │ │ └── VLayerDeckGeojson.vue │ │ └── mapbox/ │ │ ├── VLayerMapboxCanvas.vue │ │ ├── VLayerMapboxGeojson.vue │ │ ├── VLayerMapboxImage.vue │ │ ├── VLayerMapboxRaster.vue │ │ ├── VLayerMapboxVector.vue │ │ └── VLayerMapboxVideo.vue │ ├── map/ │ │ └── VMap.vue │ ├── markers/ │ │ └── VMarker.vue │ ├── popups/ │ │ └── VPopup.vue │ └── utils/ │ ├── index.ts │ ├── injects.ts │ └── symbols.ts ├── stylelint.config.cjs ├── test/ │ ├── map/ │ │ └── VMap.spec.ts │ ├── markers/ │ │ └── VMarker.spec.ts │ ├── popups/ │ │ └── VPopup.spec.ts │ └── setup/ │ └── index.ts ├── tsconfig.json ├── vite-env.d.ts ├── vite.config.ts └── vitest.config.ts
SYMBOL INDEX (1 symbols across 1 files)
FILE: src/utils/injects.ts
function injectStrict (line 10) | function injectStrict<T>(key: InjectionKey<T>, fallback?: T): T {
Condensed preview — 101 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (240K chars).
[
{
"path": ".browserslistrc",
"chars": 46,
"preview": "defaults, not IE 11, maintained node versions\n"
},
{
"path": ".editorconfig",
"chars": 207,
"preview": "# editorconfig.org\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_"
},
{
"path": ".eslintignore",
"chars": 23,
"preview": "node_modules\ndocs\ndist\n"
},
{
"path": ".eslintrc.cjs",
"chars": 1079,
"preview": "module.exports = {\n root: true,\n env: {\n browser: true,\n node: true,\n es2022: true,\n },\n parserOptions: {\n "
},
{
"path": ".gitattributes",
"chars": 65,
"preview": "# Auto detect text files and perform LF normalization\n* text=auto"
},
{
"path": ".github/dependabot.yml",
"chars": 986,
"preview": "version: 2\nupdates:\n - package-ecosystem: npm\n versioning-strategy: increase\n directory: '/'\n schedule:\n "
},
{
"path": ".github/workflows/automerger.yml",
"chars": 1167,
"preview": "name: 'Automerge Dependabot PRs'\n\non: pull_request_target\n\npermissions:\n pull-requests: write\n contents: write\n\njobs:\n"
},
{
"path": ".github/workflows/ci.yml",
"chars": 1091,
"preview": "name: 'Continuous Integration'\n\non:\n workflow_call:\n\npermissions:\n checks: write\n contents: read\n\njobs:\n ci:\n nam"
},
{
"path": ".github/workflows/codeql.yml",
"chars": 847,
"preview": "name: CodeQL\n\non:\n push:\n branches:\n - main\n pull_request:\n branches:\n - main\n schedule:\n - cron: "
},
{
"path": ".github/workflows/ct.yml",
"chars": 595,
"preview": "name: 'Continuous Testing'\n\non:\n workflow_call:\n\npermissions:\n checks: write\n contents: read\n\njobs:\n ct:\n name: '"
},
{
"path": ".github/workflows/lint-pr.yml",
"chars": 625,
"preview": "name: 'Lint PR'\n\non:\n pull_request_target:\n types:\n - opened\n - edited\n - synchronize\n\njobs:\n valida"
},
{
"path": ".github/workflows/pipeline.yml",
"chars": 661,
"preview": "name: 'The Pipeline'\n\non:\n push:\n branches:\n - main\n pull_request:\n branches:\n - main\n\nconcurrency:\n "
},
{
"path": ".github/workflows/shipjs-trigger.yml",
"chars": 1595,
"preview": "name: Ship js trigger\n\non:\n pull_request:\n types:\n - closed\n\njobs:\n publish-to-npm:\n name: 'Publishing to N"
},
{
"path": ".gitignore",
"chars": 1634,
"preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# Diagnostic reports (https://nodejs."
},
{
"path": ".husky/commit-msg",
"chars": 358,
"preview": "NAME=$(git config user.name)\nEMAIL=$(git config user.email)\n\nif [ -z \"$NAME\" ]; then\n echo \"empty git config user.nam"
},
{
"path": ".husky/pre-commit",
"chars": 27,
"preview": "bun lint-staged --no-stash\n"
},
{
"path": ".npmrc",
"chars": 69,
"preview": "registry=https://registry.npmjs.org\n@jsr:registry=https://npm.jsr.io\n"
},
{
"path": ".nvmrc",
"chars": 3,
"preview": "20\n"
},
{
"path": ".vscode/extensions.json",
"chars": 87,
"preview": "{\n \"recommendations\": [\n \"Vue.volar\",\n \"Vue.vscode-typescript-vue-plugin\"\n ]\n}\n"
},
{
"path": ".vscode/settings.json",
"chars": 125,
"preview": "{\n \"files.eol\": \"\\n\",\n \"editor.formatOnSave\": true,\n \"editor.codeActionsOnSave\": {\n \"source.fixAll\": \"explicit\"\n "
},
{
"path": "CHANGELOG.md",
"chars": 73995,
"preview": "# [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: u"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3355,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "LICENSE",
"chars": 1118,
"preview": "MIT License\n\nCopyright (c) 2017 soal, 2020-current Vinayak Kulkarni <inbox.vinayak@gmail.com>\n\nPermission is hereby gran"
},
{
"path": "README.md",
"chars": 5012,
"preview": "# V-Mapbox 🗺\n\n<a title=\"npm\" href=\"https://www.npmjs.com/package/v-mapbox\" rel=\"nofollow\">\n <img alt=\"npm\" src=\"https:/"
},
{
"path": "commitlint.config.cjs",
"chars": 70,
"preview": "module.exports = {\n extends: ['@commitlint/config-conventional'],\n};\n"
},
{
"path": "docs/.vitepress/config.ts",
"chars": 2316,
"preview": "import { defineConfig } from 'vitepress';\nimport type { DefaultTheme } from 'vitepress/types/default-theme';\n\nconst nav:"
},
{
"path": "docs/api/Layers/canvaslayer.md",
"chars": 243,
"preview": "# CanvasLayer\n\n::: tip\nMapbox GL JS docs: \n[CanvasSource](https://docs.mapbox.com/mapbox-gl-js/api/#canvassource)\n:::\n\n"
},
{
"path": "docs/api/Layers/geojsonlayer.md",
"chars": 3919,
"preview": "# GeojsonLayer\n\n## Props\n\nAll common [layers props](/api/Layers/index.md#props)\n\n### `source`\n\n- **Type:** `Object | Str"
},
{
"path": "docs/api/Layers/imagelayer.md",
"chars": 513,
"preview": "# ImageLayer\n\n## Props\n\nAll common [layers props](/api/Layers/index.md#props)\n\n### `source`\n\n- **Type:** `Object | Strin"
},
{
"path": "docs/api/Layers/index.md",
"chars": 3676,
"preview": "# Layers common\n\n## Props\n\n#### Props for Mapbox GL source\n\n### `sourceId`\n\n- **Type:** `String`\n- **Required**\n- **Non-"
},
{
"path": "docs/api/Layers/rasterlayer.md",
"chars": 356,
"preview": "# RasterLayer\n\n## Props\n\nAll common [layers props](/api/Layers/index.md#props)\n\n### `source`\n\n- **Type:** `Object | Stri"
},
{
"path": "docs/api/Layers/vectorlayer.md",
"chars": 1817,
"preview": "# VectorLayer\n\n## Props\n\nAll common [layers props](/api/Layers/index.md#props)\n\n### `source`\n\n- **Type:** `Object | Stri"
},
{
"path": "docs/api/Layers/videolayer.md",
"chars": 622,
"preview": "# CanvasLayer\n\n## Props\n\nAll common [layers props](/api/Layers/index.md#props)\n\n### `source`\n\n- **Type:** `Object | Stri"
},
{
"path": "docs/api/controls.md",
"chars": 5569,
"preview": "# Map control components\n\n### Common Props\n\n### `position`\n\n- **Type:** `String`\n- **Default:** `'top-right'`\n- **Descri"
},
{
"path": "docs/api/index.md",
"chars": 30066,
"preview": "# GlMap\n\n## Props\n\n### `mapbox-gl`\n\n- **Type**: `Object`\n- **Default:** `null`\n- - **Description:** `mapbox-gl` implemen"
},
{
"path": "docs/api/marker.md",
"chars": 4274,
"preview": "# Marker\n\n## Props\n\n### `offset`\n\n- **Type**: `Array<number>`\n- **Description:** The offset in pixels as a PointLike obj"
},
{
"path": "docs/api/popup.md",
"chars": 3563,
"preview": "# Popup\n\n## Props\n\n### `showed`\n\n- **Type**: `Boolean`\n- **non-synced**\n- **Description:** If `true`, the popup showes i"
},
{
"path": "docs/guide/basemap.md",
"chars": 3878,
"preview": "# Base map\n\n## Adding map component\n\nFor using maps with Mapbox GL JS you need a [map style](https://mapbox.com/mapbox-g"
},
{
"path": "docs/guide/composition.md",
"chars": 3039,
"preview": "# Composition\n\nYou can use Mapbox GL feature as Vue component and compose it as a child of GlMap. During creation all co"
},
{
"path": "docs/guide/controls.md",
"chars": 1575,
"preview": "# Map controls\n\n## Overview\n\nControls are UI elements for controlling the view of the map, such as scale or bearing.\nYou"
},
{
"path": "docs/guide/index.md",
"chars": 1353,
"preview": "# Quickstart\n\n## Using as ES module\n\n### Installation\n\nYou can install v-mapbox via npm. Take note that you need to inst"
},
{
"path": "docs/guide/layers-and-sources.md",
"chars": 3990,
"preview": "# Layers and sources\n\n## Adding layers\n\nGeographic features on the map draws as layers.\nLayer use `source` object that c"
},
{
"path": "docs/guide/markers-and-popups.md",
"chars": 4835,
"preview": "# Markers and Popups\n\n## Marker\n\nThe Marker component is a wrapper around the [Mapbox GL Marker API](https://docs.mapbox"
},
{
"path": "docs/index.md",
"chars": 1390,
"preview": "---\nlayout: home\nhero:\n name: V-Mapbox 🌏\n image:\n src: /logo.svg\n alt: V-Mapbox Logo\n tagline: Combine powers o"
},
{
"path": "docs/plugin-components/index.md",
"chars": 1467,
"preview": "# Plugin components\n\nVueMapbox implements wrapper for core Mapbox Gl JS library API. \nAny other functions, like [Mapbox"
},
{
"path": "docs/plugin-components/plugin-components-development.md",
"chars": 7774,
"preview": "# Create a plugin component\n\n## Overview\n\nThe purpose VueMapbox is to wrap up Mapbox Gl JS library. Any other functions "
},
{
"path": "jsr.json",
"chars": 155,
"preview": "{\n \"name\": \"@vinayakkulkarni/v-mapbox\",\n \"version\": \"5.1.0\",\n \"exports\": \"./dist/v-mapbox.js\",\n \"publish\": {\n \"ex"
},
{
"path": "lint-staged.config.cjs",
"chars": 97,
"preview": "module.exports = {\n '*.{js,ts,vue}': 'bun run lint:js',\n '*.{css,vue}': 'bun run lint:css',\n};\n"
},
{
"path": "netlify.toml",
"chars": 108,
"preview": "[dev]\ncommand = \"bun run docs:dev\"\n\n[build]\ncommand = \"./scripts/build.sh\"\npublish = \"docs/.vitepress/dist\"\n"
},
{
"path": "package.json",
"chars": 4431,
"preview": "{\n \"name\": \"v-mapbox\",\n \"version\": \"5.1.0\",\n \"description\": \"Maplibre (and Mapbox) with Vue 💚\",\n \"main\": \"./dist/v-m"
},
{
"path": "prettier.config.cjs",
"chars": 76,
"preview": "module.exports = {\n ...require('@vinayakkulkarni/prettier-config-vue'),\n};\n"
},
{
"path": "scripts/build.sh",
"chars": 155,
"preview": "#!/bin/bash\nset -e\ncurl -fsSL https://bun.sh/install | bash\nexport PATH=\"/opt/buildhome/.bun/bin:$PATH\"\nbun --version\nbu"
},
{
"path": "scripts/bump-jsr-version.cjs",
"chars": 418,
"preview": "#!/usr/bin/env node\nconst fs = require('fs');\n// Read package.json and parse the version\nconst pkg = JSON.parse(fs.readF"
},
{
"path": "ship.config.cjs",
"chars": 143,
"preview": "module.exports = {\n installCommand: () => 'bun i',\n beforeCommitChanges: ({ exec }) => {\n exec('./scripts/bump-jsr-"
},
{
"path": "src/constants/events/index.ts",
"chars": 177,
"preview": "export { mapLayerEvents } from './layer';\nexport { mapEvents } from './map';\nexport { markerDOMEvents, markerMapEvents }"
},
{
"path": "src/constants/events/layer.ts",
"chars": 310,
"preview": "import { MapLayerEventType } from 'maplibre-gl';\n\nexport const mapLayerEvents: Array<keyof MapLayerEventType> = [\n 'cli"
},
{
"path": "src/constants/events/map.ts",
"chars": 780,
"preview": "import { MapEventType } from 'maplibre-gl';\n\nexport const mapEvents: Array<keyof MapEventType> = [\n 'error',\n 'load',\n"
},
{
"path": "src/constants/events/marker.ts",
"chars": 135,
"preview": "export const markerMapEvents = ['dragstart', 'drag', 'dragend'];\nexport const markerDOMEvents = ['click', 'mouseenter', "
},
{
"path": "src/constants/events/popup.ts",
"chars": 46,
"preview": "export const popupEvents = ['open', 'close'];\n"
},
{
"path": "src/controls/attribution/VControlAttribution.vue",
"chars": 1133,
"preview": "<script setup lang=\"ts\">\n import type { ControlPosition, AttributionControlOptions } from './types';\n import { Attribu"
},
{
"path": "src/controls/attribution/index.ts",
"chars": 75,
"preview": "export { default as AttributionControl } from './VControlAttribution.vue';\n"
},
{
"path": "src/controls/attribution/types.ts",
"chars": 79,
"preview": "export type { ControlPosition, AttributionControlOptions } from 'maplibre-gl';\n"
},
{
"path": "src/controls/fullscreen/VControlFullscreen.vue",
"chars": 791,
"preview": "<script setup lang=\"ts\">\n import type { ControlPosition, FullscreenControlOptions } from './types';\n import { Fullscre"
},
{
"path": "src/controls/fullscreen/index.ts",
"chars": 73,
"preview": "export { default as FullscreenControl } from './VControlFullscreen.vue';\n"
},
{
"path": "src/controls/fullscreen/types.ts",
"chars": 78,
"preview": "export type { ControlPosition, FullscreenControlOptions } from 'maplibre-gl';\n"
},
{
"path": "src/controls/geolocate/VControlGeolocate.vue",
"chars": 1255,
"preview": "<script setup lang=\"ts\">\n import type { ControlPosition, GeolocateControlOptions } from './types';\n import { Geolocate"
},
{
"path": "src/controls/geolocate/events.ts",
"chars": 153,
"preview": "export const geolocateControlEvents: string[] = [\n 'geolocate',\n 'error',\n 'outofmaxbounds',\n 'trackuserlocationstar"
},
{
"path": "src/controls/geolocate/index.ts",
"chars": 71,
"preview": "export { default as GeolocateControl } from './VControlGeolocate.vue';\n"
},
{
"path": "src/controls/geolocate/types.ts",
"chars": 77,
"preview": "export type { ControlPosition, GeolocateControlOptions } from 'maplibre-gl';\n"
},
{
"path": "src/controls/index.ts",
"chars": 345,
"preview": "export { AttributionControl as VControlAttribution } from './attribution';\nexport { FullscreenControl as VControlFullscr"
},
{
"path": "src/controls/navigation/VControlNavigation.vue",
"chars": 825,
"preview": "<script setup lang=\"ts\">\n import type { ControlPosition, NavigationControlOptions } from './types';\n import { Navigati"
},
{
"path": "src/controls/navigation/index.ts",
"chars": 73,
"preview": "export { default as NavigationControl } from './VControlNavigation.vue';\n"
},
{
"path": "src/controls/navigation/types.ts",
"chars": 78,
"preview": "export type { ControlPosition, NavigationControlOptions } from 'maplibre-gl';\n"
},
{
"path": "src/controls/scale/VControlScale.vue",
"chars": 773,
"preview": "<script setup lang=\"ts\">\n import type { ControlPosition, ScaleControlOptions } from './types';\n import { onMounted, in"
},
{
"path": "src/controls/scale/index.ts",
"chars": 63,
"preview": "export { default as ScaleControl } from './VControlScale.vue';\n"
},
{
"path": "src/controls/scale/types.ts",
"chars": 73,
"preview": "export type { ControlPosition, ScaleControlOptions } from 'maplibre-gl';\n"
},
{
"path": "src/index.ts",
"chars": 1293,
"preview": "// Controls\nimport {\n VControlAttribution,\n VControlFullscreen,\n VControlGeolocate,\n VControlNavigation,\n VControlS"
},
{
"path": "src/layers/deck.gl/VLayerDeckArc.vue",
"chars": 1838,
"preview": "<script lang=\"ts\">\n // @ts-ignore\n import { ArcLayer } from '@deck.gl/layers';\n // @ts-ignore\n import { MapboxLayer "
},
{
"path": "src/layers/deck.gl/VLayerDeckGeojson.vue",
"chars": 1915,
"preview": "<script lang=\"ts\">\n // @ts-ignore\n import { GeoJsonLayer } from '@deck.gl/layers';\n // @ts-ignore\n import { MapboxLa"
},
{
"path": "src/layers/mapbox/VLayerMapboxCanvas.vue",
"chars": 2279,
"preview": "<template>\n <div>\n <slot />\n </div>\n</template>\n<script lang=\"ts\">\n import type { FeatureCollection } from 'geojso"
},
{
"path": "src/layers/mapbox/VLayerMapboxGeojson.vue",
"chars": 2326,
"preview": "<template>\n <div>\n <slot />\n </div>\n</template>\n<script lang=\"ts\">\n import type {\n LayerSpecification as AnyLay"
},
{
"path": "src/layers/mapbox/VLayerMapboxImage.vue",
"chars": 2120,
"preview": "<template>\n <div>\n <slot />\n </div>\n</template>\n<script lang=\"ts\">\n import type {\n LayerSpecification as AnyLay"
},
{
"path": "src/layers/mapbox/VLayerMapboxRaster.vue",
"chars": 2250,
"preview": "<template>\n <div>\n <slot />\n </div>\n</template>\n<script lang=\"ts\">\n import type { FeatureCollection } from 'geojso"
},
{
"path": "src/layers/mapbox/VLayerMapboxVector.vue",
"chars": 2120,
"preview": "<template>\n <div>\n <slot />\n </div>\n</template>\n<script lang=\"ts\">\n import type {\n LayerSpecification as AnyLay"
},
{
"path": "src/layers/mapbox/VLayerMapboxVideo.vue",
"chars": 2117,
"preview": "<template>\n <div>\n <slot />\n </div>\n</template>\n<script lang=\"ts\">\n import type {\n LayerSpecification as AnyLay"
},
{
"path": "src/map/VMap.vue",
"chars": 1361,
"preview": "<script setup lang=\"ts\">\n import type { MapOptions, MapEventType } from 'maplibre-gl';\n import type { Ref } from 'vue'"
},
{
"path": "src/markers/VMarker.vue",
"chars": 5504,
"preview": "<script lang=\"ts\">\n import type { LngLatLike, MarkerOptions, PopupOptions } from 'maplibre-gl';\n import { Marker } fro"
},
{
"path": "src/popups/VPopup.vue",
"chars": 3402,
"preview": "<script lang=\"ts\">\n import type { LngLatLike, Map, Marker, PopupOptions } from 'maplibre-gl';\n import type { PropType,"
},
{
"path": "src/utils/index.ts",
"chars": 78,
"preview": "export { injectStrict } from './injects';\nexport { MapKey } from './symbols';\n"
},
{
"path": "src/utils/injects.ts",
"chars": 472,
"preview": "import type { InjectionKey } from 'vue';\nimport { inject } from 'vue';\n\n/**\n * Dependency injection 🥳\n * @param {Injecti"
},
{
"path": "src/utils/symbols.ts",
"chars": 161,
"preview": "import type { Map } from 'maplibre-gl';\nimport type { InjectionKey, Ref } from 'vue';\n\nconst MapKey: InjectionKey<Ref<Ma"
},
{
"path": "stylelint.config.cjs",
"chars": 285,
"preview": "module.exports = {\n plugins: ['stylelint-prettier'],\n extends: ['stylelint-config-recommended-vue'],\n ignoreFiles: ['"
},
{
"path": "test/map/VMap.spec.ts",
"chars": 154,
"preview": "import { test, expect } from 'vitest';\nimport VMap from '../../src/map/VMap.vue';\n\ntest('mount component', async () => {"
},
{
"path": "test/markers/VMarker.spec.ts",
"chars": 167,
"preview": "import { test, expect } from 'vitest';\nimport VMarker from '../../src/markers/VMarker.vue';\n\ntest('mount component', asy"
},
{
"path": "test/popups/VPopup.spec.ts",
"chars": 163,
"preview": "import { test, expect } from 'vitest';\nimport VPopup from '../../src/popups/VPopup.vue';\n\ntest('mount component', async "
},
{
"path": "test/setup/index.ts",
"chars": 214,
"preview": "import { URL } from 'node:url';\nimport { Blob } from 'buffer';\n\n// @ts-ignore\nglobalThis.URL = URL;\n// https://github.co"
},
{
"path": "tsconfig.json",
"chars": 647,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"esnext\",\n \"module\": \"esnext\",\n \"moduleResolution\": \"bundler\",\n \"skipLib"
},
{
"path": "vite-env.d.ts",
"chars": 189,
"preview": "/// <reference types=\"vite/client\" />\n\ndeclare module '*.vue' {\n import type { DefineComponent } from 'vue';\n const co"
},
{
"path": "vite.config.ts",
"chars": 1485,
"preview": "import { resolve } from 'node:path';\nimport { defineConfig } from 'vite';\nimport vue from '@vitejs/plugin-vue';\nimport p"
},
{
"path": "vitest.config.ts",
"chars": 271,
"preview": "/// <reference types=\"vitest\" />\n\nimport { defineConfig } from 'vite';\nimport Vue from '@vitejs/plugin-vue';\n\nexport def"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the geospoc/v-mapbox GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 101 files (221.6 KB), approximately 71.6k tokens, and a symbol index with 1 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.