Merge branch 'umami-software:master' into Yashh56

This commit is contained in:
Yash 2025-10-21 11:19:17 +05:30 committed by GitHub
commit dda0802220
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
29 changed files with 3950 additions and 936 deletions

View file

@ -1,4 +1,4 @@
name: Create docker images
name: Create docker images (cloud)
on:
push:

View file

@ -1,58 +0,0 @@
name: Create docker images (manual)
on:
workflow_dispatch:
inputs:
version:
type: string
description: Version
required: true
jobs:
build:
name: Build, push, and deploy
runs-on: ubuntu-latest
strategy:
matrix:
db-type: [postgresql, mysql]
steps:
- uses: actions/checkout@v3
- name: Extract version parts from input
id: extract_version
run: |
echo "version=$(echo ${{ github.event.inputs.version }})" >> $GITHUB_ENV
echo "major=$(echo ${{ github.event.inputs.version }} | cut -d. -f1)" >> $GITHUB_ENV
echo "minor=$(echo ${{ github.event.inputs.version }} | cut -d. -f2)" >> $GITHUB_ENV
- name: Generate tags
id: generate_tags
run: |
echo "tag_major=$(echo ${{ matrix.db-type }}-${{ env.major }})" >> $GITHUB_ENV
echo "tag_minor=$(echo ${{ matrix.db-type }}-${{ env.major }}.${{ env.minor }})" >> $GITHUB_ENV
echo "tag_patch=$(echo ${{ matrix.db-type }}-${{ env.version }})" >> $GITHUB_ENV
echo "tag_latest=$(echo ${{ matrix.db-type }}-latest)" >> $GITHUB_ENV
- uses: mr-smithers-excellent/docker-build-push@v6
name: Build & push Docker image to ghcr.io for ${{ matrix.db-type }}
with:
image: umami
tags: ${{ env.tag_major }}, ${{ env.tag_minor }}, ${{ env.tag_patch }}, ${{ env.tag_latest }}
buildArgs: DATABASE_TYPE=${{ matrix.db-type }}
registry: ghcr.io
multiPlatform: true
platform: linux/amd64,linux/arm64
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: mr-smithers-excellent/docker-build-push@v6
name: Build & push Docker image to docker.io for ${{ matrix.db-type }}
with:
image: umamisoftware/umami
tags: ${{ env.tag_major }}, ${{ env.tag_minor }}, ${{ env.tag_patch }}, ${{ env.tag_latest }}
buildArgs: DATABASE_TYPE=${{ matrix.db-type }}
registry: docker.io
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

View file

@ -1,50 +1,80 @@
name: Create docker images
on: [create]
on:
push:
tags:
- 'v*.*.*'
workflow_dispatch:
jobs:
build:
name: Build, push, and deploy
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
id-token: write
strategy:
matrix:
db-type: [postgresql, mysql]
db-type: [postgresql]
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v5
- name: Set env
run: |
echo "NOW=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV
- name: Generate tags
id: generate_tags
run: |
echo "tag_patch=$(echo ${{ matrix.db-type }})-${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
echo "tag_minor=$(echo ${{ matrix.db-type }})-$(echo ${GITHUB_REF#refs/tags/} | cut -d. -f1,2)" >> $GITHUB_ENV
echo "tag_major=$(echo ${{ matrix.db-type }})-$(echo ${GITHUB_REF#refs/tags/} | cut -d. -f1)" >> $GITHUB_ENV
echo "tag_latest=$(echo ${{ matrix.db-type }})-latest" >> $GITHUB_ENV
# Install cosign (for image signing)
- name: Install cosign
uses: sigstore/cosign-installer@v3
- uses: mr-smithers-excellent/docker-build-push@v6
name: Build & push Docker image to ghcr.io for ${{ matrix.db-type }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log into Docker Hub
if: github.repository == 'umami-software/umami'
uses: docker/login-action@v3
with:
registry: docker.io
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Log into GHCR
uses: docker/login-action@v3
with:
image: umami
tags: ${{ env.tag_major }}, ${{ env.tag_minor }}, ${{ env.tag_patch }}, ${{ env.tag_latest }}
buildArgs: DATABASE_TYPE=${{ matrix.db-type }}
registry: ghcr.io
multiPlatform: true
platform: linux/amd64,linux/arm64
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: mr-smithers-excellent/docker-build-push@v6
name: Build & push Docker image to docker.io for ${{ matrix.db-type }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
image: umamisoftware/umami
tags: ${{ env.tag_major }}, ${{ env.tag_minor }}, ${{ env.tag_patch }}, ${{ env.tag_latest }}
buildArgs: DATABASE_TYPE=${{ matrix.db-type }}
registry: docker.io
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
images: |
umamisoftware/umami,enable=${{ github.repository == 'umami-software/umami' }}
ghcr.io/${{ github.repository }}
flavor: |
latest=auto
prefix=${{ matrix.db-type }}-
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v6
with:
context: .
platforms: linux/amd64,linux/arm64
build-args: DATABASE_TYPE=${{ matrix.db-type }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
# Sign the published image digest
- name: Sign the published Docker image
env:
TAGS: ${{ steps.meta.outputs.tags }}
DIGEST: ${{ steps.build-and-push.outputs.digest }}
run: echo "${TAGS}" | xargs -I {} cosign sign --yes "{}@${DIGEST}"

View file

@ -19,20 +19,26 @@ jobs:
matrix:
include:
- node-version: 18.18
pnpm-version: 10
db-type: postgresql
- node-version: 18.18
pnpm-version: 10
db-type: mysql
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4 # required so that setup-node will work
with:
version: ${{ matrix.pnpm-version }}
run_install: false
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'yarn'
cache: 'pnpm'
env:
DATABASE_TYPE: ${{ matrix.db-type }}
- run: npm install --global yarn
- run: yarn install
- run: yarn test
- run: yarn build
- run: npm install --global pnpm
- run: pnpm install
- run: pnpm test
- run: pnpm build

View file

@ -0,0 +1,22 @@
name: Delete untagged GHCR images
on:
workflow_dispatch: # Run manually from the Actions tab
jobs:
cleanup:
name: Delete all untagged images
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
steps:
- name: Delete untagged GHCR images
uses: actions/delete-package-versions@v5
with:
package-name: "umami" # 👈 change if your GHCR package name differs
package-type: "container"
delete-only-untagged-versions: true
min-versions-to-keep: 0

1
.gitignore vendored
View file

@ -4,6 +4,7 @@
node_modules
.pnp
.pnp.js
.pnpm-store
# testing
/coverage

View file

@ -43,7 +43,7 @@ A detailed getting started guide can be found at [umami.is/docs](https://umami.i
```bash
git clone https://github.com/umami-software/umami.git
cd umami
npm install
pnpm install
```
### Configure Umami
@ -64,7 +64,7 @@ mysql://username:mypassword@localhost:3306/mydb
### Build the Application
```bash
npm run build
pnpm run build
```
_The build step will create tables in your database if you are installing for the first time. It will also create a login user with username **admin** and password **umami**._
@ -72,7 +72,7 @@ _The build step will create tables in your database if you are installing for th
### Start the Application
```bash
npm run start
pnpm run start
```
_By default, this will launch the application on `http://localhost:3000`. You will need to either [proxy](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/) requests from your web server or change the [port](https://nextjs.org/docs/api-reference/cli#production) to serve the application directly._
@ -107,8 +107,8 @@ To get the latest features, simply do a pull, install any new dependencies, and
```bash
git pull
npm install
npm run build
pnpm install
pnpm run build
```
To update the Docker image, simply pull the new images and rebuild:

View file

@ -149,6 +149,21 @@ describe('Website API tests', () => {
});
});
it('Updates a website with only shareId.', () => {
cy.request({
method: 'POST',
url: `/api/websites/${websiteId}`,
headers: {
'Content-Type': 'application/json',
Authorization: Cypress.env('authorization'),
},
body: { shareId: 'ABCDEF' },
}).then(response => {
expect(response.status).to.eq(200);
expect(response.body).to.have.property('shareId', 'ABCDEF');
});
});
it('Resets a website by removing all data related to the website.', () => {
cy.request({
method: 'POST',

View file

@ -3,7 +3,7 @@ services:
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
ports:
- "3000:3000"
- '3000:3000'
environment:
DATABASE_URL: postgresql://umami:umami@db:5432/umami
DATABASE_TYPE: postgresql
@ -14,7 +14,7 @@ services:
init: true
restart: always
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
test: ['CMD-SHELL', 'curl http://localhost:3000/api/heartbeat']
interval: 5s
timeout: 5s
retries: 5
@ -28,7 +28,7 @@ services:
- umami-db-data:/var/lib/postgresql/data
restart: always
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}']
interval: 5s
timeout: 5s
retries: 5

View file

@ -104,7 +104,7 @@
"kafkajs": "^2.1.0",
"maxmind": "^4.3.24",
"md5": "^2.3.0",
"next": "15.3.3",
"next": "15.4.7",
"node-fetch": "^3.2.8",
"npm-run-all": "^4.1.5",
"papaparse": "^5.5.3",

381
pnpm-lock.yaml generated
View file

@ -123,8 +123,8 @@ importers:
specifier: ^2.3.0
version: 2.3.0
next:
specifier: 15.3.3
version: 15.3.3(@babel/core@7.28.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
specifier: 15.4.7
version: 15.4.7(@babel/core@7.28.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
node-fetch:
specifier: ^3.2.8
version: 3.3.2
@ -1317,8 +1317,8 @@ packages:
'@emnapi/core@1.4.5':
resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==}
'@emnapi/runtime@1.4.5':
resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==}
'@emnapi/runtime@1.5.0':
resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==}
'@emnapi/wasi-threads@1.0.4':
resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==}
@ -1589,124 +1589,128 @@ packages:
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
deprecated: Use @eslint/object-schema instead
'@img/sharp-darwin-arm64@0.34.3':
resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==}
'@img/colour@1.0.0':
resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==}
engines: {node: '>=18'}
'@img/sharp-darwin-arm64@0.34.4':
resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [darwin]
'@img/sharp-darwin-x64@0.34.3':
resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==}
'@img/sharp-darwin-x64@0.34.4':
resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [darwin]
'@img/sharp-libvips-darwin-arm64@1.2.0':
resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==}
'@img/sharp-libvips-darwin-arm64@1.2.3':
resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==}
cpu: [arm64]
os: [darwin]
'@img/sharp-libvips-darwin-x64@1.2.0':
resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==}
'@img/sharp-libvips-darwin-x64@1.2.3':
resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==}
cpu: [x64]
os: [darwin]
'@img/sharp-libvips-linux-arm64@1.2.0':
resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==}
'@img/sharp-libvips-linux-arm64@1.2.3':
resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==}
cpu: [arm64]
os: [linux]
'@img/sharp-libvips-linux-arm@1.2.0':
resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==}
'@img/sharp-libvips-linux-arm@1.2.3':
resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==}
cpu: [arm]
os: [linux]
'@img/sharp-libvips-linux-ppc64@1.2.0':
resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==}
'@img/sharp-libvips-linux-ppc64@1.2.3':
resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==}
cpu: [ppc64]
os: [linux]
'@img/sharp-libvips-linux-s390x@1.2.0':
resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==}
'@img/sharp-libvips-linux-s390x@1.2.3':
resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==}
cpu: [s390x]
os: [linux]
'@img/sharp-libvips-linux-x64@1.2.0':
resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==}
'@img/sharp-libvips-linux-x64@1.2.3':
resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==}
cpu: [x64]
os: [linux]
'@img/sharp-libvips-linuxmusl-arm64@1.2.0':
resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==}
'@img/sharp-libvips-linuxmusl-arm64@1.2.3':
resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==}
cpu: [arm64]
os: [linux]
'@img/sharp-libvips-linuxmusl-x64@1.2.0':
resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==}
'@img/sharp-libvips-linuxmusl-x64@1.2.3':
resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==}
cpu: [x64]
os: [linux]
'@img/sharp-linux-arm64@0.34.3':
resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==}
'@img/sharp-linux-arm64@0.34.4':
resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
'@img/sharp-linux-arm@0.34.3':
resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==}
'@img/sharp-linux-arm@0.34.4':
resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm]
os: [linux]
'@img/sharp-linux-ppc64@0.34.3':
resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==}
'@img/sharp-linux-ppc64@0.34.4':
resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ppc64]
os: [linux]
'@img/sharp-linux-s390x@0.34.3':
resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==}
'@img/sharp-linux-s390x@0.34.4':
resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x]
os: [linux]
'@img/sharp-linux-x64@0.34.3':
resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==}
'@img/sharp-linux-x64@0.34.4':
resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
'@img/sharp-linuxmusl-arm64@0.34.3':
resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==}
'@img/sharp-linuxmusl-arm64@0.34.4':
resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
'@img/sharp-linuxmusl-x64@0.34.3':
resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==}
'@img/sharp-linuxmusl-x64@0.34.4':
resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
'@img/sharp-wasm32@0.34.3':
resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==}
'@img/sharp-wasm32@0.34.4':
resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [wasm32]
'@img/sharp-win32-arm64@0.34.3':
resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==}
'@img/sharp-win32-arm64@0.34.4':
resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [win32]
'@img/sharp-win32-ia32@0.34.3':
resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==}
'@img/sharp-win32-ia32@0.34.4':
resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ia32]
os: [win32]
'@img/sharp-win32-x64@0.34.3':
resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==}
'@img/sharp-win32-x64@0.34.4':
resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [win32]
@ -1826,56 +1830,56 @@ packages:
resolution: {integrity: sha512-F+HiQaUpISBmooALpwDULoCCwUhI6MugEEBstjuxOL2rh2ROFhK4abv87f4GxVXRSmw0AtXAp2eiP8vHcZ3NKQ==}
engines: {node: '>=18.0.0'}
'@next/env@15.3.3':
resolution: {integrity: sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==}
'@next/env@15.4.7':
resolution: {integrity: sha512-PrBIpO8oljZGTOe9HH0miix1w5MUiGJ/q83Jge03mHEE0E3pyqzAy2+l5G6aJDbXoobmxPJTVhbCuwlLtjSHwg==}
'@next/eslint-plugin-next@14.2.30':
resolution: {integrity: sha512-mvVsMIutMxQ4NGZEMZ1kiBNc+la8Xmlk30bKUmCPQz2eFkmsLv54Mha8QZarMaCtSPkkFA1TMD+FIZk0l/PpzA==}
'@next/swc-darwin-arm64@15.3.3':
resolution: {integrity: sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==}
'@next/swc-darwin-arm64@15.4.7':
resolution: {integrity: sha512-2Dkb+VUTp9kHHkSqtws4fDl2Oxms29HcZBwFIda1X7Ztudzy7M6XF9HDS2dq85TmdN47VpuhjE+i6wgnIboVzQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
'@next/swc-darwin-x64@15.3.3':
resolution: {integrity: sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==}
'@next/swc-darwin-x64@15.4.7':
resolution: {integrity: sha512-qaMnEozKdWezlmh1OGDVFueFv2z9lWTcLvt7e39QA3YOvZHNpN2rLs/IQLwZaUiw2jSvxW07LxMCWtOqsWFNQg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
'@next/swc-linux-arm64-gnu@15.3.3':
resolution: {integrity: sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==}
'@next/swc-linux-arm64-gnu@15.4.7':
resolution: {integrity: sha512-ny7lODPE7a15Qms8LZiN9wjNWIeI+iAZOFDOnv2pcHStncUr7cr9lD5XF81mdhrBXLUP9yT9RzlmSWKIazWoDw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@next/swc-linux-arm64-musl@15.3.3':
resolution: {integrity: sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==}
'@next/swc-linux-arm64-musl@15.4.7':
resolution: {integrity: sha512-4SaCjlFR/2hGJqZLLWycccy1t+wBrE/vyJWnYaZJhUVHccpGLG5q0C+Xkw4iRzUIkE+/dr90MJRUym3s1+vO8A==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@next/swc-linux-x64-gnu@15.3.3':
resolution: {integrity: sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==}
'@next/swc-linux-x64-gnu@15.4.7':
resolution: {integrity: sha512-2uNXjxvONyRidg00VwvlTYDwC9EgCGNzPAPYbttIATZRxmOZ3hllk/YYESzHZb65eyZfBR5g9xgCZjRAl9YYGg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@next/swc-linux-x64-musl@15.3.3':
resolution: {integrity: sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==}
'@next/swc-linux-x64-musl@15.4.7':
resolution: {integrity: sha512-ceNbPjsFgLscYNGKSu4I6LYaadq2B8tcK116nVuInpHHdAWLWSwVK6CHNvCi0wVS9+TTArIFKJGsEyVD1H+4Kg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@next/swc-win32-arm64-msvc@15.3.3':
resolution: {integrity: sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==}
'@next/swc-win32-arm64-msvc@15.4.7':
resolution: {integrity: sha512-pZyxmY1iHlZJ04LUL7Css8bNvsYAMYOY9JRwFA3HZgpaNKsJSowD09Vg2R9734GxAcLJc2KDQHSCR91uD6/AAw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
'@next/swc-win32-x64-msvc@15.3.3':
resolution: {integrity: sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==}
'@next/swc-win32-x64-msvc@15.4.7':
resolution: {integrity: sha512-HjuwPJ7BeRzgl3KrjKqD2iDng0eQIpIReyhpF5r4yeAHFwWRuAhfW92rWv/r3qeQHEwHsLRzFDvMqRjyM5DI6A==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@ -2151,9 +2155,6 @@ packages:
resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==}
engines: {node: '>=14'}
'@swc/counter@0.1.3':
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
@ -2802,10 +2803,6 @@ packages:
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
busboy@1.6.0:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
cachedir@2.4.0:
resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==}
engines: {node: '>=6'}
@ -2845,8 +2842,8 @@ packages:
caniuse-api@3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
caniuse-lite@1.0.30001727:
resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==}
caniuse-lite@1.0.30001743:
resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==}
caseless@0.12.0:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
@ -2957,13 +2954,6 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
color-string@1.9.1:
resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
color@4.2.3:
resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
engines: {node: '>=12.5.0'}
colord@2.9.3:
resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
@ -3307,8 +3297,8 @@ packages:
resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
engines: {node: '>=8'}
detect-libc@2.0.4:
resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
detect-libc@2.1.0:
resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==}
engines: {node: '>=8'}
detect-newline@3.1.0:
@ -4129,9 +4119,6 @@ packages:
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
is-arrayish@0.3.2:
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
is-async-function@2.1.1:
resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
engines: {node: '>= 0.4'}
@ -4940,13 +4927,13 @@ packages:
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
next@15.3.3:
resolution: {integrity: sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==}
next@15.4.7:
resolution: {integrity: sha512-OcqRugwF7n7mC8OSYjvsZhhG1AYSvulor1EIUsIkbbEbf1qoE5EbH36Swj8WhF4cHqmDgkiam3z1c1W0J1Wifg==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
'@opentelemetry/api': ^1.1.0
'@playwright/test': ^1.41.2
'@playwright/test': ^1.51.1
babel-plugin-react-compiler: '*'
react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
@ -6033,8 +6020,8 @@ packages:
setimmediate@1.0.5:
resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
sharp@0.34.3:
resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==}
sharp@0.34.4:
resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
shebang-command@1.2.0:
@ -6080,9 +6067,6 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
simple-swizzle@0.2.2:
resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
@ -6161,10 +6145,6 @@ packages:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
engines: {node: '>= 0.4'}
streamsearch@1.1.0:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
string-argv@0.3.2:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
@ -7885,7 +7865,7 @@ snapshots:
tslib: 2.8.1
optional: true
'@emnapi/runtime@1.4.5':
'@emnapi/runtime@1.5.0':
dependencies:
tslib: 2.8.1
optional: true
@ -8145,90 +8125,93 @@ snapshots:
'@humanwhocodes/object-schema@2.0.3': {}
'@img/sharp-darwin-arm64@0.34.3':
'@img/colour@1.0.0':
optional: true
'@img/sharp-darwin-arm64@0.34.4':
optionalDependencies:
'@img/sharp-libvips-darwin-arm64': 1.2.0
'@img/sharp-libvips-darwin-arm64': 1.2.3
optional: true
'@img/sharp-darwin-x64@0.34.3':
'@img/sharp-darwin-x64@0.34.4':
optionalDependencies:
'@img/sharp-libvips-darwin-x64': 1.2.0
'@img/sharp-libvips-darwin-x64': 1.2.3
optional: true
'@img/sharp-libvips-darwin-arm64@1.2.0':
'@img/sharp-libvips-darwin-arm64@1.2.3':
optional: true
'@img/sharp-libvips-darwin-x64@1.2.0':
'@img/sharp-libvips-darwin-x64@1.2.3':
optional: true
'@img/sharp-libvips-linux-arm64@1.2.0':
'@img/sharp-libvips-linux-arm64@1.2.3':
optional: true
'@img/sharp-libvips-linux-arm@1.2.0':
'@img/sharp-libvips-linux-arm@1.2.3':
optional: true
'@img/sharp-libvips-linux-ppc64@1.2.0':
'@img/sharp-libvips-linux-ppc64@1.2.3':
optional: true
'@img/sharp-libvips-linux-s390x@1.2.0':
'@img/sharp-libvips-linux-s390x@1.2.3':
optional: true
'@img/sharp-libvips-linux-x64@1.2.0':
'@img/sharp-libvips-linux-x64@1.2.3':
optional: true
'@img/sharp-libvips-linuxmusl-arm64@1.2.0':
'@img/sharp-libvips-linuxmusl-arm64@1.2.3':
optional: true
'@img/sharp-libvips-linuxmusl-x64@1.2.0':
'@img/sharp-libvips-linuxmusl-x64@1.2.3':
optional: true
'@img/sharp-linux-arm64@0.34.3':
'@img/sharp-linux-arm64@0.34.4':
optionalDependencies:
'@img/sharp-libvips-linux-arm64': 1.2.0
'@img/sharp-libvips-linux-arm64': 1.2.3
optional: true
'@img/sharp-linux-arm@0.34.3':
'@img/sharp-linux-arm@0.34.4':
optionalDependencies:
'@img/sharp-libvips-linux-arm': 1.2.0
'@img/sharp-libvips-linux-arm': 1.2.3
optional: true
'@img/sharp-linux-ppc64@0.34.3':
'@img/sharp-linux-ppc64@0.34.4':
optionalDependencies:
'@img/sharp-libvips-linux-ppc64': 1.2.0
'@img/sharp-libvips-linux-ppc64': 1.2.3
optional: true
'@img/sharp-linux-s390x@0.34.3':
'@img/sharp-linux-s390x@0.34.4':
optionalDependencies:
'@img/sharp-libvips-linux-s390x': 1.2.0
'@img/sharp-libvips-linux-s390x': 1.2.3
optional: true
'@img/sharp-linux-x64@0.34.3':
'@img/sharp-linux-x64@0.34.4':
optionalDependencies:
'@img/sharp-libvips-linux-x64': 1.2.0
'@img/sharp-libvips-linux-x64': 1.2.3
optional: true
'@img/sharp-linuxmusl-arm64@0.34.3':
'@img/sharp-linuxmusl-arm64@0.34.4':
optionalDependencies:
'@img/sharp-libvips-linuxmusl-arm64': 1.2.0
'@img/sharp-libvips-linuxmusl-arm64': 1.2.3
optional: true
'@img/sharp-linuxmusl-x64@0.34.3':
'@img/sharp-linuxmusl-x64@0.34.4':
optionalDependencies:
'@img/sharp-libvips-linuxmusl-x64': 1.2.0
'@img/sharp-libvips-linuxmusl-x64': 1.2.3
optional: true
'@img/sharp-wasm32@0.34.3':
'@img/sharp-wasm32@0.34.4':
dependencies:
'@emnapi/runtime': 1.4.5
'@emnapi/runtime': 1.5.0
optional: true
'@img/sharp-win32-arm64@0.34.3':
'@img/sharp-win32-arm64@0.34.4':
optional: true
'@img/sharp-win32-ia32@0.34.3':
'@img/sharp-win32-ia32@0.34.4':
optional: true
'@img/sharp-win32-x64@0.34.3':
'@img/sharp-win32-x64@0.34.4':
optional: true
'@isaacs/balanced-match@4.0.1': {}
@ -8447,40 +8430,40 @@ snapshots:
'@napi-rs/wasm-runtime@0.2.12':
dependencies:
'@emnapi/core': 1.4.5
'@emnapi/runtime': 1.4.5
'@emnapi/runtime': 1.5.0
'@tybys/wasm-util': 0.10.0
optional: true
'@netlify/plugin-nextjs@5.11.6': {}
'@next/env@15.3.3': {}
'@next/env@15.4.7': {}
'@next/eslint-plugin-next@14.2.30':
dependencies:
glob: 10.3.10
'@next/swc-darwin-arm64@15.3.3':
'@next/swc-darwin-arm64@15.4.7':
optional: true
'@next/swc-darwin-x64@15.3.3':
'@next/swc-darwin-x64@15.4.7':
optional: true
'@next/swc-linux-arm64-gnu@15.3.3':
'@next/swc-linux-arm64-gnu@15.4.7':
optional: true
'@next/swc-linux-arm64-musl@15.3.3':
'@next/swc-linux-arm64-musl@15.4.7':
optional: true
'@next/swc-linux-x64-gnu@15.3.3':
'@next/swc-linux-x64-gnu@15.4.7':
optional: true
'@next/swc-linux-x64-musl@15.3.3':
'@next/swc-linux-x64-musl@15.4.7':
optional: true
'@next/swc-win32-arm64-msvc@15.3.3':
'@next/swc-win32-arm64-msvc@15.4.7':
optional: true
'@next/swc-win32-x64-msvc@15.3.3':
'@next/swc-win32-x64-msvc@15.4.7':
optional: true
'@nodelib/fs.scandir@2.1.5':
@ -8772,8 +8755,6 @@ snapshots:
- supports-color
- typescript
'@swc/counter@0.1.3': {}
'@swc/helpers@0.5.15':
dependencies:
tslib: 2.8.1
@ -9349,7 +9330,7 @@ snapshots:
autoprefixer@10.4.21(postcss@8.5.6):
dependencies:
browserslist: 4.25.1
caniuse-lite: 1.0.30001727
caniuse-lite: 1.0.30001743
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.1
@ -9496,7 +9477,7 @@ snapshots:
browserslist@4.25.1:
dependencies:
caniuse-lite: 1.0.30001727
caniuse-lite: 1.0.30001743
electron-to-chromium: 1.5.187
node-releases: 2.0.19
update-browserslist-db: 1.1.3(browserslist@4.25.1)
@ -9520,10 +9501,6 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
busboy@1.6.0:
dependencies:
streamsearch: 1.1.0
cachedir@2.4.0: {}
call-bind-apply-helpers@1.0.2:
@ -9565,11 +9542,11 @@ snapshots:
caniuse-api@3.0.0:
dependencies:
browserslist: 4.25.1
caniuse-lite: 1.0.30001727
caniuse-lite: 1.0.30001743
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
caniuse-lite@1.0.30001727: {}
caniuse-lite@1.0.30001743: {}
caseless@0.12.0: {}
@ -9663,18 +9640,6 @@ snapshots:
color-name@1.1.4: {}
color-string@1.9.1:
dependencies:
color-name: 1.1.4
simple-swizzle: 0.2.2
optional: true
color@4.2.3:
dependencies:
color-convert: 2.0.1
color-string: 1.9.1
optional: true
colord@2.9.3: {}
colorette@1.4.0: {}
@ -10075,7 +10040,7 @@ snapshots:
detect-indent@6.1.0: {}
detect-libc@2.0.4:
detect-libc@2.1.0:
optional: true
detect-newline@3.1.0: {}
@ -11100,9 +11065,6 @@ snapshots:
is-arrayish@0.2.1: {}
is-arrayish@0.3.2:
optional: true
is-async-function@2.1.1:
dependencies:
async-function: 1.0.0
@ -12087,27 +12049,25 @@ snapshots:
natural-compare@1.4.0: {}
next@15.3.3(@babel/core@7.28.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
next@15.4.7(@babel/core@7.28.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@next/env': 15.3.3
'@swc/counter': 0.1.3
'@next/env': 15.4.7
'@swc/helpers': 0.5.15
busboy: 1.6.0
caniuse-lite: 1.0.30001727
caniuse-lite: 1.0.30001743
postcss: 8.4.31
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
styled-jsx: 5.1.6(@babel/core@7.28.0)(react@19.1.0)
optionalDependencies:
'@next/swc-darwin-arm64': 15.3.3
'@next/swc-darwin-x64': 15.3.3
'@next/swc-linux-arm64-gnu': 15.3.3
'@next/swc-linux-arm64-musl': 15.3.3
'@next/swc-linux-x64-gnu': 15.3.3
'@next/swc-linux-x64-musl': 15.3.3
'@next/swc-win32-arm64-msvc': 15.3.3
'@next/swc-win32-x64-msvc': 15.3.3
sharp: 0.34.3
'@next/swc-darwin-arm64': 15.4.7
'@next/swc-darwin-x64': 15.4.7
'@next/swc-linux-arm64-gnu': 15.4.7
'@next/swc-linux-arm64-musl': 15.4.7
'@next/swc-linux-x64-gnu': 15.4.7
'@next/swc-linux-x64-musl': 15.4.7
'@next/swc-win32-arm64-msvc': 15.4.7
'@next/swc-win32-x64-msvc': 15.4.7
sharp: 0.34.4
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
@ -13229,34 +13189,34 @@ snapshots:
setimmediate@1.0.5: {}
sharp@0.34.3:
sharp@0.34.4:
dependencies:
color: 4.2.3
detect-libc: 2.0.4
'@img/colour': 1.0.0
detect-libc: 2.1.0
semver: 7.7.2
optionalDependencies:
'@img/sharp-darwin-arm64': 0.34.3
'@img/sharp-darwin-x64': 0.34.3
'@img/sharp-libvips-darwin-arm64': 1.2.0
'@img/sharp-libvips-darwin-x64': 1.2.0
'@img/sharp-libvips-linux-arm': 1.2.0
'@img/sharp-libvips-linux-arm64': 1.2.0
'@img/sharp-libvips-linux-ppc64': 1.2.0
'@img/sharp-libvips-linux-s390x': 1.2.0
'@img/sharp-libvips-linux-x64': 1.2.0
'@img/sharp-libvips-linuxmusl-arm64': 1.2.0
'@img/sharp-libvips-linuxmusl-x64': 1.2.0
'@img/sharp-linux-arm': 0.34.3
'@img/sharp-linux-arm64': 0.34.3
'@img/sharp-linux-ppc64': 0.34.3
'@img/sharp-linux-s390x': 0.34.3
'@img/sharp-linux-x64': 0.34.3
'@img/sharp-linuxmusl-arm64': 0.34.3
'@img/sharp-linuxmusl-x64': 0.34.3
'@img/sharp-wasm32': 0.34.3
'@img/sharp-win32-arm64': 0.34.3
'@img/sharp-win32-ia32': 0.34.3
'@img/sharp-win32-x64': 0.34.3
'@img/sharp-darwin-arm64': 0.34.4
'@img/sharp-darwin-x64': 0.34.4
'@img/sharp-libvips-darwin-arm64': 1.2.3
'@img/sharp-libvips-darwin-x64': 1.2.3
'@img/sharp-libvips-linux-arm': 1.2.3
'@img/sharp-libvips-linux-arm64': 1.2.3
'@img/sharp-libvips-linux-ppc64': 1.2.3
'@img/sharp-libvips-linux-s390x': 1.2.3
'@img/sharp-libvips-linux-x64': 1.2.3
'@img/sharp-libvips-linuxmusl-arm64': 1.2.3
'@img/sharp-libvips-linuxmusl-x64': 1.2.3
'@img/sharp-linux-arm': 0.34.4
'@img/sharp-linux-arm64': 0.34.4
'@img/sharp-linux-ppc64': 0.34.4
'@img/sharp-linux-s390x': 0.34.4
'@img/sharp-linux-x64': 0.34.4
'@img/sharp-linuxmusl-arm64': 0.34.4
'@img/sharp-linuxmusl-x64': 0.34.4
'@img/sharp-wasm32': 0.34.4
'@img/sharp-win32-arm64': 0.34.4
'@img/sharp-win32-ia32': 0.34.4
'@img/sharp-win32-x64': 0.34.4
optional: true
shebang-command@1.2.0:
@ -13305,11 +13265,6 @@ snapshots:
signal-exit@4.1.0: {}
simple-swizzle@0.2.2:
dependencies:
is-arrayish: 0.3.2
optional: true
sisteransi@1.0.5: {}
slash@3.0.0: {}
@ -13397,8 +13352,6 @@ snapshots:
es-errors: 1.3.0
internal-slot: 1.1.0
streamsearch@1.1.0: {}
string-argv@0.3.2: {}
string-hash@1.1.3: {}

View file

@ -0,0 +1,251 @@
{
"AF": "Afg\u02bboniston",
"AX": "Aland orollari",
"AL": "Albaniya",
"US": "Amerika Qo\u2018shma Shtatlari",
"AS": "Amerika Samoasi",
"AD": "Andorra",
"AI": "Angilya",
"AO": "Angola",
"AQ": "Antarktida",
"AG": "Antigua va Barbuda",
"VI": "AQSH Virgin orollari",
"UM": "AQSH yondosh orollari",
"AR": "Argentina",
"AM": "Armaniston",
"AW": "Aruba",
"AU": "Avstraliya",
"AT": "Avstriya",
"BS": "Bagama orollari",
"BH": "Bahrayn",
"BD": "Bangladesh",
"BB": "Barbados",
"BY": "Belarus",
"BE": "Belgiya",
"BZ": "Beliz",
"BJ": "Benin",
"BM": "Bermuda orollari",
"AE": "Birlashgan Arab Amirliklari",
"BG": "Bolgariya",
"BO": "Boliviya",
"BQ": "Boneyr, Sint-Estatius va Saba",
"BA": "Bosniya va Gertsegovina",
"BW": "Botsvana",
"BR": "Braziliya",
"VG": "Britaniya Virgin orollari",
"IO": "Britaniyaning Hind okeanidagi hududi",
"BN": "Bruney",
"BF": "Burkina-Faso",
"BI": "Burundi",
"BT": "Butan",
"BV": "Buve oroli",
"GB": "Buyuk Britaniya",
"DK": "Daniya",
"DM": "Dominika",
"DO": "Dominikan Respublikasi",
"ET": "Efiopiya",
"EC": "Ekvador",
"GQ": "Ekvatorial Gvineya",
"ER": "Eritreya",
"IR": "Eron",
"EE": "Estoniya",
"PS": "Falastin hududlari",
"FO": "Farer orollari",
"FJ": "Fiji",
"PH": "Filippin",
"FI": "Finlandiya",
"FK": "Folklend orollari",
"FR": "Fransiya",
"GF": "Fransuz Gvianasi",
"TF": "Fransuz Janubiy hududlari",
"PF": "Fransuz Polineziyasi",
"GA": "Gabon",
"HT": "Gaiti",
"GM": "Gambiya",
"GH": "Gana",
"GY": "Gayana",
"DE": "Germaniya",
"GG": "Gernsi",
"GI": "Gibraltar",
"HN": "Gonduras",
"HK": "Gonkong (Xitoy MMH)",
"GD": "Grenada",
"GL": "Grenlandiya",
"GR": "Gretsiya",
"GE": "Gruziya",
"GU": "Guam",
"GP": "Gvadelupe",
"GT": "Gvatemala",
"GN": "Gvineya",
"GW": "Gvineya-Bisau",
"IN": "Hindiston",
"ID": "Indoneziya",
"JO": "Iordaniya",
"IE": "Irlandiya",
"IQ": "Iroq",
"IS": "Islandiya",
"ES": "Ispaniya",
"IL": "Isroil",
"IT": "Italiya",
"ZA": "Janubiy Afrika Respublikasi",
"GS": "Janubiy Georgiya va Janubiy Sendvich orollari",
"KR": "Janubiy Koreya",
"SS": "Janubiy Sudan",
"DZ": "Jazoir",
"JE": "Jersi",
"DJ": "Jibuti",
"CV": "Kabo-Verde",
"KH": "Kambodja",
"CM": "Kamerun",
"CA": "Kanada",
"KY": "Kayman orollari",
"KE": "Keniya",
"CY": "Kipr",
"KI": "Kiribati",
"CC": "Kokos (Kiling) orollari",
"CO": "Kolumbiya",
"KM": "Komor orollari",
"CG": "Kongo \u2013 Brazzavil",
"CD": "Kongo \u2013 Kinshasa",
"CR": "Kosta-Rika",
"CI": "Kot-d\u2019Ivuar",
"CU": "Kuba",
"CK": "Kuk orollari",
"CW": "Kyurasao",
"LA": "Laos",
"LV": "Latviya",
"LS": "Lesoto",
"LR": "Liberiya",
"LT": "Litva",
"LB": "Livan",
"LY": "Liviya",
"LI": "Lixtenshteyn",
"LU": "Lyuksemburg",
"MG": "Madagaskar",
"MO": "Makao (Xitoy MMH)",
"MW": "Malavi",
"MY": "Malayziya",
"MV": "Maldiv orollari",
"ML": "Mali",
"MT": "Malta",
"CF": "Markaziy Afrika Respublikasi",
"MA": "Marokash",
"MQ": "Martinika",
"MH": "Marshall orollari",
"MU": "Mavrikiy",
"MR": "Mavritaniya",
"YT": "Mayotta",
"MX": "Meksika",
"IM": "Men oroli",
"FM": "Mikroneziya",
"EG": "Misr",
"MD": "Moldova",
"MC": "Monako",
"MN": "Mongoliya",
"MS": "Montserrat",
"MZ": "Mozambik",
"SH": "Muqaddas Yelena oroli",
"MM": "Myanma (Birma)",
"NA": "Namibiya",
"NR": "Nauru",
"NP": "Nepal",
"NL": "Niderlandiya",
"NE": "Niger",
"NG": "Nigeriya",
"NI": "Nikaragua",
"NU": "Niue",
"NF": "Norfolk oroli",
"NO": "Norvegiya",
"AZ": "Ozarbayjon",
"PW": "Palau",
"PA": "Panama",
"PG": "Papua \u2013 Yangi Gvineya",
"PY": "Paragvay",
"PE": "Peru",
"PN": "Pitkern orollari",
"PK": "Pokiston",
"PL": "Polsha",
"PT": "Portugaliya",
"PR": "Puerto-Riko",
"QA": "Qatar",
"KG": "Qirg\u02bbiziston",
"KZ": "Qozog\u02bbiston",
"KW": "Quvayt",
"RE": "Reyunion",
"CX": "Rojdestvo oroli",
"RU": "Rossiya",
"RW": "Ruanda",
"RO": "Ruminiya",
"SV": "Salvador",
"WS": "Samoa",
"SM": "San-Marino",
"ST": "San-Tome va Prinsipi",
"SA": "Saudiya Arabistoni",
"BL": "Sen-Bartelemi",
"PM": "Sen-Pyer va Mikelon",
"SN": "Senegal",
"KN": "Sent-Kits va Nevis",
"LC": "Sent-Lyusiya",
"MF": "Sent-Martin",
"VC": "Sent-Vinsent va Grenadin",
"RS": "Serbiya",
"SC": "Seyshel orollari",
"SG": "Singapur",
"SX": "Sint-Marten",
"SK": "Slovakiya",
"SI": "Sloveniya",
"SB": "Solomon orollari",
"SO": "Somali",
"SD": "Sudan",
"SR": "Surinam",
"SY": "Suriya",
"SZ": "Svazilend",
"SL": "Syerra-Leone",
"TH": "Tailand",
"TZ": "Tanzaniya",
"TW": "Tayvan",
"TL": "Timor-Leste",
"TG": "Togo",
"TJ": "Tojikiston",
"TK": "Tokelau",
"TO": "Tonga",
"TT": "Trinidad va Tobago",
"TN": "Tunis",
"TR": "Turkiya",
"TM": "Turkmaniston",
"TC": "Turks va Kaykos orollari",
"TV": "Tuvalu",
"UG": "Uganda",
"UA": "Ukraina",
"OM": "Ummon",
"WF": "Uollis va Futuna",
"UY": "Urugvay",
"VU": "Vanuatu",
"VA": "Vatikan",
"VE": "Venesuela",
"HU": "Vengriya",
"VN": "Vyetnam",
"HM": "Xerd va Makdonald orollari",
"CN": "Xitoy",
"HR": "Xorvatiya",
"YE": "Yaman",
"JM": "Yamayka",
"NC": "Yangi Kaledoniya",
"NZ": "Yangi Zelandiya",
"JP": "Yaponiya",
"ZM": "Zambiya",
"ZW": "Zimbabve",
"UZ": "O\u02bbzbekiston",
"EH": "G\u2018arbiy Sahroi Kabir",
"KP": "Shimoliy Koreya",
"MK": "Shimoliy Makedoniya",
"MP": "Shimoliy Mariana orollari",
"SJ": "Shpitsbergen va Yan-Mayen",
"LK": "Shri-Lanka",
"SE": "Shvetsiya",
"CH": "Shveytsariya",
"TD": "Chad",
"ME": "Chernogoriya",
"CZ": "Chexiya",
"CL": "Chili"
}

View file

@ -0,0 +1,611 @@
{
"ab": "abxazcha",
"ace": "Achinese",
"ach": "Acoli",
"ada": "Adangme",
"ady": "Adyghe",
"aa": "Afar",
"afh": "Afrihili",
"af": "afrikancha",
"agq": "ag\u2018emcha",
"ain": "Ainu",
"ak": "akancha",
"akk": "Akkadian",
"bss": "Akoose",
"akz": "Alabama",
"sq": "albancha",
"ale": "Aleut",
"arq": "Algerian Arabic",
"en_US": "American English",
"ase": "American Sign Language",
"am": "amxarcha",
"egy": "Ancient Egyptian",
"grc": "Ancient Greek",
"anp": "Angika",
"zh_Hant": "an\u02bcanaviy xitoycha",
"njo": "Ao Naga",
"ar": "arabcha",
"an": "Aragonese",
"arc": "Aramaic",
"aro": "Araona",
"arp": "Arapaho",
"arw": "Arawak",
"hy": "armancha",
"rup": "Aromanian",
"frp": "Arpitan",
"as": "assamcha",
"ast": "Asturian",
"asa": "asucha",
"cch": "Atsam",
"av": "Avaric",
"ae": "Avestan",
"en_AU": "Avstraliya inglizchasi",
"de_AT": "Avstriya olmonchasi",
"awa": "Awadhi",
"ay": "Aymara",
"bfq": "Badaga",
"ksf": "bafiycha",
"bfd": "Bafut",
"bqi": "Bakhtiari",
"ban": "Balinese",
"bal": "Baluchi",
"bm": "bambarcha",
"bax": "Bamun",
"bjn": "Banjar",
"bas": "Basaa",
"eu": "baskcha",
"bbc": "Batak Toba",
"bar": "Bavarian",
"bej": "Beja",
"be": "belaruscha",
"bem": "bembacha",
"bez": "benacha",
"bn": "bengalcha",
"bew": "Betawi",
"bho": "Bhojpuri",
"bik": "Bikol",
"bin": "Bini",
"my": "birmancha",
"bpy": "Bishnupriya",
"bi": "Bislama",
"byn": "Blin",
"zbl": "Blissymbols",
"brx": "bodocha",
"bg": "bolgarcha",
"ba": "boshqircha",
"bs": "bosniycha",
"brh": "Brahui",
"bra": "Braj",
"pt_BR": "Braziliya portugalchasi",
"br": "bretoncha",
"en_GB": "Britaniya inglizchasi",
"bug": "Buginese",
"bum": "Bulu",
"bua": "Buriat",
"cad": "Caddo",
"frc": "Cajun French",
"yue": "Cantonese",
"cps": "Capiznon",
"car": "Carib",
"cay": "Cayuga",
"ceb": "Cebuano",
"dtp": "Central Dusun",
"esu": "Central Yupik",
"shu": "Chadian Arabic",
"chg": "Chagatai",
"ch": "Chamorro",
"ce": "Chechen",
"chr": "cherokcha",
"cs": "chexcha",
"chy": "Cheyenne",
"chb": "Chibcha",
"cgg": "chigcha",
"qug": "Chimborazo Highland Quichua",
"chn": "Chinook Jargon",
"chp": "Chipewyan",
"cho": "Choctaw",
"cu": "Church Slavic",
"chk": "Chuukese",
"cv": "Chuvash",
"nwc": "Classical Newari",
"syc": "Classical Syriac",
"ksh": "Colognian",
"swb": "Comorian",
"cop": "Coptic",
"cr": "Cree",
"mus": "Creek",
"crh": "Crimean Turkish",
"dak": "Dakota",
"dar": "Dargwa",
"da": "datcha",
"dzg": "Dazaga",
"del": "Delaware",
"din": "Dinka",
"dv": "Divehi",
"doi": "Dogri",
"dgr": "Dogrib",
"dua": "dualcha",
"dyu": "Dyula",
"frs": "Eastern Frisian",
"efi": "Efik",
"arz": "Egyptian Arabic",
"eka": "Ekajuk",
"elx": "Elamite",
"ebu": "embucha",
"egl": "Emilian",
"myv": "Erzya",
"eo": "esperantocha",
"et": "estoncha",
"ewo": "Ewondo",
"ext": "Extremaduran",
"fan": "Fang",
"fat": "Fanti",
"fo": "farercha",
"fj": "fijcha",
"hif": "Fiji Hindi",
"fil": "filipincha",
"fi": "fincha",
"nl_BE": "flamandcha",
"fon": "Fon",
"fa": "forscha",
"gur": "Frafra",
"fr": "fransuzcha",
"fur": "Friulian",
"ff": "Fulah",
"gaa": "Ga",
"gag": "gagozcha",
"ht": "gaitcha",
"gl": "galitsiycha",
"gan": "Gan Chinese",
"lg": "gandcha",
"haw": "gavaycha",
"gay": "Gayo",
"gba": "Gbaya",
"gez": "Geez",
"aln": "Gheg Albanian",
"bbj": "Ghomala",
"fy": "g\u02bbarbiy friziancha",
"glk": "Gilaki",
"gil": "Gilbertese",
"gom": "Goan Konkani",
"nl": "gollandcha",
"gon": "Gondi",
"gn": "gorancha",
"gor": "Gorontalo",
"got": "Gothic",
"grb": "Grebo",
"ka": "gruzincha",
"gu": "gujoratcha",
"guz": "guzcha",
"gwi": "Gwich\u02bcin",
"hai": "Haida",
"hak": "Hakka Chinese",
"hz": "Herero",
"hil": "Hiligaynon",
"hi": "hindcha",
"ho": "Hiri Motu",
"hit": "Hittite",
"hmn": "Hmong",
"hup": "Hupa",
"iba": "Iban",
"ibb": "Ibibio",
"he": "ibroniy",
"io": "Ido",
"ig": "igbocha",
"ilo": "Iloko",
"smn": "inari semiycha",
"id": "indoneyzcha",
"en": "inglizcha",
"izh": "Ingrian",
"inh": "Ingush",
"ia": "Interlingua",
"ie": "Interlingue",
"iu": "inuktitutcha",
"ik": "Inupiaq",
"ga": "irlandcha",
"is": "islandcha",
"es": "ispancha",
"it": "italyancha",
"ee": "ivicha",
"jam": "Jamaican Creole English",
"sma": "janubiy semiycha",
"kaj": "Jju",
"jrb": "Judeo-Arabic",
"jpr": "Judeo-Persian",
"jut": "Jutish",
"kbd": "Kabardian",
"kea": "kabuverdiancha",
"kac": "Kachin",
"kgp": "Kaingang",
"kkj": "Kako",
"kl": "kalallisutcha",
"kln": "kalenjincha",
"xal": "Kalmyk",
"kam": "kambcha",
"fr_CA": "Kanada fransuzchasi",
"en_CA": "Kanada inglizchasi",
"kbl": "Kanembu",
"kn": "kannadcha",
"kr": "Kanuri",
"kaa": "Kara-Kalpak",
"krc": "Karachay-Balkar",
"krl": "Karelian",
"ks": "kashmircha",
"csb": "Kashubian",
"ca": "katalancha",
"kaw": "Kawi",
"ken": "Kenyang",
"kha": "Khasi",
"kho": "Khotanese",
"khw": "Khowar",
"ki": "kikuycha",
"kmb": "Kimbundu",
"krj": "Kinaray-a",
"rw": "kinyarvandcha",
"kiu": "Kirmanjki",
"tlh": "Klingon",
"bkm": "Kom",
"kv": "Komi",
"koi": "komi-permyakcha",
"kg": "Kongo",
"swc": "kongo svahiliycha",
"kok": "konkancha",
"ko": "koreyscha",
"kw": "kornishcha",
"kfo": "Koro",
"co": "korsiancha",
"ses": "koryaboro senniycha",
"kos": "Kosraean",
"avk": "Kotava",
"kpe": "Kpelle",
"kri": "Krio",
"kj": "Kuanyama",
"kum": "Kumyk",
"ku": "kurdcha",
"kru": "Kurukh",
"kut": "Kutenai",
"nmg": "kvaziycha",
"lad": "Ladino",
"lah": "Lahnda",
"lkt": "lakotcha",
"lam": "Lamba",
"lag": "langcha",
"lo": "laoscha",
"ltg": "Latgalian",
"lv": "latishcha",
"lzz": "Laz",
"lez": "Lezghian",
"lij": "Ligurian",
"li": "Limburgish",
"ln": "lingalcha",
"lfn": "Lingua Franca Nova",
"lzh": "Literary Chinese",
"lt": "litovcha",
"liv": "Livonian",
"jbo": "Lojban",
"lmo": "Lombard",
"es_419": "Lotin Amerika ispanchasi",
"la": "lotincha",
"nds": "Low German",
"sli": "Lower Silesian",
"loz": "Lozi",
"lu": "luba-katangcha",
"lua": "Luba-Lulua",
"lui": "Luiseno",
"smj": "luli semiycha",
"lun": "Lunda",
"luo": "luocha",
"luy": "luycha",
"lb": "lyuksemburgcha",
"mde": "Maba",
"jmc": "machamcha",
"mad": "Madurese",
"maf": "Mafa",
"mag": "Magahi",
"vmf": "Main-Franconian",
"mai": "Maithili",
"mak": "Makasar",
"mk": "makedoncha",
"mgh": "makuva-mittocha",
"mg": "malagasiycha",
"ml": "malayamcha",
"ms": "malaycha",
"mt": "maltacha",
"mnc": "Manchu",
"mdr": "Mandar",
"man": "Mandingo",
"mni": "Manipuri",
"mi": "maoriycha",
"arn": "mapuchiycha",
"kde": "maqondiy",
"mr": "maratcha",
"chm": "Mari",
"tzm": "markaziy atlas vaqt zonasi",
"mh": "Marshallese",
"mwr": "Marwari",
"mas": "masaycha",
"mzn": "Mazanderani",
"byv": "Medumba",
"es_MX": "Meksika ispanchasi",
"gv": "mencha",
"men": "Mende",
"mwv": "Mentawai",
"mer": "merucha",
"mgo": "metacha",
"mic": "Micmac",
"dum": "Middle Dutch",
"enm": "Middle English",
"frm": "Middle French",
"gmh": "Middle High German",
"mga": "Middle Irish",
"nan": "Min Nan Chinese",
"min": "Minangkabau",
"xmf": "Mingrelian",
"mwl": "Mirandese",
"lus": "Mizo",
"mn": "mo\u2018g\u2018ulcha",
"moh": "mohaukcha",
"mdf": "Moksha",
"ro_MD": "moldovan rumincha",
"lol": "Mongo",
"mfe": "morisyencha",
"ary": "Moroccan Arabic",
"mos": "Mossi",
"mul": "Multiple Languages",
"mua": "mundangcha",
"ttt": "Muslim Tat",
"mye": "Myene",
"naq": "namacha",
"na": "Nauru",
"nv": "Navajo",
"ng": "Ndonga",
"nap": "Neapolitan",
"de": "nemischa",
"ne": "nepalcha",
"new": "Newari",
"sba": "Ngambay",
"nnh": "Ngiemboon",
"jgo": "ngombcha",
"yrl": "Nheengatu",
"nia": "Nias",
"niu": "Niuean",
"nog": "Nogai",
"und": "noma\u02bclum til",
"frr": "Northern Frisian",
"nso": "Northern Sotho",
"nb": "norvegcha bokmal",
"nn": "norvegcha ninorsk",
"no": "Norwegian",
"nov": "Novial",
"nus": "noyrcha",
"nqo": "nqoancha",
"nym": "Nyamwezi",
"ny": "Nyanja",
"nyn": "nyankolcha",
"tog": "Nyasa Tonga",
"nyo": "Nyoro",
"nzi": "Nzima",
"oc": "Occitan",
"uz": "o\u02bbzbekcha",
"oj": "Ojibwa",
"ang": "Old English",
"fro": "Old French",
"goh": "Old High German",
"sga": "Old Irish",
"non": "Old Norse",
"peo": "Old Persian",
"pro": "Old Proven\u00e7al",
"or": "oriycha",
"om": "oromocha",
"osa": "Osage",
"os": "Ossetic",
"ota": "Ottoman Turkish",
"az": "ozarbayjoncha",
"pal": "Pahlavi",
"pfl": "Palatine German",
"pau": "Palauan",
"pi": "Pali",
"pam": "Pampanga",
"pag": "Pangasinan",
"pa": "panjobcha",
"pap": "Papiamento",
"pdc": "Pennsylvania German",
"phn": "Phoenician",
"pcd": "Picard",
"pms": "Piedmontese",
"pdt": "Plautdietsch",
"pon": "Pohnpeian",
"pl": "polyakcha",
"pnt": "Pontic",
"pt": "portugalcha",
"prg": "Prussian",
"ps": "pushtu tili",
"quc": "qichiancha",
"ky": "qirg\u02bbizcha",
"kab": "qobilcha",
"khq": "qoyra-chincha",
"kk": "qozoqcha",
"dsb": "quyi sorbcha",
"qu": "qvechuancha",
"raj": "Rajasthani",
"rap": "Rapanui",
"rar": "Rarotongan",
"rif": "Riffian",
"rgn": "Romagnol",
"rm": "romancha",
"rom": "Romany",
"rof": "rombacha",
"root": "Root",
"rtm": "Rotuman",
"rug": "Roviana",
"rwk": "ruandcha",
"ro": "rumincha",
"rn": "rundcha",
"ru": "ruscha",
"rue": "Rusyn",
"ssy": "Saho",
"sah": "Sakha",
"sam": "Samaritan Aramaic",
"saq": "samburcha",
"sm": "Samoan",
"sgs": "Samogitian",
"sad": "Sandawe",
"sg": "sangoancha",
"sbp": "sanguancha",
"sa": "sanskritcha",
"sat": "Santali",
"sc": "Sardinian",
"sas": "Sasak",
"sdc": "Sassarese Sardinian",
"stq": "Saterland Frisian",
"saz": "Saurashtra",
"sco": "Scots",
"gd": "Scottish Gaelic",
"sly": "Selayar",
"sel": "Selkup",
"see": "Seneca",
"seh": "seniycha",
"sr": "serbcha",
"sh": "Serbo-Croatian",
"srr": "Serer",
"sei": "Seri",
"ksb": "shambalacha",
"shn": "Shan",
"nd": "shimoliy ndebelcha",
"se": "shimoliy semiycha",
"sms": "shkolt semiycha",
"sn": "shoniycha",
"sv": "shvedcha",
"fr_CH": "Shvesariya fransuzchasi",
"de_CH": "Shvesariya olmonchasi",
"gsw": "shveysariya nemischasi",
"scn": "Sicilian",
"sid": "Sidamo",
"bla": "Siksika",
"szl": "Silesian",
"sd": "sindxiycha",
"si": "sinholcha",
"den": "Slave",
"sk": "slovakcha",
"sl": "slovencha",
"zh_Hans": "soddalashtirilgan xitoycha",
"xog": "sogancha",
"sog": "Sogdien",
"so": "somalicha",
"snk": "Soninke",
"ckb": "sorani kurd tili",
"azb": "South Azerbaijani",
"nr": "South Ndebele",
"alt": "Southern Altai",
"st": "Southern Sotho",
"srn": "Sranan Tongo",
"zgh": "standart marokash tamazit",
"suk": "Sukuma",
"sux": "Sumerian",
"su": "sundancha",
"sus": "Susu",
"sw": "svahilcha",
"ss": "Swati",
"syr": "Syriac",
"shi": "tachilgitcha",
"tl": "Tagalog",
"ty": "Tahitian",
"dav": "taitcha",
"tly": "Talysh",
"tmh": "Tamashek",
"ta": "tamilcha",
"trv": "Taroko",
"tt": "tatarcha",
"th": "taycha",
"te": "telugvancha",
"ter": "Tereno",
"teo": "tesoancha",
"tet": "Tetum",
"bo": "tibetcha",
"tig": "Tigre",
"ti": "tigrincha",
"zxx": "til tarkibi yo\u02bbq",
"tem": "Timne",
"tiv": "Tiv",
"tli": "Tlingit",
"tg": "tojikcha",
"tpi": "Tok Pisin",
"tkl": "Tokelau",
"to": "tongocha",
"fit": "Tornedalen Finnish",
"twq": "tosovoqcha",
"tkr": "Tsakhur",
"tsd": "Tsakonian",
"tsi": "Tsimshian",
"ts": "Tsonga",
"tn": "Tswana",
"tcy": "Tulu",
"tum": "Tumbuka",
"aeb": "Tunisian Arabic",
"tr": "turkcha",
"tk": "turkmancha",
"tru": "Turoyo",
"tvl": "Tuvalu",
"tyv": "Tuvinian",
"tw": "Twi",
"kcg": "Tyap",
"udm": "Udmurt",
"cy": "uelscha",
"uga": "Ugaritic",
"uk": "ukraincha",
"umb": "Umbundu",
"ur": "urducha",
"ug": "uyg\u02bburcha",
"vai": "vayancha",
"ve": "Venda",
"vec": "Venetian",
"hu": "vengrcha",
"vep": "Veps",
"vo": "Volap\u00fck",
"wo": "volofcha",
"vro": "V\u00f5ro",
"vot": "Votic",
"vun": "vunjoancha",
"vi": "vyetnamcha",
"wa": "Walloon",
"wae": "Walser",
"war": "Waray",
"wbp": "Warlpiri",
"was": "Washo",
"guc": "Wayuu",
"vls": "West Flemish",
"mrj": "Western Mari",
"wal": "Wolaytta",
"wuu": "Wu Chinese",
"ha": "xauscha",
"hsn": "Xiang Chinese",
"zh": "xitoycha",
"km": "xmercha",
"hr": "xorvatcha",
"xh": "xosancha",
"yav": "Yangben",
"yao": "Yao",
"yap": "Yapese",
"ja": "yaponcha",
"jv": "yavancha",
"ybb": "Yemba",
"es_ES": "Yevropa ispanchasi",
"pt_PT": "Yevropa portugalchasi",
"yi": "Yiddish",
"dyo": "yola-fonyicha",
"yo": "yorubcha",
"dz": "yovoncha",
"el": "yunoncha",
"hsb": "yuqori sorbcha",
"ar_001": "zamonavij standart arabcha",
"zap": "Zapotec",
"dje": "zarmacha",
"zza": "Zaza",
"zea": "Zeelandic",
"zen": "Zenaga",
"za": "Zhuang",
"ii": "zichuan yicha",
"gbz": "Zoroastrian Dari",
"zu": "zuluancha",
"zun": "Zuni"
}

View file

@ -1766,7 +1766,7 @@
"message.reset-website-warning": [
{
"type": 0,
"value": "سيتم اعادة تعيين كافة الإحصائيات لهذا الموقع، لكن لن يتم تعيير كود التتبع"
"value": "سيتم اعادة تعيين كافة الإحصائيات لهذا الموقع، لكن لن يتم تغيير كود التتبع"
}
],
"message.saved": [

View file

@ -476,7 +476,7 @@
"label.first-seen": [
{
"type": 0,
"value": "First seen"
"value": "Visto por primera vez"
}
],
"label.funnel": [
@ -656,7 +656,7 @@
"label.last-seen": [
{
"type": 0,
"value": "Last seen"
"value": "Visto por última vez"
}
],
"label.leave": [
@ -789,7 +789,7 @@
"value": [
{
"type": 0,
"value": "record"
"value": "registro"
}
]
},
@ -797,7 +797,7 @@
"value": [
{
"type": 0,
"value": "records"
"value": "registros"
}
]
}
@ -922,7 +922,7 @@
"label.properties": [
{
"type": 0,
"value": "Properties"
"value": "Propiedades"
}
],
"label.property": [
@ -1042,19 +1042,19 @@
"label.revenue": [
{
"type": 0,
"value": "Revenue"
"value": "Ganancias"
}
],
"label.revenue-description": [
{
"type": 0,
"value": "Look into your revenue across time."
"value": "Analice sus ganancias a lo largo del tiempo."
}
],
"label.revenue-property": [
{
"type": 0,
"value": "Revenue Property"
"value": "Propiedad de ganancias"
}
],
"label.role": [
@ -1114,7 +1114,7 @@
"label.session": [
{
"type": 0,
"value": "Session"
"value": "Sesn"
}
],
"label.sessions": [
@ -1288,7 +1288,7 @@
"label.transactions": [
{
"type": 0,
"value": "Transactions"
"value": "Transacciones"
}
],
"label.transfer": [
@ -1330,7 +1330,7 @@
"label.uniqueCustomers": [
{
"type": 0,
"value": "Unique Customers"
"value": "Clientes únicos"
}
],
"label.unknown": [
@ -1372,7 +1372,7 @@
"label.user-property": [
{
"type": 0,
"value": "User Property"
"value": "Propiedad de usuario"
}
],
"label.username": [

View file

@ -32,13 +32,13 @@
"label.add-member": [
{
"type": 0,
"value": "Add member"
"value": "Dodaj člana"
}
],
"label.add-step": [
{
"type": 0,
"value": "Add step"
"value": "Dodaj korak"
}
],
"label.add-website": [
@ -152,7 +152,7 @@
"label.compare": [
{
"type": 0,
"value": "Compare"
"value": "Primerjaj"
}
],
"label.confirm": [
@ -182,7 +182,7 @@
"label.count": [
{
"type": 0,
"value": "Count"
"value": "Število"
}
],
"label.countries": [
@ -200,7 +200,7 @@
"label.create": [
{
"type": 0,
"value": "Create"
"value": "Ustvari"
}
],
"label.create-report": [
@ -230,13 +230,13 @@
"label.created-by": [
{
"type": 0,
"value": "Created By"
"value": "Ustvaril"
}
],
"label.current": [
{
"type": 0,
"value": "Current"
"value": "Trenutno"
}
],
"label.current-password": [
@ -296,7 +296,7 @@
"label.delete-report": [
{
"type": 0,
"value": "Delete report"
"value": "Izbriši poročilo"
}
],
"label.delete-team": [
@ -386,25 +386,25 @@
"label.edit-member": [
{
"type": 0,
"value": "Edit member"
"value": "Uredi člana"
}
],
"label.enable-share-url": [
{
"type": 0,
"value": "Uredi povezavo za deljenje"
"value": "Omogoči povezavo za deljenje"
}
],
"label.end-step": [
{
"type": 0,
"value": "End Step"
"value": "Končni korak"
}
],
"label.entry": [
{
"type": 0,
"value": "Entry URL"
"value": "Vstopni URL"
}
],
"label.event": [
@ -428,7 +428,7 @@
"label.exit": [
{
"type": 0,
"value": "Exit URL"
"value": "Izhodni URL"
}
],
"label.false": [
@ -476,7 +476,7 @@
"label.first-seen": [
{
"type": 0,
"value": "First seen"
"value": "Prvič viden"
}
],
"label.funnel": [
@ -488,25 +488,25 @@
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
"value": "Razumite stopnjo konverzije in osipa uporabnikov."
}
],
"label.goal": [
{
"type": 0,
"value": "Goal"
"value": "Cilj"
}
],
"label.goals": [
{
"type": 0,
"value": "Goals"
"value": "Cilji"
}
],
"label.goals-description": [
{
"type": 0,
"value": "Track your goals for pageviews and events."
"value": "Spremljajte svoje cilje za oglede strani in dogodke."
}
],
"label.greater-than": [
@ -524,13 +524,13 @@
"label.host": [
{
"type": 0,
"value": "Host"
"value": "Gostitelj"
}
],
"label.hosts": [
{
"type": 0,
"value": "Hosts"
"value": "Gostitelji"
}
],
"label.insights": [
@ -542,7 +542,7 @@
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
"value": "Poglobite se v podatke z uporabo segmentov in filtrov."
}
],
"label.is": [
@ -584,13 +584,13 @@
"label.journey": [
{
"type": 0,
"value": "Journey"
"value": "Uporabniška pot"
}
],
"label.journey-description": [
{
"type": 0,
"value": "Understand how users navigate through your website."
"value": "Razumite, kako uporabniki krmarijo po vašem spletnem mestu."
}
],
"label.language": [
@ -642,7 +642,7 @@
"label.last-months": [
{
"type": 0,
"value": "Last "
"value": "Zadnjih "
},
{
"type": 1,
@ -650,13 +650,13 @@
},
{
"type": 0,
"value": " months"
"value": " mesecev"
}
],
"label.last-seen": [
{
"type": 0,
"value": "Last seen"
"value": "Nazadnje viden"
}
],
"label.leave": [
@ -698,13 +698,13 @@
"label.manage": [
{
"type": 0,
"value": "Manage"
"value": "Upravljaj"
}
],
"label.manager": [
{
"type": 0,
"value": "Manager"
"value": "Upravitelj"
}
],
"label.max": [
@ -716,7 +716,7 @@
"label.member": [
{
"type": 0,
"value": "Member"
"value": "Član"
}
],
"label.members": [
@ -746,7 +746,7 @@
"label.my-account": [
{
"type": 0,
"value": "My account"
"value": "Moj račun"
}
],
"label.my-websites": [
@ -876,13 +876,13 @@
"label.path": [
{
"type": 0,
"value": "Path"
"value": "Pot"
}
],
"label.paths": [
{
"type": 0,
"value": "Paths"
"value": "Poti"
}
],
"label.powered-by": [
@ -898,19 +898,19 @@
"label.previous": [
{
"type": 0,
"value": "Previous"
"value": "Prejšnji"
}
],
"label.previous-period": [
{
"type": 0,
"value": "Previous period"
"value": "Prejšnje obdobje"
}
],
"label.previous-year": [
{
"type": 0,
"value": "Previous year"
"value": "Prejšnje leto"
}
],
"label.profile": [
@ -922,13 +922,13 @@
"label.properties": [
{
"type": 0,
"value": "Properties"
"value": "Lastnosti"
}
],
"label.property": [
{
"type": 0,
"value": "Property"
"value": "Lastnost"
}
],
"label.queries": [
@ -1000,7 +1000,7 @@
"label.remove-member": [
{
"type": 0,
"value": "Remove member"
"value": "Odstrani člana"
}
],
"label.reports": [
@ -1036,25 +1036,25 @@
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
"value": "Merite uporabnikovo zadržanost s sledenjem, kako pogosto se vračajo."
}
],
"label.revenue": [
{
"type": 0,
"value": "Revenue"
"value": "Prihodki"
}
],
"label.revenue-description": [
{
"type": 0,
"value": "Look into your revenue across time."
"value": "Preglejte svoje prihodke skozi čas."
}
],
"label.revenue-property": [
{
"type": 0,
"value": "Revenue Property"
"value": "Lastnost prihodkov"
}
],
"label.role": [
@ -1084,13 +1084,13 @@
"label.search": [
{
"type": 0,
"value": "Search"
"value": "Išči"
}
],
"label.select": [
{
"type": 0,
"value": "Select"
"value": "Izberi"
}
],
"label.select-date": [
@ -1102,7 +1102,7 @@
"label.select-role": [
{
"type": 0,
"value": "Select role"
"value": "Izberi vlogo"
}
],
"label.select-website": [
@ -1114,7 +1114,7 @@
"label.session": [
{
"type": 0,
"value": "Session"
"value": "Seja"
}
],
"label.sessions": [
@ -1144,13 +1144,13 @@
"label.start-step": [
{
"type": 0,
"value": "Start Step"
"value": "Začetni korak"
}
],
"label.steps": [
{
"type": 0,
"value": "Steps"
"value": "Koraki"
}
],
"label.sum": [
@ -1180,7 +1180,7 @@
"label.team-manager": [
{
"type": 0,
"value": "Team manager"
"value": "Upravitelj ekipe"
}
],
"label.team-member": [
@ -1204,7 +1204,7 @@
"label.team-view-only": [
{
"type": 0,
"value": "Team view only"
"value": "Ekipa samo za ogled"
}
],
"label.team-websites": [
@ -1468,7 +1468,7 @@
"label.websites": [
{
"type": 0,
"value": "Spletnih mest"
"value": "Spletna mesta"
}
],
"label.window": [
@ -1486,7 +1486,7 @@
"message.action-confirmation": [
{
"type": 0,
"value": "Type "
"value": "Za potrditev v spodnje polje vnesite "
},
{
"type": 1,
@ -1494,7 +1494,7 @@
},
{
"type": 0,
"value": " in the box below to confirm."
"value": "."
}
],
"message.active-users": [
@ -1534,7 +1534,7 @@
"message.collected-data": [
{
"type": 0,
"value": "Collected data"
"value": "Zbrani podatki"
}
],
"message.confirm-delete": [
@ -1568,7 +1568,7 @@
"message.confirm-remove": [
{
"type": 0,
"value": "Are you sure you want to remove "
"value": "Ali ste prepričani, da želite odstraniti "
},
{
"type": 1,
@ -1596,7 +1596,7 @@
"message.delete-team-warning": [
{
"type": 0,
"value": "Deleting a team will also delete all team websites."
"value": "Brisanje ekipe bo izbrisalo tudi vsa spletna mesta ekipe."
}
],
"message.delete-website-warning": [
@ -1792,25 +1792,25 @@
"message.transfer-team-website-to-user": [
{
"type": 0,
"value": "Transfer this website to your account?"
"value": "Želite prenesti to spletno mesto v svoj račun?"
}
],
"message.transfer-user-website-to-team": [
{
"type": 0,
"value": "Select the team to transfer this website to."
"value": "Izberite ekipo, na katero želite prenesti to spletno mesto."
}
],
"message.transfer-website": [
{
"type": 0,
"value": "Transfer website ownership to your account or another team."
"value": "Prenesite lastništvo spletnega mesta na svoj račun ali drugo ekipo."
}
],
"message.triggered-event": [
{
"type": 0,
"value": "Triggered event"
"value": "Sprožen dogodek"
}
],
"message.user-deleted": [
@ -1822,7 +1822,7 @@
"message.viewed-page": [
{
"type": 0,
"value": "Viewed page"
"value": "Ogledana stran"
}
],
"message.visitor-log": [
@ -1862,7 +1862,7 @@
"message.visitors-dropped-off": [
{
"type": 0,
"value": "Visitors dropped off"
"value": "Osip obiskovalcev"
}
]
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -31,8 +31,8 @@ export async function POST(
{ params }: { params: Promise<{ websiteId: string }> },
) {
const schema = z.object({
name: z.string(),
domain: z.string(),
name: z.string().optional(),
domain: z.string().optional(),
shareId: z.string().regex(SHARE_ID_REGEX).nullable().optional(),
});

View file

@ -78,7 +78,7 @@
"label.filter-combined": "Combinado",
"label.filter-raw": "En crudo",
"label.filters": "Filtros",
"label.first-seen": "First seen",
"label.first-seen": "Visto por primera vez",
"label.funnel": "Embudo",
"label.funnel-description": "Comprender conversión y abandono de usuarios.",
"label.goal": "Objetivo",
@ -104,7 +104,7 @@
"label.last-days": "Últimos {x} días",
"label.last-hours": "Últimas {x} horas",
"label.last-months": "Últimos {x} meses",
"label.last-seen": "Last seen",
"label.last-seen": "Visto por última vez",
"label.leave": "Abandonar",
"label.leave-team": "Abandonar equipo",
"label.less-than": "Menor que",
@ -124,7 +124,7 @@
"label.name": "Nombre",
"label.new-password": "Nueva contraseña",
"label.none": "Ninguno",
"label.number-of-records": "{x} {x, plural, one {record} other {records}}",
"label.number-of-records": "{x} {x, plural, one {registro} other {registros}}",
"label.ok": "OK",
"label.os": "Sistema",
"label.overview": "Resumen",
@ -141,7 +141,7 @@
"label.previous-period": "Periodo anterior",
"label.previous-year": "Año anterior",
"label.profile": "Perfil",
"label.properties": "Properties",
"label.properties": "Propiedades",
"label.property": "Propiedad",
"label.queries": "Consultas",
"label.query": "Consulta",
@ -161,9 +161,9 @@
"label.reset-website": "Reiniciar analíticas",
"label.retention": "Retención",
"label.retention-description": "Medir la frecuencia con la que los usuarios vuelven a tu sitio web.",
"label.revenue": "Revenue",
"label.revenue-description": "Look into your revenue across time.",
"label.revenue-property": "Revenue Property",
"label.revenue": "Ganancias",
"label.revenue-description": "Analice sus ganancias a lo largo del tiempo.",
"label.revenue-property": "Propiedad de ganancias",
"label.role": "Rol",
"label.run-query": "Ejecutar consulta",
"label.save": "Guardar",
@ -173,7 +173,7 @@
"label.select-date": "Seleccionar fecha",
"label.select-role": "Seleccionar rol",
"label.select-website": "Seleccionar sitio web",
"label.session": "Session",
"label.session": "Sesn",
"label.sessions": "Sesiones",
"label.settings": "Ajustes",
"label.share-url": "Compartir URL",
@ -202,21 +202,21 @@
"label.total": "Total",
"label.total-records": "Total de registros",
"label.tracking-code": "Código de rastreo",
"label.transactions": "Transactions",
"label.transactions": "Transacciones",
"label.transfer": "Transferir",
"label.transfer-website": "Transferir sitio web",
"label.true": "Verdadero",
"label.type": "Tipo",
"label.unique": "Único",
"label.unique-visitors": "Visitantes únicos",
"label.uniqueCustomers": "Unique Customers",
"label.uniqueCustomers": "Clientes únicos",
"label.unknown": "Desconocida",
"label.untitled": "Sin título",
"label.update": "Actualizar",
"label.url": "URL",
"label.urls": "URLs",
"label.user": "Usuario",
"label.user-property": "User Property",
"label.user-property": "Propiedad de usuario",
"label.username": "Nombre de usuario",
"label.users": "Usuarios",
"label.utm": "UTM",

View file

@ -4,8 +4,8 @@
"label.activity": "Dnevnik dejavnosti",
"label.add": "Dodaj",
"label.add-description": "Dodaj opis",
"label.add-member": "Add member",
"label.add-step": "Add step",
"label.add-member": "Dodaj člana",
"label.add-step": "Dodaj korak",
"label.add-website": "Dodaj spletno mesto",
"label.admin": "Administrator",
"label.after": "Po",
@ -24,21 +24,21 @@
"label.cities": "Mesta",
"label.city": "Mesto",
"label.clear-all": "Počisti vse",
"label.compare": "Compare",
"label.compare": "Primerjaj",
"label.confirm": "Potrdi",
"label.confirm-password": "Potrdi geslo",
"label.contains": "Vsebuje",
"label.continue": "Nadaljuj",
"label.count": "Count",
"label.count": "Število",
"label.countries": "Države",
"label.country": "Država",
"label.create": "Create",
"label.create": "Ustvari",
"label.create-report": "Ustvari poročilo",
"label.create-team": "Ustvari ekipo",
"label.create-user": "Ustvari uporabnika",
"label.created": "Ustvarjeno",
"label.created-by": "Created By",
"label.current": "Current",
"label.created-by": "Ustvaril",
"label.current": "Trenutno",
"label.current-password": "Trenutno geslo",
"label.custom-range": "Obdobje po meri",
"label.dashboard": "Nadzorna plošča",
@ -48,7 +48,7 @@
"label.day": "Dan",
"label.default-date-range": "Privzeto časovno obdobje",
"label.delete": "Izbriši",
"label.delete-report": "Delete report",
"label.delete-report": "Izbriši poročilo",
"label.delete-team": "Izbriši ekipo",
"label.delete-user": "Izbriši uporabnika",
"label.delete-website": "Izbriši spletno mesto",
@ -63,14 +63,14 @@
"label.dropoff": "Zapustitev",
"label.edit": "Uredi",
"label.edit-dashboard": "Uredi nadzorno ploščo",
"label.edit-member": "Edit member",
"label.enable-share-url": "Uredi povezavo za deljenje",
"label.end-step": "End Step",
"label.entry": "Entry URL",
"label.edit-member": "Uredi člana",
"label.enable-share-url": "Omogoči povezavo za deljenje",
"label.end-step": "Končni korak",
"label.entry": "Vstopni URL",
"label.event": "Dogodek",
"label.event-data": "Podatki dogodka",
"label.events": "Dogodki",
"label.exit": "Exit URL",
"label.exit": "Izhodni URL",
"label.false": "Napačno",
"label.field": "Polje",
"label.fields": "Polja",
@ -78,48 +78,48 @@
"label.filter-combined": "Skupaj",
"label.filter-raw": "Neobdelano",
"label.filters": "Filtri",
"label.first-seen": "First seen",
"label.first-seen": "Prvič viden",
"label.funnel": "Prodajni lijak",
"label.funnel-description": "Understand the conversion and drop-off rate of users.",
"label.goal": "Goal",
"label.goals": "Goals",
"label.goals-description": "Track your goals for pageviews and events.",
"label.funnel-description": "Razumite stopnjo konverzije in osipa uporabnikov.",
"label.goal": "Cilj",
"label.goals": "Cilji",
"label.goals-description": "Spremljajte svoje cilje za oglede strani in dogodke.",
"label.greater-than": "Večje od",
"label.greater-than-equals": "Večje ali enako kot",
"label.host": "Host",
"label.hosts": "Hosts",
"label.host": "Gostitelj",
"label.hosts": "Gostitelji",
"label.insights": "Vpogled",
"label.insights-description": "Dive deeper into your data by using segments and filters.",
"label.insights-description": "Poglobite se v podatke z uporabo segmentov in filtrov.",
"label.is": "Je",
"label.is-not": "Ni",
"label.is-not-set": "Ni nastavljeno",
"label.is-set": "Je nastavljeno",
"label.join": "Pridruži se",
"label.join-team": "Pridruži se ekipi",
"label.journey": "Journey",
"label.journey-description": "Understand how users navigate through your website.",
"label.journey": "Uporabniška pot",
"label.journey-description": "Razumite, kako uporabniki krmarijo po vašem spletnem mestu.",
"label.language": "Jezik",
"label.languages": "Jeziki",
"label.laptop": "Prenosni računalnik",
"label.last-days": "Zadnjih {x} dni",
"label.last-hours": "Zadnjih {x} ur",
"label.last-months": "Last {x} months",
"label.last-seen": "Last seen",
"label.last-months": "Zadnjih {x} mesecev",
"label.last-seen": "Nazadnje viden",
"label.leave": "Zapusti",
"label.leave-team": "Zapusti ekipo",
"label.less-than": "Manjše kot",
"label.less-than-equals": "Manjše ali enako kot",
"label.login": "Prijava",
"label.logout": "Odjava",
"label.manage": "Manage",
"label.manager": "Manager",
"label.manage": "Upravljaj",
"label.manager": "Upravitelj",
"label.max": "Največ",
"label.member": "Member",
"label.member": "Član",
"label.members": "Člani",
"label.min": "Najmanj",
"label.mobile": "Mobilne naprave",
"label.more": "Več",
"label.my-account": "My account",
"label.my-account": "Moj račun",
"label.my-websites": "Moja spletna mesta",
"label.name": "Ime",
"label.new-password": "Novo geslo",
@ -134,15 +134,15 @@
"label.pageTitle": "Naslov strani",
"label.pages": "Strani",
"label.password": "Geslo",
"label.path": "Path",
"label.paths": "Paths",
"label.path": "Pot",
"label.paths": "Poti",
"label.powered-by": "Poganja {name}",
"label.previous": "Previous",
"label.previous-period": "Previous period",
"label.previous-year": "Previous year",
"label.previous": "Prejšnji",
"label.previous-period": "Prejšnje obdobje",
"label.previous-year": "Prejšnje leto",
"label.profile": "Profil",
"label.properties": "Properties",
"label.property": "Property",
"label.properties": "Lastnosti",
"label.property": "Lastnost",
"label.queries": "Poizvedbe",
"label.query": "Poizvedba",
"label.query-parameters": "Parametri poizvedbe",
@ -154,41 +154,41 @@
"label.region": "Regija",
"label.regions": "Regije",
"label.remove": "Odstrani",
"label.remove-member": "Remove member",
"label.remove-member": "Odstrani člana",
"label.reports": "Poročila",
"label.required": "Zahtevano",
"label.reset": "Ponastavi",
"label.reset-website": "Ponastavi statistiko",
"label.retention": "Ohranjanje uporabnikov",
"label.retention-description": "Measure your website stickiness by tracking how often users return.",
"label.revenue": "Revenue",
"label.revenue-description": "Look into your revenue across time.",
"label.revenue-property": "Revenue Property",
"label.retention-description": "Merite uporabnikovo zadržanost s sledenjem, kako pogosto se vračajo.",
"label.revenue": "Prihodki",
"label.revenue-description": "Preglejte svoje prihodke skozi čas.",
"label.revenue-property": "Lastnost prihodkov",
"label.role": "Vloga",
"label.run-query": "Izvedi poizvedbo",
"label.save": "Shrani",
"label.screens": "Zasloni",
"label.search": "Search",
"label.select": "Select",
"label.search": "Išči",
"label.select": "Izberi",
"label.select-date": "Izberi datum",
"label.select-role": "Select role",
"label.select-role": "Izberi vlogo",
"label.select-website": "Izberi spletno mesto",
"label.session": "Session",
"label.session": "Seja",
"label.sessions": "Seje",
"label.settings": "Nastavitve",
"label.share-url": "Deli povezavo",
"label.single-day": "En dan",
"label.start-step": "Start Step",
"label.steps": "Steps",
"label.start-step": "Začetni korak",
"label.steps": "Koraki",
"label.sum": "Seštevek",
"label.tablet": "Tablični računalnik",
"label.team": "Ekipa",
"label.team-id": "ID ekipe",
"label.team-manager": "Team manager",
"label.team-manager": "Upravitelj ekipe",
"label.team-member": "Član ekipe",
"label.team-name": "Ime ekipe",
"label.team-owner": "Lastnik ekipe",
"label.team-view-only": "Team view only",
"label.team-view-only": "Ekipa samo za ogled",
"label.team-websites": "Spletna mesta ekipe",
"label.teams": "Ekipe",
"label.theme": "Tema",
@ -232,17 +232,17 @@
"label.visits": "Visits",
"label.website": "Spletno mesto",
"label.website-id": "ID spletnega mesta",
"label.websites": "Spletnih mest",
"label.websites": "Spletna mesta",
"label.window": "Okno",
"label.yesterday": "Včeraj",
"message.action-confirmation": "Type {confirmation} in the box below to confirm.",
"message.action-confirmation": "Za potrditev v spodnje polje vnesite {confirmation}.",
"message.active-users": "{x} trenutni {x, plural, one {obiskovalec} other {obiskovalcev}}",
"message.collected-data": "Collected data",
"message.collected-data": "Zbrani podatki",
"message.confirm-delete": "Ste prepričani, da želite izbrisati {target}?",
"message.confirm-leave": "Ste prepričani, da želite zapustiti {target}?",
"message.confirm-remove": "Are you sure you want to remove {target}?",
"message.confirm-remove": "Ali ste prepričani, da želite odstraniti {target}?",
"message.confirm-reset": "Ste prepričani, da želite ponastaviti statistiko {target}?",
"message.delete-team-warning": "Deleting a team will also delete all team websites.",
"message.delete-team-warning": "Brisanje ekipe bo izbrisalo tudi vsa spletna mesta ekipe.",
"message.delete-website-warning": "Izbrisani bodo tudi vsi pripadajoči podatki.",
"message.error": "Nekaj je šlo narobe.",
"message.event-log": "{event} na {url}",
@ -268,12 +268,12 @@
"message.team-not-found": "Ekipa ni bila najdena.",
"message.team-websites-info": "Spletne strani si lahko ogleda vsak član ekipe.",
"message.tracking-code": "Koda za sledenje",
"message.transfer-team-website-to-user": "Transfer this website to your account?",
"message.transfer-user-website-to-team": "Select the team to transfer this website to.",
"message.transfer-website": "Transfer website ownership to your account or another team.",
"message.triggered-event": "Triggered event",
"message.transfer-team-website-to-user": "Želite prenesti to spletno mesto v svoj račun?",
"message.transfer-user-website-to-team": "Izberite ekipo, na katero želite prenesti to spletno mesto.",
"message.transfer-website": "Prenesite lastništvo spletnega mesta na svoj račun ali drugo ekipo.",
"message.triggered-event": "Sprožen dogodek",
"message.user-deleted": "Uporabnik je izbrisan.",
"message.viewed-page": "Viewed page",
"message.viewed-page": "Ogledana stran",
"message.visitor-log": "Obiskovalec iz {country} uporablja {browser} na {os} {device}",
"message.visitors-dropped-off": "Visitors dropped off"
"message.visitors-dropped-off": "Osip obiskovalcev"
}

279
src/lang/uz-UZ.json Normal file
View file

@ -0,0 +1,279 @@
{
"label.access-code": "Kirish kodi",
"label.actions": "Amallar",
"label.activity": "Faoliyat",
"label.add": "Qoʻshish",
"label.add-description": "Tavsif qoʻshish",
"label.add-member": "A'zo qoʻshish",
"label.add-step": "Qadam qoʻshish",
"label.add-website": "Veb-sayt qoʻshish",
"label.admin": "Administrator",
"label.after": "Keyin",
"label.all": "Barchasi",
"label.all-time": "Barcha vaqtlar",
"label.analytics": "Tahlil",
"label.average": "Oʻrtacha",
"label.back": "Orqaga",
"label.before": "Oldin",
"label.bounce-rate": "Chiqib ketish darajasi",
"label.breakdown": "Tahlil",
"label.browser": "Brauzer",
"label.browsers": "Brauzerlar",
"label.cancel": "Bekor qilish",
"label.change-password": "Parolni oʻzgartirish",
"label.cities": "Shaharlar",
"label.city": "Shahar",
"label.clear-all": "Barchasini tozalash",
"label.compare": "Taqqoslash",
"label.confirm": "Tasdiqlash",
"label.confirm-password": "Parolni tasdiqlash",
"label.contains": "Oʻz ichiga oladi",
"label.continue": "Davom etish",
"label.count": "Soni",
"label.countries": "Davlatlar",
"label.country": "Davlat",
"label.create": "Yaratish",
"label.create-report": "Hisobot yaratish",
"label.create-team": "Jamoa yaratish",
"label.create-user": "Foydalanuvchi yaratish",
"label.created": "Yaratilgan",
"label.created-by": "Kim tomonidan yaratilgan",
"label.current": "Joriy",
"label.current-password": "Joriy parol",
"label.custom-range": "Maxsus oraliq",
"label.dashboard": "Boshqaruv paneli",
"label.data": "Ma'lumotlar",
"label.date": "Sana",
"label.date-range": "Sana oraligʻi",
"label.day": "Kun",
"label.default-date-range": "Standart sana oraligʻi",
"label.delete": "Oʻchirish",
"label.delete-report": "Hisobotni oʻchirish",
"label.delete-team": "Jamoani oʻchirish",
"label.delete-user": "Foydalanuvchini oʻchirish",
"label.delete-website": "Veb-saytni oʻchirish",
"label.description": "Tavsif",
"label.desktop": "Ish stoli",
"label.details": "Batafsil ma'lumot",
"label.device": "Qurilma",
"label.devices": "Qurilmalar",
"label.dismiss": "Yopish",
"label.does-not-contain": "Oʻz ichiga olmaydi",
"label.domain": "Domen",
"label.dropoff": "Tashlab ketish",
"label.edit": "Tahrirlash",
"label.edit-dashboard": "Boshqaruv panelini tahrirlash",
"label.edit-member": "A'zoni tahrirlash",
"label.enable-share-url": "Ulashish URL'ini yoqish",
"label.end-step": "Yakuniy qadam",
"label.entry": "Kirish yoʻli",
"label.event": "Hodisa",
"label.event-data": "Hodisa ma'lumotlari",
"label.events": "Hodisalar",
"label.exit": "Chiqish yoʻli",
"label.false": "Yolgʻon",
"label.field": "Maydon",
"label.fields": "Maydonlar",
"label.filter": "Filtr",
"label.filter-combined": "Birlashtirilgan",
"label.filter-raw": "Xom",
"label.filters": "Filtrlar",
"label.first-seen": "Birinchi koʻrilgan",
"label.funnel": "Voronka",
"label.funnel-description": "Foydalanuvchilarning konversiya va tashlab ketish darajasini tushunish.",
"label.goal": "Maqsad",
"label.goals": "Maqsadlar",
"label.goals-description": "Sahifa koʻrishlari va hodisalar uchun maqsadlaringizni kuzatib boring.",
"label.greater-than": "Kattaroq",
"label.greater-than-equals": "Kattaroq yoki teng",
"label.host": "Xost",
"label.hosts": "Xostlar",
"label.insights": "Tushunchalar",
"label.insights-description": "Segmentlar va filtrlardan foydalanib ma'lumotlaringizga chuqurroq kiring.",
"label.is": "Teng",
"label.is-not": "Teng emas",
"label.is-not-set": "Oʻrnatilmagan",
"label.is-set": "Oʻrnatilgan",
"label.join": "Qoʻshilish",
"label.join-team": "Jamoaga qoʻshilish",
"label.journey": "Sayohat",
"label.journey-description": "Foydalanuvchilar veb-saytingizda qanday harakat qilishlarini tushunish.",
"label.language": "Til",
"label.languages": "Tillar",
"label.laptop": "Noutbuk",
"label.last-days": "Oxirgi {x} kun",
"label.last-hours": "Oxirgi {x} soat",
"label.last-months": "Oxirgi {x} oy",
"label.last-seen": "Oxirgi koʻrilgan",
"label.leave": "Tark etish",
"label.leave-team": "Jamoani tark etish",
"label.less-than": "Kichikroq",
"label.less-than-equals": "Kichikroq yoki teng",
"label.login": "Kirish",
"label.logout": "Chiqish",
"label.manage": "Boshqarish",
"label.manager": "Menejer",
"label.max": "Maksimal",
"label.member": "A'zo",
"label.members": "A'zolar",
"label.min": "Minimal",
"label.mobile": "Mobil",
"label.more": "Koʻproq",
"label.my-account": "Mening hisobim",
"label.my-websites": "Mening veb-saytlarim",
"label.name": "Ism",
"label.new-password": "Yangi parol",
"label.none": "Hech biri",
"label.number-of-records": "{x} yozuv",
"label.ok": "OK",
"label.os": "OT (Operatsion tizim)",
"label.overview": "Umumiy koʻrinish",
"label.owner": "Egasi",
"label.page-of": "Sahifa {current} dan {total}",
"label.page-views": "Sahifa koʻrishlari",
"label.pageTitle": "Sahifa sarlavhasi",
"label.pages": "Sahifalar",
"label.password": "Parol",
"label.path": "Yoʻl",
"label.paths": "Yoʻllar",
"label.powered-by": "{name} tomonidan quvvatlanadi",
"label.previous": "Oldingi",
"label.previous-period": "Oldingi davr",
"label.previous-year": "Oldingi yil",
"label.profile": "Profil",
"label.properties": "Xususiyatlar",
"label.property": "Xususiyat",
"label.queries": "Soʻrovlar",
"label.query": "Soʻrov",
"label.query-parameters": "Soʻrov parametrlari",
"label.realtime": "Haqiqiy vaqt",
"label.referrer": "Tavsiya etuvchi",
"label.referrers": "Tavsiya etuvchilar",
"label.refresh": "Yangilash",
"label.regenerate": "Qayta yaratish",
"label.region": "Viloyat/Mintaqa",
"label.regions": "Viloyatlar/Mintaqalar",
"label.remove": "Olib tashlash",
"label.remove-member": "A'zoni olib tashlash",
"label.reports": "Hisobotlar",
"label.required": "Majburiy",
"label.reset": "Qayta tiklash",
"label.reset-website": "Veb-saytni qayta tiklash",
"label.retention": "Saqlanish",
"label.retention-description": "Foydalanuvchilarning qaytish chastotasini kuzatib, veb-saytingizning jozibadorligini oʻlchang.",
"label.revenue": "Daromad",
"label.revenue-description": "Vaqt oʻtishi bilan daromadingizni tekshiring.",
"label.revenue-property": "Daromad xususiyati",
"label.role": "Rol",
"label.run-query": "Soʻrovni ishga tushirish",
"label.save": "Saqlash",
"label.screens": "Ekranlar",
"label.search": "Qidiruv",
"label.select": "Tanlash",
"label.select-date": "Sanani tanlash",
"label.select-role": "Rolni tanlash",
"label.select-website": "Veb-saytni tanlash",
"label.session": "Sessiya",
"label.sessions": "Sessiyalar",
"label.settings": "Sozlamalar",
"label.share-url": "Ulashish URL'i",
"label.single-day": "Bir kun",
"label.start-step": "Boshlanish qadami",
"label.steps": "Qadamlar",
"label.sum": "Yigʻindi",
"label.tablet": "Planshet",
"label.team": "Jamoa",
"label.team-id": "Jamoa ID'si",
"label.team-manager": "Jamoa menejeri",
"label.team-member": "Jamoa a'zosi",
"label.team-name": "Jamoa nomi",
"label.team-owner": "Jamoa egasi",
"label.team-view-only": "Jamoa faqat koʻrish",
"label.team-websites": "Jamoa veb-saytlari",
"label.teams": "Jamoalar",
"label.theme": "Mavzu",
"label.this-month": "Shu oy",
"label.this-week": "Shu hafta",
"label.this-year": "Shu yil",
"label.timezone": "Vaqt zonasi",
"label.title": "Sarlavha",
"label.today": "Bugun",
"label.toggle-charts": "Grafiklarni almashtirish",
"label.total": "Jami",
"label.total-records": "Jami yozuvlar",
"label.tracking-code": "Kuzatuv kodi",
"label.transactions": "Tranzaksiyalar",
"label.transfer": "Oʻtkazish",
"label.transfer-website": "Veb-saytni oʻtkazish",
"label.true": "Rost",
"label.type": "Tur",
"label.unique": "Noyob",
"label.unique-visitors": "Noyob tashrif buyuruvchilar",
"label.uniqueCustomers": "Noyob mijozlar",
"label.unknown": "Noma'lum",
"label.untitled": "Sarlavhasiz",
"label.update": "Yangilash",
"label.url": "URL",
"label.urls": "URL'lar",
"label.user": "Foydalanuvchi",
"label.user-property": "Foydalanuvchi xususiyati",
"label.username": "Foydalanuvchi nomi",
"label.users": "Foydalanuvchilar",
"label.utm": "UTM",
"label.utm-description": "UTM parametrlari orqali kampaniyalaringizni kuzatib boring.",
"label.value": "Qiymat",
"label.view": "Koʻrish",
"label.view-details": "Batafsil koʻrish",
"label.view-only": "Faqat koʻrish",
"label.views": "Koʻrishlar",
"label.views-per-visit": "Tashrifga koʻrishlar soni",
"label.visit-duration": "Tashrif davomiyligi",
"label.visitors": "Tashrif buyuruvchilar",
"label.visits": "Tashriflar",
"label.website": "Veb-sayt",
"label.website-id": "Veb-sayt ID'si",
"label.websites": "Veb-saytlar",
"label.window": "Oyna",
"label.yesterday": "Kecha",
"message.action-confirmation": "Tasdiqlash uchun pastdagi qutiga **{confirmation}** yozing.",
"message.active-users": "{x} joriy {x, plural, one {tashrif buyuruvchi} other {tashrif buyuruvchilar}}",
"message.collected-data": "Yigʻilgan ma'lumotlar",
"message.confirm-delete": "**{target}** ni oʻchirmoqchi ekanligingizga ishonchingiz komilmi?",
"message.confirm-leave": "**{target}** ni tark etmoqchi ekanligingizga ishonchingiz komilmi?",
"message.confirm-remove": "**{target}** ni olib tashlamoqchi ekanligingizga ishonchingiz komilmi?",
"message.confirm-reset": "**{target}** ni qayta tiklamoqchi ekanligingizga ishonchingiz komilmi?",
"message.delete-team-warning": "Jamoani oʻchirish, shuningdek, barcha jamoa veb-saytlarini ham oʻchiradi.",
"message.delete-website-warning": "Barcha veb-sayt ma'lumotlari oʻchiriladi.",
"message.error": "Nimadir xato ketdi.",
"message.event-log": "**{url}** da **{event}** hodisasi",
"message.go-to-settings": "Sozlamalarga oʻtish",
"message.incorrect-username-password": "Notoʻgʻri foydalanuvchi nomi va/yoki parol.",
"message.invalid-domain": "Notoʻgʻri domen. http/https qoʻshmang.",
"message.min-password-length": "Minimal uzunligi {n} belgidan",
"message.new-version-available": "Umami'ning yangi **{version}** versiyasi mavjud!",
"message.no-data-available": "Ma'lumotlar mavjud emas.",
"message.no-event-data": "Hodisa ma'lumotlari mavjud emas.",
"message.no-match-password": "Parollar mos kelmadi.",
"message.no-results-found": "Hech qanday natija topilmadi.",
"message.no-team-websites": "Bu jamoada hech qanday veb-sayt yoʻq.",
"message.no-teams": "Siz hech qanday jamoa yaratmagansiz.",
"message.no-users": "Hech qanday foydalanuvchi yoʻq.",
"message.no-websites-configured": "Sizda hech qanday veb-sayt sozlanmagan.",
"message.page-not-found": "Sahifa topilmadi",
"message.reset-website": "Bu veb-saytni qayta tiklash uchun tasdiqlash uchun pastdagi qutiga **{confirmation}** yozing.",
"message.reset-website-warning": "Bu veb-sayt uchun barcha statistik ma'lumotlar oʻchiriladi, lekin sozlamalaringiz saqlanib qoladi.",
"message.saved": "Saqlandi.",
"message.share-url": "Sizning veb-sayt statistikalaringiz quyidagi URL'da ochiqdir:",
"message.team-already-member": "Siz allaqachon jamoa a'zosisiz.",
"message.team-not-found": "Jamoa topilmadi.",
"message.team-websites-info": "Veb-saytlarni jamoaning har bir a'zosi koʻrishi mumkin.",
"message.tracking-code": "Bu veb-sayt uchun statistikani kuzatish uchun quyidagi kodni HTML'ingizdagi **<head>...</head>** qismiga joylashtiring.",
"message.transfer-team-website-to-user": "Bu veb-saytni oʻz hisobingizga oʻtkazasizmi?",
"message.transfer-user-website-to-team": "Bu veb-saytni oʻtkazish uchun jamoani tanlang.",
"message.transfer-website": "Veb-sayt egaligini oʻz hisobingizga yoki boshqa jamoaga oʻtkazish.",
"message.triggered-event": "Hodisa ishga tushirildi",
"message.user-deleted": "Foydalanuvchi oʻchirildi.",
"message.viewed-page": "Sahifa koʻrildi",
"message.visitor-log": "{os} {device} da {browser} dan foydalanayotgan {country} dan tashrif buyuruvchi",
"message.visitors-dropped-off": "Tashrif buyuruvchilar tashlab ketishdi"
}

View file

@ -2,6 +2,7 @@ import * as detect from '../detect';
import { expect } from '@jest/globals';
const IP = '127.0.0.1';
const BAD_IP = '127.127.127.127';
test('getIpAddress: Custom header', () => {
process.env.CLIENT_IP_HEADER = 'x-custom-ip-header';
@ -17,6 +18,12 @@ test('getIpAddress: Standard header', () => {
expect(detect.getIpAddress(new Headers({ 'x-forwarded-for': IP }))).toEqual(IP);
});
test('getIpAddress: CloudFlare header is lower priority than standard header', () => {
expect(
detect.getIpAddress(new Headers({ 'cf-connecting-ip': BAD_IP, 'x-forwarded-for': IP })),
).toEqual(IP);
});
test('getIpAddress: No header', () => {
expect(detect.getIpAddress(new Headers())).toEqual(null);
});

View file

@ -154,12 +154,12 @@ export const KAFKA_TOPIC = {
export const ROLES = {
admin: 'admin',
user: 'user',
viewOnly: 'view-only',
teamOwner: 'team-owner',
teamManager: 'team-manager',
teamMember: 'team-member',
teamOwner: 'team-owner',
teamViewOnly: 'team-view-only',
user: 'user',
viewOnly: 'view-only',
} as const;
export const PERMISSIONS = {
@ -267,7 +267,7 @@ export const URL_LENGTH = 500;
export const PAGE_TITLE_LENGTH = 500;
export const EVENT_NAME_LENGTH = 50;
export const UTM_PARAMS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
export const UTM_PARAMS = ['utm_campaign', 'utm_content', 'utm_medium', 'utm_source', 'utm_term'];
export const DESKTOP_OS = [
'BeOS',
@ -305,8 +305,8 @@ export const OS_NAMES = {
export const BROWSERS = {
android: 'Android',
aol: 'AOL',
beaker: 'Beaker',
bb10: 'BlackBerry 10',
beaker: 'Beaker',
chrome: 'Chrome',
'chromium-webview': 'Chrome (webview)',
crios: 'Chrome (iOS)',
@ -328,15 +328,17 @@ export const BROWSERS = {
phantomjs: 'PhantomJS',
safari: 'Safari',
samsung: 'Samsung',
silk: 'Silk',
searchbot: 'Searchbot',
silk: 'Silk',
yandexbrowser: 'Yandex',
};
// The order here is important and influences how IPs are detected by lib/detect.ts
// Please do not change the order unless you know exactly what you're doing - read https://developers.cloudflare.com/fundamentals/reference/http-headers/
export const IP_ADDRESS_HEADERS = [
'cf-connecting-ip',
'x-client-ip',
'x-forwarded-for',
'cf-connecting-ip', // This should be *after* x-forwarded-for, so that x-forwarded-for is respected if present
'do-connecting-ip',
'fastly-client-ip',
'true-client-ip',
@ -345,349 +347,348 @@ export const IP_ADDRESS_HEADERS = [
'x-forwarded',
'forwarded',
'x-appengine-user-ip',
'x-nf-client-connection-ip',
'x-real-ip',
];
export const SOCIAL_DOMAINS = [
'bsky.app',
'facebook.com',
'fb.com',
'instagram.com',
'ig.com',
'twitter.com',
't.co',
'x.com',
'instagram.com',
'linkedin.',
'tiktok.',
'reddit.',
'threads.net',
'bsky.app',
'news.ycombinator.com',
'snapchat.',
'pinterest.',
'reddit.',
'snapchat.',
't.co',
'threads.net',
'tiktok.',
'twitter.com',
'x.com',
];
export const SEARCH_DOMAINS = [
'google.',
'baidu.com',
'bing.com',
'msn.com',
'chatgpt.com',
'duckduckgo.com',
'ecosia.org',
'google.',
'msn.com',
'perplexity.ai',
'search.brave.com',
'yandex.',
'baidu.com',
'ecosia.org',
'chatgpt.com',
'perplexity.ai',
];
export const SHOPPING_DOMAINS = [
'amazon.',
'ebay.com',
'walmart.com',
'alibab.com',
'alibaba.com',
'aliexpress.com',
'etsy.com',
'amazon.',
'bestbuy.com',
'target.com',
'ebay.com',
'etsy.com',
'newegg.com',
'target.com',
'walmart.com',
];
export const EMAIL_DOMAINS = [
'gmail.',
'hotmail.',
'mail.yahoo.',
'outlook.',
'hotmail.',
'protonmail.',
'proton.me',
'protonmail.',
];
export const VIDEO_DOMAINS = ['youtube.', 'twitch.'];
export const VIDEO_DOMAINS = ['twitch.', 'youtube.'];
export const PAID_AD_PARAMS = [
'utm_source=google',
'gclid=',
'fbclid=',
'msclkid=',
'dclid=',
'twclid=',
'li_fat_id=',
'epik=',
'ttclid=',
'scid=',
'aid=',
'pc_id=',
'ad_id=',
'rdt_cid=',
'aid=',
'dclid=',
'epik=',
'fbclid=',
'gclid=',
'li_fat_id=',
'msclkid=',
'ob_click_id=',
'pc_id=',
'rdt_cid=',
'scid=',
'ttclid=',
'twclid=',
'utm_medium=cpc',
'utm_medium=paid',
'utm_medium=paid_social',
'utm_source=google',
];
export const GROUPED_DOMAINS = [
{ name: 'Google', domain: 'google.com', match: 'google.' },
{ name: 'Facebook', domain: 'facebook.com', match: 'facebook.' },
{ name: 'Reddit', domain: 'reddit.com', match: 'reddit.' },
{ name: 'LinkedIn', domain: 'linkedin.com', match: 'linkedin.' },
{ name: 'GitHub', domain: 'github.com', match: 'github.' },
{ name: 'Hacker News', domain: 'news.ycombinator.com', match: 'news.ycombinator.com' },
{ name: 'Bing', domain: 'bing.com', match: 'bing.' },
{ name: 'Brave', domain: 'brave.com', match: 'brave.' },
{ name: 'DuckDuckGo', domain: 'duckduckgo.com', match: 'duckduckgo.' },
{ name: 'Twitter', domain: 'twitter.com', match: ['twitter.', 't.co', 'x.com'] },
{ name: 'Instagram', domain: 'instagram.com', match: ['instagram.', 'ig.com'] },
{ name: 'Snapchat', domain: 'snapchat.com', match: 'snapchat.' },
{ name: 'Pinterest', domain: 'pinterest.com', match: 'pinterest.' },
{ name: 'ChatGPT', domain: 'chatgpt.com', match: 'chatgpt.' },
{ name: 'DuckDuckGo', domain: 'duckduckgo.com', match: 'duckduckgo.' },
{ name: 'Facebook', domain: 'facebook.com', match: 'facebook.' },
{ name: 'GitHub', domain: 'github.com', match: 'github.' },
{ name: 'Google', domain: 'google.com', match: 'google.' },
{ name: 'Hacker News', domain: 'news.ycombinator.com', match: 'news.ycombinator.com' },
{ name: 'Instagram', domain: 'instagram.com', match: ['instagram.', 'ig.com'] },
{ name: 'LinkedIn', domain: 'linkedin.com', match: 'linkedin.' },
{ name: 'Pinterest', domain: 'pinterest.com', match: 'pinterest.' },
{ name: 'Reddit', domain: 'reddit.com', match: 'reddit.' },
{ name: 'Snapchat', domain: 'snapchat.com', match: 'snapchat.' },
{ name: 'Twitter', domain: 'twitter.com', match: ['twitter.', 't.co', 'x.com'] },
];
export const MAP_FILE = '/datamaps.world.json';
export const ISO_COUNTRIES = {
ABW: 'AW',
AFG: 'AF',
ALA: 'AX',
ALB: 'AL',
DZA: 'DZ',
ASM: 'AS',
AND: 'AD',
AGO: 'AO',
AIA: 'AI',
ATA: 'AQ',
ATG: 'AG',
ALA: 'AX',
ALB: 'AL',
AND: 'AD',
ANT: 'AN',
ARE: 'AE',
ARG: 'AR',
ARM: 'AM',
ABW: 'AW',
ASM: 'AS',
ATF: 'TF',
ATG: 'AG',
AUS: 'AU',
AUT: 'AT',
AZE: 'AZ',
BHS: 'BS',
BHR: 'BH',
BGD: 'BD',
BRB: 'BB',
BLR: 'BY',
BEL: 'BE',
BLZ: 'BZ',
BEN: 'BJ',
BMU: 'BM',
BTN: 'BT',
BOL: 'BO',
BIH: 'BA',
BWA: 'BW',
BVT: 'BV',
BRA: 'BR',
VGB: 'VG',
IOT: 'IO',
BRN: 'BN',
BGR: 'BG',
BFA: 'BF',
BDI: 'BI',
KHM: 'KH',
CMR: 'CM',
CAN: 'CA',
CPV: 'CV',
CYM: 'KY',
BEL: 'BE',
BEN: 'BJ',
BFA: 'BF',
BGD: 'BD',
BGR: 'BG',
BHR: 'BH',
BHS: 'BS',
BIH: 'BA',
BLR: 'BY',
BLZ: 'BZ',
BLM: 'BL',
BMU: 'BM',
BOL: 'BO',
BRA: 'BR',
BRB: 'BB',
BRN: 'BN',
BTN: 'BT',
BVT: 'BV',
BWA: 'BW',
CAF: 'CF',
TCD: 'TD',
CAN: 'CA',
CCK: 'CC',
CHE: 'CH',
CHL: 'CL',
CHN: 'CN',
HKG: 'HK',
MAC: 'MO',
CXR: 'CX',
CCK: 'CC',
CIV: 'CI',
CMR: 'CM',
COD: 'CD',
COG: 'CG',
COK: 'CK',
COL: 'CO',
COM: 'KM',
COG: 'CG',
COD: 'CD',
COK: 'CK',
CPV: 'CV',
CRI: 'CR',
CIV: 'CI',
HRV: 'HR',
CUB: 'CU',
CXR: 'CX',
CYM: 'KY',
CYP: 'CY',
CZE: 'CZ',
DNK: 'DK',
DEU: 'DE',
DJI: 'DJ',
DMA: 'DM',
DNK: 'DK',
DOM: 'DO',
DZA: 'DZ',
ECU: 'EC',
EGY: 'EG',
SLV: 'SV',
GNQ: 'GQ',
ERI: 'ER',
ESH: 'EH',
ESP: 'ES',
EST: 'EE',
ETH: 'ET',
FLK: 'FK',
FRO: 'FO',
FJI: 'FJ',
FIN: 'FI',
FJI: 'FJ',
FLK: 'FK',
FRA: 'FR',
GUF: 'GF',
PYF: 'PF',
ATF: 'TF',
FRO: 'FO',
FSM: 'FM',
GAB: 'GA',
GMB: 'GM',
GBR: 'GB',
GEO: 'GE',
DEU: 'DE',
GGY: 'GG',
GHA: 'GH',
GIB: 'GI',
GRC: 'GR',
GRL: 'GL',
GRD: 'GD',
GLP: 'GP',
GUM: 'GU',
GTM: 'GT',
GGY: 'GG',
GIN: 'GN',
GLP: 'GP',
GMB: 'GM',
GNB: 'GW',
GNQ: 'GQ',
GRC: 'GR',
GRD: 'GD',
GRL: 'GL',
GTM: 'GT',
GUF: 'GF',
GUM: 'GU',
GUY: 'GY',
HTI: 'HT',
HKG: 'HK',
HMD: 'HM',
VAT: 'VA',
HND: 'HN',
HRV: 'HR',
HTI: 'HT',
HUN: 'HU',
ISL: 'IS',
IND: 'IN',
IDN: 'ID',
IMN: 'IM',
IND: 'IN',
IOT: 'IO',
IRL: 'IE',
IRN: 'IR',
IRQ: 'IQ',
IRL: 'IE',
IMN: 'IM',
ISL: 'IS',
ISR: 'IL',
ITA: 'IT',
JAM: 'JM',
JPN: 'JP',
JEY: 'JE',
JOR: 'JO',
JPN: 'JP',
KAZ: 'KZ',
KEN: 'KE',
KGZ: 'KG',
KHM: 'KH',
KIR: 'KI',
PRK: 'KP',
KNA: 'KN',
KOR: 'KR',
KWT: 'KW',
KGZ: 'KG',
LAO: 'LA',
LVA: 'LV',
LBN: 'LB',
LSO: 'LS',
LBR: 'LR',
LBY: 'LY',
LCA: 'LC',
LIE: 'LI',
LKA: 'LK',
LSO: 'LS',
LTU: 'LT',
LUX: 'LU',
MKD: 'MK',
LVA: 'LV',
MAF: 'MF',
MAR: 'MA',
MCO: 'MC',
MDA: 'MD',
MDG: 'MG',
MWI: 'MW',
MYS: 'MY',
MDV: 'MV',
MEX: 'MX',
MHL: 'MH',
MKD: 'MK',
MLI: 'ML',
MLT: 'MT',
MHL: 'MH',
MTQ: 'MQ',
MRT: 'MR',
MUS: 'MU',
MYT: 'YT',
MEX: 'MX',
FSM: 'FM',
MDA: 'MD',
MCO: 'MC',
MNG: 'MN',
MNE: 'ME',
MSR: 'MS',
MAR: 'MA',
MOZ: 'MZ',
MMR: 'MM',
NAM: 'NA',
NRU: 'NR',
NPL: 'NP',
NLD: 'NL',
ANT: 'AN',
NCL: 'NC',
NZL: 'NZ',
NIC: 'NI',
NER: 'NE',
NGA: 'NG',
NIU: 'NU',
NFK: 'NF',
MNE: 'ME',
MNG: 'MN',
MNP: 'MP',
MOZ: 'MZ',
MRT: 'MR',
MSR: 'MS',
MTQ: 'MQ',
MUS: 'MU',
MWI: 'MW',
MYS: 'MY',
MYT: 'YT',
NAM: 'NA',
NCL: 'NC',
NER: 'NE',
NFK: 'NF',
NGA: 'NG',
NIC: 'NI',
NIU: 'NU',
NLD: 'NL',
NOR: 'NO',
NPL: 'NP',
NRU: 'NR',
NZL: 'NZ',
OMN: 'OM',
PAK: 'PK',
PLW: 'PW',
PSE: 'PS',
PAN: 'PA',
PNG: 'PG',
PRY: 'PY',
PCN: 'PN',
PER: 'PE',
PHL: 'PH',
PCN: 'PN',
PLW: 'PW',
PNG: 'PG',
POL: 'PL',
PRT: 'PT',
PRI: 'PR',
PRK: 'KP',
PRT: 'PT',
PRY: 'PY',
PSE: 'PS',
PYF: 'PF',
QAT: 'QA',
REU: 'RE',
ROU: 'RO',
RUS: 'RU',
RWA: 'RW',
BLM: 'BL',
SHN: 'SH',
KNA: 'KN',
LCA: 'LC',
MAF: 'MF',
SPM: 'PM',
VCT: 'VC',
WSM: 'WS',
SMR: 'SM',
STP: 'ST',
SAU: 'SA',
SDN: 'SD',
SEN: 'SN',
SRB: 'RS',
SYC: 'SC',
SLE: 'SL',
SGP: 'SG',
SGS: 'GS',
SHN: 'SH',
SJM: 'SJ',
SLB: 'SB',
SLE: 'SL',
SLV: 'SV',
SMR: 'SM',
SOM: 'SO',
SPM: 'PM',
SRB: 'RS',
SUR: 'SR',
STP: 'ST',
SVK: 'SK',
SVN: 'SI',
SLB: 'SB',
SOM: 'SO',
ZAF: 'ZA',
SGS: 'GS',
SSD: 'SS',
ESP: 'ES',
LKA: 'LK',
SDN: 'SD',
SUR: 'SR',
SJM: 'SJ',
SWZ: 'SZ',
SWE: 'SE',
CHE: 'CH',
SWZ: 'SZ',
SYC: 'SC',
SYR: 'SY',
TWN: 'TW',
TJK: 'TJ',
TZA: 'TZ',
THA: 'TH',
TLS: 'TL',
TCA: 'TC',
TCD: 'TD',
TGO: 'TG',
THA: 'TH',
TJK: 'TJ',
TKL: 'TK',
TKM: 'TM',
TLS: 'TL',
TON: 'TO',
TTO: 'TT',
TUN: 'TN',
TUR: 'TR',
TKM: 'TM',
TCA: 'TC',
TUV: 'TV',
TWN: 'TW',
TZA: 'TZ',
UGA: 'UG',
UKR: 'UA',
ARE: 'AE',
GBR: 'GB',
USA: 'US',
UMI: 'UM',
URY: 'UY',
USA: 'US',
UZB: 'UZ',
VUT: 'VU',
VAT: 'VA',
VCT: 'VC',
VEN: 'VE',
VNM: 'VN',
VGB: 'VG',
VIR: 'VI',
VNM: 'VN',
VUT: 'VU',
WLF: 'WF',
ESH: 'EH',
WSM: 'WS',
XKX: 'XK',
YEM: 'YE',
ZAF: 'ZA',
ZMB: 'ZM',
ZWE: 'ZW',
XKX: 'XK',
};

View file

@ -104,9 +104,18 @@ const DATE_FUNCTIONS = {
},
};
const TIMEZONE_MAPPINGS: Record<string, string> = {
'Asia/Calcutta': 'Asia/Kolkata',
};
export function normalizeTimezone(timezone: string): string {
return TIMEZONE_MAPPINGS[timezone] || timezone;
}
export function isValidTimezone(timezone: string) {
try {
Intl.DateTimeFormat(undefined, { timeZone: timezone });
const normalizedTimezone = normalizeTimezone(timezone);
Intl.DateTimeFormat(undefined, { timeZone: normalizedTimezone });
return true;
} catch (error) {
return false;

View file

@ -15,6 +15,27 @@ import { safeDecodeURIComponent } from '@/lib/url';
const MAXMIND = 'maxmind';
const PROVIDER_HEADERS = [
// Cloudflare headers
{
countryHeader: 'cf-ipcountry',
regionHeader: 'cf-region-code',
cityHeader: 'cf-ipcity',
},
// Vercel headers
{
countryHeader: 'x-vercel-ip-country',
regionHeader: 'x-vercel-ip-country-region',
cityHeader: 'x-vercel-ip-city',
},
// CloudFront headers
{
countryHeader: 'cloudfront-viewer-country',
regionHeader: 'cloudfront-viewer-country-region',
cityHeader: 'cloudfront-viewer-city',
},
];
export function getIpAddress(headers: Headers) {
const customHeader = process.env.CLIENT_IP_HEADER;
@ -87,6 +108,14 @@ function decodeHeader(s: string | undefined | null): string | undefined | null {
return Buffer.from(s, 'latin1').toString('utf-8');
}
function removePortFromIP(ip: string = "") {
const split = ip.split(":");
// Assuming ip is a valid IPv4/IPv6 address, 3 colons is the minumum for IPv6
const ipv4 = split.length - 1 < 3;
return ipv4 ? split[0] : ip;
}
export async function getLocation(ip: string = '', headers: Headers, hasPayloadIP: boolean) {
// Ignore local ips
if (await isLocalhost(ip)) {
@ -94,30 +123,19 @@ export async function getLocation(ip: string = '', headers: Headers, hasPayloadI
}
if (!hasPayloadIP && !process.env.SKIP_LOCATION_HEADERS) {
// Cloudflare headers
if (headers.get('cf-ipcountry')) {
const country = decodeHeader(headers.get('cf-ipcountry'));
const region = decodeHeader(headers.get('cf-region-code'));
const city = decodeHeader(headers.get('cf-ipcity'));
for (const provider of PROVIDER_HEADERS) {
const countryHeader = headers.get(provider.countryHeader);
if (countryHeader) {
const country = decodeHeader(countryHeader);
const region = decodeHeader(headers.get(provider.regionHeader));
const city = decodeHeader(headers.get(provider.cityHeader));
return {
country,
region: getRegionCode(country, region),
city,
};
}
// Vercel headers
if (headers.get('x-vercel-ip-country')) {
const country = decodeHeader(headers.get('x-vercel-ip-country'));
const region = decodeHeader(headers.get('x-vercel-ip-country-region'));
const city = decodeHeader(headers.get('x-vercel-ip-city'));
return {
country,
region: getRegionCode(country, region),
city,
};
return {
country,
region: getRegionCode(country, region),
city,
};
}
}
}
@ -131,7 +149,7 @@ export async function getLocation(ip: string = '', headers: Headers, hasPayloadI
}
// When the client IP is extracted from headers, sometimes the value includes a port
const cleanIp = ip?.split(':')[0];
const cleanIp = removePortFromIP(ip);
const result = global[MAXMIND].get(cleanIp);
if (result) {

View file

@ -44,6 +44,7 @@ import {
ca,
hu,
vi,
uz,
} from 'date-fns/locale';
export const languages = {
@ -95,6 +96,7 @@ export const languages = {
'tr-TR': { label: 'Türkçe', dateLocale: tr },
'uk-UA': { label: 'українська', dateLocale: uk },
'ur-PK': { label: 'Urdu (Pakistan)', dateLocale: uk, dir: 'rtl' },
'uz-UZ': { label: 'Ozbekcha', dateLocale: uz },
'vi-VN': { label: 'Tiếng Việt', dateLocale: vi },
'zh-CN': { label: '中文', dateLocale: zhCN },
'zh-TW': { label: '中文(繁體)', dateLocale: zhTW },

View file

@ -1,5 +1,5 @@
import { z } from 'zod';
import { isValidTimezone } from '@/lib/date';
import { isValidTimezone, normalizeTimezone } from '@/lib/date';
import { UNIT_TYPES } from './constants';
export const filterParams = {
@ -28,9 +28,9 @@ export const pagingParams = {
search: z.string().optional(),
};
export const timezoneParam = z.string().refine(value => isValidTimezone(value), {
export const timezoneParam = z.string().refine((value: string) => isValidTimezone(value), {
message: 'Invalid timezone',
});
}).transform((value: string) => normalizeTimezone(value));
export const unitParam = z.string().refine(value => UNIT_TYPES.includes(value), {
message: 'Invalid unit',

View file

@ -38,6 +38,18 @@
/* Helper functions */
const normalize = raw => {
if (!raw) return raw;
try {
const u = new URL(raw, location.href);
if (excludeSearch) u.search = '';
if (excludeHash) u.hash = '';
return u.toString();
} catch (e) {
return raw;
}
};
const getPayload = () => ({
website,
screen,
@ -61,11 +73,7 @@
if (!url) return;
currentRef = currentUrl;
currentUrl = new URL(url, location.href);
if (excludeSearch) currentUrl.search = '';
if (excludeHash) currentUrl.hash = '';
currentUrl = currentUrl.toString();
currentUrl = normalize(new URL(url, location.href).toString());
if (currentUrl !== currentRef) {
setTimeout(track, delayDuration);
@ -210,8 +218,9 @@
};
}
let currentUrl = href;
let currentRef = referrer.startsWith(origin) ? '' : referrer;
let currentUrl = normalize(href);
let currentRef = normalize(referrer.startsWith(origin) ? '' : referrer);
let initialized = false;
let disabled = false;
let cache;