diff --git a/.github/stale.yml b/.github/stale.yml deleted file mode 100644 index 2dc5b6750..000000000 --- a/.github/stale.yml +++ /dev/null @@ -1,19 +0,0 @@ -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 60 -# Number of days of inactivity before a stale issue is closed -daysUntilClose: 7 -# Issues with these labels will never be considered stale -exemptLabels: - - pinned - - security - - enhancement - - bug -# Label to use when marking an issue as stale -staleLabel: wontfix -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c140f626c..775f9ecf5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,13 +16,13 @@ jobs: strategy: matrix: include: - - node-version: 14.x + - node-version: 16.x db-type: postgresql - - node-version: 14.x + - node-version: 16.x db-type: mysql - - node-version: 16.x + - node-version: 18.x db-type: postgresql - - node-version: 16.x + - node-version: 18.x db-type: mysql steps: diff --git a/.github/workflows/stale-issues.yml b/.github/workflows/stale-issues.yml new file mode 100644 index 000000000..bf2505b14 --- /dev/null +++ b/.github/workflows/stale-issues.yml @@ -0,0 +1,22 @@ +name: Close stale issues +on: + schedule: + - cron: '30 1 * * *' + +jobs: + stale: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@v8 + with: + days-before-issue-stale: 60 + days-before-issue-close: 7 + stale-issue-label: 'stale' + stale-issue-message: 'This issue is stale because it has been open for 60 days with no activity.' + close-issue-message: 'This issue was closed because it has been inactive for 7 days since being marked as stale.' + days-before-pr-stale: -1 + days-before-pr-close: -1 + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 7066fb28f..99087ab50 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ node_modules *.iml *.log .vscode +.tool-versions # debug npm-debug.log* diff --git a/assets/bar-chart.svg b/assets/bar-chart.svg new file mode 100644 index 000000000..25a182a30 --- /dev/null +++ b/assets/bar-chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/components/common/ConfirmDeleteForm.js b/components/common/ConfirmDeleteForm.js new file mode 100644 index 000000000..3496a3053 --- /dev/null +++ b/components/common/ConfirmDeleteForm.js @@ -0,0 +1,29 @@ +import { useState } from 'react'; +import { Button, LoadingButton, Form, FormButtons } from 'react-basics'; +import useMessages from 'hooks/useMessages'; + +export function ConfirmDeleteForm({ name, onConfirm, onClose }) { + const [loading, setLoading] = useState(false); + const { formatMessage, labels, messages, FormattedMessage } = useMessages(); + + const handleConfirm = () => { + setLoading(true); + onConfirm(); + }; + + return ( +
+

+ {name} }} /> +

+ + + {formatMessage(labels.delete)} + + + +
+ ); +} + +export default ConfirmDeleteForm; diff --git a/components/common/ErrorBoundary.js b/components/common/ErrorBoundary.js index 5bb11a9ee..f97fd92c2 100644 --- a/components/common/ErrorBoundary.js +++ b/components/common/ErrorBoundary.js @@ -12,7 +12,6 @@ export function ErrorBoundary({ children }) { const { formatMessage, messages } = useMessages(); const fallbackRender = ({ error, resetErrorBoundary }) => { - console.log({ error }); return (

{formatMessage(messages.error)}

diff --git a/components/common/LinkButton.js b/components/common/LinkButton.js new file mode 100644 index 000000000..8c0501475 --- /dev/null +++ b/components/common/LinkButton.js @@ -0,0 +1,12 @@ +import Link from 'next/link'; +import { Icon, Icons, Text } from 'react-basics'; +import styles from './LinkButton.module.css'; + +export default function LinkButton({ href, icon, children }) { + return ( + + {icon || } + {children} + + ); +} diff --git a/components/common/LinkButton.module.css b/components/common/LinkButton.module.css new file mode 100644 index 000000000..ae8a3b627 --- /dev/null +++ b/components/common/LinkButton.module.css @@ -0,0 +1,28 @@ +.button { + display: flex; + align-items: center; + align-self: flex-start; + white-space: nowrap; + gap: var(--size200); + font-family: inherit; + color: var(--base900); + background: var(--base100); + border: 1px solid transparent; + border-radius: var(--border-radius); + min-height: var(--base-height); + padding: 0 var(--size600); + position: relative; + cursor: pointer; +} + +.button:hover { + background: var(--base200); +} + +.button:active { + background: var(--base300); +} + +.button:visited { + color: var(--base900); +} diff --git a/components/common/UpdateNotice.js b/components/common/UpdateNotice.js index 161a5a676..bef6be982 100644 --- a/components/common/UpdateNotice.js +++ b/components/common/UpdateNotice.js @@ -1,15 +1,23 @@ -import { useState, useEffect, useCallback } from 'react'; +import { useEffect, useCallback, useState } from 'react'; import { Button, Row, Column } from 'react-basics'; import { setItem } from 'next-basics'; import useStore, { checkVersion } from 'store/version'; import { REPO_URL, VERSION_CHECK } from 'lib/constants'; import styles from './UpdateNotice.module.css'; import useMessages from 'hooks/useMessages'; +import { useRouter } from 'next/router'; -export function UpdateNotice() { +export function UpdateNotice({ user, config }) { const { formatMessage, labels, messages } = useMessages(); const { latest, checked, hasUpdate, releaseUrl } = useStore(); - const [dismissed, setDismissed] = useState(false); + const { pathname } = useRouter(); + const [dismissed, setDismissed] = useState(checked); + const allowUpdate = + user?.isAdmin && + !config?.updatesDisabled && + !config?.cloudMode && + !pathname.includes('/share/') && + !dismissed; const updateCheck = useCallback(() => { setItem(VERSION_CHECK, { version: latest, time: Date.now() }); @@ -27,12 +35,12 @@ export function UpdateNotice() { } useEffect(() => { - if (!checked) { + if (allowUpdate) { checkVersion(); } - }, [checked]); + }, [allowUpdate]); - if (!hasUpdate || dismissed) { + if (!allowUpdate || !hasUpdate) { return null; } diff --git a/components/common/UpdateNotice.module.css b/components/common/UpdateNotice.module.css index f5e29445b..db7a0abdc 100644 --- a/components/common/UpdateNotice.module.css +++ b/components/common/UpdateNotice.module.css @@ -4,7 +4,7 @@ gap: 20px; margin: 20px auto; justify-self: center; - background: #fff; + background: var(--base50); padding: 20px; border: 1px solid var(--base300); border-radius: var(--border-radius); @@ -15,7 +15,8 @@ display: flex; justify-content: center; align-items: center; - font-weight: 600; + color: var(--font-color100); + font-weight: 700; } .buttons { diff --git a/components/icons.ts b/components/icons.ts index b42f90c64..d6b687565 100644 --- a/components/icons.ts +++ b/components/icons.ts @@ -1,5 +1,7 @@ import { Icons } from 'react-basics'; import AddUser from 'assets/add-user.svg'; +import Bars from 'assets/bars.svg'; +import BarChart from 'assets/bar-chart.svg'; import Bolt from 'assets/bolt.svg'; import Calendar from 'assets/calendar.svg'; import Clock from 'assets/clock.svg'; @@ -22,6 +24,8 @@ import Visitor from 'assets/visitor.svg'; const icons = { ...Icons, AddUser, + Bars, + BarChart, Bolt, Calendar, Clock, diff --git a/components/input/RefreshButton.js b/components/input/RefreshButton.js index 444f32474..de7ce8cfa 100644 --- a/components/input/RefreshButton.js +++ b/components/input/RefreshButton.js @@ -10,11 +10,7 @@ export function RefreshButton({ websiteId, isLoading }) { function handleClick() { if (!isLoading && dateRange) { - if (/^\d+/.test(dateRange.value)) { - setWebsiteDateRange(websiteId, dateRange.value); - } else { - setWebsiteDateRange(websiteId, dateRange); - } + setWebsiteDateRange(websiteId, dateRange); } } diff --git a/components/input/WebsiteDateFilter.js b/components/input/WebsiteDateFilter.js index 917219744..47e6f0160 100644 --- a/components/input/WebsiteDateFilter.js +++ b/components/input/WebsiteDateFilter.js @@ -1,25 +1,13 @@ -import useApi from 'hooks/useApi'; import useDateRange from 'hooks/useDateRange'; import DateFilter from './DateFilter'; import styles from './WebsiteDateFilter.module.css'; export default function WebsiteDateFilter({ websiteId }) { - const { get } = useApi(); const [dateRange, setDateRange] = useDateRange(websiteId); const { value, startDate, endDate } = dateRange; const handleChange = async value => { - if (value === 'all' && websiteId) { - const data = await get(`/websites/${websiteId}`); - - if (data) { - const start = new Date(data.createdAt).getTime(); - const end = Date.now(); - setDateRange(`range:${start}:${end}`); - } - } else if (value !== 'all') { - setDateRange(value); - } + setDateRange(value); }; return ( diff --git a/components/layout/AppLayout.js b/components/layout/AppLayout.js index a005cd269..46686ae83 100644 --- a/components/layout/AppLayout.js +++ b/components/layout/AppLayout.js @@ -1,6 +1,5 @@ import { Container } from 'react-basics'; import Head from 'next/head'; -import { useRouter } from 'next/router'; import NavBar from 'components/layout/NavBar'; import UpdateNotice from 'components/common/UpdateNotice'; import useRequireLogin from 'hooks/useRequireLogin'; @@ -11,17 +10,14 @@ import styles from './AppLayout.module.css'; export function AppLayout({ title, children }) { const { user } = useRequireLogin(); const config = useConfig(); - const { pathname } = useRouter(); if (!user || !config) { return null; } - const allowUpdate = user?.isAdmin && !config?.updatesDisabled && !pathname.includes('/share/'); - return (
- {allowUpdate && } + {title ? `${title} | Triton Analytics` : 'Triton'} diff --git a/components/layout/AppLayout.module.css b/components/layout/AppLayout.module.css index a83039cef..0afd11f9f 100644 --- a/components/layout/AppLayout.module.css +++ b/components/layout/AppLayout.module.css @@ -8,7 +8,6 @@ .nav { height: 60px; width: 100vw; - z-index: var(--z-index-overlay); grid-column: 1; grid-row: 1 / 2; } @@ -19,4 +18,5 @@ min-height: 0; height: calc(100vh - 60px); overflow-y: auto; + padding-bottom: 60px; } diff --git a/components/layout/Footer.js b/components/layout/Footer.js index 7cc5d3de3..3a07c12a8 100644 --- a/components/layout/Footer.js +++ b/components/layout/Footer.js @@ -1,31 +1,12 @@ -import { Row, Column } from 'react-basics'; -import { FormattedMessage } from 'react-intl'; -import { CURRENT_VERSION, HOMEPAGE_URL, REPO_URL } from 'lib/constants'; -import { labels } from 'components/messages'; +import { CURRENT_VERSION, HOMEPAGE_URL } from 'lib/constants'; import styles from './Footer.module.css'; export function Footer() { return ( ); } diff --git a/components/layout/Footer.module.css b/components/layout/Footer.module.css index a23f496d3..348c92d88 100644 --- a/components/layout/Footer.module.css +++ b/components/layout/Footer.module.css @@ -1,16 +1,12 @@ .footer { + display: flex; + flex-direction: row; + justify-content: flex-end; font-size: var(--font-size-sm); - text-align: center; line-height: 30px; - margin: 60px 0; + margin: 40px 0; } .footer a { color: var(--font-color100); } - -.version { - text-align: right; - padding-right: 10px; - white-space: nowrap; -} diff --git a/components/layout/Header.js b/components/layout/Header.js index 0a3b0522c..e79042cbd 100644 --- a/components/layout/Header.js +++ b/components/layout/Header.js @@ -9,7 +9,7 @@ import styles from './Header.module.css'; export function Header() { return (
- + diff --git a/components/layout/Header.module.css b/components/layout/Header.module.css index e796b6f05..26f305521 100644 --- a/components/layout/Header.module.css +++ b/components/layout/Header.module.css @@ -1,8 +1,13 @@ .header { display: flex; + flex-direction: row; align-items: center; width: 100%; - padding: 30px 30px 0 30px; + height: 100px; +} + +.row { + align-items: center; } .title { @@ -35,18 +40,8 @@ } @media only screen and (max-width: 768px) { - .header { - padding: 0 30px; - } - .buttons, .links { display: none; } - - .title { - flex: 1; - padding: 0.5rem; - margin-bottom: 0.5rem; - } } diff --git a/components/layout/Page.module.css b/components/layout/Page.module.css index 42aafbe10..c546971b6 100644 --- a/components/layout/Page.module.css +++ b/components/layout/Page.module.css @@ -4,11 +4,4 @@ flex-direction: column; background: var(--base50); position: relative; - padding: 30px; -} - -@media only screen and (max-width: 768px) { - .page { - padding: 10px 0; - } } diff --git a/components/layout/PageHeader.module.css b/components/layout/PageHeader.module.css index 03a1c7c8a..b54ecfcf6 100644 --- a/components/layout/PageHeader.module.css +++ b/components/layout/PageHeader.module.css @@ -1,10 +1,12 @@ .header { display: flex; + flex-direction: row; justify-content: space-between; align-items: center; align-content: center; align-self: stretch; flex-wrap: wrap; + height: 100px; } .header a { diff --git a/components/messages.js b/components/messages.js index d41c44301..a31e28751 100644 --- a/components/messages.js +++ b/components/messages.js @@ -81,6 +81,7 @@ export const labels = defineMessages({ devices: { id: 'label.devices', defaultMessage: 'Devices' }, countries: { id: 'label.countries', defaultMessage: 'Countries' }, languages: { id: 'label.languages', defaultMessage: 'Languages' }, + event: { id: 'label.event', defaultMessage: 'Event' }, events: { id: 'label.events', defaultMessage: 'Events' }, query: { id: 'label.query', defaultMessage: 'Query' }, queryParameters: { id: 'label.query-parameters', defaultMessage: 'Query parameters' }, @@ -159,6 +160,8 @@ export const labels = defineMessages({ value: { id: 'labels.value', defaultMessage: 'Value' }, overview: { id: 'labels.overview', defaultMessage: 'Overview' }, totalRecords: { id: 'labels.total-records', defaultMessage: 'Total records' }, + insights: { id: 'label.insights', defaultMessage: 'Insights' }, + dropoff: { id: 'label.dropoff', defaultMessage: 'Dropoff' }, }); export const messages = defineMessages({ @@ -226,19 +229,19 @@ export const messages = defineMessages({ defaultMessage: 'All website data will be deleted.', }, noResultsFound: { - id: 'messages.no-results-found', + id: 'message.no-results-found', defaultMessage: 'No results were found.', }, noWebsitesConfigured: { - id: 'messages.no-websites-configured', + id: 'message.no-websites-configured', defaultMessage: 'You do not have any websites configured.', }, noTeamWebsites: { - id: 'messages.no-team-websites', + id: 'message.no-team-websites', defaultMessage: 'This team does not have any websites.', }, teamWebsitesInfo: { - id: 'messages.team-websites-info', + id: 'message.team-websites-info', defaultMessage: 'Websites can be viewed by anyone on the team.', }, noMatchPassword: { id: 'message.no-match-password', defaultMessage: 'Passwords do not match.' }, @@ -270,4 +273,8 @@ export const messages = defineMessages({ id: 'message.no-event-data', defaultMessage: 'No event data is available.', }, + newVersionAvailable: { + id: 'message.new-version-available', + defaultMessage: 'A new version of Umami {version} is available!', + }, }); diff --git a/components/metrics/ActiveUsers.js b/components/metrics/ActiveUsers.js index e79b977dd..640519462 100644 --- a/components/metrics/ActiveUsers.js +++ b/components/metrics/ActiveUsers.js @@ -29,7 +29,7 @@ export function ActiveUsers({ websiteId, value, refetchInterval = 60000 }) { } return ( - +
{formatMessage(messages.activeUsers, { x: count })}
); diff --git a/components/metrics/ActiveUsers.module.css b/components/metrics/ActiveUsers.module.css index cc231d169..1d87fcd88 100644 --- a/components/metrics/ActiveUsers.module.css +++ b/components/metrics/ActiveUsers.module.css @@ -1,10 +1,14 @@ .container { display: flex; align-items: center; + margin-left: 20px; } .text { display: flex; + white-space: nowrap; + font-size: var(--font-size-md); + font-weight: 400; } .value { diff --git a/components/metrics/PageviewsChart.js b/components/metrics/PageviewsChart.js index 362c616e2..1b481c481 100644 --- a/components/metrics/PageviewsChart.js +++ b/components/metrics/PageviewsChart.js @@ -3,7 +3,7 @@ import BarChart from './BarChart'; import { useLocale, useTheme, useMessages } from 'hooks'; import { renderDateLabels, renderStatusTooltipPopup } from 'lib/charts'; -export function PageviewsChart({ websiteId, data, unit, className, loading, ...props }) { +export function PageviewsChart({ websiteId, data, unit, loading, ...props }) { const { formatMessage, labels } = useMessages(); const { colors } = useTheme(); const { locale } = useLocale(); @@ -31,7 +31,6 @@ export function PageviewsChart({ websiteId, data, unit, className, loading, ...p get('/websites', { userId })); + const { data, isLoading, error } = useQuery(['websites'], () => + get('/websites', { userId, includeTeams: 1 }), + ); const hasData = data && data.length !== 0; const { dir } = useLocale(); diff --git a/components/pages/dashboard/DashboardSettingsButton.js b/components/pages/dashboard/DashboardSettingsButton.js index a963aa5fe..99dab14f7 100644 --- a/components/pages/dashboard/DashboardSettingsButton.js +++ b/components/pages/dashboard/DashboardSettingsButton.js @@ -1,4 +1,4 @@ -import { Menu, Icon, Text, PopupTrigger, Popup, Item, Button } from 'react-basics'; +import { TooltipPopup, Icon, Text, Flexbox, Popup, Item, Button } from 'react-basics'; import Icons from 'components/icons'; import { saveDashboard } from 'store/dashboard'; import useMessages from 'hooks/useMessages'; @@ -6,40 +6,30 @@ import useMessages from 'hooks/useMessages'; export function DashboardSettingsButton() { const { formatMessage, labels } = useMessages(); - const menuOptions = [ - { - label: formatMessage(labels.toggleCharts), - value: 'charts', - }, - { - label: formatMessage(labels.editDashboard), - value: 'order', - }, - ]; + const handleToggleCharts = () => { + saveDashboard(state => ({ showCharts: !state.showCharts })); + }; - function handleSelect(value) { - if (value === 'charts') { - saveDashboard(state => ({ showCharts: !state.showCharts })); - } - if (value === 'order') { - saveDashboard({ editing: true }); - } - } + const handleEdit = () => { + saveDashboard({ editing: true }); + }; return ( - - + + - - - {({ label, value }) => {label}} - - - + ); } diff --git a/components/pages/event-data/EventDataTable.js b/components/pages/event-data/EventDataTable.js index 2724962fe..8260ac35b 100644 --- a/components/pages/event-data/EventDataTable.js +++ b/components/pages/event-data/EventDataTable.js @@ -13,14 +13,15 @@ export function EventDataTable({ data = [] }) { return ( + + {row => ( + + {row.event} + + )} + - {row => { - return ( - - {row.field} - - ); - }} + {row => row.field} {({ total }) => total.toLocaleString()} diff --git a/components/pages/event-data/EventDataValueTable.js b/components/pages/event-data/EventDataValueTable.js index 2a20c9b09..2637053ef 100644 --- a/components/pages/event-data/EventDataValueTable.js +++ b/components/pages/event-data/EventDataValueTable.js @@ -5,14 +5,14 @@ import Icons from 'components/icons'; import PageHeader from 'components/layout/PageHeader'; import Empty from 'components/common/Empty'; -export function EventDataTable({ data = [], field }) { +export function EventDataValueTable({ data = [], event }) { const { formatMessage, labels } = useMessages(); const { resolveUrl } = usePageQuery(); const Title = () => { return ( <> - + - {field} + {event} ); }; @@ -31,6 +31,7 @@ export function EventDataTable({ data = [], field }) { {data.length <= 0 && } {data.length > 0 && ( + {({ total }) => total.toLocaleString()} @@ -41,4 +42,4 @@ export function EventDataTable({ data = [], field }) { ); } -export default EventDataTable; +export default EventDataValueTable; diff --git a/components/pages/realtime/RealtimeCountries.js b/components/pages/realtime/RealtimeCountries.js index 525eb28fe..62964eaba 100644 --- a/components/pages/realtime/RealtimeCountries.js +++ b/components/pages/realtime/RealtimeCountries.js @@ -1,17 +1,26 @@ import { useCallback } from 'react'; +import { useRouter } from 'next/router'; import DataTable from 'components/metrics/DataTable'; import useLocale from 'hooks/useLocale'; import useCountryNames from 'hooks/useCountryNames'; import useMessages from 'hooks/useMessages'; +import classNames from 'classnames'; +import styles from './RealtimeCountries.module.css'; export function RealtimeCountries({ data }) { const { formatMessage, labels } = useMessages(); const { locale } = useLocale(); const countryNames = useCountryNames(locale); + const { basePath } = useRouter(); const renderCountryName = useCallback( - ({ x }) => {countryNames[x]}, - [countryNames, locale], + ({ x: code }) => ( + + {code} + {countryNames[code]} + + ), + [countryNames, locale, basePath], ); return ( diff --git a/components/pages/realtime/RealtimeCountries.module.css b/components/pages/realtime/RealtimeCountries.module.css new file mode 100644 index 000000000..e55063c3a --- /dev/null +++ b/components/pages/realtime/RealtimeCountries.module.css @@ -0,0 +1,5 @@ +.row { + display: flex; + align-items: center; + gap: 10px; +} diff --git a/components/pages/realtime/RealtimeLog.js b/components/pages/realtime/RealtimeLog.js index fe12963c7..744bff00b 100644 --- a/components/pages/realtime/RealtimeLog.js +++ b/components/pages/realtime/RealtimeLog.js @@ -52,7 +52,7 @@ export function RealtimeLog({ data, websiteDomain }) { const getTime = ({ createdAt }) => dateFormat(new Date(createdAt), 'pp', locale); - const getColor = ({ sessionId }) => stringToColor(sessionId); + const getColor = ({ id, sessionId }) => stringToColor(sessionId || id); const getIcon = ({ __type }) => icons[__type]; diff --git a/components/pages/realtime/RealtimePage.js b/components/pages/realtime/RealtimePage.js index 2d2ecebae..507c123c7 100644 --- a/components/pages/realtime/RealtimePage.js +++ b/components/pages/realtime/RealtimePage.js @@ -93,9 +93,7 @@ export function RealtimePage({ websiteId }) { -
- -
+ diff --git a/components/pages/reports/event-data/FieldAddForm.js b/components/pages/reports/FieldAddForm.js similarity index 86% rename from components/pages/reports/event-data/FieldAddForm.js rename to components/pages/reports/FieldAddForm.js index c95fcac34..e88312478 100644 --- a/components/pages/reports/event-data/FieldAddForm.js +++ b/components/pages/reports/FieldAddForm.js @@ -1,10 +1,10 @@ import { useState } from 'react'; import { createPortal } from 'react-dom'; import { REPORT_PARAMETERS } from 'lib/constants'; -import PopupForm from '../PopupForm'; -import FieldSelectForm from '../FieldSelectForm'; -import FieldAggregateForm from '../FieldAggregateForm'; -import FieldFilterForm from '../FieldFilterForm'; +import PopupForm from './PopupForm'; +import FieldSelectForm from './FieldSelectForm'; +import FieldAggregateForm from './FieldAggregateForm'; +import FieldFilterForm from './FieldFilterForm'; import styles from './FieldAddForm.module.css'; export function FieldAddForm({ fields = [], group, element, onAdd, onClose }) { diff --git a/components/pages/reports/event-data/FieldAddForm.module.css b/components/pages/reports/FieldAddForm.module.css similarity index 100% rename from components/pages/reports/event-data/FieldAddForm.module.css rename to components/pages/reports/FieldAddForm.module.css diff --git a/components/pages/reports/FieldAggregateForm.js b/components/pages/reports/FieldAggregateForm.js index cdcbdacc7..abd1dbd94 100644 --- a/components/pages/reports/FieldAggregateForm.js +++ b/components/pages/reports/FieldAggregateForm.js @@ -19,6 +19,10 @@ export default function FieldAggregateForm({ name, type, onSelect }) { { label: formatMessage(labels.total), value: 'total' }, { label: formatMessage(labels.unique), value: 'unique' }, ], + uuid: [ + { label: formatMessage(labels.total), value: 'total' }, + { label: formatMessage(labels.unique), value: 'unique' }, + ], }; const items = options[type]; diff --git a/components/pages/reports/FieldSelectForm.js b/components/pages/reports/FieldSelectForm.js index 1ff6412a9..0e41ea1fb 100644 --- a/components/pages/reports/FieldSelectForm.js +++ b/components/pages/reports/FieldSelectForm.js @@ -9,10 +9,10 @@ export default function FieldSelectForm({ fields, onSelect }) {
onSelect(fields[key])}> - {fields.map(({ name, type }, index) => { + {fields.map(({ label, name, type }, index) => { return ( -
{name}
+
{label || name}
{type}
); diff --git a/components/pages/reports/Report.js b/components/pages/reports/Report.js index 685ebb9fe..0a98ef756 100644 --- a/components/pages/reports/Report.js +++ b/components/pages/reports/Report.js @@ -8,8 +8,6 @@ export const ReportContext = createContext(null); export function Report({ reportId, defaultParameters, children, ...props }) { const report = useReport(reportId, defaultParameters); - //console.log({ report }); - return ( diff --git a/components/pages/reports/ReportTemplates.js b/components/pages/reports/ReportTemplates.js index 35ba6f014..60ae11e79 100644 --- a/components/pages/reports/ReportTemplates.js +++ b/components/pages/reports/ReportTemplates.js @@ -3,20 +3,10 @@ import { Button, Icons, Text, Icon } from 'react-basics'; import Page from 'components/layout/Page'; import PageHeader from 'components/layout/PageHeader'; import Funnel from 'assets/funnel.svg'; -import Nodes from 'assets/nodes.svg'; import Lightbulb from 'assets/lightbulb.svg'; import styles from './ReportTemplates.module.css'; import { useMessages } from 'hooks'; -const reports = [ - { - title: 'Funnel', - description: 'Understand the conversion and drop-off rate of users.', - url: '/reports/funnel', - icon: , - }, -]; - function ReportItem({ title, description, url, icon }) { return (
@@ -42,6 +32,23 @@ function ReportItem({ title, description, url, icon }) { export function ReportTemplates() { const { formatMessage, labels } = useMessages(); + const reports = [ + /* + { + title: formatMessage(labels.insights), + description: 'Dive deeper into your data by using segments and filters.', + url: '/reports/insights', + icon: , + }, + */ + { + title: formatMessage(labels.funnel), + description: 'Understand the conversion and drop-off rate of users.', + url: '/reports/funnel', + icon: , + }, + ]; + return ( diff --git a/components/pages/reports/ReportsTable.js b/components/pages/reports/ReportsTable.js index bcc97204d..244740e1c 100644 --- a/components/pages/reports/ReportsTable.js +++ b/components/pages/reports/ReportsTable.js @@ -1,9 +1,12 @@ -import Link from 'next/link'; -import { Button, Text, Icon, Icons } from 'react-basics'; +import { useState } from 'react'; +import { Flexbox, Icon, Icons, Text, Button, Modal } from 'react-basics'; +import LinkButton from 'components/common/LinkButton'; import SettingsTable from 'components/common/SettingsTable'; -import useMessages from 'hooks/useMessages'; +import ConfirmDeleteForm from 'components/common/ConfirmDeleteForm'; +import { useMessages } from 'hooks'; -export function ReportsTable({ data = [] }) { +export function ReportsTable({ data = [], onDelete = () => {} }) { + const [report, setReport] = useState(null); const { formatMessage, labels } = useMessages(); const columns = [ @@ -13,23 +16,39 @@ export function ReportsTable({ data = [] }) { { name: 'action', label: ' ' }, ]; - return ( - - {row => { - const { id } = row; + const handleConfirm = () => { + onDelete(report.id); + }; - return ( - - - - ); - }} - + return ( + <> + + {row => { + const { id } = row; + + return ( + + {formatMessage(labels.view)} + + + ); + }} + + {report && ( + + setReport(null)} + /> + + )} + ); } diff --git a/components/pages/reports/event-data/EventDataParameters.js b/components/pages/reports/event-data/EventDataParameters.js index 09358be2e..8d4dbb623 100644 --- a/components/pages/reports/event-data/EventDataParameters.js +++ b/components/pages/reports/event-data/EventDataParameters.js @@ -5,7 +5,7 @@ import { ReportContext } from 'components/pages/reports/Report'; import Empty from 'components/common/Empty'; import { DATA_TYPES, REPORT_PARAMETERS } from 'lib/constants'; import Icons from 'components/icons'; -import FieldAddForm from './FieldAddForm'; +import FieldAddForm from '../FieldAddForm'; import BaseParameters from '../BaseParameters'; import ParameterList from '../ParameterList'; import styles from './EventDataParameters.module.css'; @@ -54,9 +54,11 @@ export function EventDataParameters() { }; const handleAdd = (group, value) => { - const data = parameterData[group].filter(({ name }) => name !== value.name); + const data = parameterData[group]; - updateReport({ parameters: { [group]: data.concat(value) } }); + if (!data.find(({ name }) => name === value.name)) { + updateReport({ parameters: { [group]: data.concat(value) } }); + } }; const handleRemove = (group, index) => { diff --git a/components/pages/reports/funnel/FunnelTable.js b/components/pages/reports/funnel/FunnelTable.js index ff6bdfb52..9ae8ab583 100644 --- a/components/pages/reports/funnel/FunnelTable.js +++ b/components/pages/reports/funnel/FunnelTable.js @@ -6,13 +6,12 @@ import { ReportContext } from '../Report'; export function FunnelTable() { const { report } = useContext(ReportContext); const { formatMessage, labels } = useMessages(); - return ( ); } diff --git a/components/pages/reports/insights/FieldAddForm.js b/components/pages/reports/insights/FieldAddForm.js deleted file mode 100644 index c95fcac34..000000000 --- a/components/pages/reports/insights/FieldAddForm.js +++ /dev/null @@ -1,44 +0,0 @@ -import { useState } from 'react'; -import { createPortal } from 'react-dom'; -import { REPORT_PARAMETERS } from 'lib/constants'; -import PopupForm from '../PopupForm'; -import FieldSelectForm from '../FieldSelectForm'; -import FieldAggregateForm from '../FieldAggregateForm'; -import FieldFilterForm from '../FieldFilterForm'; -import styles from './FieldAddForm.module.css'; - -export function FieldAddForm({ fields = [], group, element, onAdd, onClose }) { - const [selected, setSelected] = useState(); - - const handleSelect = value => { - const { type } = value; - - if (group === REPORT_PARAMETERS.groups || type === 'array' || type === 'boolean') { - value.value = group === REPORT_PARAMETERS.groups ? '' : 'total'; - handleSave(value); - return; - } - - setSelected(value); - }; - - const handleSave = value => { - onAdd(group, value); - onClose(); - }; - - return createPortal( - - {!selected && } - {selected && group === REPORT_PARAMETERS.fields && ( - - )} - {selected && group === REPORT_PARAMETERS.filters && ( - - )} - , - document.body, - ); -} - -export default FieldAddForm; diff --git a/components/pages/reports/insights/FieldAddForm.module.css b/components/pages/reports/insights/FieldAddForm.module.css deleted file mode 100644 index 5c5aaa4f0..000000000 --- a/components/pages/reports/insights/FieldAddForm.module.css +++ /dev/null @@ -1,38 +0,0 @@ -.menu { - width: 360px; - max-height: 300px; - overflow: auto; -} - -.item { - display: flex; - flex-direction: row; - justify-content: space-between; - border-radius: var(--border-radius); -} - -.item:hover { - background: var(--base75); -} - -.type { - color: var(--font-color300); -} - -.selected { - font-weight: bold; -} - -.popup { - display: flex; -} - -.filter { - display: flex; - flex-direction: column; - gap: 20px; -} - -.dropdown { - min-width: 60px; -} diff --git a/components/pages/reports/insights/InsightsParameters.js b/components/pages/reports/insights/InsightsParameters.js index 39bfc2e8d..b87a566da 100644 --- a/components/pages/reports/insights/InsightsParameters.js +++ b/components/pages/reports/insights/InsightsParameters.js @@ -1,42 +1,22 @@ import { useContext, useRef } from 'react'; -import { useApi, useMessages } from 'hooks'; +import { useMessages } from 'hooks'; import { Form, FormRow, FormButtons, SubmitButton, PopupTrigger, Icon, Popup } from 'react-basics'; import { ReportContext } from 'components/pages/reports/Report'; -import Empty from 'components/common/Empty'; -import { DATA_TYPES, REPORT_PARAMETERS } from 'lib/constants'; +import { REPORT_PARAMETERS, WEBSITE_EVENT_FIELDS } from 'lib/constants'; import Icons from 'components/icons'; -import FieldAddForm from './FieldAddForm'; import BaseParameters from '../BaseParameters'; +import FieldAddForm from '../FieldAddForm'; import ParameterList from '../ParameterList'; import styles from './InsightsParameters.module.css'; -function useFields(websiteId, startDate, endDate) { - const { get, useQuery } = useApi(); - const { data, error, isLoading } = useQuery( - ['fields', websiteId, startDate, endDate], - () => - get('/reports/event-data', { - websiteId, - startAt: +startDate, - endAt: +endDate, - }), - { enabled: !!(websiteId && startDate && endDate) }, - ); - - return { data, error, isLoading }; -} - export function InsightsParameters() { const { report, runReport, updateReport, isRunning } = useContext(ReportContext); - const { formatMessage, labels, messages } = useMessages(); + const { formatMessage, labels } = useMessages(); const ref = useRef(null); const { parameters } = report || {}; const { websiteId, dateRange, fields, filters, groups } = parameters || {}; - const { startDate, endDate } = dateRange || {}; const queryEnabled = websiteId && dateRange && fields?.length; - const { data, error } = useFields(websiteId, startDate, endDate); - const parametersSelected = websiteId && startDate && endDate; - const hasData = data?.length !== 0; + const fieldOptions = Object.keys(WEBSITE_EVENT_FIELDS).map(key => WEBSITE_EVENT_FIELDS[key]); const parameterGroups = [ { label: formatMessage(labels.fields), group: REPORT_PARAMETERS.fields }, @@ -78,10 +58,7 @@ export function InsightsParameters() { {(close, element) => { return ( ({ - name: eventKey, - type: DATA_TYPES[InsightsType], - }))} + fields={fieldOptions} group={group} element={element} onAdd={handleAdd} @@ -95,50 +72,43 @@ export function InsightsParameters() { }; return ( - + - {!hasData && } - {parametersSelected && - hasData && - parameterGroups.map(({ label, group }) => { - return ( - } + {parameterGroups.map(({ label, group }) => { + return ( + }> + handleRemove(group, index)} > - handleRemove(group, index)} - > - {({ name, value }) => { - return ( -
- {group === REPORT_PARAMETERS.fields && ( - <> -
{name}
-
{value}
- - )} - {group === REPORT_PARAMETERS.filters && ( - <> -
{name}
-
{value[0]}
-
{value[1]}
- - )} - {group === REPORT_PARAMETERS.groups && ( - <> -
{name}
- - )} -
- ); - }} -
-
- ); - })} + {({ name, value }) => { + return ( +
+ {group === REPORT_PARAMETERS.fields && ( + <> +
{name}
+
{value}
+ + )} + {group === REPORT_PARAMETERS.filters && ( + <> +
{name}
+
{value[0]}
+
{value[1]}
+ + )} + {group === REPORT_PARAMETERS.groups && ( + <> +
{name}
+ + )} +
+ ); + }} + +
+ ); + })} {formatMessage(labels.runQuery)} diff --git a/components/pages/settings/websites/ShareUrl.js b/components/pages/settings/websites/ShareUrl.js index 2dad1d182..7f0b352cc 100644 --- a/components/pages/settings/websites/ShareUrl.js +++ b/components/pages/settings/websites/ShareUrl.js @@ -10,6 +10,7 @@ import { } from 'react-basics'; import { useEffect, useMemo, useRef, useState } from 'react'; import { getRandomChars } from 'next-basics'; +import { useRouter } from 'next/router'; import useApi from 'hooks/useApi'; import useMessages from 'hooks/useMessages'; @@ -20,12 +21,16 @@ export function ShareUrl({ websiteId, data, onSave }) { const { name, shareId } = data; const [id, setId] = useState(shareId); const { post, useMutation } = useApi(); + const { basePath } = useRouter(); const { mutate, error } = useMutation(({ shareId }) => post(`/websites/${websiteId}`, { shareId }), ); const ref = useRef(null); const url = useMemo( - () => `${process.env.analyticsUrl || location.origin}/share/${id}/${encodeURIComponent(name)}`, + () => + `${process.env.analyticsUrl || location.origin}${basePath}/share/${id}/${encodeURIComponent( + name, + )}`, [id, name], ); diff --git a/components/pages/websites/WebsiteChart.js b/components/pages/websites/WebsiteChart.js index 12b8ab4b3..fac0fb379 100644 --- a/components/pages/websites/WebsiteChart.js +++ b/components/pages/websites/WebsiteChart.js @@ -1,7 +1,7 @@ import { useMemo } from 'react'; import PageviewsChart from 'components/metrics/PageviewsChart'; import { useApi, useDateRange, useTimezone, usePageQuery } from 'hooks'; -import { getDateArray, getDateLength } from 'lib/date'; +import { getDateArray } from 'lib/date'; export function WebsiteChart({ websiteId }) { const [dateRange] = useDateRange(websiteId); @@ -43,17 +43,9 @@ export function WebsiteChart({ websiteId }) { }; } return { pageviews: [], sessions: [] }; - }, [data, startDate, endDate, unit, modified]); + }, [data, startDate, endDate, unit]); - return ( - - ); + return ; } export default WebsiteChart; diff --git a/components/pages/websites/WebsiteChartList.js b/components/pages/websites/WebsiteChartList.js index 42079a53a..62b05a4d9 100644 --- a/components/pages/websites/WebsiteChartList.js +++ b/components/pages/websites/WebsiteChartList.js @@ -41,7 +41,7 @@ export default function WebsiteChartList({ websites, showCharts, limit }) { - + {showCharts && }
) : null; })} diff --git a/components/pages/websites/WebsiteEventData.js b/components/pages/websites/WebsiteEventData.js index 7dc68d41f..7f9a68294 100644 --- a/components/pages/websites/WebsiteEventData.js +++ b/components/pages/websites/WebsiteEventData.js @@ -5,18 +5,18 @@ import { EventDataMetricsBar } from 'components/pages/event-data/EventDataMetric import { useDateRange, useApi, usePageQuery } from 'hooks'; import styles from './WebsiteEventData.module.css'; -function useFields(websiteId, field) { +function useData(websiteId, event) { const [dateRange] = useDateRange(websiteId); const { startDate, endDate } = dateRange; const { get, useQuery } = useApi(); const { data, error, isLoading } = useQuery( - ['event-data:fields', { websiteId, startDate, endDate, field }], + ['event-data:events', { websiteId, startDate, endDate, event }], () => - get('/event-data/fields', { + get('/event-data/events', { websiteId, startAt: +startDate, endAt: +endDate, - field, + event, }), { enabled: !!(websiteId && startDate && endDate) }, ); @@ -26,15 +26,15 @@ function useFields(websiteId, field) { export default function WebsiteEventData({ websiteId }) { const { - query: { view }, + query: { event }, } = usePageQuery(); - const { data } = useFields(websiteId, view); + const { data } = useData(websiteId, event); return ( - {!view && } - {view && } + {!event && } + {event && } ); } diff --git a/components/pages/websites/WebsiteHeader.js b/components/pages/websites/WebsiteHeader.js index 76f4e4f74..0790397fb 100644 --- a/components/pages/websites/WebsiteHeader.js +++ b/components/pages/websites/WebsiteHeader.js @@ -4,9 +4,9 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; import Favicon from 'components/common/Favicon'; import ActiveUsers from 'components/metrics/ActiveUsers'; -import styles from './WebsiteHeader.module.css'; import Icons from 'components/icons'; import { useMessages, useWebsite } from 'hooks'; +import styles from './WebsiteHeader.module.css'; export function WebsiteHeader({ websiteId, showLinks = true, children }) { const { formatMessage, labels } = useMessages(); @@ -42,11 +42,11 @@ export function WebsiteHeader({ websiteId, showLinks = true, children }) { {name} + - {showLinks && ( - +
{links.map(({ label, icon, path }) => { const selected = path ? pathname.endsWith(path) : pathname === '/websites/[id]'; @@ -58,13 +58,13 @@ export function WebsiteHeader({ websiteId, showLinks = true, children }) { [styles.selected]: selected, })} > - {icon} - {label} + {icon} + {label} ); })} - +
)} {children}
diff --git a/components/pages/websites/WebsiteHeader.module.css b/components/pages/websites/WebsiteHeader.module.css index 89f78e524..93e622d90 100644 --- a/components/pages/websites/WebsiteHeader.module.css +++ b/components/pages/websites/WebsiteHeader.module.css @@ -27,3 +27,29 @@ .selected { font-weight: bold; } + +.links { + display: flex; + flex-direction: row; + align-items: center; +} + +@media only screen and (max-width: 768px) { + .links { + justify-content: space-evenly; + flex: 1; + border-bottom: 1px solid var(--base300); + padding-bottom: 10px; + margin-bottom: 10px; + } + + .label { + display: none; + } + + .icon, + .icon svg { + width: 30px; + height: 30px; + } +} diff --git a/components/pages/websites/WebsiteReportsPage.js b/components/pages/websites/WebsiteReportsPage.js index b6f41bac7..569270284 100644 --- a/components/pages/websites/WebsiteReportsPage.js +++ b/components/pages/websites/WebsiteReportsPage.js @@ -7,7 +7,11 @@ import WebsiteHeader from './WebsiteHeader'; export function WebsiteReportsPage({ websiteId }) { const { formatMessage, labels } = useMessages(); - const { reports, error, isLoading } = useReports(websiteId); + const { reports, error, isLoading, deleteReport } = useReports(websiteId); + + const handleDelete = async id => { + await deleteReport(id); + }; return ( @@ -22,7 +26,7 @@ export function WebsiteReportsPage({ websiteId }) { - + ); } diff --git a/db/clickhouse/schema.sql b/db/clickhouse/schema.sql index a33db3c43..94b560c3e 100644 --- a/db/clickhouse/schema.sql +++ b/db/clickhouse/schema.sql @@ -6,7 +6,7 @@ CREATE TABLE umami.website_event website_id UUID, session_id UUID, event_id UUID, - --session + --sessions hostname LowCardinality(String), browser LowCardinality(String), os LowCardinality(String), @@ -17,14 +17,14 @@ CREATE TABLE umami.website_event subdivision1 LowCardinality(String), subdivision2 LowCardinality(String), city String, - --pageview + --pageviews url_path String, url_query String, referrer_path String, referrer_query String, referrer_domain String, page_title String, - --event + --events event_type UInt32, event_name String, created_at DateTime('UTC'), @@ -38,7 +38,7 @@ CREATE TABLE umami.website_event_queue ( website_id UUID, session_id UUID, event_id UUID, - --session + --sessions hostname LowCardinality(String), browser LowCardinality(String), os LowCardinality(String), @@ -49,14 +49,14 @@ CREATE TABLE umami.website_event_queue ( subdivision1 LowCardinality(String), subdivision2 LowCardinality(String), city String, - --pageview + --pageviews url_path String, url_query String, referrer_path String, referrer_query String, referrer_domain String, page_title String, - --event + --events event_type UInt32, event_name String, created_at DateTime('UTC'), @@ -66,11 +66,11 @@ CREATE TABLE umami.website_event_queue ( ) ENGINE = Kafka SETTINGS kafka_broker_list = 'domain:9092,domain:9093,domain:9094', -- input broker list - kafka_topic_list = 'event', + kafka_topic_list = 'events', kafka_group_name = 'event_consumer_group', kafka_format = 'JSONEachRow', kafka_max_block_size = 1048576, - kafka_handle_error_mode = 'stream' + kafka_handle_error_mode = 'stream'; CREATE MATERIALIZED VIEW umami.website_event_queue_mv TO umami.website_event AS SELECT website_id, @@ -108,7 +108,7 @@ SETTINGS index_granularity = 8192 AS SELECT _error AS error, _raw_message AS raw FROM umami.website_event_queue -WHERE length(_error) > 0 +WHERE length(_error) > 0; CREATE TABLE umami.event_data ( @@ -151,7 +151,7 @@ SETTINGS kafka_broker_list = 'domain:9092,domain:9093,domain:9094', -- input bro kafka_group_name = 'event_data_consumer_group', kafka_format = 'JSONEachRow', kafka_max_block_size = 1048576, - kafka_handle_error_mode = 'stream' + kafka_handle_error_mode = 'stream'; CREATE MATERIALIZED VIEW umami.event_data_queue_mv TO umami.event_data AS SELECT website_id, @@ -178,4 +178,4 @@ SETTINGS index_granularity = 8192 AS SELECT _error AS error, _raw_message AS raw FROM umami.event_data_queue -WHERE length(_error) > 0 \ No newline at end of file +WHERE length(_error) > 0; \ No newline at end of file diff --git a/db/mysql/schema.prisma b/db/mysql/schema.prisma index 98ee8ae00..a25405dff 100644 --- a/db/mysql/schema.prisma +++ b/db/mysql/schema.prisma @@ -97,8 +97,8 @@ model WebsiteEvent { model EventData { id String @id() @map("event_data_id") @db.VarChar(36) - websiteEventId String @map("website_event_id") @db.VarChar(36) websiteId String @map("website_id") @db.VarChar(36) + websiteEventId String @map("website_event_id") @db.VarChar(36) eventKey String @map("event_key") @db.VarChar(500) stringValue String? @map("string_value") @db.VarChar(500) numberValue Decimal? @map("number_value") @db.Decimal(19, 4) diff --git a/hooks/useConfig.js b/hooks/useConfig.js index 6dda7b740..2dead15a8 100644 --- a/hooks/useConfig.js +++ b/hooks/useConfig.js @@ -21,7 +21,7 @@ export function useConfig() { } }, []); - return config || {}; + return config; } export default useConfig; diff --git a/hooks/useDateRange.js b/hooks/useDateRange.js index 17552805d..1e1b06164 100644 --- a/hooks/useDateRange.js +++ b/hooks/useDateRange.js @@ -1,20 +1,43 @@ -import { parseDateRange } from 'lib/date'; +import { getMinimumUnit, parseDateRange } from 'lib/date'; import { setItem } from 'next-basics'; import { DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE } from 'lib/constants'; import useLocale from './useLocale'; import websiteStore, { setWebsiteDateRange } from 'store/websites'; import appStore, { setDateRange } from 'store/app'; +import useApi from './useApi'; export function useDateRange(websiteId) { + const { get } = useApi(); const { locale } = useLocale(); const websiteConfig = websiteStore(state => state[websiteId]?.dateRange); const defaultConfig = DEFAULT_DATE_RANGE; const globalConfig = appStore(state => state.dateRange); const dateRange = parseDateRange(websiteConfig || globalConfig || defaultConfig, locale); - const saveDateRange = value => { + const saveDateRange = async value => { if (websiteId) { - setWebsiteDateRange(websiteId, value); + let dateRange = value; + + if (typeof value === 'string') { + if (value === 'all') { + const result = await get(`/websites/${websiteId}/daterange`); + const { mindate, maxdate } = result; + + const startDate = new Date(mindate); + const endDate = new Date(maxdate); + + dateRange = { + startDate, + endDate, + unit: getMinimumUnit(startDate, endDate), + value, + }; + } else { + dateRange = parseDateRange(value, locale); + } + } + + setWebsiteDateRange(websiteId, dateRange); } else { setItem(DATE_RANGE_CONFIG, value); setDateRange(value); diff --git a/hooks/useFilters.js b/hooks/useFilters.js index ae01aadb3..512683826 100644 --- a/hooks/useFilters.js +++ b/hooks/useFilters.js @@ -24,6 +24,7 @@ export function useFilters() { boolean: ['t', 'f'], number: ['eq', 'neq', 'gt', 'lt', 'gte', 'lte'], date: ['be', 'af'], + uuid: ['eq'], }; return { filters, types }; diff --git a/hooks/useReports.js b/hooks/useReports.js index 90aa5cf56..f4369eec3 100644 --- a/hooks/useReports.js +++ b/hooks/useReports.js @@ -1,10 +1,23 @@ +import { useState } from 'react'; import useApi from './useApi'; export function useReports(websiteId) { - const { get, useQuery } = useApi(); - const { data, error, isLoading } = useQuery(['reports'], () => get(`/reports`, { websiteId })); + const [modified, setModified] = useState(Date.now()); + const { get, useQuery, del, useMutation } = useApi(); + const { mutate } = useMutation(reportId => del(`/reports/${reportId}`)); + const { data, error, isLoading } = useQuery(['reports:website', { websiteId, modified }], () => + get(`/reports`, { websiteId }), + ); - return { reports: data, error, isLoading }; + const deleteReport = id => { + mutate(id, { + onSuccess: () => { + setModified(Date.now()); + }, + }); + }; + + return { reports: data, error, isLoading, deleteReport }; } export default useReports; diff --git a/lang/am-ET.json b/lang/am-ET.json index 66e0bc6f4..0764b1917 100644 --- a/lang/am-ET.json +++ b/lang/am-ET.json @@ -39,9 +39,11 @@ "label.devices": "Devices", "label.dismiss": "Dismiss", "label.domain": "Domain", + "label.dropoff": "Dropoff", "label.edit": "Edit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Enable share URL", + "label.event": "Event", "label.event-data": "Event Data", "label.events": "Events", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Combined", "label.filter-raw": "Raw", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "To track stats for this website, place the following code in the ... section of your HTML.", "message.user-deleted": "User deleted.", "message.visitor-log": "Visitor from {country} using {browser} on {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "You do not have any websites configured.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "You do not have any websites configured.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/ar-SA.json b/lang/ar-SA.json index 0e7408b31..933d42f59 100644 --- a/lang/ar-SA.json +++ b/lang/ar-SA.json @@ -39,9 +39,11 @@ "label.devices": "الأجهزة", "label.dismiss": "اخفاء", "label.domain": "النطاق", + "label.dropoff": "Dropoff", "label.edit": "تعديل", "label.edit-dashboard": "تعديل لوحة التحكم", "label.enable-share-url": "تفعيل مشاركة الرابط", + "label.event": "Event", "label.event-data": "Event data", "label.events": "الأحداث", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "مجمعة", "label.filter-raw": "مفصلة", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "انضمام", "label.join-team": "الانضمام للمجموعة", "label.language": "اللغة", @@ -184,8 +187,9 @@ "message.tracking-code": "كود التتبع", "message.user-deleted": "تم حذف المستخدم.", "message.visitor-log": "زائر من {country} يستخدم {browser} على {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "هذه المجموعة ليس لديه اي موقع.", - "messages.no-websites-configured": "لم تقم بإعداد اي موقع.", - "messages.team-websites-info": "يمكن مشاهدة الموقع من اي عضو في المجموعة." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "هذه المجموعة ليس لديه اي موقع.", + "message.no-websites-configured": "لم تقم بإعداد اي موقع.", + "message.team-websites-info": "يمكن مشاهدة الموقع من اي عضو في المجموعة.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/be-BY.json b/lang/be-BY.json index 13f40a0ec..bd14d98f3 100644 --- a/lang/be-BY.json +++ b/lang/be-BY.json @@ -39,9 +39,11 @@ "label.devices": "Прылады", "label.dismiss": "Адмена", "label.domain": "Дамен", + "label.dropoff": "Dropoff", "label.edit": "Змяніць", "label.edit-dashboard": "Змяніць інфармацыйную панэль", "label.enable-share-url": "Дазволіць дзяліцца спасылкай", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Падзеі", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Камбініаваны", "label.filter-raw": "Сырыя", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Мова", @@ -184,8 +187,9 @@ "message.tracking-code": "Код адсочвання", "message.user-deleted": "User deleted.", "message.visitor-log": "Наведвальнік з {country} праз {browser} на {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Вы не наладзілі ніводнага сайту.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Вы не наладзілі ніводнага сайту.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/bn-BD.json b/lang/bn-BD.json index d955cfc6a..01069f923 100644 --- a/lang/bn-BD.json +++ b/lang/bn-BD.json @@ -39,9 +39,11 @@ "label.devices": "ডিভাইস গুলো", "label.dismiss": "বাতিল", "label.domain": "ডোমেইন", + "label.dropoff": "Dropoff", "label.edit": "সম্পাদনা করুন", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "শেয়ার ইউআরএল শেয়ার করুন", + "label.event": "Event", "label.event-data": "Event data", "label.events": "ঘটনা", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "সম্মিলিত", "label.filter-raw": "অপরিশোধিত", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "ভাষা", @@ -184,8 +187,9 @@ "message.tracking-code": "ট্র্যাকিং কোড", "message.user-deleted": "User deleted.", "message.visitor-log": "{country} থেকে একজন ভিসিটর {ব্রাউজার}, ব্যবহার করছেন {os} {device} এর মধ্যে।", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "কোনও ওয়েবসাইট কনফিগার করা নেই।", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "কোনও ওয়েবসাইট কনফিগার করা নেই।", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/ca-ES.json b/lang/ca-ES.json index 441ce6fb2..e5ca7ac89 100644 --- a/lang/ca-ES.json +++ b/lang/ca-ES.json @@ -39,9 +39,11 @@ "label.devices": "Dispositius", "label.dismiss": "Descarta", "label.domain": "Domini", + "label.dropoff": "Dropoff", "label.edit": "Edita", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Activa l'enllaç per compartir", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Esdeveniments", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Combinat", "label.filter-raw": "En cru", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "Codi de seguiment", "message.user-deleted": "User deleted.", "message.visitor-log": "Visitant de {country} usant {browser} a {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "No hi ha cap lloc web configurat.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "No hi ha cap lloc web configurat.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/cs-CZ.json b/lang/cs-CZ.json index 218726859..633004504 100644 --- a/lang/cs-CZ.json +++ b/lang/cs-CZ.json @@ -39,9 +39,11 @@ "label.devices": "Zařízení", "label.dismiss": "Odejít", "label.domain": "Doména", + "label.dropoff": "Dropoff", "label.edit": "Upravit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Povolit sdílení URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Události", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Kombinace", "label.filter-raw": "Nezpracované", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "Sledovací kód", "message.user-deleted": "User deleted.", "message.visitor-log": "Návštěvník z {country} s prohlížečem {browser} na {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Nemáte nastavený žádný web.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Nemáte nastavený žádný web.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/da-DK.json b/lang/da-DK.json index f64145dcc..cd2a1126c 100644 --- a/lang/da-DK.json +++ b/lang/da-DK.json @@ -39,9 +39,11 @@ "label.devices": "Enheder", "label.dismiss": "Afvis", "label.domain": "Domæne", + "label.dropoff": "Dropoff", "label.edit": "Rediger", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Aktivér delings-URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Hændelser", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Kombineret", "label.filter-raw": "Rå", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Sprog", @@ -184,8 +187,9 @@ "message.tracking-code": "Sporingskode", "message.user-deleted": "User deleted.", "message.visitor-log": "Besøgende fra {country} bruger {browser} på {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Du har ikke konfigureret nogen hjemmesider.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Du har ikke konfigureret nogen hjemmesider.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/de-CH.json b/lang/de-CH.json index 69864ce91..7ea503b0a 100644 --- a/lang/de-CH.json +++ b/lang/de-CH.json @@ -39,9 +39,11 @@ "label.devices": "Grät", "label.dismiss": "Verwerfe", "label.domain": "Domain", + "label.dropoff": "Dropoff", "label.edit": "Bearbeite", "label.edit-dashboard": "Dashboard bearbeite", "label.enable-share-url": "Freigab-URL aktiviere", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Ereigniss", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Kombiniert", "label.filter-raw": "Rohdate", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Biträte", "label.join-team": "Team biträte", "label.language": "Sprach", @@ -184,8 +187,9 @@ "message.tracking-code": "Tracking Code", "message.user-deleted": "Benutzer glöscht.", "message.visitor-log": "Bsuecher us {country} benutzt {browser} uf {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "Dem Team sind kei Websiite zuegordnet.", - "messages.no-websites-configured": "Es isch kei Websiite vorhande.", - "messages.team-websites-info": "Websiite chönd vo jedem im Team agluegt werde" + "message.no-results-found": "No results were found.", + "message.no-team-websites": "Dem Team sind kei Websiite zuegordnet.", + "message.no-websites-configured": "Es isch kei Websiite vorhande.", + "message.team-websites-info": "Websiite chönd vo jedem im Team agluegt werde", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/de-DE.json b/lang/de-DE.json index 4ce728207..b09f47ab2 100644 --- a/lang/de-DE.json +++ b/lang/de-DE.json @@ -3,7 +3,7 @@ "label.actions": "Aktionen", "label.activity-log": "Aktivitätsverlauf", "label.add": "Add", - "label.add-description": "Add description", + "label.add-description": "Beschreibung hinzufügen", "label.add-website": "Webseite hinzufügen", "label.admin": "Administrator", "label.all": "Alle", @@ -39,16 +39,19 @@ "label.devices": "Geräte", "label.dismiss": "Verwerfen", "label.domain": "Domain", + "label.dropoff": "Dropoff", "label.edit": "Bearbeiten", "label.edit-dashboard": "Dashboard bearbeiten", "label.enable-share-url": "Freigabe-URL aktivieren", - "label.event-data": "Event data", + "label.event": "Event", + "label.event-data": "Event daten", "label.events": "Ereignisse", "label.field": "Field", "label.fields": "Fields", "label.filter-combined": "Kombiniert", "label.filter-raw": "Rohdaten", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Beitreten", "label.join-team": "Team beitreten", "label.language": "Sprache", @@ -74,7 +77,7 @@ "label.powered-by": "Betrieben durch {name}", "label.profile": "Profil", "label.queries": "Abfragen", - "label.query": "Query", + "label.query": "Abfrage", "label.query-parameters": "Abfrageparameter", "label.realtime": "Echtzeit", "label.referrers": "Referrer", @@ -82,15 +85,15 @@ "label.regenerate": "Erneuern", "label.regions": "Regionen", "label.remove": "Entfernen", - "label.reports": "Reports", + "label.reports": "Reporte", "label.required": "Erforderlich", "label.reset": "Zurücksetzen", "label.reset-website": "Statistik zurücksetzen", "label.role": "Rolle", - "label.run-query": "Run query", + "label.run-query": "Abfrage starten", "label.save": "Speichern", "label.screens": "Bildschirmauflösungen", - "label.select-date": "Select date", + "label.select-date": "Datum auswählen", "label.select-website": "Website auswählen", "label.sessions": "Sessions", "label.settings": "Einstellungen", @@ -124,31 +127,31 @@ "label.view-only": "View only", "label.views": "Aufrufe", "label.visitors": "Besucher", - "label.website": "Website", + "label.website": "Webseite", "label.website-id": "Webseite ID", "label.websites": "Webseiten", "label.window": "Window", "label.yesterday": "Gestern", "labels.after": "After", - "labels.average": "Average", + "labels.average": "Durchschnitt", "labels.before": "Before", "labels.breakdown": "Breakdown", "labels.contains": "Contains", - "labels.create-report": "Create report", - "labels.description": "Description", + "labels.create-report": "Report erstellen", + "labels.description": "Beschreibung", "labels.does-not-contain": "Does not contain", "labels.does-not-equal": "Does not equal", "labels.equals": "Equals", "labels.false": "False", "labels.filters": "Filters", - "labels.greater-than": "Greater than", - "labels.greater-than-equals": "Greater than or equals", - "labels.less-than": "Less than", - "labels.less-than-equals": "Less than or equals", + "labels.greater-than": "Größer als", + "labels.greater-than-equals": "Größer oder gleich", + "labels.less-than": "Kleiner als", + "labels.less-than-equals": "Kleiner oder gleich", "labels.max": "Max", "labels.min": "Min", - "labels.overview": "Overview", - "labels.sum": "Sum", + "labels.overview": "Übersicht", + "labels.sum": "Summe", "labels.total": "Total", "labels.total-records": "Total records", "labels.true": "True", @@ -184,8 +187,9 @@ "message.tracking-code": "Tracking Code", "message.user-deleted": "Benutzer gelöscht.", "message.visitor-log": "Besucher aus {country} benutzt {browser} auf {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "Diesem Team sind keine Websites zugeordnet.", - "messages.no-websites-configured": "Es ist keine Webseite vorhanden.", - "messages.team-websites-info": "Webseiten können von jedem im Team eingesehen werden." + "message.no-results-found": "Keine Ergebnisse gefunden.", + "message.no-team-websites": "Diesem Team sind keine Websites zugeordnet.", + "message.no-websites-configured": "Es ist keine Webseite vorhanden.", + "message.team-websites-info": "Webseiten können von jedem im Team eingesehen werden.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/el-GR.json b/lang/el-GR.json index 1e27fedf3..6d7b1bb4e 100644 --- a/lang/el-GR.json +++ b/lang/el-GR.json @@ -39,9 +39,11 @@ "label.devices": "Συσκευές", "label.dismiss": "Dismiss", "label.domain": "Τομέας", + "label.dropoff": "Dropoff", "label.edit": "Επεξεργασία", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Ενεργοποίηση κοινής χρήσης URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Γεγονότα", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Σε συνδυασμό", "label.filter-raw": "Ακατέργαστο", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "Κωδικός παρακολούθησης", "message.user-deleted": "User deleted.", "message.visitor-log": "Visitor from {country} using {browser} on {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Δεν έχετε ρυθμίσει κανένα ιστότοπο.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Δεν έχετε ρυθμίσει κανένα ιστότοπο.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/en-GB.json b/lang/en-GB.json index 77f83a924..33a9e640e 100644 --- a/lang/en-GB.json +++ b/lang/en-GB.json @@ -39,9 +39,11 @@ "label.devices": "Devices", "label.dismiss": "Dismiss", "label.domain": "Domain", + "label.dropoff": "Dropoff", "label.edit": "Edit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Enable share URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Events", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Combined", "label.filter-raw": "Raw", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "Tracking code", "message.user-deleted": "User deleted.", "message.visitor-log": "Visitor from {country} using {browser} on {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "You don't have any websites configured.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "You don't have any websites configured.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/en-US.json b/lang/en-US.json index b651e8a33..b4daac897 100644 --- a/lang/en-US.json +++ b/lang/en-US.json @@ -39,9 +39,11 @@ "label.devices": "Devices", "label.dismiss": "Dismiss", "label.domain": "Domain", + "label.dropoff": "Dropoff", "label.edit": "Edit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Enable share URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Events", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Combined", "label.filter-raw": "Raw", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "To track stats for this website, place the following code in the ... section of your HTML.", "message.user-deleted": "User deleted.", "message.visitor-log": "Visitor from {country} using {browser} on {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "You do not have any websites configured.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "You do not have any websites configured.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/es-ES.json b/lang/es-ES.json new file mode 100644 index 000000000..55343af1d --- /dev/null +++ b/lang/es-ES.json @@ -0,0 +1,195 @@ +{ + "label.access-code": "Código de acceso", + "label.actions": "Acciones", + "label.activity-log": "Registro de actividad", + "label.add": "Añadir", + "label.add-description": "Añadir descripción", + "label.add-website": "Nuevo sitio web", + "label.admin": "Administrador", + "label.all": "Todos", + "label.all-time": "Todos los tiempos", + "label.analytics": "Analíticas", + "label.average-visit-time": "Tiempo promedio de visita", + "label.back": "Atrás", + "label.bounce-rate": "Porcentaje de rebote", + "label.browsers": "Navegadores", + "label.cancel": "Cancelar", + "label.change-password": "Cambiar contraseña", + "label.cities": "Ciudades", + "label.clear-all": "Limpiar todo", + "label.confirm": "Confirmar", + "label.confirm-password": "Confirmar contraseña", + "label.continue": "Continuar", + "label.countries": "Países", + "label.create-team": "Crear equipo", + "label.create-user": "Crear usuario", + "label.created": "Creado", + "label.current-password": "Contraseña actual", + "label.custom-range": "Intervalo personalizado", + "label.dashboard": "Panel de control", + "label.data": "Datos", + "label.date-range": "Intervalo de fechas", + "label.default-date-range": "Intervalo por defecto", + "label.delete": "Eliminar", + "label.delete-team": "Eliminar equipo", + "label.delete-user": "Eliminar usuario", + "label.delete-website": "Eliminar sitio", + "label.desktop": "Escritorio", + "label.details": "Detalles", + "label.devices": "Dispositivos", + "label.dismiss": "Ignorar", + "label.domain": "Dominio", + "label.dropoff": "Dropoff", + "label.edit": "Editar", + "label.edit-dashboard": "Editar panel", + "label.enable-share-url": "Habilitar compartir URL", + "label.event": "Evento", + "label.event-data": "Datos de evento", + "label.events": "Eventos", + "label.field": "Campo", + "label.fields": "Campos", + "label.filter-combined": "Combinado", + "label.filter-raw": "En crudo", + "label.funnel": "Funnel", + "label.insights": "Insights", + "label.join": "Unir", + "label.join-team": "Unirse al equipo", + "label.language": "Idioma", + "label.languages": "Idiomas", + "label.laptop": "Portátil", + "label.last-days": "Últimos {x} días", + "label.last-hours": "Últimas {x} horas", + "label.leave": "Abandonar", + "label.leave-team": "Abandonar equipo", + "label.login": "Iniciar sesión", + "label.logout": "Cerrar sesión", + "label.members": "Miembros", + "label.mobile": "Móvil", + "label.more": "Más", + "label.name": "Nombre", + "label.new-password": "Nueva contraseña", + "label.none": "Ninguno", + "label.operating-systems": "Sistemas operativos", + "label.owner": "Propietario", + "label.page-views": "Vistas", + "label.pages": "Páginas", + "label.password": "Contraseña", + "label.powered-by": "Con la ayuda de {name}", + "label.profile": "Perfil", + "label.queries": "Consultas", + "label.query": "Query", + "label.query-parameters": "Parámetros de petición", + "label.realtime": "Tiempo real", + "label.referrers": "Referido desde", + "label.refresh": "Actualizar", + "label.regenerate": "Regenerar", + "label.regions": "Regiones", + "label.remove": "Quitar", + "label.reports": "Reportes", + "label.required": "Obligatorio", + "label.reset": "Reiniciar", + "label.reset-website": "Reiniciar estadísticas", + "label.role": "Rol", + "label.run-query": "Ejecutar consulta", + "label.save": "Guardar", + "label.screens": "Pantallas", + "label.select-date": "Seleccionar fecha", + "label.select-website": "Seleccionar sitio web", + "label.sessions": "Sesiones", + "label.settings": "Configuraciones", + "label.share-url": "Compartir URL", + "label.single-day": "Un solo día", + "label.tablet": "Tableta", + "label.team": "Equipo", + "label.team-guest": "Invitado al equipo", + "label.team-id": "ID de equipo", + "label.team-member": "Miembro del equipo", + "label.team-owner": "Admin. del equipo", + "label.teams": "Equipos", + "label.theme": "Tema", + "label.this-month": "Este mes", + "label.this-week": "Esta semana", + "label.this-year": "Este año", + "label.timezone": "Zona horaria", + "label.title": "Título", + "label.today": "Hoy", + "label.toggle-charts": "Alternar gráficas", + "label.tracking-code": "Código de rastreo", + "label.unique-visitors": "Visitantes únicos", + "label.unknown": "Desconocida", + "label.url": "URL", + "label.urls": "URLs", + "label.user": "Usuario", + "label.username": "Nombre de usuario", + "label.users": "Usuarios", + "label.view": "Visualizar", + "label.view-details": "Ver detalles", + "label.view-only": "Ver sólo", + "label.views": "Vistas", + "label.visitors": "Visitantes", + "label.website": "Sitio web", + "label.website-id": "ID del sitio web", + "label.websites": "Sitios web", + "label.window": "Ventana", + "label.yesterday": "Ayer", + "labels.after": "Después", + "labels.average": "Media", + "labels.before": "Antes", + "labels.breakdown": "Desglose", + "labels.contains": "Contiene", + "labels.create-report": "Crear reporte", + "labels.description": "Descripciones", + "labels.does-not-contain": "No contiene", + "labels.does-not-equal": "No es igual a", + "labels.equals": "Es igual a", + "labels.false": "False", + "labels.filters": "Filtros", + "labels.greater-than": "Mayor que", + "labels.greater-than-equals": "Mayor que o igual a", + "labels.less-than": "Menor que", + "labels.less-than-equals": "Menor que o igual a", + "labels.max": "Máx", + "labels.min": "Mín", + "labels.overview": "Resumen", + "labels.sum": "Suma", + "labels.total": "Total", + "labels.total-records": "Total de registros", + "labels.true": "Verdadero", + "labels.type": "Tipo", + "labels.unique": "Único", + "labels.untitled": "Sin título", + "labels.value": "Valor", + "message.active-users": "{x} {x, plural, one {activo} other {activos}}", + "message.confirm-delete": "¿Seguro que quieres eliminar {target}?", + "message.confirm-leave": "¿Seguro que quieres abandonar {target}?", + "message.confirm-reset": "¿Seguro que quieres BORRAR las analíticas de {target}?", + "message.delete-account": "Para borrar esta cuenta, escribe {confirmation} a continuación para confirmar.", + "message.delete-website": "Para borrar este sitio web, escribe {confirmation} a continuación para confirmar.", + "message.delete-website-warning": "Toda la información relacionada será eliminada.", + "message.error": "Algo falló.", + "message.event-log": "{event} en {url}", + "message.go-to-settings": "Ir a la configuración", + "message.incorrect-username-password": "Nombre de usuario o contraseña incorrectos.", + "message.invalid-domain": "Dominio inválido", + "message.min-password-length": "Longitud mínima de {n} caracteres", + "message.no-data-available": "No hay información disponible.", + "message.no-event-data": "No hay datos de eventos disponibles.", + "message.no-match-password": "Las contraseñas no coinciden", + "message.no-teams": "No has creado ningún equipo.", + "message.no-users": "No hay usuarios.", + "message.page-not-found": "Página no encontrada", + "message.reset-website": "Para reiniciar este sitio web, escribe {confirmation} a continuación para confirmar.", + "message.reset-website-warning": "Todas las estadísticas de esta página serán eliminadas, pero el código de rastreo permanecerá intacto.", + "message.saved": "Guardado.", + "message.share-url": "Esta es la URL pública para {target}.", + "message.team-already-member": "Ya eres miembro de este equipo.", + "message.team-not-found": "Equipo no encontrado.", + "message.tracking-code": "Código de rastreo", + "message.user-deleted": "Usuario eliminado.", + "message.visitor-log": "Visitante desde {country} usando {browser} en {os} {device}", + "message.no-results-found": "No se encontraron resultados.", + "message.no-team-websites": "Este equipo no tiene ningún sitio web configurado.", + "message.no-websites-configured": "No tienes ningún sitio web configurado.", + "message.team-websites-info": "Las analíticas de tus sitios web pueden ser vistas por cualquier miembro del equipo.", + "message.new-version-available": "A new version of Umami {version} is available!" +} diff --git a/lang/es-MX.json b/lang/es-MX.json index f1bbb06da..dd6a3cce6 100644 --- a/lang/es-MX.json +++ b/lang/es-MX.json @@ -39,9 +39,11 @@ "label.devices": "Dispositivos", "label.dismiss": "Ignorar", "label.domain": "Dominio", + "label.dropoff": "Dropoff", "label.edit": "Editar", "label.edit-dashboard": "Editar panel", "label.enable-share-url": "Habilitar compartir URL", + "label.event": "Evento", "label.event-data": "Event data", "label.events": "Eventos", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Combinado", "label.filter-raw": "Personalizado", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Unir", "label.join-team": "Unir a equipo", "label.language": "Idioma", @@ -184,8 +187,9 @@ "message.tracking-code": "Código de rastreo", "message.user-deleted": "Usuario eliminado.", "message.visitor-log": "Visitante desde {country} usando {browser} en {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "Este equipo no tiene ningún sitio web configurado.", - "messages.no-websites-configured": "No tienes ningún sitio configurado.", - "messages.team-websites-info": "Las analíticas de tus sitios pueden verse por cualquier miembro del equipo." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "Este equipo no tiene ningún sitio web configurado.", + "message.no-websites-configured": "No tienes ningún sitio configurado.", + "message.team-websites-info": "Las analíticas de tus sitios pueden verse por cualquier miembro del equipo.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/fa-IR.json b/lang/fa-IR.json index c9053f4e4..a81792ae0 100644 --- a/lang/fa-IR.json +++ b/lang/fa-IR.json @@ -39,9 +39,11 @@ "label.devices": "دستگاه‌ها", "label.dismiss": "رد کردن", "label.domain": "دامنه", + "label.dropoff": "Dropoff", "label.edit": "ویرایش", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "فعال کردن اشتراک گذاری URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "رویدادها", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "ترکیب شده", "label.filter-raw": "خام", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "زبان", @@ -184,8 +187,9 @@ "message.tracking-code": "کد رهگیری", "message.user-deleted": "User deleted.", "message.visitor-log": "بازدیدکننده از کشور {country} با مروگر {browser} در {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "شما هیچ وب‌سایتی را پیکربندی نکرده‌اید.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "شما هیچ وب‌سایتی را پیکربندی نکرده‌اید.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/fi-FI.json b/lang/fi-FI.json index 90350eef4..541d391ad 100644 --- a/lang/fi-FI.json +++ b/lang/fi-FI.json @@ -39,9 +39,11 @@ "label.devices": "Laitteet", "label.dismiss": "Hylkää", "label.domain": "Verkkotunnus", + "label.dropoff": "Dropoff", "label.edit": "Muokkaa", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Ota jakamisen URL-osoite käyttöön", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Tapahtumat", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Yhdistetty", "label.filter-raw": "Käsittelemätön", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Kieli", @@ -184,8 +187,9 @@ "message.tracking-code": "Seurantakoodi", "message.user-deleted": "User deleted.", "message.visitor-log": "Vierailija maasta {country} selaimella {browser} laitteella {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Sinulla ei ole määritettyjä verkkosivustoja.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Sinulla ei ole määritettyjä verkkosivustoja.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/fo-FO.json b/lang/fo-FO.json index bddd5e9c3..e31c94d9d 100644 --- a/lang/fo-FO.json +++ b/lang/fo-FO.json @@ -39,9 +39,11 @@ "label.devices": "Tóleindir", "label.dismiss": "Lat fara", "label.domain": "Økisnavn", + "label.dropoff": "Dropoff", "label.edit": "Ger broyting", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Virkja deili leinki", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Hendingar/tiltøk", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Samansett", "label.filter-raw": "Óviðgjørt", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "Spori kota", "message.user-deleted": "User deleted.", "message.visitor-log": "Vitjandi frá {country} brúkar {browser} á {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Tú hevur ongar heimasíður stillaða til.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Tú hevur ongar heimasíður stillaða til.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/fr-FR.json b/lang/fr-FR.json index ff6de17bd..d1e6691a0 100644 --- a/lang/fr-FR.json +++ b/lang/fr-FR.json @@ -2,8 +2,8 @@ "label.access-code": "Code d'accès", "label.actions": "Actions", "label.activity-log": "Journal d'activité", - "label.add": "Add", - "label.add-description": "Add description", + "label.add": "Ajouter", + "label.add-description": "Ajouter une description", "label.add-website": "Ajouter un site", "label.admin": "Administrateur", "label.all": "Tout", @@ -39,16 +39,19 @@ "label.devices": "Appareils", "label.dismiss": "Ignorer", "label.domain": "Domaine", + "label.dropoff": "Dropoff", "label.edit": "Modifier", "label.edit-dashboard": "Modifier le tableau de bord", "label.enable-share-url": "Activer l'URL de partage", - "label.event-data": "Event data", + "label.event": "Event", + "label.event-data": "Données d'événements", "label.events": "Événements", - "label.field": "Field", - "label.fields": "Fields", + "label.field": "Champ", + "label.fields": "Champs", "label.filter-combined": "Combiné", "label.filter-raw": "Brut", - "label.funnel": "Funnel", + "label.funnel": "Entonnoir", + "label.insights": "Insights", "label.join": "Rejoindre", "label.join-team": "Rejoindre une équipe", "label.language": "Langue", @@ -73,24 +76,24 @@ "label.password": "Mot de passe", "label.powered-by": "Propulsé par {name}", "label.profile": "Profil", - "label.queries": "Queries", - "label.query": "Query", + "label.queries": "Requêtes", + "label.query": "Requête", "label.query-parameters": "Paramètres d'URL", "label.realtime": "Temps réel", - "label.referrers": "Sources", + "label.referrers": "Sites référents", "label.refresh": "Rafraîchir", "label.regenerate": "Régénérer", "label.regions": "Régions", "label.remove": "Retirer", - "label.reports": "Reports", + "label.reports": "Rapports", "label.required": "Requis", "label.reset": "Réinitialiser", "label.reset-website": "Réinitialiser les statistiques", "label.role": "Rôle", - "label.run-query": "Run query", + "label.run-query": "Éxécuter la requête", "label.save": "Enregistrer", "label.screens": "Résolutions d'écran", - "label.select-date": "Select date", + "label.select-date": "Choisir une période", "label.select-website": "Choisir un site", "label.sessions": "Sessions", "label.settings": "Paramètres", @@ -121,46 +124,46 @@ "label.users": "Utilisateurs", "label.view": "Voir", "label.view-details": "Voir les détails", - "label.view-only": "View only", + "label.view-only": "Consultation", "label.views": "Vues", "label.visitors": "Visiteurs", "label.website": "Website", "label.website-id": "ID de site", "label.websites": "Sites", - "label.window": "Window", + "label.window": "Fenêtre", "label.yesterday": "Hier", - "labels.after": "After", - "labels.average": "Average", - "labels.before": "Before", - "labels.breakdown": "Breakdown", - "labels.contains": "Contains", - "labels.create-report": "Create report", + "labels.after": "Après", + "labels.average": "Moyenne", + "labels.before": "Avant", + "labels.breakdown": "Répartition", + "labels.contains": "Contient", + "labels.create-report": "Créer un rapport", "labels.description": "Description", - "labels.does-not-contain": "Does not contain", - "labels.does-not-equal": "Does not equal", - "labels.equals": "Equals", - "labels.false": "False", - "labels.filters": "Filters", - "labels.greater-than": "Greater than", - "labels.greater-than-equals": "Greater than or equals", - "labels.less-than": "Less than", - "labels.less-than-equals": "Less than or equals", + "labels.does-not-contain": "Ne contient pas", + "labels.does-not-equal": "N'est pas égal", + "labels.equals": "Est égal", + "labels.false": "Faux", + "labels.filters": "Filtres", + "labels.greater-than": "Supérieur à", + "labels.greater-than-equals": "Supérieur ou égal à", + "labels.less-than": "Inférieur à", + "labels.less-than-equals": "Inférieur ou égal à", "labels.max": "Max", "labels.min": "Min", - "labels.overview": "Overview", - "labels.sum": "Sum", + "labels.overview": "Vue d'ensemble", + "labels.sum": "Somme", "labels.total": "Total", - "labels.total-records": "Total records", - "labels.true": "True", + "labels.total-records": "Nombre d'enregistrements", + "labels.true": "Vrai", "labels.type": "Type", "labels.unique": "Unique", - "labels.untitled": "Untitled", - "labels.value": "Value", + "labels.untitled": "Sans titre", + "labels.value": "Valeur", "message.active-users": "{x} {x, plural, one {visiteur} other {visiteurs}} actuellement", "message.confirm-delete": "Êtes-vous sûr de vouloir supprimer {target} ?", "message.confirm-leave": "Êtes-vous sûr de vouloir quitter {target} ?", "message.confirm-reset": "Êtes-vous sûr de vouloir réinitialiser les statistiques de {target} ?", - "message.delete-account": "To delete this account, type {confirmation} in the box below to confirm.", + "message.delete-account": "Pour supprimer ce compte, taper {confirmation} ci-dessous pour confirmer.", "message.delete-website": "Pour supprimer ce site, taper {confirmation} ci-dessous pour confirmer.", "message.delete-website-warning": "Toutes les données associées seront supprimées.", "message.error": "Un problème est survenu.", @@ -170,12 +173,12 @@ "message.invalid-domain": "Domaine invalide", "message.min-password-length": "Taille minimale de {n} caractères", "message.no-data-available": "Aucune donnée disponible.", - "message.no-event-data": "No event data is available.", + "message.no-event-data": "Aucune donnée d'événement disponible.", "message.no-match-password": "Les mots de passe ne correspondent pas", - "message.no-teams": "Vous n'avez créé aucune équipe.", - "message.no-users": "Il n'y aucun utilisateur.", + "message.no-teams": "Vous n'avez pas créé d'équipe.", + "message.no-users": "Aucun utilisateur.", "message.page-not-found": "Page non trouvée.", - "message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.", + "message.reset-website": "Pour réinitialiser ce site, taper {confirmation} ci-dessous pour confirmer.", "message.reset-website-warning": "Toutes les statistiques pour ce site seront supprimées, mais votre code de suivi restera intact.", "message.saved": "Enregistré avec succès.", "message.share-url": "Les statistiques de votre site sont accessibles publiquement sur cette URL :", @@ -184,8 +187,9 @@ "message.tracking-code": "Code de suivi", "message.user-deleted": "Utilisateur supprimé.", "message.visitor-log": "Visiteur de {country} utilisant {browser} sur {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "Cette équipe n'a aucun site.", - "messages.no-websites-configured": "Vous n'avez configuré aucun site.", - "messages.team-websites-info": "Les sites peuvent être vus par tout utilisateur dans l'équipe." + "message.no-results-found": "Aucun résultat n'a été trouvé.", + "message.no-team-websites": "Cette équipe n'a aucun site.", + "message.no-websites-configured": "Vous n'avez pas configuré de site.", + "message.team-websites-info": "Les sites peuvent être vus par tout utilisateur dans l'équipe.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/ga-ES.json b/lang/ga-ES.json index a811df48f..dce6504cc 100644 --- a/lang/ga-ES.json +++ b/lang/ga-ES.json @@ -39,9 +39,11 @@ "label.devices": "Dispositivos", "label.dismiss": "Desbotar", "label.domain": "Dominio", + "label.dropoff": "Dropoff", "label.edit": "Editar", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Activar URL de compartición", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Eventos", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Combinado", "label.filter-raw": "Raw", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Idioma", @@ -184,8 +187,9 @@ "message.tracking-code": "Código de seguimento", "message.user-deleted": "User deleted.", "message.visitor-log": "Visitante desde {country} usando {browser} en {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Non tes sitios web configurados.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Non tes sitios web configurados.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/he-IL.json b/lang/he-IL.json index ddc1a8698..8ed7f6c02 100644 --- a/lang/he-IL.json +++ b/lang/he-IL.json @@ -39,9 +39,11 @@ "label.devices": "מכשירים", "label.dismiss": "שיחרור", "label.domain": "דומיין", + "label.dropoff": "Dropoff", "label.edit": "עריכה", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "הפעלת URL שיתוף", + "label.event": "Event", "label.event-data": "Event data", "label.events": "אירועים", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "משותף", "label.filter-raw": "גולמי", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "קוד מעקב", "message.user-deleted": "User deleted.", "message.visitor-log": "מבקר ממדינת {country} משתמבש בדפדפן {browser} ב-{os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "לא מוגדרים אתרים", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "לא מוגדרים אתרים", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/hi-IN.json b/lang/hi-IN.json index d203ac621..429e6ebb0 100644 --- a/lang/hi-IN.json +++ b/lang/hi-IN.json @@ -39,9 +39,11 @@ "label.devices": "उपकरण", "label.dismiss": "खारिज कीजिये", "label.domain": "डोमेन", + "label.dropoff": "Dropoff", "label.edit": "संपादित करें", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "शेयर URL सक्षम करें", + "label.event": "Event", "label.event-data": "Event data", "label.events": "स्पर्धाएँ", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "संयुक्त", "label.filter-raw": "रॉ", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "ट्रैकिंग कोड", "message.user-deleted": "User deleted.", "message.visitor-log": "{country} का आगंतुक, जो {browser} का उपयोग करता है, {os} यन्त्र पर", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "आपके पास कोई वेबसाइट कॉन्फ़िगर नहीं है।", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "आपके पास कोई वेबसाइट कॉन्फ़िगर नहीं है।", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/hr-HR.json b/lang/hr-HR.json index f41637464..a9deb51fc 100644 --- a/lang/hr-HR.json +++ b/lang/hr-HR.json @@ -39,9 +39,11 @@ "label.devices": "Devices", "label.dismiss": "Odbaci", "label.domain": "Domena", + "label.dropoff": "Dropoff", "label.edit": "Uredi", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Omogući dijeljenje poveznice", + "label.event": "Event", "label.event-data": "Podaci događaja", "label.events": "Events", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Combined", "label.filter-raw": "Raw", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Jezik", @@ -184,8 +187,9 @@ "message.tracking-code": "To track stats for this website, place the following code in the ... section of your HTML.", "message.user-deleted": "User deleted.", "message.visitor-log": "Visitor from {country} using {browser} on {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "You do not have any websites configured.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "You do not have any websites configured.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/hu-HU.json b/lang/hu-HU.json index 064ae9810..e5c8a0780 100644 --- a/lang/hu-HU.json +++ b/lang/hu-HU.json @@ -39,9 +39,11 @@ "label.devices": "Eszközök", "label.dismiss": "Mellőzés", "label.domain": "Domain", + "label.dropoff": "Dropoff", "label.edit": "Módosítás", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "URL-megosztás engedélyezése", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Események", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Összevont", "label.filter-raw": "Nyers", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "Követési kód", "message.user-deleted": "User deleted.", "message.visitor-log": "Látógató {country} területéről, {os} {device} eszközön, {browser} böngészőből.", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Még nem állítottál be egyetlen weboldalt sem.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Még nem állítottál be egyetlen weboldalt sem.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/id-ID.json b/lang/id-ID.json index bcb24eb07..383f405ef 100644 --- a/lang/id-ID.json +++ b/lang/id-ID.json @@ -39,9 +39,11 @@ "label.devices": "Perangkat", "label.dismiss": "Tutup", "label.domain": "Domain", + "label.dropoff": "Dropoff", "label.edit": "Sunting", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Aktifkan URL berbagi", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Perihal", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Gabungan", "label.filter-raw": "Mentah", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Bahasa", @@ -184,8 +187,9 @@ "message.tracking-code": "Kode lacak", "message.user-deleted": "User deleted.", "message.visitor-log": "Pengunjung dari {country} dengan {browser} di {device} {os}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Anda tidak memiliki situs web yang dikonfigurasi.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Anda tidak memiliki situs web yang dikonfigurasi.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/it-IT.json b/lang/it-IT.json index 8c4591bce..854fd4528 100644 --- a/lang/it-IT.json +++ b/lang/it-IT.json @@ -39,9 +39,11 @@ "label.devices": "Dispositivi", "label.dismiss": "Scarta", "label.domain": "Dominio", + "label.dropoff": "Dropoff", "label.edit": "Modifica", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Abilita URL di condivisione", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Eventi", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Aggregati", "label.filter-raw": "Raw", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Lingua", @@ -184,8 +187,9 @@ "message.tracking-code": "Codice di tracking", "message.user-deleted": "User deleted.", "message.visitor-log": "Utenti da {country} tramite {browser} su {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Non hai ancora configurato alcun sito.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Non hai ancora configurato alcun sito.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/ja-JP.json b/lang/ja-JP.json index 07a68a9e9..7f618a4e7 100644 --- a/lang/ja-JP.json +++ b/lang/ja-JP.json @@ -39,9 +39,11 @@ "label.devices": "デバイス", "label.dismiss": "無視する", "label.domain": "ドメイン", + "label.dropoff": "Dropoff", "label.edit": "編集", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "共有リンクを有効にする", + "label.event": "Event", "label.event-data": "Event data", "label.events": "イベント", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "パスまで", "label.filter-raw": "すべて表示", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "トラッキングコード", "message.user-deleted": "User deleted.", "message.visitor-log": "{os}({device})で{browser}を使用している{country}からの訪問者", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Webサイトが設定されていません。", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Webサイトが設定されていません。", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/km-KH.json b/lang/km-KH.json index c2d4920da..208442427 100644 --- a/lang/km-KH.json +++ b/lang/km-KH.json @@ -39,9 +39,11 @@ "label.devices": "ឧបករណ៍", "label.dismiss": "បដិសេធ", "label.domain": "ឈ្មោះគេហទំព័រ", + "label.dropoff": "Dropoff", "label.edit": "កែប្រែ", "label.edit-dashboard": "កែផ្ទាំងគ្រប់គ្រង", "label.enable-share-url": "បើកការចែករំលែក URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "ព្រឹត្តិការណ៍", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "រួមបញ្ចូលគ្នា", "label.filter-raw": "ដើម", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "ភាសា", @@ -184,8 +187,9 @@ "message.tracking-code": "លេខកូដតាមដាន", "message.user-deleted": "User deleted.", "message.visitor-log": "អ្នកមើលពីប្រទេស {country} ប្រើប្រាស់កម្មវិធី {browser} លើឧបករណ៍ {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "អ្នកមិនទាន់បានដាក់គេហទំព័រណាមួយចូលទេ។", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "អ្នកមិនទាន់បានដាក់គេហទំព័រណាមួយចូលទេ។", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/ko-KR.json b/lang/ko-KR.json index 21fe73503..2e4f0e5ac 100644 --- a/lang/ko-KR.json +++ b/lang/ko-KR.json @@ -39,9 +39,11 @@ "label.devices": "기기", "label.dismiss": "무시하기", "label.domain": "도메인", + "label.dropoff": "Dropoff", "label.edit": "편집", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "URL 공유 활성화", + "label.event": "Event", "label.event-data": "Event data", "label.events": "이벤트", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "합쳐서 보기", "label.filter-raw": "전체 보기", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "추적 코드", "message.user-deleted": "User deleted.", "message.visitor-log": "{os} {device}에서 {browser}을(를) 사용하는 {country}의 방문자", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "구성된 웹 사이트가 없습니다.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "구성된 웹 사이트가 없습니다.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/lt-LT.json b/lang/lt-LT.json index e951bcd31..e8ef150db 100644 --- a/lang/lt-LT.json +++ b/lang/lt-LT.json @@ -39,9 +39,11 @@ "label.devices": "Įrenginiai", "label.dismiss": "Gerai", "label.domain": "Domenas", + "label.dropoff": "Dropoff", "label.edit": "Redaguoti", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Įjungti bendrinimą su nuoroda", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Įvykiai", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Kombinuoti", "label.filter-raw": "Neapdoroti", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "Sekimo kodas", "message.user-deleted": "User deleted.", "message.visitor-log": "Lankytojas iš {country}, naudojantis {browser} sistemoje {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Jūs nesate susikonfiguravę jokių svetainių.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Jūs nesate susikonfiguravę jokių svetainių.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/mn-MN.json b/lang/mn-MN.json index 100368e35..1d9d98124 100644 --- a/lang/mn-MN.json +++ b/lang/mn-MN.json @@ -39,9 +39,11 @@ "label.devices": "Төхөөрөмж", "label.dismiss": "Үл хэргэсэх", "label.domain": "Домэйн", + "label.dropoff": "Dropoff", "label.edit": "Засах", "label.edit-dashboard": "Хянах самбар засах", "label.enable-share-url": "Хуваалцах холбоос идэвхжүүлэх", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Үйлдэл", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Нэгтгэсэн", "label.filter-raw": "Түүхий", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Нэгдэх", "label.join-team": "Багт нэгдэх", "label.language": "Хэл", @@ -184,8 +187,9 @@ "message.tracking-code": "Энэ вебийн хандалтуудыг мөрдөхийн тулд доорх кодыг HTML-нхээ ... хэсэгт байрлуулна уу.", "message.user-deleted": "Хэрэглэгч устсан.", "message.visitor-log": "{country} улсаас {os} {device} дээр {browser} хөтөч ашиглан орсон", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "Энэ багт ямар ч веб алга.", - "messages.no-websites-configured": "Та ямар нэгэн веб тохируулаагүй байна.", - "messages.team-websites-info": "Вебийг багийн бүх гишүүд үзэж болно." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "Энэ багт ямар ч веб алга.", + "message.no-websites-configured": "Та ямар нэгэн веб тохируулаагүй байна.", + "message.team-websites-info": "Вебийг багийн бүх гишүүд үзэж болно.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/ms-MY.json b/lang/ms-MY.json index 1fc9bce05..c3a9254ce 100644 --- a/lang/ms-MY.json +++ b/lang/ms-MY.json @@ -39,9 +39,11 @@ "label.devices": "Peranti", "label.dismiss": "Ketepikan", "label.domain": "Domain", + "label.dropoff": "Dropoff", "label.edit": "Edit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Aktifkan url berkongsi", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Peristiwa", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Digabungkan", "label.filter-raw": "Mentah", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "Kod penjejakan", "message.user-deleted": "User deleted.", "message.visitor-log": "Pelawat dari {country} mengguna {browser} pada {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Anda tidak ada sebarang laman web yang telah dikonfigurasikan.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Anda tidak ada sebarang laman web yang telah dikonfigurasikan.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/nb-NO.json b/lang/nb-NO.json index 1887096b7..fcd299653 100644 --- a/lang/nb-NO.json +++ b/lang/nb-NO.json @@ -39,9 +39,11 @@ "label.devices": "Enheter", "label.dismiss": "Avbryt", "label.domain": "Domene", + "label.dropoff": "Dropoff", "label.edit": "Rediger", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Aktiver delings-URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Arrangementer", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Kombinert", "label.filter-raw": "Rå", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Språk", @@ -184,8 +187,9 @@ "message.tracking-code": "Sporingskode", "message.user-deleted": "User deleted.", "message.visitor-log": "Besøkende fra {country} med {browser} på {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Du har ikke satt opp noen nettsteder.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Du har ikke satt opp noen nettsteder.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/nl-NL.json b/lang/nl-NL.json index db5e4b7d8..90b4ea40c 100644 --- a/lang/nl-NL.json +++ b/lang/nl-NL.json @@ -39,9 +39,11 @@ "label.devices": "Apparaten", "label.dismiss": "Negeren", "label.domain": "Domein", + "label.dropoff": "Dropoff", "label.edit": "Bewerken", "label.edit-dashboard": "Dashboard aanpassen", "label.enable-share-url": "Sta delen via openbare URL toe", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Gebeurtenissen", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Gecombineerd", "label.filter-raw": "Ruw", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Lid worden", "label.join-team": "Word lid van een team", "label.language": "Taal", @@ -184,8 +187,9 @@ "message.tracking-code": "Volgcode", "message.user-deleted": "Gebruiker verwijderd.", "message.visitor-log": "Bezoeker uit {country} met {browser} op een {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "Er zijn geen websites gekoppeld aan dit team.", - "messages.no-websites-configured": "Je hebt geen websites ingesteld.", - "messages.team-websites-info": "Websites kunnen door iedereen in het team worden bekeken." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "Er zijn geen websites gekoppeld aan dit team.", + "message.no-websites-configured": "Je hebt geen websites ingesteld.", + "message.team-websites-info": "Websites kunnen door iedereen in het team worden bekeken.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/pl-PL.json b/lang/pl-PL.json index 38b808fc1..79823f572 100644 --- a/lang/pl-PL.json +++ b/lang/pl-PL.json @@ -2,8 +2,8 @@ "label.access-code": "Kod dostępu", "label.actions": "Działania", "label.activity-log": "Dziennik aktywności", - "label.add": "Add", - "label.add-description": "Add description", + "label.add": "Dodaj", + "label.add-description": "Dodaj opis", "label.add-website": "Dodaj witrynę", "label.admin": "Administrator", "label.all": "Wszystkie", @@ -39,16 +39,19 @@ "label.devices": "Urządzenia", "label.dismiss": "Odrzuć", "label.domain": "Domena", + "label.dropoff": "Dropoff", "label.edit": "Edytuj", "label.edit-dashboard": "Edytuj panel", "label.enable-share-url": "Włącz udostępnianie adresu URL", - "label.event-data": "Event data", + "label.event": "Event", + "label.event-data": "Dane zdarzenia", "label.events": "Zdarzenia", - "label.field": "Field", - "label.fields": "Fields", + "label.field": "Pole", + "label.fields": "Pola", "label.filter-combined": "Połączone", "label.filter-raw": "Surowe dane", - "label.funnel": "Funnel", + "label.funnel": "Lejek", + "label.insights": "Insights", "label.join": "Dołącz", "label.join-team": "Dołącz do zespołu", "label.language": "Język", @@ -74,23 +77,23 @@ "label.powered-by": "Obsługiwane przez {name}", "label.profile": "Profil", "label.queries": "Zapytania", - "label.query": "Query", - "label.query-parameters": "Parametry query", + "label.query": "Zapytanie", + "label.query-parameters": "Parametry zapytania", "label.realtime": "Czas rzeczywisty", "label.referrers": "Źródła odsyłające", "label.refresh": "Odśwież", "label.regenerate": "Wygeneruj ponownie", "label.regions": "Regiony", "label.remove": "Usuń", - "label.reports": "Reports", + "label.reports": "Raporty", "label.required": "Wymagany", "label.reset": "Zresetuj", "label.reset-website": "Zresetuj statystyki", "label.role": "Role", - "label.run-query": "Run query", + "label.run-query": "Uruchom zapytanie", "label.save": "Zapisz", "label.screens": "Ekrany", - "label.select-date": "Select date", + "label.select-date": "Wybierz datę", "label.select-website": "Wybierz witrynę", "label.sessions": "Sesje", "label.settings": "Ustawienia", @@ -114,54 +117,54 @@ "label.tracking-code": "Kod śledzenia", "label.unique-visitors": "Unikalni odwiedzający", "label.unknown": "Nieznany", - "label.url": "URL", - "label.urls": "URLs", + "label.url": "Link", + "label.urls": "Linki", "label.user": "Użytkownik", "label.username": "Nazwa użytkownika", "label.users": "Użytkownicy", "label.view": "Zobacz", "label.view-details": "Pokaż szczegóły", - "label.view-only": "View only", + "label.view-only": "Tylko do odczytu", "label.views": "Wyświetlenia", "label.visitors": "Odwiedzający", - "label.website": "Website", + "label.website": "Witryna", "label.website-id": "ID witryny", "label.websites": "Witryny", - "label.window": "Window", + "label.window": "Okno", "label.yesterday": "Wczoraj", - "labels.after": "After", - "labels.average": "Average", - "labels.before": "Before", - "labels.breakdown": "Breakdown", - "labels.contains": "Contains", - "labels.create-report": "Create report", - "labels.description": "Description", - "labels.does-not-contain": "Does not contain", - "labels.does-not-equal": "Does not equal", - "labels.equals": "Equals", - "labels.false": "False", - "labels.filters": "Filters", - "labels.greater-than": "Greater than", - "labels.greater-than-equals": "Greater than or equals", - "labels.less-than": "Less than", - "labels.less-than-equals": "Less than or equals", - "labels.max": "Max", + "labels.after": "Po", + "labels.average": "Średnia", + "labels.before": "Przed", + "labels.breakdown": "Rozbicie", + "labels.contains": "Zawiera", + "labels.create-report": "Stwórz raport", + "labels.description": "Opis", + "labels.does-not-contain": "Nie zawiera", + "labels.does-not-equal": "Nie jest równe", + "labels.equals": "Równe", + "labels.false": "Fałsz", + "labels.filters": "Filtry", + "labels.greater-than": "Większe niż", + "labels.greater-than-equals": "Większe niż lub równe", + "labels.less-than": "Mniejsze niż", + "labels.less-than-equals": "Mniejsze niż lub równe", + "labels.max": "Maks", "labels.min": "Min", - "labels.overview": "Overview", - "labels.sum": "Sum", - "labels.total": "Total", - "labels.total-records": "Total records", - "labels.true": "True", - "labels.type": "Type", - "labels.unique": "Unique", - "labels.untitled": "Untitled", - "labels.value": "Value", + "labels.overview": "Przegląd", + "labels.sum": "Suma", + "labels.total": "W sumie", + "labels.total-records": "Suma rekordów", + "labels.true": "Prawda", + "labels.type": "Typ", + "labels.unique": "Unikalne", + "labels.untitled": "Bez tytułu", + "labels.value": "Wartość", "message.active-users": "{x} aktualnie {x, plural, one {odwiedzający} other {odwiedzających}}", "message.confirm-delete": "Czy na pewno chcesz usunąć {target}?", "message.confirm-leave": "Czy na pewno chcesz opuścić {target}?", "message.confirm-reset": "Czy na pewno chcesz zresetować statystyki {target}?", - "message.delete-account": "To delete this account, type {confirmation} in the box below to confirm.", - "message.delete-website": "To delete this website, type {confirmation} in the box below to confirm.", + "message.delete-account": "Aby usunąć to konto, wpisz {confirmation} w polu poniżej, aby potwierdzić.", + "message.delete-website": "Aby usunąć tę stronę, wpisz {confirmation} w polu poniżej, aby potwierdzić.", "message.delete-website-warning": "Wszystkie powiązane dane również zostaną usunięte.", "message.error": "Coś poszło nie tak.", "message.event-log": "{event} na {url}", @@ -170,7 +173,7 @@ "message.invalid-domain": "Nieprawidłowa witryna", "message.min-password-length": "Minimalna długość {n} znaków", "message.no-data-available": "Brak dostępnych danych.", - "message.no-event-data": "No event data is available.", + "message.no-event-data": "Brak dostępnych danych o zdarzeniach.", "message.no-match-password": "Hasła się nie zgadzają", "message.no-teams": "Nie stworzyłeś żadnych zespołów.", "message.no-users": "Nie ma żadnych użytkowników.", @@ -184,8 +187,9 @@ "message.tracking-code": "Kod śledzenia", "message.user-deleted": "Użytkownik usunięty.", "message.visitor-log": "Odwiedzający z {country} używa {browser} na {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "Ten zespół nie ma żadnych witryn internetowych.", - "messages.no-websites-configured": "Nie masz skonfigurowanych żadnych witryn internetowych.", - "messages.team-websites-info": "Strony internetowe mogą być przeglądane przez każdego członka zespołu." + "message.no-results-found": "Nie znaleziono wyników.", + "message.no-team-websites": "Ten zespół nie ma żadnych witryn internetowych.", + "message.no-websites-configured": "Nie masz skonfigurowanych żadnych witryn internetowych.", + "message.team-websites-info": "Strony internetowe mogą być przeglądane przez każdego członka zespołu.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/pt-BR.json b/lang/pt-BR.json index 9a563acdf..dd1edf0b3 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -39,16 +39,19 @@ "label.devices": "Dispositivos", "label.dismiss": "Dispensar", "label.domain": "Domínio", + "label.dropoff": "Dropoff", "label.edit": "Editar", "label.edit-dashboard": "Editar painel", "label.enable-share-url": "Ativar link de compartilhamento", + "label.event": "Evento", "label.event-data": "Event data", "label.events": "Eventos", - "label.field": "Field", - "label.fields": "Fields", + "label.field": "Campo", + "label.fields": "Campos", "label.filter-combined": "Combinado", "label.filter-raw": "Dados brutos", - "label.funnel": "Funnel", + "label.funnel": "Funil", + "label.insights": "Insights", "label.join": "Entrar", "label.join-team": "Entrar no time", "label.language": "Idioma", @@ -87,10 +90,10 @@ "label.reset": "Redefinir", "label.reset-website": "Redefinir estatísticas", "label.role": "Papel", - "label.run-query": "Run query", + "label.run-query": "Executar query", "label.save": "Salvar", "label.screens": "Telas", - "label.select-date": "Select date", + "label.select-date": "Selecionar data", "label.select-website": "Selecionar site", "label.sessions": "Sessões", "label.settings": "Configurações", @@ -121,30 +124,30 @@ "label.users": "Usuários", "label.view": "Ver", "label.view-details": "Ver detalhes", - "label.view-only": "View only", + "label.view-only": "Somente visualização", "label.views": "Visualizações", "label.visitors": "Visitantes", "label.website": "Website", "label.website-id": "ID do Site", "label.websites": "Sites", - "label.window": "Window", + "label.window": "Janela", "label.yesterday": "Ontem", - "labels.after": "After", + "labels.after": "Depois", "labels.average": "Average", - "labels.before": "Before", + "labels.before": "Antes", "labels.breakdown": "Breakdown", "labels.contains": "Contains", - "labels.create-report": "Create report", - "labels.description": "Description", + "labels.create-report": "Criar relatório", + "labels.description": "Descrição", "labels.does-not-contain": "Does not contain", "labels.does-not-equal": "Does not equal", "labels.equals": "Equals", "labels.false": "False", "labels.filters": "Filters", - "labels.greater-than": "Greater than", - "labels.greater-than-equals": "Greater than or equals", - "labels.less-than": "Less than", - "labels.less-than-equals": "Less than or equals", + "labels.greater-than": "Maior que", + "labels.greater-than-equals": "Maior que ou igual", + "labels.less-than": "Menor que", + "labels.less-than-equals": "Menor que ou igual", "labels.max": "Max", "labels.min": "Min", "labels.overview": "Overview", @@ -152,16 +155,16 @@ "labels.total": "Total", "labels.total-records": "Total records", "labels.true": "True", - "labels.type": "Type", - "labels.unique": "Unique", - "labels.untitled": "Untitled", - "labels.value": "Value", + "labels.type": "Tipo", + "labels.unique": "Único", + "labels.untitled": "Sem título", + "labels.value": "Valor", "message.active-users": "{x} {x, plural, one {visitante} other {visitantes}} neste momento", "message.confirm-delete": "Deseja realmente remover {target}?", "message.confirm-leave": "Você tem certeza que deseja sair de {target}?", "message.confirm-reset": "Você tem certeza que deseja redefinir as estatísticas de {target}?", - "message.delete-account": "To delete this account, type {confirmation} in the box below to confirm.", - "message.delete-website": "To delete this website, type {confirmation} in the box below to confirm.", + "message.delete-account": "Para excluir esta conta, digite {confirmation} na caixa abaixo para confirmar.", + "message.delete-website": "Para excluir este website, digite {confirmation} na caixa abaixo para confirmar.", "message.delete-website-warning": "Todos os dados associados também serão eliminados.", "message.error": "Ocorreu um erro.", "message.event-log": "{event} em {url}", @@ -170,12 +173,12 @@ "message.invalid-domain": "Domínio inválido", "message.min-password-length": "Quantidade mínima de {n} caracteres", "message.no-data-available": "Sem dados disponíveis.", - "message.no-event-data": "No event data is available.", + "message.no-event-data": "Nenhum dado de evento está disponível.", "message.no-match-password": "As senhas não correspondem", "message.no-teams": "Você não criou nenhum time.", "message.no-users": "Não há nenhum usuário.", "message.page-not-found": "Página não encontrada.", - "message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.", + "message.reset-website": "Para redefinir este site, digite {confirmation} na caixa abaixo para confirmar.", "message.reset-website-warning": "Todas as estatísticas deste site serão removidas, mas seu código de rastreamento permanecerá intacto.", "message.saved": "Salvo com sucesso.", "message.share-url": "Este é o link público de compartilhamento para {target}.", @@ -184,8 +187,9 @@ "message.tracking-code": "Código de rastreamento", "message.user-deleted": "Usuário removido.", "message.visitor-log": "Visitante de {country} usando {browser} no {device} {os}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "Este time não possui nenhum site.", - "messages.no-websites-configured": "Nenhum site foi configurado ainda.", - "messages.team-websites-info": "Os sites podem ser visualizados por qualquer membro da equipe." + "message.no-results-found": "Nenhum resultado foi encontrado.", + "message.no-team-websites": "Este time não possui nenhum site.", + "message.no-websites-configured": "Nenhum site foi configurado ainda.", + "message.team-websites-info": "Os sites podem ser visualizados por qualquer membro da equipe.", + "message.new-version-available": "Uma nova versão do Umami {version} está disponível!" } diff --git a/lang/pt-PT.json b/lang/pt-PT.json index 826b4dc5a..24765e7aa 100644 --- a/lang/pt-PT.json +++ b/lang/pt-PT.json @@ -39,9 +39,11 @@ "label.devices": "Dispositivos", "label.dismiss": "Ignorar", "label.domain": "Domínio", + "label.dropoff": "Dropoff", "label.edit": "Editar", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Ativar link de partilha", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Eventos", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Combinado", "label.filter-raw": "Dados brutos", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Língua", @@ -184,8 +187,9 @@ "message.tracking-code": "Código de rastreamento", "message.user-deleted": "User deleted.", "message.visitor-log": "Visitante de {country} a usar {browser} no {device} {os}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Não tens nenhum website configurado.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Não tens nenhum website configurado.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/ro-RO.json b/lang/ro-RO.json index d65fb08ff..fa15ce24f 100644 --- a/lang/ro-RO.json +++ b/lang/ro-RO.json @@ -39,9 +39,11 @@ "label.devices": "Dispozitive", "label.dismiss": "Renunță", "label.domain": "Domeniu", + "label.dropoff": "Dropoff", "label.edit": "Editare", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Activare adresă URL de distribuire", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Evenimente", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Combinat", "label.filter-raw": "Brut", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "Cod de urmărire", "message.user-deleted": "User deleted.", "message.visitor-log": "Vizitator din {country} folosind {browser} pe {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Nu aveți niciun site web configurat.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Nu aveți niciun site web configurat.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/ru-RU.json b/lang/ru-RU.json index eb56835af..93bc53678 100644 --- a/lang/ru-RU.json +++ b/lang/ru-RU.json @@ -39,9 +39,11 @@ "label.devices": "Устройства", "label.dismiss": "Отклонить", "label.domain": "Домен", + "label.dropoff": "Dropoff", "label.edit": "Изменить", "label.edit-dashboard": "Редактировать дашборд", "label.enable-share-url": "Разрешить делиться ссылкой", + "label.event": "Event", "label.event-data": "Event data", "label.events": "События", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Объединенные", "label.filter-raw": "Сырые данные", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Присоединиться", "label.join-team": "Присоединиться к команде", "label.language": "Язык", @@ -184,8 +187,9 @@ "message.tracking-code": "Код отслеживания", "message.user-deleted": "Пользователь удален.", "message.visitor-log": "Посетитель из {country} используя {browser} на {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "У этой команды нет ни одного сайта.", - "messages.no-websites-configured": "У вас нет настроенных сайтов.", - "messages.team-websites-info": "Сайты могут просматривать все члены команды." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "У этой команды нет ни одного сайта.", + "message.no-websites-configured": "У вас нет настроенных сайтов.", + "message.team-websites-info": "Сайты могут просматривать все члены команды.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/si-LK.json b/lang/si-LK.json index d23d008ce..086c156ea 100644 --- a/lang/si-LK.json +++ b/lang/si-LK.json @@ -39,9 +39,11 @@ "label.devices": "Devices", "label.dismiss": "මගහරින්න", "label.domain": "වසම", + "label.dropoff": "Dropoff", "label.edit": "සංස්කරණය කරන්න", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "බෙදාගැනීමේ URL සබල කරන්න", + "label.event": "Event", "label.event-data": "සිදුවීම් දත්ත", "label.events": "Events", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Combined", "label.filter-raw": "Raw", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "භාෂාව", @@ -184,8 +187,9 @@ "message.tracking-code": "To track stats for this website, place the following code in the ... section of your HTML.", "message.user-deleted": "User deleted.", "message.visitor-log": "Visitor from {country} using {browser} on {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "You do not have any websites configured.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "You do not have any websites configured.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/sk-SK.json b/lang/sk-SK.json index 4c09565f8..884519aac 100644 --- a/lang/sk-SK.json +++ b/lang/sk-SK.json @@ -39,9 +39,11 @@ "label.devices": "Zariadenie", "label.dismiss": "Odísť", "label.domain": "Doména", + "label.dropoff": "Dropoff", "label.edit": "Upraviť", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Povoliť zdielanie URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Udalosti", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Kombinácie", "label.filter-raw": "Nezpracované", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "Sledovací kód", "message.user-deleted": "User deleted.", "message.visitor-log": "Návštevník z {country} s prehliadačom {browser} na {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Nemáte nastavený žiadny web.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Nemáte nastavený žiadny web.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/sl-SI.json b/lang/sl-SI.json index c991fb755..ab309ab9d 100644 --- a/lang/sl-SI.json +++ b/lang/sl-SI.json @@ -39,9 +39,11 @@ "label.devices": "Naprave", "label.dismiss": "Opusti", "label.domain": "Domena", + "label.dropoff": "Dropoff", "label.edit": "Uredi", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Omogoči URL za skupno rabo", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Dogodki", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Skupno", "label.filter-raw": "Neobdelane meritve", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "Koda za sledenje", "message.user-deleted": "User deleted.", "message.visitor-log": "Obiskovalec iz {country} uporablja {browser} na {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Ni nastavljenih spletnih mest.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Ni nastavljenih spletnih mest.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/sv-SE.json b/lang/sv-SE.json index 07d1a7fe9..3e1303c58 100644 --- a/lang/sv-SE.json +++ b/lang/sv-SE.json @@ -39,9 +39,11 @@ "label.devices": "Enheter", "label.dismiss": "Avbryt", "label.domain": "Domän", + "label.dropoff": "Dropoff", "label.edit": "Redigera", "label.edit-dashboard": "Redigera översikt", "label.enable-share-url": "Aktivera delnings-URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Händelser", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Kombinerade", "label.filter-raw": "Rådata", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Gå med", "label.join-team": "gå med i team", "label.language": "Språk", @@ -184,8 +187,9 @@ "message.tracking-code": "Spårningskod", "message.user-deleted": "Användare raderad.", "message.visitor-log": "Besökare från {country} med {browser} på {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "Det här teamet har inga webbsajter.", - "messages.no-websites-configured": "Du har inga webbsajter.", - "messages.team-websites-info": "Websajter kan ses av alla i teamet." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "Det här teamet har inga webbsajter.", + "message.no-websites-configured": "Du har inga webbsajter.", + "message.team-websites-info": "Websajter kan ses av alla i teamet.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/ta-IN.json b/lang/ta-IN.json index 99cc1c265..e52bf186f 100644 --- a/lang/ta-IN.json +++ b/lang/ta-IN.json @@ -39,9 +39,11 @@ "label.devices": "சாதனங்கள்", "label.dismiss": "நீக்கு", "label.domain": "கள முகவரி", + "label.dropoff": "Dropoff", "label.edit": "திருத்துதல்", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "கள முகவரியை பகிரலாம்", + "label.event": "Event", "label.event-data": "Event data", "label.events": "நிகழ்வுகள்", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "ஒருங்கிணைந்த", "label.filter-raw": "மூல", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "கண்காணிப்பு குறியீடு", "message.user-deleted": "User deleted.", "message.visitor-log": "{country}வில் இருந்து பார்வையாளர் {browser} ஐ {os} {device}லில் பயன்படுத்துகிறார்", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "உங்களிடம் எந்த வலைத்தளங்களும் கட்டமைக்கப்படவில்லை.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "உங்களிடம் எந்த வலைத்தளங்களும் கட்டமைக்கப்படவில்லை.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/th-TH.json b/lang/th-TH.json index e0111a845..7fa70298f 100644 --- a/lang/th-TH.json +++ b/lang/th-TH.json @@ -39,9 +39,11 @@ "label.devices": "อุปกรณ์", "label.dismiss": "ยกเลิก", "label.domain": "โดเมน", + "label.dropoff": "Dropoff", "label.edit": "แก้ไข", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "เปิดใช้งานการแชร์ลิงก์", + "label.event": "Event", "label.event-data": "Event data", "label.events": "เหตุการณ์", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "ข้อมูลรวม", "label.filter-raw": "ข้อมูลดิบ", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "ภาษา", @@ -184,8 +187,9 @@ "message.tracking-code": "โค้ดสำหรับใช้ติดตาม", "message.user-deleted": "User deleted.", "message.visitor-log": "ผู้เข้าชมจาก {country} กำลังใช้งานผ่าน {browser} บน {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "คุณยังไม่ได้ตั้งค่าเว็บไซต์ใด ๆ ไว้.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "คุณยังไม่ได้ตั้งค่าเว็บไซต์ใด ๆ ไว้.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/tr-TR.json b/lang/tr-TR.json index 686489ea8..4f39fcb3f 100644 --- a/lang/tr-TR.json +++ b/lang/tr-TR.json @@ -39,9 +39,11 @@ "label.devices": "Cihazlar", "label.dismiss": "Reddet", "label.domain": "Alan adı", + "label.dropoff": "Dropoff", "label.edit": "Düzenle", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Anonim paylaşım URL'i aktif", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Olaylar", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Birleşik", "label.filter-raw": "Ham", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "İzleme kodu", "message.user-deleted": "User deleted.", "message.visitor-log": "Yeni ziyaretçi: {country}, {os}, {device}, {browser}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Henüz hiç web sitesi tanımlamadınız", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Henüz hiç web sitesi tanımlamadınız", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/uk-UA.json b/lang/uk-UA.json index d116c7ef5..7bdffd177 100644 --- a/lang/uk-UA.json +++ b/lang/uk-UA.json @@ -39,9 +39,11 @@ "label.devices": "Пристрої", "label.dismiss": "Відхилити", "label.domain": "Домен", + "label.dropoff": "Dropoff", "label.edit": "Редагувати", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Дозволити ділитися посиланням", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Події", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Об'єднані", "label.filter-raw": "Сирі дані", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "Код для відслідковування", "message.user-deleted": "User deleted.", "message.visitor-log": "Відвідувач з {country} використовуючи {browser} на {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "У вас немає налаштованих сайтів.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "У вас немає налаштованих сайтів.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/ur-PK.json b/lang/ur-PK.json index e2f95fb34..a10594d99 100644 --- a/lang/ur-PK.json +++ b/lang/ur-PK.json @@ -39,9 +39,11 @@ "label.devices": "آلات", "label.dismiss": "مسترد کریں", "label.domain": "ڈومین", + "label.dropoff": "Dropoff", "label.edit": "ترمیم", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "شیئر یو آر ایل کو فعال کریں", + "label.event": "Event", "label.event-data": "Event data", "label.events": "واقعات", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "مشترکہ", "label.filter-raw": "خام", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "ٹریکنگ کوڈ", "message.user-deleted": "User deleted.", "message.visitor-log": "{os} {device} پر {browser} کا استعمال کرتے ہوئے {country} سے آنے والا", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "آپ کے پاس کوئی ویب سائٹ کنفیگر نہیں ہے۔", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "آپ کے پاس کوئی ویب سائٹ کنفیگر نہیں ہے۔", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/vi-VN.json b/lang/vi-VN.json index ff89a6016..b105cd6b2 100644 --- a/lang/vi-VN.json +++ b/lang/vi-VN.json @@ -39,9 +39,11 @@ "label.devices": "Thiết bị", "label.dismiss": "Loại trừ", "label.domain": "Tên miền", + "label.dropoff": "Dropoff", "label.edit": "Chỉnh sửa", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Bật khả năng chia sẻ URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Sự kiện", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "Kết hợp", "label.filter-raw": "Gốc", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "Language", @@ -184,8 +187,9 @@ "message.tracking-code": "Mã theo dõi", "message.user-deleted": "User deleted.", "message.visitor-log": "Khách từ {country} đang dùng {browser} trên {os} {device}", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "Bạn chưa có bất cứ website nào.", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "Bạn chưa có bất cứ website nào.", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/zh-CN.json b/lang/zh-CN.json index 33eb5d856..f40dd88aa 100644 --- a/lang/zh-CN.json +++ b/lang/zh-CN.json @@ -2,8 +2,8 @@ "label.access-code": "访问代码", "label.actions": "用户行为", "label.activity-log": "活动日志", - "label.add": "Add", - "label.add-description": "Add description", + "label.add": "添加", + "label.add-description": "添加描述", "label.add-website": "添加网站", "label.admin": "管理员", "label.all": "所有", @@ -39,9 +39,11 @@ "label.devices": "设备", "label.dismiss": "关闭", "label.domain": "域名", + "label.dropoff": "Dropoff", "label.edit": "编辑", "label.edit-dashboard": "编辑仪表板", "label.enable-share-url": "启用共享链接", + "label.event": "Event", "label.event-data": "Event data", "label.events": "行为类别", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "合并", "label.filter-raw": "原始", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "加入", "label.join-team": "加入团队", "label.language": "语言", @@ -127,15 +130,15 @@ "label.website": "Website", "label.website-id": "网站 ID", "label.websites": "网站", - "label.window": "Window", + "label.window": "窗口", "label.yesterday": "昨天", "labels.after": "After", "labels.average": "Average", "labels.before": "Before", "labels.breakdown": "Breakdown", "labels.contains": "Contains", - "labels.create-report": "Create report", - "labels.description": "Description", + "labels.create-report": "创建报告", + "labels.description": "描述", "labels.does-not-contain": "Does not contain", "labels.does-not-equal": "Does not equal", "labels.equals": "Equals", @@ -154,14 +157,14 @@ "labels.true": "True", "labels.type": "Type", "labels.unique": "Unique", - "labels.untitled": "Untitled", + "labels.untitled": "未命名", "labels.value": "Value", "message.active-users": "当前在线 {x} 人", "message.confirm-delete": "你确定要删除 {target} 吗?", "message.confirm-leave": "你确定要离开 {target} 吗?", "message.confirm-reset": "您确定要重置 {target} 的数据吗?", - "message.delete-account": "To delete this account, type {confirmation} in the box below to confirm.", - "message.delete-website": "To delete this website, type {confirmation} in the box below to confirm.", + "message.delete-account": "确定删除该账户, 请在下面的输入框中输入 {confirmation} 进行二次确认。", + "message.delete-website": "确定删除该网站, 请在下面的输入框中输入 {confirmation} 进行二次确认。", "message.delete-website-warning": "所有相关数据将会被删除。", "message.error": "出现错误。", "message.event-log": "{event} on {url}", @@ -175,17 +178,18 @@ "message.no-teams": "你还没有创建任何团队。", "message.no-users": "没有任何用户。", "message.page-not-found": "网页未找到。", - "message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.", + "message.reset-website": "确定重置该网站, 请在下面的输入框中输入 {confirmation} 进行二次确认。", "message.reset-website-warning": "本网站的所有统计数据将被删除,但您的跟踪代码将保持不变。", "message.saved": "保存成功。", "message.share-url": "这是 {target} 的共享链接。", "message.team-already-member": "你已经是该团队的成员。", "message.team-not-found": "未找到团队。", "message.tracking-code": "跟踪代码", - "message.user-deleted": "User detected.", + "message.user-deleted": "User deleted.", "message.visitor-log": "来自{country}的访客在搭载 {os} 的{device}上使用 {browser} 浏览器进行访问。", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "这个团队没有任何网站。", - "messages.no-websites-configured": "你还没有设置任何网站。", - "messages.team-websites-info": "团队中的任何人都可查看网站。" + "message.no-results-found": "没有找到任何结果。", + "message.no-team-websites": "这个团队没有任何网站。", + "message.no-websites-configured": "你还没有设置任何网站。", + "message.team-websites-info": "团队中的任何人都可查看网站。", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lang/zh-TW.json b/lang/zh-TW.json index 98dbde23f..a95d50df9 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -39,9 +39,11 @@ "label.devices": "裝置", "label.dismiss": "關閉", "label.domain": "域名", + "label.dropoff": "Dropoff", "label.edit": "編輯", "label.edit-dashboard": "編輯管理面板", "label.enable-share-url": "啟用分享連結", + "label.event": "Event", "label.event-data": "Event data", "label.events": "行為類別", "label.field": "Field", @@ -49,6 +51,7 @@ "label.filter-combined": "總和", "label.filter-raw": "原始", "label.funnel": "Funnel", + "label.insights": "Insights", "label.join": "Join", "label.join-team": "Join team", "label.language": "語言", @@ -184,8 +187,9 @@ "message.tracking-code": "追蹤代碼", "message.user-deleted": "User deleted.", "message.visitor-log": "來自{country}的訪客在搭載 {os} 的{device}上使用 {browser} 進行訪問。", - "messages.no-results-found": "No results were found.", - "messages.no-team-websites": "This team does not have any websites.", - "messages.no-websites-configured": "目前無任何網站設定。", - "messages.team-websites-info": "Websites can be viewed by anyone on the team." + "message.no-results-found": "No results were found.", + "message.no-team-websites": "This team does not have any websites.", + "message.no-websites-configured": "目前無任何網站設定。", + "message.team-websites-info": "Websites can be viewed by anyone on the team.", + "message.new-version-available": "A new version of Umami {version} is available!" } diff --git a/lib/auth.ts b/lib/auth.ts index bf01a1ab7..10f7fbcac 100644 --- a/lib/auth.ts +++ b/lib/auth.ts @@ -3,17 +3,9 @@ import redis from '@umami/redis-client'; import debug from 'debug'; import { PERMISSIONS, ROLE_PERMISSIONS, SHARE_TOKEN_HEADER } from 'lib/constants'; import { secret } from 'lib/crypto'; -import { - createSecureToken, - ensureArray, - getRandomChars, - parseSecureToken, - parseToken, -} from 'next-basics'; -import { getTeamUser } from 'queries'; -import { getTeamWebsite, getTeamWebsiteByTeamMemberId } from 'queries/admin/teamWebsite'; -import { validate } from 'uuid'; -import { loadWebsite } from './query'; +import { createSecureToken, ensureArray, getRandomChars, parseToken } from 'next-basics'; +import { getTeamUser, getTeamWebsite, findTeamWebsiteByUserId } from 'queries'; +import { loadWebsite } from './load'; import { Auth } from './types'; const log = debug('umami:auth'); @@ -38,15 +30,6 @@ export function getAuthToken(req) { } } -export function parseAuthToken(req) { - try { - return parseSecureToken(getAuthToken(req), secret()); - } catch (e) { - log(e); - return null; - } -} - export function parseShareToken(req) { try { return parseToken(req.headers[SHARE_TOKEN_HEADER], secret()); @@ -56,21 +39,6 @@ export function parseShareToken(req) { } } -export function isValidToken(token, validation) { - try { - if (typeof validation === 'object') { - return !Object.keys(validation).find(key => token[key] !== validation[key]); - } else if (typeof validation === 'function') { - return validation(token); - } - } catch (e) { - log(e); - return false; - } - - return false; -} - export async function canViewWebsite({ user, shareToken }: Auth, websiteId: string) { if (user?.isAdmin) { return true; @@ -80,19 +48,13 @@ export async function canViewWebsite({ user, shareToken }: Auth, websiteId: stri return true; } - const teamWebsite = await getTeamWebsiteByTeamMemberId(websiteId, user.id); + const website = await loadWebsite(websiteId); - if (teamWebsite) { + if (user.id === website?.userId) { return true; } - const website = await loadWebsite(websiteId); - - if (website.userId) { - return user.id === website.userId; - } - - return false; + return !!(await findTeamWebsiteByUserId(websiteId, user.id)); } export async function canCreateWebsite({ user }: Auth) { @@ -108,17 +70,9 @@ export async function canUpdateWebsite({ user }: Auth, websiteId: string) { return true; } - if (!validate(websiteId)) { - return false; - } - const website = await loadWebsite(websiteId); - if (website.userId) { - return user.id === website.userId; - } - - return false; + return user.id === website?.userId; } export async function canDeleteWebsite({ user }: Auth, websiteId: string) { @@ -128,11 +82,7 @@ export async function canDeleteWebsite({ user }: Auth, websiteId: string) { const website = await loadWebsite(websiteId); - if (website.userId) { - return user.id === website.userId; - } - - return false; + return user.id === website?.userId; } export async function canViewReport(auth: Auth, report: Report) { @@ -140,27 +90,23 @@ export async function canViewReport(auth: Auth, report: Report) { return true; } - if ((auth.user.id = report.userId)) { + if (auth.user.id == report.userId) { return true; } - if (await canViewWebsite(auth, report.websiteId)) { - return true; - } - - return false; + return !!(await canViewWebsite(auth, report.websiteId)); } -export async function canUpdateReport(auth: Auth, report: Report) { - if (auth.user.isAdmin) { +export async function canUpdateReport({ user }: Auth, report: Report) { + if (user.isAdmin) { return true; } - if ((auth.user.id = report.userId)) { - return true; - } + return user.id == report.userId; +} - return false; +export async function canDeleteReport(auth: Auth, report: Report) { + return canUpdateReport(auth, report); } export async function canCreateTeam({ user }: Auth) { @@ -184,13 +130,9 @@ export async function canUpdateTeam({ user }: Auth, teamId: string) { return true; } - if (validate(teamId)) { - const teamUser = await getTeamUser(teamId, user.id); + const teamUser = await getTeamUser(teamId, user.id); - return hasPermission(teamUser.role, PERMISSIONS.teamUpdate); - } - - return false; + return teamUser && hasPermission(teamUser.role, PERMISSIONS.teamUpdate); } export async function canDeleteTeam({ user }: Auth, teamId: string) { @@ -198,13 +140,9 @@ export async function canDeleteTeam({ user }: Auth, teamId: string) { return true; } - if (validate(teamId)) { - const teamUser = await getTeamUser(teamId, user.id); + const teamUser = await getTeamUser(teamId, user.id); - return hasPermission(teamUser.role, PERMISSIONS.teamDelete); - } - - return false; + return teamUser && hasPermission(teamUser.role, PERMISSIONS.teamDelete); } export async function canDeleteTeamUser({ user }: Auth, teamId: string, removeUserId: string) { @@ -212,17 +150,13 @@ export async function canDeleteTeamUser({ user }: Auth, teamId: string, removeUs return true; } - if (validate(teamId) && validate(removeUserId)) { - if (removeUserId === user.id) { - return true; - } - - const teamUser = await getTeamUser(teamId, user.id); - - return hasPermission(teamUser.role, PERMISSIONS.teamUpdate); + if (removeUserId === user.id) { + return true; } - return false; + const teamUser = await getTeamUser(teamId, user.id); + + return teamUser && hasPermission(teamUser.role, PERMISSIONS.teamUpdate); } export async function canDeleteTeamWebsite({ user }: Auth, teamId: string, websiteId: string) { @@ -230,13 +164,13 @@ export async function canDeleteTeamWebsite({ user }: Auth, teamId: string, websi return true; } - if (validate(teamId) && validate(websiteId)) { - const teamWebsite = await getTeamWebsite(teamId, websiteId); + const teamWebsite = await getTeamWebsite(teamId, websiteId); - if (teamWebsite.website.userId === user.id) { - return true; - } + if (teamWebsite?.website?.userId === user.id) { + return true; + } + if (teamWebsite) { const teamUser = await getTeamUser(teamWebsite.teamId, user.id); return hasPermission(teamUser.role, PERMISSIONS.teamUpdate); diff --git a/lib/cache.ts b/lib/cache.ts index 7ee7bf287..bc46c23d1 100644 --- a/lib/cache.ts +++ b/lib/cache.ts @@ -1,11 +1,11 @@ import { User, Website } from '@prisma/client'; import redis from '@umami/redis-client'; -import { getSession, getUser, getWebsite } from '../queries'; +import { getSession, getUserById, getWebsiteById } from '../queries'; const { fetchObject, storeObject, deleteObject } = redis; async function fetchWebsite(id): Promise { - return fetchObject(`website:${id}`, () => getWebsite({ id })); + return fetchObject(`website:${id}`, () => getWebsiteById(id)); } async function storeWebsite(data) { @@ -20,7 +20,7 @@ async function deleteWebsite(id) { } async function fetchUser(id): Promise { - return fetchObject(`user:${id}`, () => getUser({ id }, { includePassword: true })); + return fetchObject(`user:${id}`, () => getUserById(id, { includePassword: true })); } async function storeUser(data) { @@ -35,7 +35,7 @@ async function deleteUser(id) { } async function fetchSession(id) { - return fetchObject(`session:${id}`, () => getSession({ id })); + return fetchObject(`session:${id}`, () => getSession(id)); } async function storeSession(data) { diff --git a/lib/clickhouse.ts b/lib/clickhouse.ts index eb73d83cc..b3dc2c48b 100644 --- a/lib/clickhouse.ts +++ b/lib/clickhouse.ts @@ -2,7 +2,6 @@ import { ClickHouse } from 'clickhouse'; import dateFormat from 'dateformat'; import debug from 'debug'; import { CLICKHOUSE } from 'lib/db'; -import { getDynamicDataType } from './dynamicData'; import { WebsiteMetricFilter } from './types'; import { FILTER_COLUMNS } from './constants'; @@ -62,49 +61,6 @@ function getDateFormat(date) { return `'${dateFormat(date, 'UTC:yyyy-mm-dd HH:MM:ss')}'`; } -function getBetweenDates(field, startAt, endAt) { - return `${field} between ${getDateFormat(startAt)} and ${getDateFormat(endAt)}`; -} - -function getEventDataFilterQuery( - filters: { - eventKey?: string; - eventValue?: string | number | boolean | Date; - }[] = [], - params: any, -) { - const query = filters.reduce((ac, cv, i) => { - const type = getDynamicDataType(cv.eventValue); - - let value = cv.eventValue; - - ac.push(`and (event_key = {eventKey${i}:String}`); - - switch (type) { - case 'number': - ac.push(`and number_value = {eventValue${i}:UInt64})`); - break; - case 'string': - ac.push(`and string_value = {eventValue${i}:String})`); - break; - case 'boolean': - ac.push(`and string_value = {eventValue${i}:String})`); - value = cv ? 'true' : 'false'; - break; - case 'date': - ac.push(`and date_value = {eventValue${i}:DateTime('UTC')})`); - break; - } - - params[`eventKey${i}`] = cv.eventKey; - params[`eventValue${i}`] = value; - - return ac; - }, []); - - return query.join('\n'); -} - function getFilterQuery(filters = {}, params = {}) { const query = Object.keys(filters).reduce((arr, key) => { const filter = filters[key]; @@ -121,36 +77,13 @@ function getFilterQuery(filters = {}, params = {}) { return query.join('\n'); } -function getFunnelQuery(urls: string[]): { - columnsQuery: string; - conditionQuery: string; - urlParams: { [key: string]: string }; -} { - return urls.reduce( - (pv, cv, i) => { - pv.columnsQuery += `\n,url_path = {url${i}:String}${ - i > 0 && urls[i - 1] ? ` AND referrer_path = {url${i - 1}:String}` : '' - }`; - pv.conditionQuery += `${i > 0 ? ',' : ''} {url${i}:String}`; - pv.urlParams[`url${i}`] = cv; - - return pv; - }, - { - columnsQuery: '', - conditionQuery: '', - urlParams: {}, - }, - ); -} - function parseFilters(filters: WebsiteMetricFilter = {}, params: any = {}) { return { filterQuery: getFilterQuery(filters, params), }; } -async function rawQuery(query, params = {}): Promise { +async function rawQuery(query: string, params: object = {}): Promise { if (process.env.LOG_QUERY) { log('QUERY:\n', query); log('PARAMETERS:\n', params); @@ -166,7 +99,7 @@ async function findUnique(data) { throw `${data.length} records found when expecting 1.`; } - return data[0] ?? null; + return findFirst(data); } async function findFirst(data) { @@ -189,10 +122,7 @@ export default { getDateStringQuery, getDateQuery, getDateFormat, - getBetweenDates, getFilterQuery, - getFunnelQuery, - getEventDataFilterQuery, parseFilters, findUnique, findFirst, diff --git a/lib/constants.ts b/lib/constants.ts index 209a97b62..c275ed8d4 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -13,12 +13,12 @@ export const REPO_URL = 'https://github.com/umami-software/umami'; export const UPDATES_URL = 'https://api.umami.is/v1/updates'; export const TELEMETRY_PIXEL = 'https://i.umami.is/a.png'; -export const DEFAULT_LOCALE = 'en-US'; +export const DEFAULT_LOCALE = process.env.defaultLocale ?? 'en-US'; export const DEFAULT_THEME = 'light'; export const DEFAULT_ANIMATION_DURATION = 300; export const DEFAULT_DATE_RANGE = '24hour'; export const DEFAULT_WEBSITE_LIMIT = 10; -export const DEFAULT_CREATED_AT = '2000-01-01'; +export const DEFAULT_RESET_DATE = '2000-01-01'; export const REALTIME_RANGE = 30; export const REALTIME_INTERVAL = 5000; @@ -120,6 +120,37 @@ export const ROLE_PERMISSIONS = { [ROLES.teamMember]: [], } as const; +export const WEBSITE_EVENT_FIELDS = { + eventId: { name: 'event_id', type: 'uuid', label: 'Event ID' }, + websiteId: { name: 'website_id', type: 'uuid', label: 'Website ID' }, + sessionId: { name: 'session_id', type: 'uuid', label: 'Session ID' }, + createdAt: { name: 'created_at', type: 'date', label: 'Created date' }, + urlPath: { name: 'url_path', type: 'string', label: 'URL path' }, + urlQuery: { name: 'url_query', type: 'string', label: 'URL query' }, + referrerPath: { name: 'referrer_path', type: 'string', label: 'Referrer path' }, + referrerQuery: { name: 'referrer_query', type: 'string', label: 'Referrer query' }, + referrerDomain: { name: 'referrer_domain', type: 'string', label: 'Referrer domain' }, + pageTitle: { name: 'page_title', type: 'string', label: 'Page title' }, + eventType: { name: 'event_type', type: 'string', label: 'Event type' }, + eventName: { name: 'event_name', type: 'string', label: 'Event name' }, +}; + +export const SESSION_FIELDS = { + sessionId: { name: 'session_id', type: 'uuid' }, + websiteId: { name: 'website_id', type: 'uuid' }, + hostname: { name: 'hostname', type: 'string' }, + browser: { name: 'browser', type: 'string' }, + os: { name: 'os', type: 'string' }, + device: { name: 'device', type: 'string' }, + screen: { name: 'screen', type: 'string' }, + language: { name: 'language', type: 'string' }, + country: { name: 'country', type: 'string' }, + subdivision1: { name: 'subdivision1', type: 'string' }, + subdivision2: { name: 'subdivision2', type: 'string' }, + city: { name: 'city', type: 'string' }, + createdAt: { name: 'created_at', type: 'date' }, +}; + export const THEME_COLORS = { light: { primary: '#2680eb', @@ -166,10 +197,9 @@ export const EVENT_COLORS = [ '#ffec16', ]; -export const DOMAIN_REGEX = +export const DOMAIN_REGEX = /^(localhost(:[1-9]\d{0,4})?|((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9-]+(-[a-z0-9-]+)*\.)+(xn--)?[a-z0-9-]{2,63})$/; - export const SHARE_ID_REGEX = /^[a-zA-Z0-9]{16}$/; export const DESKTOP_SCREEN_WIDTH = 1920; diff --git a/lib/crypto.js b/lib/crypto.js index fcd3e2c0a..fefaf13f3 100644 --- a/lib/crypto.js +++ b/lib/crypto.js @@ -1,7 +1,6 @@ -import crypto from 'crypto'; -import { v4, v5 } from 'uuid'; import { startOfMonth } from 'date-fns'; import { hash } from 'next-basics'; +import { v4, v5, validate } from 'uuid'; export function secret() { return hash(process.env.APP_SECRET || process.env.DATABASE_URL); @@ -16,9 +15,9 @@ export function salt() { export function uuid(...args) { if (!args.length) return v4(); - return v5(hash(...args, salt()), v5.DNS); + return v5(hash(...args), v5.DNS); } -export function md5(...args) { - return crypto.createHash('md5').update(args.join('')).digest('hex'); +export function isUuid(value) { + return validate(value); } diff --git a/lib/dynamicData.ts b/lib/data.ts similarity index 100% rename from lib/dynamicData.ts rename to lib/data.ts diff --git a/lib/date.js b/lib/date.js index 526354b38..bf5dd90a3 100644 --- a/lib/date.js +++ b/lib/date.js @@ -26,10 +26,20 @@ import { differenceInCalendarMonths, differenceInCalendarYears, format, - parseISO, + max, + min, + isDate, } from 'date-fns'; import { getDateLocale } from 'lib/lang'; +const dateFuncs = { + minute: [differenceInMinutes, addMinutes, startOfMinute], + hour: [differenceInHours, addHours, startOfHour], + day: [differenceInCalendarDays, addDays, startOfDay], + month: [differenceInCalendarMonths, addMonths, startOfMonth], + year: [differenceInCalendarYears, addYears, startOfYear], +}; + export function getTimezone() { return moment.tz.guess(); } @@ -43,11 +53,19 @@ export function parseDateRange(value, locale = 'en-US') { return value; } - if (value?.startsWith?.('range')) { - const [, startAt, endAt] = value.split(':'); + if (value === 'all') { + return { + startDate: new Date(0), + endDate: new Date(1), + value, + }; + } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); + if (value?.startsWith?.('range')) { + const [, startTime, endTime] = value.split(':'); + + const startDate = new Date(+startTime); + const endDate = new Date(+endTime); return { ...getDateRangeValues(startDate, endDate), @@ -148,17 +166,34 @@ export function parseDateRange(value, locale = 'en-US') { } } -export function getDateRangeValues(startDate, endDate) { - let unit = 'year'; - if (differenceInHours(endDate, startDate) <= 48) { - unit = 'hour'; +export function getAllowedUnits(startDate, endDate) { + const units = ['minute', 'hour', 'day', 'month', 'year']; + const minUnit = getMinimumUnit(startDate, endDate); + const index = units.indexOf(minUnit); + + return index >= 0 ? units.splice(index) : []; +} + +export function getMinimumUnit(startDate, endDate) { + if (differenceInMinutes(endDate, startDate) <= 60) { + return 'minute'; + } else if (differenceInHours(endDate, startDate) <= 48) { + return 'hour'; } else if (differenceInCalendarDays(endDate, startDate) <= 90) { - unit = 'day'; + return 'day'; } else if (differenceInCalendarMonths(endDate, startDate) <= 24) { - unit = 'month'; + return 'month'; } - return { startDate: startOfDay(startDate), endDate: endOfDay(endDate), unit }; + return 'year'; +} + +export function getDateRangeValues(startDate, endDate) { + return { + startDate: startOfDay(startDate), + endDate: endOfDay(endDate), + unit: getMinimumUnit(startDate, endDate), + }; } export function getDateFromString(str) { @@ -174,14 +209,6 @@ export function getDateFromString(str) { return new Date(year, month - 1, day); } -const dateFuncs = { - minute: [differenceInMinutes, addMinutes, startOfMinute], - hour: [differenceInHours, addHours, startOfHour], - day: [differenceInCalendarDays, addDays, startOfDay], - month: [differenceInCalendarMonths, addMonths, startOfMonth], - year: [differenceInCalendarYears, addYears, startOfYear], -}; - export function getDateArray(data, startDate, endDate, unit) { const arr = []; const [diff, add, normalize] = dateFuncs[unit]; @@ -227,3 +254,11 @@ export function dateFormat(date, str, locale = 'en-US') { locale: getDateLocale(locale), }); } + +export function maxDate(...args) { + return max(args.filter(n => isDate(n))); +} + +export function minDate(...args) { + return min(args.filter(n => isDate(n))); +} diff --git a/lib/db.js b/lib/db.js index 19e46a3da..750cdec07 100644 --- a/lib/db.js +++ b/lib/db.js @@ -35,3 +35,7 @@ export async function runQuery(queries) { return queries[CLICKHOUSE](); } } + +export function notImplemented() { + throw new Error('Not implemented.'); +} diff --git a/lib/detect.ts b/lib/detect.ts index 2597739bb..9c1e1fa49 100644 --- a/lib/detect.ts +++ b/lib/detect.ts @@ -1,5 +1,5 @@ import path from 'path'; -import requestIp from 'request-ip'; +import { getClientIp } from 'request-ip'; import { browserName, detectOS } from 'detect-browser'; import isLocalhost from 'is-localhost-ip'; import maxmind from 'maxmind'; @@ -25,7 +25,7 @@ export function getIpAddress(req) { return req.headers['cf-connecting-ip']; } - return requestIp.getClientIp(req); + return getClientIp(req); } export function getDevice(screen, os) { @@ -62,6 +62,14 @@ export async function getLocation(ip, req) { return; } + // Cloudflare headers + if (req.headers['cf-ipcountry']) { + return { + country: req.headers['cf-ipcountry'], + }; + } + + // Vercel headers if (req.headers['x-vercel-ip-country']) { const country = req.headers['x-vercel-ip-country']; const region = req.headers['x-vercel-ip-country-region']; diff --git a/lib/kafka.ts b/lib/kafka.ts index 8f5bb87f0..103268882 100644 --- a/lib/kafka.ts +++ b/lib/kafka.ts @@ -61,7 +61,7 @@ async function getProducer(): Promise { return producer; } -function getDateFormat(date, format?): string { +function getDateFormat(date: Date, format?: string): string { return dateFormat(date, format ? format : 'UTC:yyyy-mm-dd HH:MM:ss'); } diff --git a/lib/load.ts b/lib/load.ts new file mode 100644 index 000000000..d980f8e96 --- /dev/null +++ b/lib/load.ts @@ -0,0 +1,51 @@ +import cache from 'lib/cache'; +import { getSession, getUserById, getWebsiteById } from 'queries'; +import { User, Website, Session } from '@prisma/client'; + +export async function loadWebsite(websiteId: string): Promise { + let website; + + if (cache.enabled) { + website = await cache.fetchWebsite(websiteId); + } else { + website = await getWebsiteById(websiteId); + } + + if (!website || website.deletedAt) { + return null; + } + + return website; +} + +export async function loadSession(sessionId: string): Promise { + let session; + + if (cache.enabled) { + session = await cache.fetchSession(sessionId); + } else { + session = await getSession(sessionId); + } + + if (!session) { + return null; + } + + return session; +} + +export async function loadUser(userId: string): Promise { + let user; + + if (cache.enabled) { + user = await cache.fetchUser(userId); + } else { + user = await getUserById(userId); + } + + if (!user || user.deletedAt) { + return null; + } + + return user; +} diff --git a/lib/middleware.ts b/lib/middleware.ts index 1fd13b095..414cab239 100644 --- a/lib/middleware.ts +++ b/lib/middleware.ts @@ -7,13 +7,12 @@ import { } from 'next-basics'; import debug from 'debug'; import cors from 'cors'; -import { validate } from 'uuid'; import redis from '@umami/redis-client'; import { findSession } from 'lib/session'; import { getAuthToken, parseShareToken } from 'lib/auth'; -import { secret } from 'lib/crypto'; +import { secret, isUuid } from 'lib/crypto'; import { ROLES } from 'lib/constants'; -import { getUser } from '../queries'; +import { getUserById } from '../queries'; import { NextApiRequestCollect } from 'pages/api/send'; const log = debug('umami:middleware'); @@ -53,8 +52,8 @@ export const useAuth = createMiddleware(async (req, res, next) => { let user = null; const { userId, authKey } = payload || {}; - if (validate(userId)) { - user = await getUser({ id: userId }); + if (isUuid(userId)) { + user = await getUserById(userId); } else if (redis.enabled && authKey) { user = await redis.get(authKey); } @@ -73,5 +72,6 @@ export const useAuth = createMiddleware(async (req, res, next) => { } (req as any).auth = { user, token, shareToken, authKey }; + next(); }); diff --git a/lib/prisma.ts b/lib/prisma.ts index 875f58975..08309e311 100644 --- a/lib/prisma.ts +++ b/lib/prisma.ts @@ -1,7 +1,6 @@ import prisma from '@umami/prisma-client'; import moment from 'moment-timezone'; import { MYSQL, POSTGRESQL, getDatabaseType } from 'lib/db'; -import { getDynamicDataType } from './dynamicData'; import { FILTER_COLUMNS } from './constants'; const MYSQL_DATE_FORMATS = { @@ -20,19 +19,7 @@ const POSTGRESQL_DATE_FORMATS = { year: 'YYYY-01-01', }; -function toUuid(): string { - const db = getDatabaseType(process.env.DATABASE_URL); - - if (db === POSTGRESQL) { - return '::uuid'; - } - - if (db === MYSQL) { - return ''; - } -} - -function getAddMinutesQuery(field: string, minutes: number) { +function getAddMinutesQuery(field: string, minutes: number): string { const db = getDatabaseType(process.env.DATABASE_URL); if (db === POSTGRESQL) { @@ -45,7 +32,7 @@ function getAddMinutesQuery(field: string, minutes: number) { } function getDateQuery(field: string, unit: string, timezone?: string): string { - const db = getDatabaseType(process.env.DATABASE_URL); + const db = getDatabaseType(); if (db === POSTGRESQL) { if (timezone) { @@ -65,8 +52,8 @@ function getDateQuery(field: string, unit: string, timezone?: string): string { } } -function getTimestampInterval(field: string): string { - const db = getDatabaseType(process.env.DATABASE_URL); +function getTimestampIntervalQuery(field: string): string { + const db = getDatabaseType(); if (db === POSTGRESQL) { return `floor(extract(epoch from max(${field}) - min(${field})))`; @@ -77,54 +64,13 @@ function getTimestampInterval(field: string): string { } } -function getEventDataFilterQuery( - filters: { - eventKey?: string; - eventValue?: string | number | boolean | Date; - }[], - params: any[], -) { - const query = filters.reduce((ac, cv) => { - const type = getDynamicDataType(cv.eventValue); - - let value = cv.eventValue; - - ac.push(`and (event_key = $${params.length + 1}`); - params.push(cv.eventKey); - - switch (type) { - case 'number': - ac.push(`and number_value = $${params.length + 1})`); - params.push(value); - break; - case 'string': - ac.push(`and string_value = $${params.length + 1})`); - params.push(decodeURIComponent(cv.eventValue as string)); - break; - case 'boolean': - ac.push(`and string_value = $${params.length + 1})`); - params.push(decodeURIComponent(cv.eventValue as string)); - value = cv ? 'true' : 'false'; - break; - case 'date': - ac.push(`and date_value = $${params.length + 1})`); - params.push(cv.eventValue); - break; - } - - return ac; - }, []); - - return query.join('\n'); -} - function getFilterQuery(filters = {}, params = []): string { const query = Object.keys(filters).reduce((arr, key) => { const filter = filters[key]; if (filter !== undefined) { const column = FILTER_COLUMNS[key] || key; - arr.push(`and ${column}=$${params.length + 1}`); + arr.push(`and ${column}={{${key}}}`); params.push(decodeURIComponent(filter)); } @@ -134,53 +80,6 @@ function getFilterQuery(filters = {}, params = []): string { return query.join('\n'); } -function getFunnelQuery( - urls: string[], - windowMinutes: number, -): { - levelQuery: string; - sumQuery: string; - urlFilterQuery: string; -} { - const initParamLength = 3; - - return urls.reduce( - (pv, cv, i) => { - const levelNumber = i + 1; - const start = i > 0 ? ',' : ''; - - if (levelNumber >= 2) { - pv.levelQuery += `\n - , level${levelNumber} AS ( - select cl.*, - l0.created_at level_${levelNumber}_created_at, - l0.url_path as level_${levelNumber}_url - from level${i} cl - left join website_event l0 - on cl.session_id = l0.session_id - and l0.created_at between cl.level_${i}_created_at - and ${getAddMinutesQuery(`cl.level_${i}_created_at`, windowMinutes)} - and l0.referrer_path = $${i + initParamLength} - and l0.url_path = $${levelNumber + initParamLength} - and created_at between $2 and $3 - and website_id = $1${toUuid()} - )`; - } - - pv.sumQuery += `\n${start}SUM(CASE WHEN level_${levelNumber}_url is not null THEN 1 ELSE 0 END) AS level${levelNumber}`; - - pv.urlFilterQuery += `\n${start}$${levelNumber + initParamLength} `; - - return pv; - }, - { - levelQuery: '', - sumQuery: '', - urlFilterQuery: '', - }, - ); -} - function parseFilters( filters: { [key: string]: any } = {}, params = [], @@ -197,27 +96,30 @@ function parseFilters( }; } -async function rawQuery(query: string, params: never[] = []): Promise { - const db = getDatabaseType(process.env.DATABASE_URL); +async function rawQuery(sql: string, data: object): Promise { + const db = getDatabaseType(); + const params = []; if (db !== POSTGRESQL && db !== MYSQL) { return Promise.reject(new Error('Unknown database.')); } - const sql = db === MYSQL ? query.replace(/\$[0-9]+/g, '?') : query; + const query = sql?.replaceAll(/\{\{\s*(\w+)(::\w+)?\s*}}/g, (...args) => { + const [, name, type] = args; + params.push(data[name]); - return prisma.rawQuery(sql, params); + return db === MYSQL ? '?' : `$${params.length}${type ?? ''}`; + }); + + return prisma.rawQuery(query, params); } export default { ...prisma, getAddMinutesQuery, getDateQuery, - getTimestampInterval, + getTimestampIntervalQuery, getFilterQuery, - getFunnelQuery, - getEventDataFilterQuery, - toUuid, parseFilters, rawQuery, }; diff --git a/lib/query.ts b/lib/query.ts index 4ce18b091..88ce62d4c 100644 --- a/lib/query.ts +++ b/lib/query.ts @@ -1,51 +1,31 @@ -import cache from 'lib/cache'; -import { getWebsite, getSession, getUser } from 'queries'; -import { User, Website, Session } from '@prisma/client'; +import { NextApiRequest } from 'next'; +import { getAllowedUnits, getMinimumUnit } from './date'; +import { getWebsiteDateRange } from '../queries'; -export async function loadWebsite(websiteId: string): Promise { - let website; +export async function parseDateRangeQuery(req: NextApiRequest) { + const { id: websiteId, startAt, endAt, unit } = req.query; - if (cache.enabled) { - website = await cache.fetchWebsite(websiteId); - } else { - website = await getWebsite({ id: websiteId }); + // All-time + if (+startAt === 0 && +endAt === 1) { + const result = await getWebsiteDateRange(websiteId as string); + const { min, max } = result[0]; + const startDate = new Date(min); + const endDate = new Date(max); + + return { + startDate, + endDate, + unit: getMinimumUnit(startDate, endDate), + }; } - if (!website || website.deletedAt) { - return null; - } + const startDate = new Date(+startAt); + const endDate = new Date(+endAt); + const minUnit = getMinimumUnit(startDate, endDate); - return website; -} - -export async function loadSession(sessionId: string): Promise { - let session; - - if (cache.enabled) { - session = await cache.fetchSession(sessionId); - } else { - session = await getSession({ id: sessionId }); - } - - if (!session) { - return null; - } - - return session; -} - -export async function loadUser(userId: string): Promise { - let user; - - if (cache.enabled) { - user = await cache.fetchUser(userId); - } else { - user = await getUser({ id: userId }); - } - - if (!user || user.deletedAt) { - return null; - } - - return user; + return { + startDate, + endDate, + unit: (getAllowedUnits(startDate, endDate).includes(unit as string) ? unit : minUnit) as string, + }; } diff --git a/lib/session.ts b/lib/session.ts index 29ff694f6..5eb7398a9 100644 --- a/lib/session.ts +++ b/lib/session.ts @@ -1,11 +1,10 @@ -import { secret, uuid } from 'lib/crypto'; +import { secret, uuid, isUuid } from 'lib/crypto'; import { getClientInfo, getJsonBody } from 'lib/detect'; import { parseToken } from 'next-basics'; import { CollectRequestBody, NextApiRequestCollect } from 'pages/api/send'; import { createSession } from 'queries'; -import { validate } from 'uuid'; import cache from './cache'; -import { loadSession, loadWebsite } from './query'; +import { loadSession, loadWebsite } from './load'; export async function findSession(req: NextApiRequestCollect) { const { payload } = getJsonBody(req); @@ -30,7 +29,13 @@ export async function findSession(req: NextApiRequestCollect) { // Verify payload const { website: websiteId, hostname, screen, language } = payload; - if (!validate(websiteId)) { + // Check the hostname value for legality to eliminate dirty data + const validHostnameRegex = /^[\w-.]+$/; + if (!validHostnameRegex.test(hostname)) { + throw new Error('Invalid hostname.'); + } + + if (!isUuid(websiteId)) { throw new Error('Invalid website ID.'); } diff --git a/lib/sql.ts b/lib/sql.ts new file mode 100644 index 000000000..e69de29bb diff --git a/lib/types.ts b/lib/types.ts index 2e1ed986c..7c91ec4f7 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -137,3 +137,10 @@ export interface RealtimeUpdate { events: any[]; timestamp: number; } + +export interface DateRange { + startDate: Date; + endDate: Date; + unit: string; + value: string; +} diff --git a/next.config.js b/next.config.js index 0778f979e..2165a6e01 100644 --- a/next.config.js +++ b/next.config.js @@ -74,6 +74,7 @@ if (process.env.CLOUD_MODE && process.env.CLOUD_URL && process.env.DISABLE_LOGIN const config = { env: { currentVersion: pkg.version, + defaultLocale: process.env.DEFAULT_LOCALE, isProduction: process.env.NODE_ENV === 'production', }, basePath: process.env.BASE_PATH, diff --git a/package.json b/package.json index 78b15ee2a..868b3cdfb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "umami", - "version": "2.3.0", + "version": "2.4.1", "description": "A simple, fast, privacy-focused alternative to Google Analytics.", "author": "Mike Cao ", "license": "MIT", @@ -60,7 +60,7 @@ ], "dependencies": { "@fontsource/inter": "^4.5.15", - "@prisma/client": "4.15.0", + "@prisma/client": "5.0.0", "@tanstack/react-query": "^4.16.1", "@umami/prisma-client": "^0.2.0", "@umami/redis-client": "^0.5.0", @@ -90,7 +90,7 @@ "maxmind": "^4.3.6", "moment-timezone": "^0.5.35", "next": "13.3.1", - "next-basics": "^0.31.0", + "next-basics": "^0.35.0", "node-fetch": "^3.2.8", "npm-run-all": "^4.1.5", "react": "^18.2.0", @@ -107,7 +107,7 @@ "semver": "^7.5.2", "thenby": "^1.3.4", "timezone-support": "^2.0.2", - "uuid": "^8.3.2", + "uuid": "^9.0.0", "yup": "^0.32.11", "zustand": "^4.3.8" }, @@ -141,7 +141,7 @@ "postcss-preset-env": "7.8.3", "postcss-rtlcss": "^4.0.1", "prettier": "^2.6.2", - "prisma": "4.15.0", + "prisma": "5.0.0", "prompts": "2.4.2", "rollup": "^2.70.1", "rollup-plugin-delete": "^2.0.0", diff --git a/pages/api/auth/login.ts b/pages/api/auth/login.ts index 64c2c26d8..af2069387 100644 --- a/pages/api/auth/login.ts +++ b/pages/api/auth/login.ts @@ -9,7 +9,7 @@ import { methodNotAllowed, } from 'next-basics'; import redis from '@umami/redis-client'; -import { getUser } from 'queries'; +import { getUserByUsername } from 'queries'; import { secret } from 'lib/crypto'; import { NextApiRequestQueryBody, User } from 'lib/types'; import { setAuthKey } from 'lib/auth'; @@ -37,7 +37,7 @@ export default async ( return badRequest(res); } - const user = await getUser({ username }, { includePassword: true }); + const user = await getUserByUsername(username, { includePassword: true }); if (user && checkPassword(password, user.password)) { if (redis.enabled) { diff --git a/pages/api/event-data/events.ts b/pages/api/event-data/events.ts new file mode 100644 index 000000000..1d74c3d24 --- /dev/null +++ b/pages/api/event-data/events.ts @@ -0,0 +1,39 @@ +import { canViewWebsite } from 'lib/auth'; +import { useCors, useAuth } from 'lib/middleware'; +import { NextApiRequestQueryBody } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { ok, methodNotAllowed, unauthorized } from 'next-basics'; +import { getEventDataEvents } from 'queries'; + +export interface EventDataFieldsRequestBody { + websiteId: string; + dateRange: { + startDate: string; + endDate: string; + }; +} + +export default async ( + req: NextApiRequestQueryBody, + res: NextApiResponse, +) => { + await useCors(req, res); + await useAuth(req, res); + + if (req.method === 'GET') { + const { websiteId, startAt, endAt, field, event } = req.query; + + if (!(await canViewWebsite(req.auth, websiteId))) { + return unauthorized(res); + } + + const data = await getEventDataEvents(websiteId, new Date(+startAt), new Date(+endAt), { + field, + event, + }); + + return ok(res, data); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/me/password.ts b/pages/api/me/password.ts index 70d8de5f8..f9f60fc53 100644 --- a/pages/api/me/password.ts +++ b/pages/api/me/password.ts @@ -9,7 +9,7 @@ import { forbidden, ok, } from 'next-basics'; -import { getUser, updateUser } from 'queries'; +import { getUserById, updateUser } from 'queries'; export interface UserPasswordRequestQuery { id: string; @@ -34,7 +34,7 @@ export default async ( const { id } = req.auth.user; if (req.method === 'POST') { - const user = await getUser({ id }, { includePassword: true }); + const user = await getUserById(id, { includePassword: true }); if (!checkPassword(currentPassword, user.password)) { return badRequest(res, 'Current password is incorrect'); diff --git a/pages/api/me/teams.ts b/pages/api/me/teams.ts new file mode 100644 index 000000000..366990163 --- /dev/null +++ b/pages/api/me/teams.ts @@ -0,0 +1,15 @@ +import { useCors } from 'lib/middleware'; +import { NextApiRequestQueryBody } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed } from 'next-basics'; +import userTeams from 'pages/api/users/[id]/teams'; + +export default async (req: NextApiRequestQueryBody, res: NextApiResponse) => { + await useCors(req, res); + + if (req.method === 'GET') { + return userTeams(req, res); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/me/websites.ts b/pages/api/me/websites.ts index dc9c0d62f..29f1e4311 100644 --- a/pages/api/me/websites.ts +++ b/pages/api/me/websites.ts @@ -1,21 +1,18 @@ import { useAuth, useCors } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; -import { methodNotAllowed, ok } from 'next-basics'; -import { getUserWebsites } from 'queries'; +import { methodNotAllowed } from 'next-basics'; + +import userWebsites from 'pages/api/users/[id]/websites'; export default async (req: NextApiRequestQueryBody, res: NextApiResponse) => { await useCors(req, res); await useAuth(req, res); - const { - user: { id: userId }, - } = req.auth; - if (req.method === 'GET') { - const websites = await getUserWebsites(userId); + req.query.id = req.auth.user.id; - return ok(res, websites); + return userWebsites(req, res); } return methodNotAllowed(res); diff --git a/pages/api/reports/[id].ts b/pages/api/reports/[id].ts index bcd22b4ee..85bc302c8 100644 --- a/pages/api/reports/[id].ts +++ b/pages/api/reports/[id].ts @@ -1,9 +1,9 @@ -import { canUpdateReport, canViewReport } from 'lib/auth'; +import { canUpdateReport, canViewReport, canDeleteReport } from 'lib/auth'; import { useAuth, useCors } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; import { methodNotAllowed, ok, unauthorized } from 'next-basics'; -import { getReportById, updateReport } from 'queries'; +import { getReportById, updateReport, deleteReport } from 'queries'; export interface ReportRequestQuery { id: string; @@ -24,50 +24,55 @@ export default async ( await useCors(req, res); await useAuth(req, res); + const { id: reportId } = req.query; + const { + user: { id: userId }, + } = req.auth; + if (req.method === 'GET') { - const { id: reportId } = req.query; + const report = await getReportById(reportId); - const data = await getReportById(reportId); - - if (!(await canViewReport(req.auth, data))) { + if (!(await canViewReport(req.auth, report))) { return unauthorized(res); } - data.parameters = JSON.parse(data.parameters); + report.parameters = JSON.parse(report.parameters); - return ok(res, data); + return ok(res, report); } if (req.method === 'POST') { - const { id: reportId } = req.query; - const { - user: { id: userId }, - } = req.auth; - const { websiteId, type, name, description, parameters } = req.body; - const data = await getReportById(reportId); + const report = await getReportById(reportId); - if (!(await canUpdateReport(req.auth, data))) { + if (!(await canUpdateReport(req.auth, report))) { return unauthorized(res); } - const result = await updateReport( - { - websiteId, - userId, - type, - name, - description, - parameters: JSON.stringify(parameters), - } as any, - { - id: reportId, - }, - ); + const result = await updateReport(reportId, { + websiteId, + userId, + type, + name, + description, + parameters: JSON.stringify(parameters), + } as any); return ok(res, result); } + if (req.method === 'DELETE') { + const report = await getReportById(reportId); + + if (!(await canDeleteReport(req.auth, report))) { + return unauthorized(res); + } + + await deleteReport(reportId); + + return ok(res); + } + return methodNotAllowed(res); }; diff --git a/pages/api/reports/funnel.ts b/pages/api/reports/funnel.ts index 1e1213264..33882e03f 100644 --- a/pages/api/reports/funnel.ts +++ b/pages/api/reports/funnel.ts @@ -3,7 +3,7 @@ import { useCors, useAuth } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; import { ok, methodNotAllowed, unauthorized } from 'next-basics'; -import { getPageviewFunnel } from 'queries'; +import { getFunnel } from 'queries'; export interface FunnelRequestBody { websiteId: string; @@ -41,7 +41,7 @@ export default async ( return unauthorized(res); } - const data = await getPageviewFunnel(websiteId, { + const data = await getFunnel(websiteId, { startDate: new Date(startDate), endDate: new Date(endDate), urls, diff --git a/pages/api/reports/index.ts b/pages/api/reports/index.ts index b2c5da9ed..c856b5659 100644 --- a/pages/api/reports/index.ts +++ b/pages/api/reports/index.ts @@ -1,10 +1,10 @@ -import { uuid } from 'lib/crypto'; import { useAuth, useCors } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; import { methodNotAllowed, ok, unauthorized } from 'next-basics'; -import { createReport, getReports } from 'queries'; +import { createReport, getWebsiteReports } from 'queries'; import { canViewWebsite } from 'lib/auth'; +import { uuid } from 'lib/crypto'; export interface ReportRequestBody { websiteId: string; @@ -35,7 +35,7 @@ export default async ( return unauthorized(res); } - const data = await getReports({ websiteId }); + const data = await getWebsiteReports(websiteId); return ok(res, data); } diff --git a/pages/api/reports/insights.ts b/pages/api/reports/insights.ts new file mode 100644 index 000000000..dba11953c --- /dev/null +++ b/pages/api/reports/insights.ts @@ -0,0 +1,51 @@ +import { canViewWebsite } from 'lib/auth'; +import { useCors, useAuth } from 'lib/middleware'; +import { NextApiRequestQueryBody } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { ok, methodNotAllowed, unauthorized } from 'next-basics'; +import { getInsights } from 'queries'; + +export interface InsightsRequestBody { + websiteId: string; + dateRange: { + startDate: string; + endDate: string; + }; + fields: string[]; + filters: string[]; + groups: string[]; +} + +export default async ( + req: NextApiRequestQueryBody, + res: NextApiResponse, +) => { + await useCors(req, res); + await useAuth(req, res); + + if (req.method === 'POST') { + const { + websiteId, + dateRange: { startDate, endDate }, + fields, + filters, + groups, + } = req.body; + + if (!(await canViewWebsite(req.auth, websiteId))) { + return unauthorized(res); + } + + const data = await getInsights(websiteId, { + startDate: new Date(startDate), + endDate: new Date(endDate), + fields, + filters, + groups, + }); + + return ok(res, data); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/send.ts b/pages/api/send.ts index ec5f55b3b..f90ded772 100644 --- a/pages/api/send.ts +++ b/pages/api/send.ts @@ -1,7 +1,7 @@ import isbot from 'isbot'; import ipaddr from 'ipaddr.js'; import { createToken, ok, send, badRequest, forbidden } from 'next-basics'; -import { saveEvent } from 'queries'; +import { saveEvent, saveSessionData } from 'queries'; import { useCors, useSession } from 'lib/middleware'; import { getJsonBody, getIpAddress } from 'lib/detect'; import { secret } from 'lib/crypto'; @@ -9,7 +9,6 @@ import { NextApiRequest, NextApiResponse } from 'next'; import { Resolver } from 'dns/promises'; import { CollectionType } from 'lib/types'; import { COLLECTION_TYPE } from 'lib/constants'; -import { saveSessionData } from 'queries/analytics/session/saveSessionData'; export interface CollectRequestBody { payload: { @@ -55,7 +54,11 @@ export default async (req: NextApiRequestCollect, res: NextApiResponse) => { const { type, payload } = getJsonBody(req); - validateBody(res, { type, payload }); + const error = validateBody({ type, payload }); + + if (error) { + return badRequest(res, error); + } if (await hasBlockedIp(req)) { return forbidden(res); @@ -115,17 +118,19 @@ export default async (req: NextApiRequestCollect, res: NextApiResponse) => { return send(res, token); }; -function validateBody(res: NextApiResponse, { type, payload }: CollectRequestBody) { - const { data } = payload; - - // Validate type - if (type !== COLLECTION_TYPE.event && type !== COLLECTION_TYPE.identify) { - return badRequest(res, 'Wrong payload type.'); +function validateBody({ type, payload }: CollectRequestBody) { + if (!type || !payload) { + return 'Invalid payload.'; } - // Validate eventData is JSON + if (type !== COLLECTION_TYPE.event && type !== COLLECTION_TYPE.identify) { + return 'Wrong payload type.'; + } + + const { data } = payload; + if (data && !(typeof data === 'object' && !Array.isArray(data))) { - return badRequest(res, 'Invalid event data.'); + return 'Invalid event data.'; } } diff --git a/pages/api/share/[id].ts b/pages/api/share/[id].ts index b5511f2de..0592d2167 100644 --- a/pages/api/share/[id].ts +++ b/pages/api/share/[id].ts @@ -2,7 +2,7 @@ import { NextApiRequestQueryBody } from 'lib/types'; import { secret } from 'lib/crypto'; import { NextApiResponse } from 'next'; import { createToken, methodNotAllowed, notFound, ok } from 'next-basics'; -import { getWebsite } from 'queries'; +import { getWebsiteByShareId } from 'queries'; export interface ShareRequestQuery { id: string; @@ -20,7 +20,7 @@ export default async ( const { id: shareId } = req.query; if (req.method === 'GET') { - const website = await getWebsite({ shareId }); + const website = await getWebsiteByShareId(shareId); if (website) { const data = { websiteId: website.id }; diff --git a/pages/api/teams/[id]/index.ts b/pages/api/teams/[id]/index.ts index 1c7dbb66e..7fb664a01 100644 --- a/pages/api/teams/[id]/index.ts +++ b/pages/api/teams/[id]/index.ts @@ -4,7 +4,7 @@ import { canDeleteTeam, canUpdateTeam, canViewTeam } from 'lib/auth'; import { useAuth } from 'lib/middleware'; import { NextApiResponse } from 'next'; import { methodNotAllowed, ok, unauthorized } from 'next-basics'; -import { deleteTeam, getTeam, updateTeam } from 'queries'; +import { deleteTeam, getTeamById, updateTeam } from 'queries'; export interface TeamRequestQuery { id: string; @@ -28,7 +28,7 @@ export default async ( return unauthorized(res); } - const user = await getTeam({ id: teamId }); + const user = await getTeamById(teamId, { includeTeamUser: true }); return ok(res, user); } @@ -41,7 +41,7 @@ export default async ( const { name, accessCode } = req.body; const data = { name, accessCode }; - const updated = await updateTeam(data, { id: teamId }); + const updated = await updateTeam(teamId, data); return ok(res, updated); } diff --git a/pages/api/teams/[id]/users/index.ts b/pages/api/teams/[id]/users/index.ts index af01d0ce0..c73da6836 100644 --- a/pages/api/teams/[id]/users/index.ts +++ b/pages/api/teams/[id]/users/index.ts @@ -3,7 +3,7 @@ import { useAuth } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; import { badRequest, methodNotAllowed, ok, unauthorized } from 'next-basics'; -import { createTeamUser, getTeamUsers, getUser } from 'queries'; +import { createTeamUser, getTeamUsers, getUserByUsername } from 'queries'; export interface TeamUserRequestQuery { id: string; @@ -40,7 +40,7 @@ export default async ( const { email, roleId: roleId } = req.body; // Check for User - const user = await getUser({ username: email }); + const user = await getUserByUsername(email); if (!user) { return badRequest(res, 'The User does not exists.'); diff --git a/pages/api/teams/join.ts b/pages/api/teams/join.ts index 17c9bf324..ce7367a0c 100644 --- a/pages/api/teams/join.ts +++ b/pages/api/teams/join.ts @@ -3,7 +3,7 @@ import { NextApiRequestQueryBody } from 'lib/types'; import { useAuth } from 'lib/middleware'; import { NextApiResponse } from 'next'; import { methodNotAllowed, ok, notFound } from 'next-basics'; -import { createTeamUser, getTeam, getTeamUser } from 'queries'; +import { createTeamUser, getTeamByAccessCode, getTeamUser } from 'queries'; import { ROLES } from 'lib/constants'; export interface TeamsJoinRequestBody { @@ -19,7 +19,7 @@ export default async ( if (req.method === 'POST') { const { accessCode } = req.body; - const team = await getTeam({ accessCode }); + const team = await getTeamByAccessCode(accessCode); if (!team) { return notFound(res, 'message.team-not-found'); diff --git a/pages/api/users/[id]/index.ts b/pages/api/users/[id]/index.ts index a4ab05fff..e09b1b5f8 100644 --- a/pages/api/users/[id]/index.ts +++ b/pages/api/users/[id]/index.ts @@ -3,7 +3,7 @@ import { canDeleteUser, canUpdateUser, canViewUser } from 'lib/auth'; import { useAuth } from 'lib/middleware'; import { NextApiResponse } from 'next'; import { badRequest, hashPassword, methodNotAllowed, ok, unauthorized } from 'next-basics'; -import { deleteUser, getUser, updateUser } from 'queries'; +import { deleteUser, getUserById, getUserByUsername, updateUser } from 'queries'; export interface UserRequestQuery { id: string; @@ -31,7 +31,7 @@ export default async ( return unauthorized(res); } - const user = await getUser({ id }); + const user = await getUserById(id); return ok(res, user); } @@ -43,7 +43,7 @@ export default async ( const { username, password, role } = req.body; - const user = await getUser({ id }); + const user = await getUserById(id); const data: any = {}; @@ -62,9 +62,9 @@ export default async ( // Check when username changes if (data.username && user.username !== data.username) { - const userByUsername = await getUser({ username }); + const user = await getUserByUsername(username); - if (userByUsername) { + if (user) { return badRequest(res, 'User already exists'); } } diff --git a/pages/api/users/[id]/teams.ts b/pages/api/users/[id]/teams.ts new file mode 100644 index 000000000..c31b98ca7 --- /dev/null +++ b/pages/api/users/[id]/teams.ts @@ -0,0 +1,34 @@ +import { useAuth, useCors } from 'lib/middleware'; +import { NextApiRequestQueryBody } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed, ok, unauthorized } from 'next-basics'; +import { getUserTeams } from 'queries'; + +export interface UserWebsitesRequestBody { + name: string; + domain: string; + shareId: string; +} + +export default async ( + req: NextApiRequestQueryBody, + res: NextApiResponse, +) => { + await useCors(req, res); + await useAuth(req, res); + + const { user } = req.auth; + const { id: userId } = req.query; + + if (req.method === 'GET') { + if (!user.isAdmin && user.id !== userId) { + return unauthorized(res); + } + + const teams = await getUserTeams(userId); + + return ok(res, teams); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/users/[id]/websites.ts b/pages/api/users/[id]/websites.ts index de4a3a3a6..e94094a45 100644 --- a/pages/api/users/[id]/websites.ts +++ b/pages/api/users/[id]/websites.ts @@ -16,7 +16,6 @@ export default async ( ) => { await useCors(req, res); await useAuth(req, res); - const { user } = req.auth; const { id: userId } = req.query; @@ -25,7 +24,9 @@ export default async ( return unauthorized(res); } - const websites = await getUserWebsites(userId); + const { includeTeams } = req.query; + + const websites = await getUserWebsites(userId, { includeTeams }); return ok(res, websites); } diff --git a/pages/api/users/index.ts b/pages/api/users/index.ts index c6103c35b..6f6c205f4 100644 --- a/pages/api/users/index.ts +++ b/pages/api/users/index.ts @@ -5,7 +5,7 @@ import { useAuth } from 'lib/middleware'; import { NextApiRequestQueryBody, Role, User } from 'lib/types'; import { NextApiResponse } from 'next'; import { badRequest, hashPassword, methodNotAllowed, ok, unauthorized } from 'next-basics'; -import { createUser, getUser, getUsers } from 'queries'; +import { createUser, getUserByUsername, getUsers } from 'queries'; export interface UsersRequestBody { username: string; @@ -37,7 +37,7 @@ export default async ( const { username, password, role, id } = req.body; - const existingUser = await getUser({ username }, { showDeleted: true }); + const existingUser = await getUserByUsername(username, { showDeleted: true }); if (existingUser) { return badRequest(res, 'User already exists'); diff --git a/pages/api/websites/[id]/daterange.ts b/pages/api/websites/[id]/daterange.ts new file mode 100644 index 000000000..dc0435600 --- /dev/null +++ b/pages/api/websites/[id]/daterange.ts @@ -0,0 +1,32 @@ +import { WebsiteActive, NextApiRequestQueryBody } from 'lib/types'; +import { canViewWebsite } from 'lib/auth'; +import { useAuth, useCors } from 'lib/middleware'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed, ok, unauthorized } from 'next-basics'; +import { getWebsiteDateRange } from 'queries'; + +export interface WebsiteDateRangeRequestQuery { + id: string; +} + +export default async ( + req: NextApiRequestQueryBody, + res: NextApiResponse, +) => { + await useCors(req, res); + await useAuth(req, res); + + const { id: websiteId } = req.query; + + if (req.method === 'GET') { + if (!(await canViewWebsite(req.auth, websiteId))) { + return unauthorized(res); + } + + const result = await getWebsiteDateRange(websiteId); + + return ok(res, result); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/websites/[id]/events.ts b/pages/api/websites/[id]/events.ts index 12473da0e..b9e3ac71c 100644 --- a/pages/api/websites/[id]/events.ts +++ b/pages/api/websites/[id]/events.ts @@ -5,6 +5,7 @@ import moment from 'moment-timezone'; import { NextApiResponse } from 'next'; import { badRequest, methodNotAllowed, ok, unauthorized } from 'next-basics'; import { getEventMetrics } from 'queries'; +import { parseDateRangeQuery } from 'lib/query'; const unitTypes = ['year', 'month', 'hour', 'day']; @@ -25,7 +26,8 @@ export default async ( await useCors(req, res); await useAuth(req, res); - const { id: websiteId, startAt, endAt, unit, timezone, url, eventName } = req.query; + const { id: websiteId, timezone, url, eventName } = req.query; + const { startDate, endDate, unit } = await parseDateRangeQuery(req); if (req.method === 'GET') { if (!(await canViewWebsite(req.auth, websiteId))) { @@ -35,8 +37,6 @@ export default async ( if (!moment.tz.zone(timezone) || !unitTypes.includes(unit)) { return badRequest(res); } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); const events = await getEventMetrics(websiteId, { startDate, diff --git a/pages/api/websites/[id]/index.ts b/pages/api/websites/[id]/index.ts index 1d7e4ac39..3d053d0eb 100644 --- a/pages/api/websites/[id]/index.ts +++ b/pages/api/websites/[id]/index.ts @@ -3,7 +3,7 @@ import { methodNotAllowed, ok, serverError, unauthorized } from 'next-basics'; import { Website, NextApiRequestQueryBody } from 'lib/types'; import { canViewWebsite, canUpdateWebsite, canDeleteWebsite } from 'lib/auth'; import { useAuth, useCors } from 'lib/middleware'; -import { deleteWebsite, getWebsite, updateWebsite } from 'queries'; +import { deleteWebsite, getWebsiteById, updateWebsite } from 'queries'; import { SHARE_ID_REGEX } from 'lib/constants'; export interface WebsiteRequestQuery { @@ -30,7 +30,7 @@ export default async ( return unauthorized(res); } - const website = await getWebsite({ id: websiteId }); + const website = await getWebsiteById(websiteId); return ok(res, website); } diff --git a/pages/api/websites/[id]/metrics.ts b/pages/api/websites/[id]/metrics.ts index 5cf818a05..37a046916 100644 --- a/pages/api/websites/[id]/metrics.ts +++ b/pages/api/websites/[id]/metrics.ts @@ -1,10 +1,11 @@ import { NextApiResponse } from 'next'; -import { methodNotAllowed, ok, unauthorized } from 'next-basics'; +import { badRequest, methodNotAllowed, ok, unauthorized } from 'next-basics'; import { WebsiteMetric, NextApiRequestQueryBody } from 'lib/types'; import { canViewWebsite } from 'lib/auth'; import { useAuth, useCors } from 'lib/middleware'; import { SESSION_COLUMNS, EVENT_COLUMNS, FILTER_COLUMNS } from 'lib/constants'; import { getPageviewMetrics, getSessionMetrics } from 'queries'; +import { parseDateRangeQuery } from 'lib/query'; export interface WebsiteMetricsRequestQuery { id: string; @@ -34,8 +35,6 @@ export default async ( const { id: websiteId, type, - startAt, - endAt, url, referrer, title, @@ -54,8 +53,7 @@ export default async ( return unauthorized(res); } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); + const { startDate, endDate } = await parseDateRangeQuery(req); if (SESSION_COLUMNS.includes(type)) { const column = FILTER_COLUMNS[type] || type; @@ -123,6 +121,8 @@ export default async ( return ok(res, data); } + + return badRequest(res); } return methodNotAllowed(res); diff --git a/pages/api/websites/[id]/pageviews.ts b/pages/api/websites/[id]/pageviews.ts index 9dfd22649..453c6733c 100644 --- a/pages/api/websites/[id]/pageviews.ts +++ b/pages/api/websites/[id]/pageviews.ts @@ -5,8 +5,7 @@ import { NextApiRequestQueryBody, WebsitePageviews } from 'lib/types'; import { canViewWebsite } from 'lib/auth'; import { useAuth, useCors } from 'lib/middleware'; import { getPageviewStats } from 'queries'; - -const unitTypes = ['year', 'month', 'hour', 'day']; +import { parseDateRangeQuery } from 'lib/query'; export interface WebsitePageviewRequestQuery { id: string; @@ -34,9 +33,6 @@ export default async ( const { id: websiteId, - startAt, - endAt, - unit, timezone, url, referrer, @@ -54,10 +50,9 @@ export default async ( return unauthorized(res); } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); + const { startDate, endDate, unit } = await parseDateRangeQuery(req); - if (!moment.tz.zone(timezone) || !unitTypes.includes(unit)) { + if (!moment.tz.zone(timezone)) { return badRequest(res); } diff --git a/pages/api/websites/[id]/reset.ts b/pages/api/websites/[id]/reset.ts index dc98c5913..23b5305db 100644 --- a/pages/api/websites/[id]/reset.ts +++ b/pages/api/websites/[id]/reset.ts @@ -1,5 +1,5 @@ import { NextApiRequestQueryBody } from 'lib/types'; -import { canViewWebsite } from 'lib/auth'; +import { canUpdateWebsite } from 'lib/auth'; import { useAuth, useCors } from 'lib/middleware'; import { NextApiResponse } from 'next'; import { methodNotAllowed, ok, unauthorized } from 'next-basics'; @@ -19,7 +19,7 @@ export default async ( const { id: websiteId } = req.query; if (req.method === 'POST') { - if (!(await canViewWebsite(req.auth, websiteId))) { + if (!(await canUpdateWebsite(req.auth, websiteId))) { return unauthorized(res); } diff --git a/pages/api/websites/[id]/stats.ts b/pages/api/websites/[id]/stats.ts index 1e2f2292b..3164913d9 100644 --- a/pages/api/websites/[id]/stats.ts +++ b/pages/api/websites/[id]/stats.ts @@ -1,8 +1,10 @@ +import { subMinutes, differenceInMinutes } from 'date-fns'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed, ok, unauthorized } from 'next-basics'; import { canViewWebsite } from 'lib/auth'; import { useAuth, useCors } from 'lib/middleware'; import { NextApiRequestQueryBody, WebsiteStats } from 'lib/types'; -import { NextApiResponse } from 'next'; -import { methodNotAllowed, ok, unauthorized } from 'next-basics'; +import { parseDateRangeQuery } from 'lib/query'; import { getWebsiteStats } from 'queries'; export interface WebsiteStatsRequestQuery { @@ -31,8 +33,6 @@ export default async ( const { id: websiteId, - startAt, - endAt, url, referrer, title, @@ -51,12 +51,10 @@ export default async ( return unauthorized(res); } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); - - const distance = endAt - startAt; - const prevStartDate = new Date(+startAt - distance); - const prevEndDate = new Date(+endAt - distance); + const { startDate, endDate } = await parseDateRangeQuery(req); + const diff = differenceInMinutes(endDate, startDate); + const prevStartDate = subMinutes(startDate, diff); + const prevEndDate = subMinutes(endDate, diff); const metrics = await getWebsiteStats(websiteId, { startDate, @@ -75,6 +73,7 @@ export default async ( city, }, }); + const prevPeriod = await getWebsiteStats(websiteId, { startDate: prevStartDate, endDate: prevEndDate, diff --git a/pages/api/websites/index.ts b/pages/api/websites/index.ts index 49797d080..c8b5aba29 100644 --- a/pages/api/websites/index.ts +++ b/pages/api/websites/index.ts @@ -4,7 +4,8 @@ import { useAuth, useCors } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; import { methodNotAllowed, ok, unauthorized } from 'next-basics'; -import { createWebsite, getUserWebsites } from 'queries'; +import { createWebsite } from 'queries'; +import userWebsites from 'pages/api/users/[id]/websites'; export interface WebsitesRequestBody { name: string; @@ -24,9 +25,9 @@ export default async ( } = req.auth; if (req.method === 'GET') { - const websites = await getUserWebsites(userId); + req.query.id = userId; - return ok(res, websites); + return userWebsites(req, res); } if (req.method === 'POST') { diff --git a/pages/reports/event-data.js b/pages/reports/insights.js similarity index 50% rename from pages/reports/event-data.js rename to pages/reports/insights.js index 4566b3201..45236e10e 100644 --- a/pages/reports/event-data.js +++ b/pages/reports/insights.js @@ -1,13 +1,13 @@ import AppLayout from 'components/layout/AppLayout'; -import EventDataReport from 'components/pages/reports/event-data/EventDataReport'; +import InsightsReport from 'components/pages/reports/insights/InsightsReport'; import { useMessages } from 'hooks'; export default function () { const { formatMessage, labels } = useMessages(); return ( - - + + ); } diff --git a/public/intl/country/es-ES.json b/public/intl/country/es-ES.json new file mode 100644 index 000000000..1e9f60dae --- /dev/null +++ b/public/intl/country/es-ES.json @@ -0,0 +1,251 @@ +{ + "AF": "Afganist\u00e1n", + "AL": "Albania", + "DE": "Alemania", + "AD": "Andorra", + "AO": "Angola", + "AI": "Anguila", + "AQ": "Ant\u00e1rtida", + "AG": "Antigua y Barbuda", + "SA": "Arabia Saud\u00ed", + "DZ": "Argelia", + "AR": "Argentina", + "AM": "Armenia", + "AW": "Aruba", + "AU": "Australia", + "AT": "Austria", + "AZ": "Azerbaiy\u00e1n", + "BS": "Bahamas", + "BD": "Banglad\u00e9s", + "BB": "Barbados", + "BH": "Bar\u00e9in", + "BE": "B\u00e9lgica", + "BZ": "Belice", + "BJ": "Ben\u00edn", + "BM": "Bermudas", + "BY": "Bielorrusia", + "BO": "Bolivia", + "BA": "Bosnia y Herzegovina", + "BW": "Botsuana", + "BR": "Brasil", + "BN": "Brun\u00e9i", + "BG": "Bulgaria", + "BF": "Burkina Faso", + "BI": "Burundi", + "BT": "But\u00e1n", + "CV": "Cabo Verde", + "KH": "Camboya", + "CM": "Camer\u00fan", + "CA": "Canad\u00e1", + "BQ": "Caribe neerland\u00e9s", + "QA": "Catar", + "TD": "Chad", + "CZ": "Chequia", + "CL": "Chile", + "CN": "China", + "CY": "Chipre", + "VA": "Ciudad del Vaticano", + "CO": "Colombia", + "KM": "Comoras", + "CG": "Congo", + "KP": "Corea del Norte", + "KR": "Corea del Sur", + "CR": "Costa Rica", + "CI": "C\u00f4te d\u2019Ivoire", + "HR": "Croacia", + "CU": "Cuba", + "CW": "Curazao", + "DK": "Dinamarca", + "DM": "Dominica", + "EC": "Ecuador", + "EG": "Egipto", + "SV": "El Salvador", + "AE": "Emiratos \u00c1rabes Unidos", + "ER": "Eritrea", + "SK": "Eslovaquia", + "SI": "Eslovenia", + "ES": "Espa\u00f1a", + "US": "Estados Unidos", + "EE": "Estonia", + "SZ": "Esuatini", + "ET": "Etiop\u00eda", + "PH": "Filipinas", + "FI": "Finlandia", + "FJ": "Fiyi", + "FR": "Francia", + "GA": "Gab\u00f3n", + "GM": "Gambia", + "GE": "Georgia", + "GH": "Ghana", + "GI": "Gibraltar", + "GD": "Granada", + "GR": "Grecia", + "GL": "Groenlandia", + "GP": "Guadalupe", + "GU": "Guam", + "GT": "Guatemala", + "GF": "Guayana Francesa", + "GG": "Guernsey", + "GN": "Guinea", + "GQ": "Guinea Ecuatorial", + "GW": "Guinea-Bis\u00e1u", + "GY": "Guyana", + "HT": "Hait\u00ed", + "HN": "Honduras", + "HU": "Hungr\u00eda", + "IN": "India", + "ID": "Indonesia", + "IQ": "Irak", + "IR": "Ir\u00e1n", + "IE": "Irlanda", + "BV": "Isla Bouvet", + "IM": "Isla de Man", + "CX": "Isla de Navidad", + "NF": "Isla Norfolk", + "IS": "Islandia", + "AX": "Islas \u00c5land", + "KY": "Islas Caim\u00e1n", + "CC": "Islas Cocos", + "CK": "Islas Cook", + "FO": "Islas Feroe", + "GS": "Islas Georgia del Sur y Sandwich del Sur", + "HM": "Islas Heard y McDonald", + "FK": "Islas Malvinas", + "MP": "Islas Marianas del Norte", + "MH": "Islas Marshall", + "UM": "Islas menores alejadas de EE. UU.", + "PN": "Islas Pitcairn", + "SB": "Islas Salom\u00f3n", + "TC": "Islas Turcas y Caicos", + "VG": "Islas V\u00edrgenes Brit\u00e1nicas", + "VI": "Islas V\u00edrgenes de EE. UU.", + "IL": "Israel", + "IT": "Italia", + "JM": "Jamaica", + "JP": "Jap\u00f3n", + "JE": "Jersey", + "JO": "Jordania", + "KZ": "Kazajist\u00e1n", + "KE": "Kenia", + "KG": "Kirguist\u00e1n", + "KI": "Kiribati", + "KW": "Kuwait", + "LA": "Laos", + "LS": "Lesoto", + "LV": "Letonia", + "LB": "L\u00edbano", + "LR": "Liberia", + "LY": "Libia", + "LI": "Liechtenstein", + "LT": "Lituania", + "LU": "Luxemburgo", + "MK": "Macedonia del Norte", + "MG": "Madagascar", + "MY": "Malasia", + "MW": "Malaui", + "MV": "Maldivas", + "ML": "Mali", + "MT": "Malta", + "MA": "Marruecos", + "MQ": "Martinica", + "MU": "Mauricio", + "MR": "Mauritania", + "YT": "Mayotte", + "MX": "M\u00e9xico", + "FM": "Micronesia", + "MD": "Moldavia", + "MC": "M\u00f3naco", + "MN": "Mongolia", + "ME": "Montenegro", + "MS": "Montserrat", + "MZ": "Mozambique", + "MM": "Myanmar (Birmania)", + "NA": "Namibia", + "NR": "Nauru", + "NP": "Nepal", + "NI": "Nicaragua", + "NE": "N\u00edger", + "NG": "Nigeria", + "NU": "Niue", + "NO": "Noruega", + "NC": "Nueva Caledonia", + "NZ": "Nueva Zelanda", + "OM": "Om\u00e1n", + "NL": "Pa\u00edses Bajos", + "PK": "Pakist\u00e1n", + "PW": "Palaos", + "PA": "Panam\u00e1", + "PG": "Pap\u00faa Nueva Guinea", + "PY": "Paraguay", + "PE": "Per\u00fa", + "PF": "Polinesia Francesa", + "PL": "Polonia", + "PT": "Portugal", + "PR": "Puerto Rico", + "HK": "RAE de Hong Kong (China)", + "MO": "RAE de Macao (China)", + "GB": "Reino Unido", + "CF": "Rep\u00fablica Centroafricana", + "CD": "Rep\u00fablica Democr\u00e1tica del Congo", + "DO": "Rep\u00fablica Dominicana", + "RE": "Reuni\u00f3n", + "RW": "Ruanda", + "RO": "Ruman\u00eda", + "RU": "Rusia", + "EH": "S\u00e1hara Occidental", + "WS": "Samoa", + "AS": "Samoa Americana", + "BL": "San Bartolom\u00e9", + "KN": "San Crist\u00f3bal y Nieves", + "SM": "San Marino", + "MF": "San Mart\u00edn", + "PM": "San Pedro y Miquel\u00f3n", + "VC": "San Vicente y las Granadinas", + "SH": "Santa Elena", + "LC": "Santa Luc\u00eda", + "ST": "Santo Tom\u00e9 y Pr\u00edncipe", + "SN": "Senegal", + "RS": "Serbia", + "SC": "Seychelles", + "SL": "Sierra Leona", + "SG": "Singapur", + "SX": "Sint Maarten", + "SY": "Siria", + "SO": "Somalia", + "LK": "Sri Lanka", + "ZA": "Sud\u00e1frica", + "SD": "Sud\u00e1n", + "SS": "Sud\u00e1n del Sur", + "SE": "Suecia", + "CH": "Suiza", + "SR": "Surinam", + "SJ": "Svalbard y Jan Mayen", + "TH": "Tailandia", + "TW": "Taiw\u00e1n", + "TZ": "Tanzania", + "TJ": "Tayikist\u00e1n", + "IO": "Territorio Brit\u00e1nico del Oc\u00e9ano \u00cdndico", + "TF": "Territorios Australes Franceses", + "PS": "Territorios Palestinos", + "TL": "Timor-Leste", + "TG": "Togo", + "TK": "Tokelau", + "TO": "Tonga", + "TT": "Trinidad y Tobago", + "TN": "T\u00fanez", + "TM": "Turkmenist\u00e1n", + "TR": "Turqu\u00eda", + "TV": "Tuvalu", + "UA": "Ucrania", + "UG": "Uganda", + "UY": "Uruguay", + "UZ": "Uzbekist\u00e1n", + "VU": "Vanuatu", + "VE": "Venezuela", + "VN": "Vietnam", + "WF": "Wallis y Futuna", + "YE": "Yemen", + "DJ": "Yibuti", + "ZM": "Zambia", + "ZW": "Zimbabue" +} diff --git a/public/intl/language/es-ES.json b/public/intl/language/es-ES.json new file mode 100644 index 000000000..cf943dee1 --- /dev/null +++ b/public/intl/language/es-ES.json @@ -0,0 +1,611 @@ +{ + "ab": "abjasio", + "akk": "acadio", + "ace": "acehn\u00e9s", + "ach": "acoli", + "ada": "adangme", + "ady": "adigeo", + "aa": "afar", + "afh": "afrihili", + "af": "afrik\u00e1ans", + "agq": "aghem", + "ay": "aimara", + "ain": "ainu", + "ak": "akan", + "bss": "akoose", + "akz": "Alabama", + "sq": "alban\u00e9s", + "de": "alem\u00e1n", + "de_AT": "alem\u00e1n austr\u00edaco", + "goh": "alem\u00e1n de la alta edad antigua", + "gmh": "alem\u00e1n de la alta edad media", + "gsw": "alem\u00e1n suizo", + "ale": "aleutiano", + "arq": "Algerian Arabic", + "alt": "alt\u00e1i meridional", + "de_CH": "alto alem\u00e1n suizo", + "hsb": "alto sorbio", + "am": "am\u00e1rico", + "ase": "American Sign Language", + "anp": "angika", + "njo": "Ao Naga", + "ar": "\u00e1rabe", + "shu": "\u00e1rabe chadiano", + "ar_001": "\u00e1rabe est\u00e1ndar moderno", + "an": "aragon\u00e9s", + "arw": "arahuaco", + "arc": "arameo", + "sam": "arameo samaritano", + "aro": "Araona", + "arp": "arapaho", + "hy": "armenio", + "frp": "Arpitan", + "rup": "arrumano", + "as": "asam\u00e9s", + "ast": "asturiano", + "asa": "asu", + "cch": "atsam", + "awa": "avadhi", + "av": "avar", + "ae": "av\u00e9stico", + "az": "azerbaiyano", + "bfq": "Badaga", + "ksf": "bafia", + "bfd": "bafut", + "nds": "bajo alem\u00e1n", + "dsb": "bajo sorbio", + "bqi": "Bakhtiari", + "ban": "balin\u00e9s", + "bal": "baluchi", + "bm": "bambara", + "bax": "bamun", + "bjn": "Banjar", + "bas": "basa", + "ba": "baskir", + "bbc": "Batak Toba", + "bar": "Bavarian", + "bej": "beja", + "bem": "bemba", + "bez": "bena", + "bn": "bengal\u00ed", + "bew": "Betawi", + "bho": "bhojpuri", + "bik": "bicol", + "be": "bielorruso", + "bin": "bini", + "my": "birmano", + "bpy": "Bishnupriya", + "bi": "bislama", + "byn": "blin", + "brx": "bodo", + "nb": "bokmal noruego", + "bs": "bosnio", + "brh": "Brahui", + "bra": "braj", + "br": "bret\u00f3n", + "bug": "bugin\u00e9s", + "bg": "b\u00falgaro", + "bum": "bulu", + "bua": "buriat", + "kab": "cabila", + "ks": "cachemiro", + "cad": "caddo", + "frc": "Cajun French", + "kn": "canar\u00e9s", + "yue": "canton\u00e9s", + "cps": "Capiznon", + "krl": "carelio", + "car": "caribe", + "csb": "casubio", + "ca": "catal\u00e1n", + "cay": "cayuga", + "ceb": "cebuano", + "dtp": "Central Dusun", + "esu": "Central Yupik", + "chg": "chagat\u00e1i", + "ch": "chamorro", + "ce": "checheno", + "cs": "checo", + "chr": "cheroqui", + "chy": "cheyene", + "chb": "chibcha", + "cgg": "chiga", + "qug": "Chimborazo Highland Quichua", + "zh": "chino", + "zh_Hans": "chino simplificado", + "zh_Hant": "chino tradicional", + "chp": "chipewyan", + "cho": "choctaw", + "cv": "chuvash", + "si": "cingal\u00e9s", + "swb": "comorense", + "cop": "copto", + "ko": "coreano", + "kw": "c\u00f3rnico", + "co": "corso", + "cr": "cree", + "mus": "creek", + "kea": "criollo caboverdiano", + "mfe": "criollo mauriciano", + "hr": "croata", + "dak": "dakota", + "da": "dan\u00e9s", + "dar": "dargva", + "dzg": "dazaga", + "del": "delaware", + "din": "dinka", + "dyu": "diula", + "dv": "divehi", + "doi": "dogri", + "dgr": "dogrib", + "dua": "duala", + "dz": "dzongkha", + "efi": "efik", + "egy": "egipcio antiguo", + "arz": "Egyptian Arabic", + "eka": "ekajuk", + "elx": "elamita", + "ebu": "embu", + "egl": "Emilian", + "myv": "erzya", + "sco": "escoc\u00e9s", + "cu": "eslavo eclesi\u00e1stico", + "sk": "eslovaco", + "sl": "esloveno", + "es": "espa\u00f1ol", + "es_ES": "espa\u00f1ol de Espa\u00f1a", + "es_MX": "espa\u00f1ol de M\u00e9xico", + "es_419": "espa\u00f1ol latinoamericano", + "eo": "esperanto", + "et": "estonio", + "eu": "euskera", + "ee": "ew\u00e9", + "ewo": "ewondo", + "ext": "Extremaduran", + "fan": "fang", + "fat": "fanti", + "phn": "fenicio", + "fo": "fero\u00e9s", + "hif": "Fiji Hindi", + "fil": "filipino", + "fi": "fin\u00e9s", + "fj": "fiyiano", + "nl_BE": "flamenco", + "fon": "fon", + "gur": "Frafra", + "fr": "franc\u00e9s", + "fro": "franc\u00e9s antiguo", + "fr_CA": "franc\u00e9s canadiense", + "frm": "franc\u00e9s medieval", + "fr_CH": "franc\u00e9s suizo", + "fy": "fris\u00f3n occidental", + "frs": "fris\u00f3n oriental", + "frr": "fris\u00f3n septentrional", + "fur": "friulano", + "ff": "fula", + "gaa": "ga", + "gd": "ga\u00e9lico escoc\u00e9s", + "gag": "gagauzo", + "cy": "gal\u00e9s", + "gl": "gallego", + "gan": "Gan Chinese", + "lg": "ganda", + "gay": "gayo", + "gba": "gbaya", + "gez": "geez", + "ka": "georgiano", + "aln": "Gheg Albanian", + "bbj": "ghomala", + "glk": "Gilaki", + "gil": "gilbert\u00e9s", + "gom": "Goan Konkani", + "gon": "gondi", + "gor": "gorontalo", + "got": "g\u00f3tico", + "grb": "grebo", + "el": "griego", + "grc": "griego antiguo", + "kl": "groenland\u00e9s", + "gn": "guaran\u00ed", + "gu": "gujarati", + "guz": "gusii", + "hai": "haida", + "ht": "haitiano", + "hak": "Hakka Chinese", + "ha": "hausa", + "haw": "hawaiano", + "he": "hebreo", + "hz": "herero", + "hil": "hiligaynon", + "hi": "hindi", + "ho": "hiri motu", + "hit": "hitita", + "hmn": "hmong", + "hu": "h\u00fangaro", + "hup": "hupa", + "iba": "iban", + "ibb": "ibibio", + "io": "ido", + "ig": "igbo", + "ilo": "ilocano", + "id": "indonesio", + "en": "ingl\u00e9s", + "ang": "ingl\u00e9s antiguo", + "en_AU": "ingl\u00e9s australiano", + "en_GB": "ingl\u00e9s brit\u00e1nico", + "en_CA": "ingl\u00e9s canadiense", + "en_US": "ingl\u00e9s estadounidense", + "enm": "ingl\u00e9s medieval", + "izh": "Ingrian", + "inh": "ingush", + "ia": "interlingua", + "ie": "interlingue", + "iu": "inuktitut", + "ik": "inupiaq", + "ga": "irland\u00e9s", + "sga": "irland\u00e9s antiguo", + "mga": "irland\u00e9s medieval", + "is": "island\u00e9s", + "it": "italiano", + "jam": "Jamaican Creole English", + "ja": "japon\u00e9s", + "jv": "javan\u00e9s", + "km": "jemer", + "chn": "jerga chinuk", + "kaj": "jju", + "dyo": "jola-fonyi", + "jrb": "judeo-\u00e1rabe", + "jpr": "judeo-persa", + "jut": "Jutish", + "kbd": "kabardiano", + "kac": "kachin", + "kgp": "Kaingang", + "kkj": "kako", + "kln": "kalenjin", + "xal": "kalmyk", + "kam": "kamba", + "kbl": "kanembu", + "kr": "kanuri", + "krc": "karachay-balkar", + "kaa": "karakalpako", + "kaw": "kawi", + "kk": "kazajo", + "ken": "Kenyang", + "kha": "khasi", + "khw": "Khowar", + "ki": "kikuyu", + "kmb": "kimbundu", + "krj": "Kinaray-a", + "rw": "kinyarwanda", + "ky": "kirgu\u00eds", + "kiu": "Kirmanjki", + "rn": "kiroundi", + "tlh": "klingon", + "ksh": "k\u00f6lsch", + "bkm": "kom", + "kv": "komi", + "koi": "komi permio", + "kg": "kongo", + "kok": "konkan\u00ed", + "kfo": "koro", + "kos": "kosraeano", + "kho": "kotan\u00e9s", + "avk": "Kotava", + "khq": "koyra chiini", + "ses": "koyraboro senni", + "kpe": "kpelle", + "kri": "Krio", + "kj": "kuanyama", + "kum": "kumyk", + "ku": "kurdo", + "ckb": "kurdo sorani", + "kru": "kurukh", + "gwi": "kutchin", + "kut": "kutenai", + "nmg": "kwasio", + "lad": "ladino", + "lah": "lahnda", + "lkt": "lakota", + "lam": "lamba", + "lag": "langi", + "lo": "laosiano", + "ltg": "Latgalian", + "la": "lat\u00edn", + "lzz": "Laz", + "und": "lengua desconocida", + "mul": "lenguas m\u00faltiples", + "lv": "let\u00f3n", + "lez": "lezgiano", + "lij": "Ligurian", + "li": "limburgu\u00e9s", + "ln": "lingala", + "lfn": "Lingua Franca Nova", + "lzh": "Literary Chinese", + "lt": "lituano", + "liv": "Livonian", + "jbo": "lojban", + "lmo": "Lombard", + "sli": "Lower Silesian", + "loz": "lozi", + "lu": "luba-katanga", + "lua": "luba-lulua", + "lui": "luise\u00f1o", + "lun": "lunda", + "luo": "luo", + "lus": "lushai", + "lb": "luxemburgu\u00e9s", + "luy": "luyia", + "mde": "maba", + "mak": "macasar", + "mk": "macedonio", + "jmc": "machame", + "mad": "madur\u00e9s", + "maf": "mafa", + "mag": "magahi", + "vmf": "Main-Franconian", + "mai": "maithili", + "mgh": "makhuwa-meetto", + "kde": "makonde", + "ml": "malayalam", + "ms": "malayo", + "mg": "malgache", + "mt": "malt\u00e9s", + "mnc": "manch\u00fa", + "mdr": "mandar", + "man": "mandingo", + "gv": "man\u00e9s", + "mni": "manipuri", + "mi": "maor\u00ed", + "arn": "mapuche", + "mr": "marat\u00ed", + "chm": "mar\u00ed", + "mh": "marshal\u00e9s", + "mwr": "marwari", + "mas": "mas\u00e1i", + "mzn": "Mazanderani", + "byv": "medumba", + "men": "mende", + "mwv": "Mentawai", + "mer": "meru", + "mgo": "meta\u2019", + "mic": "micmac", + "nan": "Min Nan Chinese", + "min": "minangkabau", + "xmf": "Mingrelian", + "mwl": "mirand\u00e9s", + "moh": "mohawk", + "mdf": "moksha", + "ro_MD": "moldavo", + "lol": "mongo", + "mn": "mongol", + "ary": "Moroccan Arabic", + "mos": "mossi", + "mua": "mundang", + "ttt": "Muslim Tat", + "mye": "myene", + "nqo": "n\u2019ko", + "naq": "nama", + "nap": "napolitano", + "na": "nauruano", + "nv": "navajo", + "nr": "ndebele meridional", + "nd": "ndebele septentrional", + "ng": "ndonga", + "nl": "neerland\u00e9s", + "dum": "neerland\u00e9s medieval", + "ne": "nepal\u00ed", + "new": "newari", + "nwc": "newari cl\u00e1sico", + "sba": "ngambay", + "nnh": "ngiemboon", + "jgo": "ngomba", + "yrl": "Nheengatu", + "nia": "nias", + "niu": "niueano", + "nog": "nogai", + "non": "n\u00f3rdico antiguo", + "no": "noruego", + "nov": "Novial", + "nus": "nuer", + "nym": "nyamwezi", + "ny": "nyanja", + "nyn": "nyankole", + "nn": "nynorsk noruego", + "nyo": "nyoro", + "nzi": "nzima", + "oc": "occitano", + "oj": "ojibwa", + "or": "oriya", + "om": "oromo", + "osa": "osage", + "os": "os\u00e9tico", + "pal": "pahlavi", + "pfl": "Palatine German", + "pau": "palauano", + "pi": "pali", + "pam": "pampanga", + "pag": "pangasin\u00e1n", + "pa": "panyab\u00ed", + "pap": "papiamento", + "ps": "past\u00fan", + "pdc": "Pennsylvania German", + "fa": "persa", + "peo": "persa antiguo", + "pcd": "Picard", + "pms": "Piedmontese", + "pdt": "Plautdietsch", + "pon": "pohnpeiano", + "pl": "polaco", + "pnt": "Pontic", + "pt": "portugu\u00e9s", + "pt_BR": "portugu\u00e9s de Brasil", + "pt_PT": "portugu\u00e9s de Portugal", + "pro": "provenzal antiguo", + "prg": "Prussian", + "qu": "quechua", + "quc": "quich\u00e9", + "root": "ra\u00edz", + "raj": "rajasthani", + "rap": "rapanui", + "rar": "rarotongano", + "rm": "retorrom\u00e1nico", + "rif": "Riffian", + "rgn": "Romagnol", + "rom": "roman\u00ed", + "rof": "rombo", + "rtm": "Rotuman", + "rug": "Roviana", + "ro": "rumano", + "ru": "ruso", + "rue": "Rusyn", + "rwk": "rwa", + "ssy": "saho", + "sah": "sakha", + "saq": "samburu", + "smn": "sami inari", + "smj": "sami lule", + "sma": "sami meridional", + "se": "sami septentrional", + "sms": "sami skolt", + "sm": "samoano", + "sgs": "Samogitian", + "sad": "sandawe", + "sg": "sango", + "sbp": "sangu", + "sa": "s\u00e1nscrito", + "sat": "santali", + "sc": "sardo", + "sas": "sasak", + "sdc": "Sassarese Sardinian", + "stq": "Saterland Frisian", + "saz": "Saurashtra", + "sly": "Selayar", + "sel": "selkup", + "seh": "sena", + "see": "seneca", + "sr": "serbio", + "sh": "serbocroata", + "srr": "serer", + "sei": "Seri", + "st": "sesotho meridional", + "tn": "setchwana", + "ksb": "shambala", + "shn": "shan", + "sn": "shona", + "scn": "siciliano", + "sid": "sidamo", + "bla": "siksika", + "szl": "Silesian", + "zbl": "s\u00edmbolos Bliss", + "zxx": "sin contenido ling\u00fc\u00edstico", + "sd": "sindhi", + "syr": "siriaco", + "syc": "sir\u00edaco cl\u00e1sico", + "ss": "siswati", + "den": "slave", + "xog": "soga", + "sog": "sogdiano", + "so": "somal\u00ed", + "snk": "sonink\u00e9", + "nso": "sotho septentrional", + "azb": "South Azerbaijani", + "srn": "sranan tongo", + "sv": "sueco", + "suk": "sukuma", + "sux": "sumerio", + "su": "sundan\u00e9s", + "sus": "susu", + "sw": "swahili", + "swc": "swahili del Congo", + "tl": "tagalo", + "ty": "tahitiano", + "th": "tailand\u00e9s", + "dav": "taita", + "tly": "Talysh", + "tmh": "tamashek", + "tzm": "tamazight del Marruecos Central", + "zgh": "tamazight est\u00e1ndar marroqu\u00ed", + "ta": "tamil", + "trv": "taroko", + "tt": "t\u00e1rtaro", + "crh": "t\u00e1rtaro de Crimea", + "twq": "tasawaq", + "shi": "tashelhit", + "tg": "tayiko", + "te": "telugu", + "tem": "temne", + "ter": "tereno", + "teo": "teso", + "tet": "tet\u00fan", + "bo": "tibetano", + "tig": "tigr\u00e9", + "ti": "tigri\u00f1a", + "tiv": "tiv", + "tli": "tlingit", + "tpi": "tok pisin", + "tkl": "tokelauano", + "tog": "tonga del Nyasa", + "to": "tongano", + "fit": "Tornedalen Finnish", + "chk": "truk\u00e9s", + "tkr": "Tsakhur", + "tsd": "Tsakonian", + "tsi": "tsimshiano", + "ts": "tsonga", + "tcy": "Tulu", + "tum": "tumbuka", + "aeb": "Tunisian Arabic", + "tr": "turco", + "ota": "turco otomano", + "tk": "turcomano", + "tru": "Turoyo", + "tvl": "tuvaluano", + "tyv": "tuviniano", + "tw": "twi", + "kcg": "tyap", + "uk": "ucraniano", + "udm": "udmurt", + "uga": "ugar\u00edtico", + "ug": "uigur", + "umb": "umbundu", + "ur": "urdu", + "uz": "uzbeko", + "vai": "vai", + "wa": "val\u00f3n", + "ve": "venda", + "vec": "Venetian", + "vep": "Veps", + "vi": "vietnamita", + "vo": "volap\u00fck", + "vro": "V\u00f5ro", + "vot": "v\u00f3tico", + "vun": "vunjo", + "wal": "walamo", + "wae": "walser", + "war": "waray", + "wbp": "Warlpiri", + "was": "washo", + "guc": "Wayuu", + "vls": "West Flemish", + "mrj": "Western Mari", + "wo": "w\u00f3lof", + "wuu": "Wu Chinese", + "xh": "xhosa", + "hsn": "Xiang Chinese", + "yav": "yangben", + "yao": "yao", + "yap": "yap\u00e9s", + "ybb": "yemba", + "ii": "yi de Sichu\u00e1n", + "yi": "y\u00eddish", + "yo": "yoruba", + "zap": "zapoteco", + "dje": "zarma", + "zza": "zazaki", + "zea": "Zeelandic", + "zen": "zenaga", + "za": "zhuang", + "gbz": "Zoroastrian Dari", + "zu": "zul\u00fa", + "zun": "zuni" +} diff --git a/public/intl/messages/am-ET.json b/public/intl/messages/am-ET.json index f367c254c..b82cdf365 100644 --- a/public/intl/messages/am-ET.json +++ b/public/intl/messages/am-ET.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domain" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Enable share URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Unknown" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "View details" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "No data available." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Passwords do not match." } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "You do not have any websites configured." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1054,29 +1326,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "You do not have any websites configured." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/ar-SA.json b/public/intl/messages/ar-SA.json index 33673f066..b850db9b7 100644 --- a/public/intl/messages/ar-SA.json +++ b/public/intl/messages/ar-SA.json @@ -17,6 +17,18 @@ "value": "سجل الأحداث" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "النطاق" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "تفعيل مشاركة الرابط" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "الأحداث" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "الصلاحية" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "غير معروف" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "عرض التفاصيل" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "المواقع" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "الأمس" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " حرف/أحرف" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "لا توجد بيانات متاحة." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "كلمة المرور غير متطابقة" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "هذه المجموعة ليس لديه اي موقع." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "لا يوجد مستخدمين." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "لم تقم بإعداد اي موقع." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "لم يتم العثور على المجموعة" } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "يمكن مشاهدة الموقع من اي عضو في المجموعة." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "هذه المجموعة ليس لديه اي موقع." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "لم تقم بإعداد اي موقع." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "يمكن مشاهدة الموقع من اي عضو في المجموعة." - } ] } diff --git a/public/intl/messages/be-BY.json b/public/intl/messages/be-BY.json index 5e1d6a134..9d17b7005 100644 --- a/public/intl/messages/be-BY.json +++ b/public/intl/messages/be-BY.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Дамен" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Дазволіць дзяліцца спасылкай" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Падзеі" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Невядома" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Пабачыць дэталі" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Сайты" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Учора" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Няма дадзеных." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Паролі не супадаюць" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Вы не наладзілі ніводнага сайту." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Вы не наладзілі ніводнага сайту." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/bn-BD.json b/public/intl/messages/bn-BD.json index f068cd196..6e51b096e 100644 --- a/public/intl/messages/bn-BD.json +++ b/public/intl/messages/bn-BD.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "ডোমেইন" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "শেয়ার ইউআরএল শেয়ার করুন" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "ঘটনা" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "অজানা" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "বিস্তারিত দেখুন" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "সবগুলো ওয়েবসাইট" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "কোন তথ্য নেই।" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "পাসওয়ার্ড মেলে না" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "কোনও ওয়েবসাইট কনফিগার করা নেই।" + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 0, "value": " এর মধ্যে।" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "কোনও ওয়েবসাইট কনফিগার করা নেই।" - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/ca-ES.json b/public/intl/messages/ca-ES.json index e9835ab59..6a3f0542a 100644 --- a/public/intl/messages/ca-ES.json +++ b/public/intl/messages/ca-ES.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domini" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Activa l'enllaç per compartir" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Esdeveniments" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Desconegut" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Veure els detalls" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Llocs web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Ahir" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "No hi ha dades disponibles." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Les contrasenyes no coincideixen" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "No hi ha cap lloc web configurat." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "No hi ha cap lloc web configurat." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/cs-CZ.json b/public/intl/messages/cs-CZ.json index 573ee2d8c..abfc225db 100644 --- a/public/intl/messages/cs-CZ.json +++ b/public/intl/messages/cs-CZ.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Doména" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Povolit sdílení URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Události" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Neznámý" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Zobrazit detaily" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Weby" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Žádná data." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Hesla se neschodují" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Nemáte nastavený žádný web." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Nemáte nastavený žádný web." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/da-DK.json b/public/intl/messages/da-DK.json index 5a18cd72f..e69d70363 100644 --- a/public/intl/messages/da-DK.json +++ b/public/intl/messages/da-DK.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domæne" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Aktivér delings-URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Hændelser" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Ukendt" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Vis detajler" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Hjemmesider" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Ingen data tilgængelig." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Adgangskoderne matcher ikke" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Du har ikke konfigureret nogen hjemmesider." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Du har ikke konfigureret nogen hjemmesider." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/de-CH.json b/public/intl/messages/de-CH.json index d35cabebe..4a5fd0a22 100644 --- a/public/intl/messages/de-CH.json +++ b/public/intl/messages/de-CH.json @@ -17,6 +17,18 @@ "value": "Aktivitätsverlauf" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domain" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Freigab-URL aktiviere" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Ereigniss" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Rollä" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Unbekannt" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Details azeige" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Websiite" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Gester" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " Zeiche" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Kei Date vorhande." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Passwörter stimmed ned überi" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "Dem Team sind kei Websiite zuegordnet." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "Da gits kei Benutzer" } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Es isch kei Websiite vorhande." + } + ], "message.page-not-found": [ { "type": 0, @@ -987,6 +1253,12 @@ "value": "Team nöd gfunde." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websiite chönd vo jedem im Team agluegt werde" + } + ], "message.tracking-code": [ { "type": 0, @@ -1032,29 +1304,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "Dem Team sind kei Websiite zuegordnet." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Es isch kei Websiite vorhande." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websiite chönd vo jedem im Team agluegt werde" - } ] } diff --git a/public/intl/messages/de-DE.json b/public/intl/messages/de-DE.json index 2cb5a4825..ef34acd27 100644 --- a/public/intl/messages/de-DE.json +++ b/public/intl/messages/de-DE.json @@ -17,6 +17,18 @@ "value": "Aktivitätsverlauf" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Beschreibung hinzufügen" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domain" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,10 +263,16 @@ "value": "Freigabe-URL aktivieren" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, - "value": "Event data" + "value": "Event daten" } ], "label.events": [ @@ -257,6 +281,18 @@ "value": "Ereignisse" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -448,7 +490,7 @@ "label.query": [ { "type": 0, - "value": "Query" + "value": "Abfrage" } ], "label.query-parameters": [ @@ -496,7 +538,7 @@ "label.reports": [ { "type": 0, - "value": "Reports" + "value": "Reporte" } ], "label.required": [ @@ -523,6 +565,12 @@ "value": "Rolle" } ], + "label.run-query": [ + { + "type": 0, + "value": "Abfrage starten" + } + ], "label.save": [ { "type": 0, @@ -538,7 +586,7 @@ "label.select-date": [ { "type": 0, - "value": "Select date" + "value": "Datum auswählen" } ], "label.select-website": [ @@ -679,6 +727,12 @@ "value": "Unbekannt" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Details anzeigen" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -730,7 +790,7 @@ "label.website": [ { "type": 0, - "value": "Website" + "value": "Webseite" } ], "label.website-id": [ @@ -745,12 +805,180 @@ "value": "Webseiten" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Gestern" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Durchschnitt" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Report erstellen" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Beschreibung" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Größer als" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Größer oder gleich" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Kleiner als" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Kleiner oder gleich" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Übersicht" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Summe" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " Zeichen" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Keine Daten vorhanden." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Passwörter stimmen nicht überein" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "Keine Ergebnisse gefunden." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "Diesem Team sind keine Websites zugeordnet." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "Hier gibt es keine Benutzer." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Es ist keine Webseite vorhanden." + } + ], "message.page-not-found": [ { "type": 0, @@ -987,6 +1253,12 @@ "value": "Team nicht gefunden." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Webseiten können von jedem im Team eingesehen werden." + } + ], "message.tracking-code": [ { "type": 0, @@ -1032,29 +1304,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "Diesem Team sind keine Websites zugeordnet." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Es ist keine Webseite vorhanden." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Webseiten können von jedem im Team eingesehen werden." - } ] } diff --git a/public/intl/messages/el-GR.json b/public/intl/messages/el-GR.json index 0818eac36..26fdc5355 100644 --- a/public/intl/messages/el-GR.json +++ b/public/intl/messages/el-GR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Τομέας" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Ενεργοποίηση κοινής χρήσης URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Γεγονότα" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Άγνωστο" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Λεπτομέρειες" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Ιστότοποι" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Δεν υπάρχουν διαθέσιμα δεδομένα." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Οι κωδικοί πρόσβασης δεν ταιριάζουν" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Δεν έχετε ρυθμίσει κανένα ιστότοπο." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Δεν έχετε ρυθμίσει κανένα ιστότοπο." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/en-GB.json b/public/intl/messages/en-GB.json index 970c05468..4194da83c 100644 --- a/public/intl/messages/en-GB.json +++ b/public/intl/messages/en-GB.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domain" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Enable share URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Unknown" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "View details" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "No data available." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Passwords don't match" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "You don't have any websites configured." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "You don't have any websites configured." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/en-US.json b/public/intl/messages/en-US.json index 11b342955..929f61c99 100644 --- a/public/intl/messages/en-US.json +++ b/public/intl/messages/en-US.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domain" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Enable share URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Unknown" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "View details" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "No data available." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Passwords do not match." } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "You do not have any websites configured." + } + ], "message.page-not-found": [ { "type": 0, @@ -987,6 +1253,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1046,29 +1318,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "You do not have any websites configured." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/es-ES.json b/public/intl/messages/es-ES.json new file mode 100644 index 000000000..6d5289657 --- /dev/null +++ b/public/intl/messages/es-ES.json @@ -0,0 +1,1316 @@ +{ + "label.access-code": [ + { + "type": 0, + "value": "Código de acceso" + } + ], + "label.actions": [ + { + "type": 0, + "value": "Acciones" + } + ], + "label.activity-log": [ + { + "type": 0, + "value": "Registro de actividad" + } + ], + "label.add": [ + { + "type": 0, + "value": "Añadir" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Añadir descripción" + } + ], + "label.add-website": [ + { + "type": 0, + "value": "Nuevo sitio web" + } + ], + "label.admin": [ + { + "type": 0, + "value": "Administrador" + } + ], + "label.all": [ + { + "type": 0, + "value": "Todos" + } + ], + "label.all-time": [ + { + "type": 0, + "value": "Todos los tiempos" + } + ], + "label.analytics": [ + { + "type": 0, + "value": "Analíticas" + } + ], + "label.average-visit-time": [ + { + "type": 0, + "value": "Tiempo promedio de visita" + } + ], + "label.back": [ + { + "type": 0, + "value": "Atrás" + } + ], + "label.bounce-rate": [ + { + "type": 0, + "value": "Porcentaje de rebote" + } + ], + "label.browsers": [ + { + "type": 0, + "value": "Navegadores" + } + ], + "label.cancel": [ + { + "type": 0, + "value": "Cancelar" + } + ], + "label.change-password": [ + { + "type": 0, + "value": "Cambiar contraseña" + } + ], + "label.cities": [ + { + "type": 0, + "value": "Ciudades" + } + ], + "label.clear-all": [ + { + "type": 0, + "value": "Limpiar todo" + } + ], + "label.confirm": [ + { + "type": 0, + "value": "Confirmar" + } + ], + "label.confirm-password": [ + { + "type": 0, + "value": "Confirmar contraseña" + } + ], + "label.continue": [ + { + "type": 0, + "value": "Continuar" + } + ], + "label.countries": [ + { + "type": 0, + "value": "Países" + } + ], + "label.create-team": [ + { + "type": 0, + "value": "Crear equipo" + } + ], + "label.create-user": [ + { + "type": 0, + "value": "Crear usuario" + } + ], + "label.created": [ + { + "type": 0, + "value": "Creado" + } + ], + "label.current-password": [ + { + "type": 0, + "value": "Contraseña actual" + } + ], + "label.custom-range": [ + { + "type": 0, + "value": "Intervalo personalizado" + } + ], + "label.dashboard": [ + { + "type": 0, + "value": "Panel de control" + } + ], + "label.data": [ + { + "type": 0, + "value": "Datos" + } + ], + "label.date-range": [ + { + "type": 0, + "value": "Intervalo de fechas" + } + ], + "label.default-date-range": [ + { + "type": 0, + "value": "Intervalo por defecto" + } + ], + "label.delete": [ + { + "type": 0, + "value": "Eliminar" + } + ], + "label.delete-team": [ + { + "type": 0, + "value": "Eliminar equipo" + } + ], + "label.delete-user": [ + { + "type": 0, + "value": "Eliminar usuario" + } + ], + "label.delete-website": [ + { + "type": 0, + "value": "Eliminar sitio" + } + ], + "label.desktop": [ + { + "type": 0, + "value": "Escritorio" + } + ], + "label.details": [ + { + "type": 0, + "value": "Detalles" + } + ], + "label.devices": [ + { + "type": 0, + "value": "Dispositivos" + } + ], + "label.dismiss": [ + { + "type": 0, + "value": "Ignorar" + } + ], + "label.domain": [ + { + "type": 0, + "value": "Dominio" + } + ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], + "label.edit": [ + { + "type": 0, + "value": "Editar" + } + ], + "label.edit-dashboard": [ + { + "type": 0, + "value": "Editar panel" + } + ], + "label.enable-share-url": [ + { + "type": 0, + "value": "Habilitar compartir URL" + } + ], + "label.event": [ + { + "type": 0, + "value": "Evento" + } + ], + "label.event-data": [ + { + "type": 0, + "value": "Datos de evento" + } + ], + "label.events": [ + { + "type": 0, + "value": "Eventos" + } + ], + "label.field": [ + { + "type": 0, + "value": "Campo" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Campos" + } + ], + "label.filter-combined": [ + { + "type": 0, + "value": "Combinado" + } + ], + "label.filter-raw": [ + { + "type": 0, + "value": "En crudo" + } + ], + "label.funnel": [ + { + "type": 0, + "value": "Funnel" + } + ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], + "label.join": [ + { + "type": 0, + "value": "Unir" + } + ], + "label.join-team": [ + { + "type": 0, + "value": "Unirse al equipo" + } + ], + "label.language": [ + { + "type": 0, + "value": "Idioma" + } + ], + "label.languages": [ + { + "type": 0, + "value": "Idiomas" + } + ], + "label.laptop": [ + { + "type": 0, + "value": "Portátil" + } + ], + "label.last-days": [ + { + "type": 0, + "value": "Últimos " + }, + { + "type": 1, + "value": "x" + }, + { + "type": 0, + "value": " días" + } + ], + "label.last-hours": [ + { + "type": 0, + "value": "Últimas " + }, + { + "type": 1, + "value": "x" + }, + { + "type": 0, + "value": " horas" + } + ], + "label.leave": [ + { + "type": 0, + "value": "Abandonar" + } + ], + "label.leave-team": [ + { + "type": 0, + "value": "Abandonar equipo" + } + ], + "label.login": [ + { + "type": 0, + "value": "Iniciar sesión" + } + ], + "label.logout": [ + { + "type": 0, + "value": "Cerrar sesión" + } + ], + "label.members": [ + { + "type": 0, + "value": "Miembros" + } + ], + "label.mobile": [ + { + "type": 0, + "value": "Móvil" + } + ], + "label.more": [ + { + "type": 0, + "value": "Más" + } + ], + "label.name": [ + { + "type": 0, + "value": "Nombre" + } + ], + "label.new-password": [ + { + "type": 0, + "value": "Nueva contraseña" + } + ], + "label.none": [ + { + "type": 0, + "value": "Ninguno" + } + ], + "label.operating-systems": [ + { + "type": 0, + "value": "Sistemas operativos" + } + ], + "label.owner": [ + { + "type": 0, + "value": "Propietario" + } + ], + "label.page-views": [ + { + "type": 0, + "value": "Vistas" + } + ], + "label.pages": [ + { + "type": 0, + "value": "Páginas" + } + ], + "label.password": [ + { + "type": 0, + "value": "Contraseña" + } + ], + "label.powered-by": [ + { + "type": 0, + "value": "Con la ayuda de " + }, + { + "type": 1, + "value": "name" + } + ], + "label.profile": [ + { + "type": 0, + "value": "Perfil" + } + ], + "label.queries": [ + { + "type": 0, + "value": "Consultas" + } + ], + "label.query": [ + { + "type": 0, + "value": "Query" + } + ], + "label.query-parameters": [ + { + "type": 0, + "value": "Parámetros de petición" + } + ], + "label.realtime": [ + { + "type": 0, + "value": "Tiempo real" + } + ], + "label.referrers": [ + { + "type": 0, + "value": "Referido desde" + } + ], + "label.refresh": [ + { + "type": 0, + "value": "Actualizar" + } + ], + "label.regenerate": [ + { + "type": 0, + "value": "Regenerar" + } + ], + "label.regions": [ + { + "type": 0, + "value": "Regiones" + } + ], + "label.remove": [ + { + "type": 0, + "value": "Quitar" + } + ], + "label.reports": [ + { + "type": 0, + "value": "Reportes" + } + ], + "label.required": [ + { + "type": 0, + "value": "Obligatorio" + } + ], + "label.reset": [ + { + "type": 0, + "value": "Reiniciar" + } + ], + "label.reset-website": [ + { + "type": 0, + "value": "Reiniciar estadísticas" + } + ], + "label.role": [ + { + "type": 0, + "value": "Rol" + } + ], + "label.run-query": [ + { + "type": 0, + "value": "Ejecutar consulta" + } + ], + "label.save": [ + { + "type": 0, + "value": "Guardar" + } + ], + "label.screens": [ + { + "type": 0, + "value": "Pantallas" + } + ], + "label.select-date": [ + { + "type": 0, + "value": "Seleccionar fecha" + } + ], + "label.select-website": [ + { + "type": 0, + "value": "Seleccionar sitio web" + } + ], + "label.sessions": [ + { + "type": 0, + "value": "Sesiones" + } + ], + "label.settings": [ + { + "type": 0, + "value": "Configuraciones" + } + ], + "label.share-url": [ + { + "type": 0, + "value": "Compartir URL" + } + ], + "label.single-day": [ + { + "type": 0, + "value": "Un solo día" + } + ], + "label.tablet": [ + { + "type": 0, + "value": "Tableta" + } + ], + "label.team": [ + { + "type": 0, + "value": "Equipo" + } + ], + "label.team-guest": [ + { + "type": 0, + "value": "Invitado al equipo" + } + ], + "label.team-id": [ + { + "type": 0, + "value": "ID de equipo" + } + ], + "label.team-member": [ + { + "type": 0, + "value": "Miembro del equipo" + } + ], + "label.team-owner": [ + { + "type": 0, + "value": "Admin. del equipo" + } + ], + "label.teams": [ + { + "type": 0, + "value": "Equipos" + } + ], + "label.theme": [ + { + "type": 0, + "value": "Tema" + } + ], + "label.this-month": [ + { + "type": 0, + "value": "Este mes" + } + ], + "label.this-week": [ + { + "type": 0, + "value": "Esta semana" + } + ], + "label.this-year": [ + { + "type": 0, + "value": "Este año" + } + ], + "label.timezone": [ + { + "type": 0, + "value": "Zona horaria" + } + ], + "label.title": [ + { + "type": 0, + "value": "Título" + } + ], + "label.today": [ + { + "type": 0, + "value": "Hoy" + } + ], + "label.toggle-charts": [ + { + "type": 0, + "value": "Alternar gráficas" + } + ], + "label.tracking-code": [ + { + "type": 0, + "value": "Código de rastreo" + } + ], + "label.unique-visitors": [ + { + "type": 0, + "value": "Visitantes únicos" + } + ], + "label.unknown": [ + { + "type": 0, + "value": "Desconocida" + } + ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], + "label.urls": [ + { + "type": 0, + "value": "URLs" + } + ], + "label.user": [ + { + "type": 0, + "value": "Usuario" + } + ], + "label.username": [ + { + "type": 0, + "value": "Nombre de usuario" + } + ], + "label.users": [ + { + "type": 0, + "value": "Usuarios" + } + ], + "label.view": [ + { + "type": 0, + "value": "Visualizar" + } + ], + "label.view-details": [ + { + "type": 0, + "value": "Ver detalles" + } + ], + "label.view-only": [ + { + "type": 0, + "value": "Ver sólo" + } + ], + "label.views": [ + { + "type": 0, + "value": "Vistas" + } + ], + "label.visitors": [ + { + "type": 0, + "value": "Visitantes" + } + ], + "label.website": [ + { + "type": 0, + "value": "Sitio web" + } + ], + "label.website-id": [ + { + "type": 0, + "value": "ID del sitio web" + } + ], + "label.websites": [ + { + "type": 0, + "value": "Sitios web" + } + ], + "label.window": [ + { + "type": 0, + "value": "Ventana" + } + ], + "label.yesterday": [ + { + "type": 0, + "value": "Ayer" + } + ], + "labels.after": [ + { + "type": 0, + "value": "Después" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Media" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Antes" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Desglose" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contiene" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Crear reporte" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Descripciones" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "No contiene" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "No es igual a" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Es igual a" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filtros" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Mayor que" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Mayor que o igual a" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Menor que" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Menor que o igual a" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Máx" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Mín" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Resumen" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Suma" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total de registros" + } + ], + "labels.true": [ + { + "type": 0, + "value": "Verdadero" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Tipo" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Único" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Sin título" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Valor" + } + ], + "message.active-users": [ + { + "type": 1, + "value": "x" + }, + { + "type": 0, + "value": " " + }, + { + "offset": 0, + "options": { + "one": { + "value": [ + { + "type": 0, + "value": "activo" + } + ] + }, + "other": { + "value": [ + { + "type": 0, + "value": "activos" + } + ] + } + }, + "pluralType": "cardinal", + "type": 6, + "value": "x" + } + ], + "message.confirm-delete": [ + { + "type": 0, + "value": "¿Seguro que quieres eliminar " + }, + { + "type": 1, + "value": "target" + }, + { + "type": 0, + "value": "?" + } + ], + "message.confirm-leave": [ + { + "type": 0, + "value": "¿Seguro que quieres abandonar " + }, + { + "type": 1, + "value": "target" + }, + { + "type": 0, + "value": "?" + } + ], + "message.confirm-reset": [ + { + "type": 0, + "value": "¿Seguro que quieres BORRAR las analíticas de " + }, + { + "type": 1, + "value": "target" + }, + { + "type": 0, + "value": "?" + } + ], + "message.delete-account": [ + { + "type": 0, + "value": "Para borrar esta cuenta, escribe " + }, + { + "type": 1, + "value": "confirmation" + }, + { + "type": 0, + "value": " a continuación para confirmar." + } + ], + "message.delete-website": [ + { + "type": 0, + "value": "Para borrar este sitio web, escribe " + }, + { + "type": 1, + "value": "confirmation" + }, + { + "type": 0, + "value": " a continuación para confirmar." + } + ], + "message.delete-website-warning": [ + { + "type": 0, + "value": "Toda la información relacionada será eliminada." + } + ], + "message.error": [ + { + "type": 0, + "value": "Algo falló." + } + ], + "message.event-log": [ + { + "type": 1, + "value": "event" + }, + { + "type": 0, + "value": " en " + }, + { + "type": 1, + "value": "url" + } + ], + "message.go-to-settings": [ + { + "type": 0, + "value": "Ir a la configuración" + } + ], + "message.incorrect-username-password": [ + { + "type": 0, + "value": "Nombre de usuario o contraseña incorrectos." + } + ], + "message.invalid-domain": [ + { + "type": 0, + "value": "Dominio inválido" + } + ], + "message.min-password-length": [ + { + "type": 0, + "value": "Longitud mínima de " + }, + { + "type": 1, + "value": "n" + }, + { + "type": 0, + "value": " caracteres" + } + ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], + "message.no-data-available": [ + { + "type": 0, + "value": "No hay información disponible." + } + ], + "message.no-event-data": [ + { + "type": 0, + "value": "No hay datos de eventos disponibles." + } + ], + "message.no-match-password": [ + { + "type": 0, + "value": "Las contraseñas no coinciden" + } + ], + "message.no-results-found": [ + { + "type": 0, + "value": "No se encontraron resultados." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "Este equipo no tiene ningún sitio web configurado." + } + ], + "message.no-teams": [ + { + "type": 0, + "value": "No has creado ningún equipo." + } + ], + "message.no-users": [ + { + "type": 0, + "value": "No hay usuarios." + } + ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "No tienes ningún sitio web configurado." + } + ], + "message.page-not-found": [ + { + "type": 0, + "value": "Página no encontrada" + } + ], + "message.reset-website": [ + { + "type": 0, + "value": "Para reiniciar este sitio web, escribe " + }, + { + "type": 1, + "value": "confirmation" + }, + { + "type": 0, + "value": " a continuación para confirmar." + } + ], + "message.reset-website-warning": [ + { + "type": 0, + "value": "Todas las estadísticas de esta página serán eliminadas, pero el código de rastreo permanecerá intacto." + } + ], + "message.saved": [ + { + "type": 0, + "value": "Guardado." + } + ], + "message.share-url": [ + { + "type": 0, + "value": "Esta es la URL pública para " + }, + { + "type": 1, + "value": "target" + }, + { + "type": 0, + "value": "." + } + ], + "message.team-already-member": [ + { + "type": 0, + "value": "Ya eres miembro de este equipo." + } + ], + "message.team-not-found": [ + { + "type": 0, + "value": "Equipo no encontrado." + } + ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Las analíticas de tus sitios web pueden ser vistas por cualquier miembro del equipo." + } + ], + "message.tracking-code": [ + { + "type": 0, + "value": "Código de rastreo" + } + ], + "message.user-deleted": [ + { + "type": 0, + "value": "Usuario eliminado." + } + ], + "message.visitor-log": [ + { + "type": 0, + "value": "Visitante desde " + }, + { + "type": 1, + "value": "country" + }, + { + "type": 0, + "value": " usando " + }, + { + "type": 1, + "value": "browser" + }, + { + "type": 0, + "value": " en " + }, + { + "type": 1, + "value": "os" + }, + { + "type": 0, + "value": " " + }, + { + "type": 1, + "value": "device" + } + ] +} diff --git a/public/intl/messages/es-MX.json b/public/intl/messages/es-MX.json index 48d54fe96..6e2cf72b7 100644 --- a/public/intl/messages/es-MX.json +++ b/public/intl/messages/es-MX.json @@ -17,6 +17,18 @@ "value": "Registro de actividad" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Dominio" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Habilitar compartir URL" } ], + "label.event": [ + { + "type": 0, + "value": "Evento" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Eventos" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Rol" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Desconocida" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Ver detalles" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Sitios" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Ayer" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " caracteres" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "No hay información disponible." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Las contraseñas no coinciden" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "Este equipo no tiene ningún sitio web configurado." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "No hay usuarios." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "No tienes ningún sitio configurado." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Equipo no encontrado." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Las analíticas de tus sitios pueden verse por cualquier miembro del equipo." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "Este equipo no tiene ningún sitio web configurado." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "No tienes ningún sitio configurado." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Las analíticas de tus sitios pueden verse por cualquier miembro del equipo." - } ] } diff --git a/public/intl/messages/fa-IR.json b/public/intl/messages/fa-IR.json index f41a80a46..8f2d9378e 100644 --- a/public/intl/messages/fa-IR.json +++ b/public/intl/messages/fa-IR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "دامنه" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "فعال کردن اشتراک گذاری URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "رویدادها" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "ناشناخته" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "مشاهده‌ی جزئیات" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "وب‌سایت‌ها" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "اطلاعاتی موجود نیست." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "رمزها یکسان نیستند" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "شما هیچ وب‌سایتی را پیکربندی نکرده‌اید." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "شما هیچ وب‌سایتی را پیکربندی نکرده‌اید." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/fi-FI.json b/public/intl/messages/fi-FI.json index fa70253a1..b78025f33 100644 --- a/public/intl/messages/fi-FI.json +++ b/public/intl/messages/fi-FI.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Verkkotunnus" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Ota jakamisen URL-osoite käyttöön" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Tapahtumat" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Tuntematon" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Katso tiedot" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Verkkosivut" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Tietoja ei ole käytettävissä." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Salasanat eivät täsmää" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Sinulla ei ole määritettyjä verkkosivustoja." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Sinulla ei ole määritettyjä verkkosivustoja." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/fo-FO.json b/public/intl/messages/fo-FO.json index 0b5b66f1f..8b98376ec 100644 --- a/public/intl/messages/fo-FO.json +++ b/public/intl/messages/fo-FO.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Økisnavn" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Virkja deili leinki" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Hendingar/tiltøk" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Ókent" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Vís frágreiðing" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Heimasíður" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Einki data tøk." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Loyniorðini eru ikki eins" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Tú hevur ongar heimasíður stillaða til." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Tú hevur ongar heimasíður stillaða til." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/fr-FR.json b/public/intl/messages/fr-FR.json index 0251929e8..992f4c703 100644 --- a/public/intl/messages/fr-FR.json +++ b/public/intl/messages/fr-FR.json @@ -17,6 +17,18 @@ "value": "Journal d'activité" } ], + "label.add": [ + { + "type": 0, + "value": "Ajouter" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Ajouter une description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domaine" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,10 +263,16 @@ "value": "Activer l'URL de partage" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, - "value": "Event data" + "value": "Données d'événements" } ], "label.events": [ @@ -257,6 +281,18 @@ "value": "Événements" } ], + "label.field": [ + { + "type": 0, + "value": "Champ" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Champs" + } + ], "label.filter-combined": [ { "type": 0, @@ -272,7 +308,13 @@ "label.funnel": [ { "type": 0, - "value": "Funnel" + "value": "Entonnoir" + } + ], + "label.insights": [ + { + "type": 0, + "value": "Insights" } ], "label.join": [ @@ -434,13 +476,13 @@ "label.queries": [ { "type": 0, - "value": "Queries" + "value": "Requêtes" } ], "label.query": [ { "type": 0, - "value": "Query" + "value": "Requête" } ], "label.query-parameters": [ @@ -458,7 +500,7 @@ "label.referrers": [ { "type": 0, - "value": "Sources" + "value": "Sites référents" } ], "label.refresh": [ @@ -488,7 +530,7 @@ "label.reports": [ { "type": 0, - "value": "Reports" + "value": "Rapports" } ], "label.required": [ @@ -515,6 +557,12 @@ "value": "Rôle" } ], + "label.run-query": [ + { + "type": 0, + "value": "Éxécuter la requête" + } + ], "label.save": [ { "type": 0, @@ -530,7 +578,7 @@ "label.select-date": [ { "type": 0, - "value": "Select date" + "value": "Choisir une période" } ], "label.select-website": [ @@ -671,6 +719,12 @@ "value": "Inconnu" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +761,12 @@ "value": "Voir les détails" } ], + "label.view-only": [ + { + "type": 0, + "value": "Consultation" + } + ], "label.views": [ { "type": 0, @@ -737,12 +797,180 @@ "value": "Sites" } ], + "label.window": [ + { + "type": 0, + "value": "Fenêtre" + } + ], "label.yesterday": [ { "type": 0, "value": "Hier" } ], + "labels.after": [ + { + "type": 0, + "value": "Après" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Moyenne" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Avant" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Répartition" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contient" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Créer un rapport" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Ne contient pas" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "N'est pas égal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Est égal" + } + ], + "labels.false": [ + { + "type": 0, + "value": "Faux" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filtres" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Supérieur à" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Supérieur ou égal à" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Inférieur à" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Inférieur ou égal à" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Vue d'ensemble" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Somme" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Nombre d'enregistrements" + } + ], + "labels.true": [ + { + "type": 0, + "value": "Vrai" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Sans titre" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Valeur" + } + ], "message.active-users": [ { "type": 1, @@ -826,7 +1054,7 @@ "message.delete-account": [ { "type": 0, - "value": "To delete this account, type " + "value": "Pour supprimer ce compte, taper " }, { "type": 1, @@ -834,7 +1062,7 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " ci-dessous pour confirmer." } ], "message.delete-website": [ @@ -909,28 +1137,66 @@ "value": " caractères" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Aucune donnée disponible." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "Aucune donnée d'événement disponible." + } + ], "message.no-match-password": [ { "type": 0, "value": "Les mots de passe ne correspondent pas" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "Aucun résultat n'a été trouvé." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "Cette équipe n'a aucun site." + } + ], "message.no-teams": [ { "type": 0, - "value": "Vous n'avez créé aucune équipe." + "value": "Vous n'avez pas créé d'équipe." } ], "message.no-users": [ { "type": 0, - "value": "Il n'y aucun utilisateur." + "value": "Aucun utilisateur." + } + ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Vous n'avez pas configuré de site." } ], "message.page-not-found": [ @@ -942,7 +1208,7 @@ "message.reset-website": [ { "type": 0, - "value": "To reset this website, type " + "value": "Pour réinitialiser ce site, taper " }, { "type": 1, @@ -950,7 +1216,7 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " ci-dessous pour confirmer." } ], "message.reset-website-warning": [ @@ -983,6 +1249,12 @@ "value": "Équipe non trouvée." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Les sites peuvent être vus par tout utilisateur dans l'équipe." + } + ], "message.tracking-code": [ { "type": 0, @@ -1028,29 +1300,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "Cette équipe n'a aucun site." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Vous n'avez configuré aucun site." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Les sites peuvent être vus par tout utilisateur dans l'équipe." - } ] } diff --git a/public/intl/messages/ga-ES.json b/public/intl/messages/ga-ES.json index 2d4fb1534..6101da477 100644 --- a/public/intl/messages/ga-ES.json +++ b/public/intl/messages/ga-ES.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Dominio" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Activar URL de compartición" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Eventos" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -531,6 +573,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -687,6 +735,12 @@ "value": "Descoñecido" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -723,6 +777,12 @@ "value": "Ver detalles" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -753,12 +813,180 @@ "value": "Sitios web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -921,18 +1149,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Sen datos dispoñibles." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Non concordan os contrasinais" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -945,6 +1205,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Non tes sitios web configurados." + } + ], "message.page-not-found": [ { "type": 0, @@ -1003,6 +1269,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1048,29 +1320,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Non tes sitios web configurados." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/he-IL.json b/public/intl/messages/he-IL.json index ca5b8e2b4..7a5c063c7 100644 --- a/public/intl/messages/he-IL.json +++ b/public/intl/messages/he-IL.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "דומיין" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "הפעלת URL שיתוף" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "אירועים" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -515,6 +557,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +719,12 @@ "value": "לא ידוע" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +761,12 @@ "value": "פרטים נוספים" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +797,180 @@ "value": "אתרים" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -905,18 +1133,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "אין מידע זמין" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "סיסמאות לא תואמות" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -929,6 +1189,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "לא מוגדרים אתרים" + } + ], "message.page-not-found": [ { "type": 0, @@ -983,6 +1249,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1028,29 +1300,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "לא מוגדרים אתרים" - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/hi-IN.json b/public/intl/messages/hi-IN.json index 1eb32bf9a..043943854 100644 --- a/public/intl/messages/hi-IN.json +++ b/public/intl/messages/hi-IN.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "डोमेन" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "शेयर URL सक्षम करें" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "स्पर्धाएँ" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "अज्ञात" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "विवरण देखें" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "वेबसाइटों" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "कोई डेटा उपलब्ध नहीं है।" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "पासवर्ड मेल नहीं खाते" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "आपके पास कोई वेबसाइट कॉन्फ़िगर नहीं है।" + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1032,29 +1304,5 @@ "type": 0, "value": " यन्त्र पर" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "आपके पास कोई वेबसाइट कॉन्फ़िगर नहीं है।" - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/hr-HR.json b/public/intl/messages/hr-HR.json index 9a0850472..bfac159a7 100644 --- a/public/intl/messages/hr-HR.json +++ b/public/intl/messages/hr-HR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domena" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Omogući dijeljenje poveznice" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Nepoznato" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Pogledaj detalje" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Web stranice" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Jučer" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Nema dostupnih podataka." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Passwords do not match." } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "You do not have any websites configured." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1054,29 +1326,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "You do not have any websites configured." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/hu-HU.json b/public/intl/messages/hu-HU.json index 502e55e1f..2d12b05b3 100644 --- a/public/intl/messages/hu-HU.json +++ b/public/intl/messages/hu-HU.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domain" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "URL-megosztás engedélyezése" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Események" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Ismeretlen" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Részletek" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Weboldalak" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -917,18 +1145,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Nincs rendelkezésre álló adat." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "A jelszavak nem egyeznek" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -941,6 +1201,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Még nem állítottál be egyetlen weboldalt sem." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1044,29 +1316,5 @@ "type": 0, "value": " böngészőből." } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Még nem állítottál be egyetlen weboldalt sem." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/id-ID.json b/public/intl/messages/id-ID.json index b19e5f738..9a8b5f412 100644 --- a/public/intl/messages/id-ID.json +++ b/public/intl/messages/id-ID.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domain" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Aktifkan URL berbagi" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Perihal" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -515,6 +557,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +719,12 @@ "value": "Tidak diketahui" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +761,12 @@ "value": "Lihat Detil" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +797,180 @@ "value": "Situs web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -881,18 +1109,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Tidak ada data." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Kata sandi tidak cocok" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -905,6 +1165,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Anda tidak memiliki situs web yang dikonfigurasi." + } + ], "message.page-not-found": [ { "type": 0, @@ -963,6 +1229,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1008,29 +1280,5 @@ "type": 1, "value": "os" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Anda tidak memiliki situs web yang dikonfigurasi." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/it-IT.json b/public/intl/messages/it-IT.json index b5f7c14df..dcff2f880 100644 --- a/public/intl/messages/it-IT.json +++ b/public/intl/messages/it-IT.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Dominio" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Abilita URL di condivisione" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Eventi" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Sconosciuto" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Vedi dettagli" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Siti web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Ieri" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -917,18 +1145,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Nessun dato disponibile." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Le password non corrispondono" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -941,6 +1201,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Non hai ancora configurato alcun sito." + } + ], "message.page-not-found": [ { "type": 0, @@ -999,6 +1265,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1044,29 +1316,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Non hai ancora configurato alcun sito." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/ja-JP.json b/public/intl/messages/ja-JP.json index febaa8de2..16b17513e 100644 --- a/public/intl/messages/ja-JP.json +++ b/public/intl/messages/ja-JP.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "ドメイン" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "共有リンクを有効にする" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "イベント" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -527,6 +569,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -683,6 +731,12 @@ "value": "不明" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -719,6 +773,12 @@ "value": "詳細を見る" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -749,12 +809,180 @@ "value": "Webサイト" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -889,18 +1117,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "データがありません。" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "パスワードが一致しません" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -913,6 +1173,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Webサイトが設定されていません。" + } + ], "message.page-not-found": [ { "type": 0, @@ -971,6 +1237,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1016,29 +1288,5 @@ "type": 0, "value": "からの訪問者" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Webサイトが設定されていません。" - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/km-KH.json b/public/intl/messages/km-KH.json index 7200d49d1..938c3df8c 100644 --- a/public/intl/messages/km-KH.json +++ b/public/intl/messages/km-KH.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "ឈ្មោះគេហទំព័រ" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "បើកការចែករំលែក URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "ព្រឹត្តិការណ៍" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -515,6 +557,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +719,12 @@ "value": "មិនស្គាល់" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +761,12 @@ "value": "មើលព័ត៌មានលម្អិត" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +797,180 @@ "value": "គេហទំព័រ" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "ម្សិលមិញ" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -885,18 +1113,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "មិនមានទិន្នន័យទេ។" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "ពាក្យសម្ងាត់មិនត្រូវគ្នាទេ" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -909,6 +1169,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "អ្នកមិនទាន់បានដាក់គេហទំព័រណាមួយចូលទេ។" + } + ], "message.page-not-found": [ { "type": 0, @@ -967,6 +1233,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1012,29 +1284,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "អ្នកមិនទាន់បានដាក់គេហទំព័រណាមួយចូលទេ។" - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/ko-KR.json b/public/intl/messages/ko-KR.json index c2c879d80..4c7b4f539 100644 --- a/public/intl/messages/ko-KR.json +++ b/public/intl/messages/ko-KR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "도메인" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "URL 공유 활성화" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "이벤트" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -527,6 +569,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -683,6 +731,12 @@ "value": "알 수 없음" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -719,6 +773,12 @@ "value": "상세보기" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -749,12 +809,180 @@ "value": "웹사이트" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -889,18 +1117,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "사용 가능한 데이터가 없습니다." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "비밀번호가 일치하지 않음" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -913,6 +1173,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "구성된 웹 사이트가 없습니다." + } + ], "message.page-not-found": [ { "type": 0, @@ -971,6 +1237,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1016,29 +1288,5 @@ "type": 0, "value": "의 방문자" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "구성된 웹 사이트가 없습니다." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/lt-LT.json b/public/intl/messages/lt-LT.json index 21becd38b..46e336669 100644 --- a/public/intl/messages/lt-LT.json +++ b/public/intl/messages/lt-LT.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domenas" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Įjungti bendrinimą su nuoroda" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Įvykiai" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -628,6 +670,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -784,6 +832,12 @@ "value": "Nežinoma" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -820,6 +874,12 @@ "value": "Peržiūrėti detaliau" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -850,12 +910,180 @@ "value": "Svetainės" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "offset": 0, @@ -1038,18 +1266,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Nėra jokių duomenų." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Slaptažodžiai nesutampa" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -1062,6 +1322,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Jūs nesate susikonfiguravę jokių svetainių." + } + ], "message.page-not-found": [ { "type": 0, @@ -1120,6 +1386,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1165,29 +1437,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Jūs nesate susikonfiguravę jokių svetainių." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/mn-MN.json b/public/intl/messages/mn-MN.json index 2638ee43f..0c541031a 100644 --- a/public/intl/messages/mn-MN.json +++ b/public/intl/messages/mn-MN.json @@ -17,6 +17,18 @@ "value": "Үйл ажиллагааны бүртгэл" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Домэйн" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Хуваалцах холбоос идэвхжүүлэх" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Үйлдэл" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Эрх" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Тодорхойгүй" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Дэлгэрүүлж харах" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Вебүүд" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Өчигдөр" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -921,18 +1149,50 @@ "value": " тэмдэгт" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Өгөгдөл алга." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Нууц үг тохирохгүй байна." } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "Энэ багт ямар ч веб алга." + } + ], "message.no-teams": [ { "type": 0, @@ -945,6 +1205,12 @@ "value": "Хэрэглэгч байхгүй байна." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Та ямар нэгэн веб тохируулаагүй байна." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Баг олдсонгүй." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Вебийг багийн бүх гишүүд үзэж болно." + } + ], "message.tracking-code": [ { "type": 0, @@ -1054,29 +1326,5 @@ "type": 0, "value": " хөтөч ашиглан орсон" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "Энэ багт ямар ч веб алга." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Та ямар нэгэн веб тохируулаагүй байна." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Вебийг багийн бүх гишүүд үзэж болно." - } ] } diff --git a/public/intl/messages/ms-MY.json b/public/intl/messages/ms-MY.json index bf2aef02d..1bbcf235b 100644 --- a/public/intl/messages/ms-MY.json +++ b/public/intl/messages/ms-MY.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domain" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Aktifkan url berkongsi" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Peristiwa" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -515,6 +557,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +719,12 @@ "value": "Tidak diketahui" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +761,12 @@ "value": "Lihat butiran" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +797,180 @@ "value": "Laman web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -905,18 +1133,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Tiada data yang boleh didapati." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Kata laluan tidak sepadan" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -929,6 +1189,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Anda tidak ada sebarang laman web yang telah dikonfigurasikan." + } + ], "message.page-not-found": [ { "type": 0, @@ -987,6 +1253,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1032,29 +1304,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Anda tidak ada sebarang laman web yang telah dikonfigurasikan." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/nb-NO.json b/public/intl/messages/nb-NO.json index ee95b9c5e..69d9c6dca 100644 --- a/public/intl/messages/nb-NO.json +++ b/public/intl/messages/nb-NO.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domene" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Aktiver delings-URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Arrangementer" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Ukjent" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Vis detaljer" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Nettsteder" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -917,18 +1145,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Ingen data tilgjengelig." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Passordene er ikke like" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -941,6 +1201,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Du har ikke satt opp noen nettsteder." + } + ], "message.page-not-found": [ { "type": 0, @@ -999,6 +1265,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1044,29 +1316,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Du har ikke satt opp noen nettsteder." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/nl-NL.json b/public/intl/messages/nl-NL.json index 149f095b3..878dddfaa 100644 --- a/public/intl/messages/nl-NL.json +++ b/public/intl/messages/nl-NL.json @@ -17,6 +17,18 @@ "value": "Activiteiten logboek" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domein" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Sta delen via openbare URL toe" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Gebeurtenissen" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Gebruikersrol" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Onbekend" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Meer details" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Gisteren" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " tekens" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Geen gegevens beschikbaar." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Wachtwoorden komen niet overeen" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "Er zijn geen websites gekoppeld aan dit team." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "Er zijn geen gebruikers." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Je hebt geen websites ingesteld." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team niet gevonden." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites kunnen door iedereen in het team worden bekeken." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "Er zijn geen websites gekoppeld aan dit team." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Je hebt geen websites ingesteld." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites kunnen door iedereen in het team worden bekeken." - } ] } diff --git a/public/intl/messages/pl-PL.json b/public/intl/messages/pl-PL.json index ed2c711ed..e88b6a83a 100644 --- a/public/intl/messages/pl-PL.json +++ b/public/intl/messages/pl-PL.json @@ -17,6 +17,18 @@ "value": "Dziennik aktywności" } ], + "label.add": [ + { + "type": 0, + "value": "Dodaj" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Dodaj opis" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domena" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,10 +263,16 @@ "value": "Włącz udostępnianie adresu URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, - "value": "Event data" + "value": "Dane zdarzenia" } ], "label.events": [ @@ -257,6 +281,18 @@ "value": "Zdarzenia" } ], + "label.field": [ + { + "type": 0, + "value": "Pole" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Pola" + } + ], "label.filter-combined": [ { "type": 0, @@ -272,7 +308,13 @@ "label.funnel": [ { "type": 0, - "value": "Funnel" + "value": "Lejek" + } + ], + "label.insights": [ + { + "type": 0, + "value": "Insights" } ], "label.join": [ @@ -448,13 +490,13 @@ "label.query": [ { "type": 0, - "value": "Query" + "value": "Zapytanie" } ], "label.query-parameters": [ { "type": 0, - "value": "Parametry query" + "value": "Parametry zapytania" } ], "label.realtime": [ @@ -496,7 +538,7 @@ "label.reports": [ { "type": 0, - "value": "Reports" + "value": "Raporty" } ], "label.required": [ @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Uruchom zapytanie" + } + ], "label.save": [ { "type": 0, @@ -538,7 +586,7 @@ "label.select-date": [ { "type": 0, - "value": "Select date" + "value": "Wybierz datę" } ], "label.select-website": [ @@ -679,10 +727,16 @@ "value": "Nieznany" } ], + "label.url": [ + { + "type": 0, + "value": "Link" + } + ], "label.urls": [ { "type": 0, - "value": "URLs" + "value": "Linki" } ], "label.user": [ @@ -715,6 +769,12 @@ "value": "Pokaż szczegóły" } ], + "label.view-only": [ + { + "type": 0, + "value": "Tylko do odczytu" + } + ], "label.views": [ { "type": 0, @@ -730,7 +790,7 @@ "label.website": [ { "type": 0, - "value": "Website" + "value": "Witryna" } ], "label.website-id": [ @@ -745,12 +805,180 @@ "value": "Witryny" } ], + "label.window": [ + { + "type": 0, + "value": "Okno" + } + ], "label.yesterday": [ { "type": 0, "value": "Wczoraj" } ], + "labels.after": [ + { + "type": 0, + "value": "Po" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Średnia" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Przed" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Rozbicie" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Zawiera" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Stwórz raport" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Opis" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Nie zawiera" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Nie jest równe" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Równe" + } + ], + "labels.false": [ + { + "type": 0, + "value": "Fałsz" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filtry" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Większe niż" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Większe niż lub równe" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Mniejsze niż" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Mniejsze niż lub równe" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Maks" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Przegląd" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Suma" + } + ], + "labels.total": [ + { + "type": 0, + "value": "W sumie" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Suma rekordów" + } + ], + "labels.true": [ + { + "type": 0, + "value": "Prawda" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Typ" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unikalne" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Bez tytułu" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Wartość" + } + ], "message.active-users": [ { "type": 1, @@ -830,7 +1058,7 @@ "message.delete-account": [ { "type": 0, - "value": "To delete this account, type " + "value": "Aby usunąć to konto, wpisz " }, { "type": 1, @@ -838,13 +1066,13 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " w polu poniżej, aby potwierdzić." } ], "message.delete-website": [ { "type": 0, - "value": "To delete this website, type " + "value": "Aby usunąć tę stronę, wpisz " }, { "type": 1, @@ -852,7 +1080,7 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " w polu poniżej, aby potwierdzić." } ], "message.delete-website-warning": [ @@ -913,18 +1141,50 @@ "value": " znaków" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Brak dostępnych danych." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "Brak dostępnych danych o zdarzeniach." + } + ], "message.no-match-password": [ { "type": 0, "value": "Hasła się nie zgadzają" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "Nie znaleziono wyników." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "Ten zespół nie ma żadnych witryn internetowych." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "Nie ma żadnych użytkowników." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Nie masz skonfigurowanych żadnych witryn internetowych." + } + ], "message.page-not-found": [ { "type": 0, @@ -946,7 +1212,7 @@ "message.reset-website": [ { "type": 0, - "value": "To reset this website, type " + "value": "Aby zresetować tę witrynę, wpisz " }, { "type": 1, @@ -954,7 +1220,7 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " w polu poniżej, aby potwierdzić." } ], "message.reset-website-warning": [ @@ -995,6 +1261,12 @@ "value": "Nie znaleziono zespołu." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Strony internetowe mogą być przeglądane przez każdego członka zespołu." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "Ten zespół nie ma żadnych witryn internetowych." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Nie masz skonfigurowanych żadnych witryn internetowych." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Strony internetowe mogą być przeglądane przez każdego członka zespołu." - } ] } diff --git a/public/intl/messages/pt-BR.json b/public/intl/messages/pt-BR.json index d19c9ab22..e3d7e33da 100644 --- a/public/intl/messages/pt-BR.json +++ b/public/intl/messages/pt-BR.json @@ -17,6 +17,18 @@ "value": "Log de atividade" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domínio" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Ativar link de compartilhamento" } ], + "label.event": [ + { + "type": 0, + "value": "Evento" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Eventos" } ], + "label.field": [ + { + "type": 0, + "value": "Campo" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Campos" + } + ], "label.filter-combined": [ { "type": 0, @@ -272,7 +308,13 @@ "label.funnel": [ { "type": 0, - "value": "Funnel" + "value": "Funil" + } + ], + "label.insights": [ + { + "type": 0, + "value": "Insights" } ], "label.join": [ @@ -523,6 +565,12 @@ "value": "Papel" } ], + "label.run-query": [ + { + "type": 0, + "value": "Executar query" + } + ], "label.save": [ { "type": 0, @@ -538,7 +586,7 @@ "label.select-date": [ { "type": 0, - "value": "Select date" + "value": "Selecionar data" } ], "label.select-website": [ @@ -679,6 +727,12 @@ "value": "Desconhecido" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Ver detalhes" } ], + "label.view-only": [ + { + "type": 0, + "value": "Somente visualização" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Sites" } ], + "label.window": [ + { + "type": 0, + "value": "Janela" + } + ], "label.yesterday": [ { "type": 0, "value": "Ontem" } ], + "labels.after": [ + { + "type": 0, + "value": "Depois" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Antes" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Criar relatório" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Descrição" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Maior que" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Maior que ou igual" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Menor que" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Menor que ou igual" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Tipo" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Único" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Sem título" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Valor" + } + ], "message.active-users": [ { "type": 1, @@ -834,7 +1062,7 @@ "message.delete-account": [ { "type": 0, - "value": "To delete this account, type " + "value": "Para excluir esta conta, digite " }, { "type": 1, @@ -842,13 +1070,13 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " na caixa abaixo para confirmar." } ], "message.delete-website": [ { "type": 0, - "value": "To delete this website, type " + "value": "Para excluir este website, digite " }, { "type": 1, @@ -856,7 +1084,7 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " na caixa abaixo para confirmar." } ], "message.delete-website-warning": [ @@ -917,18 +1145,50 @@ "value": " caracteres" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "Uma nova versão do Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " está disponível!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Sem dados disponíveis." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "Nenhum dado de evento está disponível." + } + ], "message.no-match-password": [ { "type": 0, "value": "As senhas não correspondem" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "Nenhum resultado foi encontrado." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "Este time não possui nenhum site." + } + ], "message.no-teams": [ { "type": 0, @@ -941,6 +1201,12 @@ "value": "Não há nenhum usuário." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Nenhum site foi configurado ainda." + } + ], "message.page-not-found": [ { "type": 0, @@ -950,7 +1216,7 @@ "message.reset-website": [ { "type": 0, - "value": "To reset this website, type " + "value": "Para redefinir este site, digite " }, { "type": 1, @@ -958,7 +1224,7 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " na caixa abaixo para confirmar." } ], "message.reset-website-warning": [ @@ -999,6 +1265,12 @@ "value": "Time não encontrado." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Os sites podem ser visualizados por qualquer membro da equipe." + } + ], "message.tracking-code": [ { "type": 0, @@ -1044,29 +1316,5 @@ "type": 1, "value": "os" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "Este time não possui nenhum site." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Nenhum site foi configurado ainda." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Os sites podem ser visualizados por qualquer membro da equipe." - } ] } diff --git a/public/intl/messages/pt-PT.json b/public/intl/messages/pt-PT.json index e36b5f26d..3120b272c 100644 --- a/public/intl/messages/pt-PT.json +++ b/public/intl/messages/pt-PT.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domínio" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Ativar link de partilha" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Eventos" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Desconhecido" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Ver detalhes" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -917,18 +1145,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Sem dados disponíveis." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "As senhas não coincidem" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -941,6 +1201,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Não tens nenhum website configurado." + } + ], "message.page-not-found": [ { "type": 0, @@ -999,6 +1265,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1044,29 +1316,5 @@ "type": 1, "value": "os" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Não tens nenhum website configurado." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/ro-RO.json b/public/intl/messages/ro-RO.json index 479847005..0694cf520 100644 --- a/public/intl/messages/ro-RO.json +++ b/public/intl/messages/ro-RO.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domeniu" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Activare adresă URL de distribuire" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Evenimente" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Necunoscut" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Vizualizare detalii" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Site-uri web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Nici o informație disponibilă." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Parolele nu se potrivesc" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Nu aveți niciun site web configurat." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Nu aveți niciun site web configurat." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/ru-RU.json b/public/intl/messages/ru-RU.json index d15b9fac2..317fcbeeb 100644 --- a/public/intl/messages/ru-RU.json +++ b/public/intl/messages/ru-RU.json @@ -17,6 +17,18 @@ "value": "Журнал активности" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Домен" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Разрешить делиться ссылкой" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "События" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Роль" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Неизвестно" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Посмотреть детали" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Сайты" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Вчера" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -881,18 +1109,50 @@ "value": " символов" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Нет данных." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Пароли не совпадают" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "У этой команды нет ни одного сайта." + } + ], "message.no-teams": [ { "type": 0, @@ -905,6 +1165,12 @@ "value": "Нет пользователей." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "У вас нет настроенных сайтов." + } + ], "message.page-not-found": [ { "type": 0, @@ -955,6 +1221,12 @@ "value": "Команда не найдена." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Сайты могут просматривать все члены команды." + } + ], "message.tracking-code": [ { "type": 0, @@ -1000,29 +1272,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "У этой команды нет ни одного сайта." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "У вас нет настроенных сайтов." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Сайты могут просматривать все члены команды." - } ] } diff --git a/public/intl/messages/si-LK.json b/public/intl/messages/si-LK.json index e12f3008f..ccee2f6c7 100644 --- a/public/intl/messages/si-LK.json +++ b/public/intl/messages/si-LK.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "වසම" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "බෙදාගැනීමේ URL සබල කරන්න" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "නොදනී" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "තොරතුරු පෙන්වන්න" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "වෙබ් අඩවි" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "ඊයේ" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -905,18 +1133,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "පෙන්වීමට දත්ත නොමැත." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Passwords do not match." } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -929,6 +1189,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "You do not have any websites configured." + } + ], "message.page-not-found": [ { "type": 0, @@ -987,6 +1253,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1046,29 +1318,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "You do not have any websites configured." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/sk-SK.json b/public/intl/messages/sk-SK.json index e475e20fe..9febb0adf 100644 --- a/public/intl/messages/sk-SK.json +++ b/public/intl/messages/sk-SK.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Doména" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Povoliť zdielanie URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Udalosti" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Neznámý" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Zobraziť detaily" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Weby" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Žiadne data." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Hesla se nezhodujú" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Nemáte nastavený žiadny web." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Nemáte nastavený žiadny web." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/sl-SI.json b/public/intl/messages/sl-SI.json index d358eaaa2..813a9c7f2 100644 --- a/public/intl/messages/sl-SI.json +++ b/public/intl/messages/sl-SI.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domena" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Omogoči URL za skupno rabo" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Dogodki" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Neznano" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Prikaži podrobnosti" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Spletna mesta" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Podatki niso na voljo." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Gesli se ne ujemata" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Ni nastavljenih spletnih mest." + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Ni nastavljenih spletnih mest." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/sv-SE.json b/public/intl/messages/sv-SE.json index dc9ee53cd..e55ae25a6 100644 --- a/public/intl/messages/sv-SE.json +++ b/public/intl/messages/sv-SE.json @@ -17,6 +17,18 @@ "value": "Aktivitetslogg" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Domän" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Aktivera delnings-URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Händelser" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Roll" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Okänd" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Visa detaljer" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Webbsajt" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Igår" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -917,18 +1145,50 @@ "value": " tecken" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Ingen data tillgänglig." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Lösenorden är inte samma" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "Det här teamet har inga webbsajter." + } + ], "message.no-teams": [ { "type": 0, @@ -941,6 +1201,12 @@ "value": "Det finns inga användare." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Du har inga webbsajter." + } + ], "message.page-not-found": [ { "type": 0, @@ -999,6 +1265,12 @@ "value": "Team kan inte hittas." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websajter kan ses av alla i teamet." + } + ], "message.tracking-code": [ { "type": 0, @@ -1044,29 +1316,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "Det här teamet har inga webbsajter." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Du har inga webbsajter." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websajter kan ses av alla i teamet." - } ] } diff --git a/public/intl/messages/ta-IN.json b/public/intl/messages/ta-IN.json index 3f4f03b58..5afccd0ed 100644 --- a/public/intl/messages/ta-IN.json +++ b/public/intl/messages/ta-IN.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "கள முகவரி" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "கள முகவரியை பகிரலாம்" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "நிகழ்வுகள்" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "தெரியாத" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "விபரங்களை பார்" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "வலைத்தளங்கள்" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "தரவு எதுவும் கிடைக்கவில்லை." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "இருக்கடவுச்சொல் பொருந்தவில்லை" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "உங்களிடம் எந்த வலைத்தளங்களும் கட்டமைக்கப்படவில்லை." + } + ], "message.page-not-found": [ { "type": 0, @@ -991,6 +1257,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1036,29 +1308,5 @@ "type": 0, "value": "லில் பயன்படுத்துகிறார்" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "உங்களிடம் எந்த வலைத்தளங்களும் கட்டமைக்கப்படவில்லை." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/th-TH.json b/public/intl/messages/th-TH.json index b8b9e46f8..092c3fb84 100644 --- a/public/intl/messages/th-TH.json +++ b/public/intl/messages/th-TH.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "โดเมน" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "เปิดใช้งานการแชร์ลิงก์" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "เหตุการณ์" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -515,6 +557,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +719,12 @@ "value": "ไม่รู้จัก" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +761,12 @@ "value": "แสดงรายละเอียด" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +797,180 @@ "value": "เว็บไซต์" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -909,18 +1137,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "ไม่มีข้อมูล." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "รหัสผ่านไม่ตรงกัน" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -933,6 +1193,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "คุณยังไม่ได้ตั้งค่าเว็บไซต์ใด ๆ ไว้." + } + ], "message.page-not-found": [ { "type": 0, @@ -991,6 +1257,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1036,29 +1308,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "คุณยังไม่ได้ตั้งค่าเว็บไซต์ใด ๆ ไว้." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/tr-TR.json b/public/intl/messages/tr-TR.json index 4fc756035..6f5c6e3e8 100644 --- a/public/intl/messages/tr-TR.json +++ b/public/intl/messages/tr-TR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Alan adı" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Anonim paylaşım URL'i aktif" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Olaylar" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Bilinmeyen" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Detayı incele" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Web siteleri" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -885,18 +1113,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Henüz hiç veri yok." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Parolalar uyuşmuyor" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -909,6 +1169,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Henüz hiç web sitesi tanımlamadınız" + } + ], "message.page-not-found": [ { "type": 0, @@ -963,6 +1229,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1008,29 +1280,5 @@ "type": 1, "value": "browser" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Henüz hiç web sitesi tanımlamadınız" - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/uk-UA.json b/public/intl/messages/uk-UA.json index 7ff7f5d03..5f54c972a 100644 --- a/public/intl/messages/uk-UA.json +++ b/public/intl/messages/uk-UA.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Домен" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Дозволити ділитися посиланням" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Події" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "Невідомо" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "Переглянути деталі" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "Сайти" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -889,18 +1117,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Немає даних." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Паролі не співпадають" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -913,6 +1173,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "У вас немає налаштованих сайтів." + } + ], "message.page-not-found": [ { "type": 0, @@ -971,6 +1237,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1016,29 +1288,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "У вас немає налаштованих сайтів." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/ur-PK.json b/public/intl/messages/ur-PK.json index 196d62c6e..adf1eb311 100644 --- a/public/intl/messages/ur-PK.json +++ b/public/intl/messages/ur-PK.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "ڈومین" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "شیئر یو آر ایل کو فعال کریں" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "واقعات" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "نامعلوم" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "تفصیلات دیکھیں" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "ویب سائٹس" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -913,18 +1141,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "مواد موجود نہیں ہے." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "پاس ورڈز مماثل نہیں ہیں" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -937,6 +1197,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "آپ کے پاس کوئی ویب سائٹ کنفیگر نہیں ہے۔" + } + ], "message.page-not-found": [ { "type": 0, @@ -995,6 +1261,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1040,29 +1312,5 @@ "type": 0, "value": " سے آنے والا" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "آپ کے پاس کوئی ویب سائٹ کنفیگر نہیں ہے۔" - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/vi-VN.json b/public/intl/messages/vi-VN.json index 2a432b005..d0b3b69b9 100644 --- a/public/intl/messages/vi-VN.json +++ b/public/intl/messages/vi-VN.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "Tên miền" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "Bật khả năng chia sẻ URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "Sự kiện" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -515,6 +557,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +719,12 @@ "value": "Không rõ" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +761,12 @@ "value": "Xem chi tiết" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +797,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -905,18 +1133,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "Không có dữ liệu." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "Mật khẩu không đồng nhất" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -929,6 +1189,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "Bạn chưa có bất cứ website nào." + } + ], "message.page-not-found": [ { "type": 0, @@ -987,6 +1253,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1032,29 +1304,5 @@ "type": 1, "value": "device" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "Bạn chưa có bất cứ website nào." - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/public/intl/messages/zh-CN.json b/public/intl/messages/zh-CN.json index 075cbf722..29a4ea1fc 100644 --- a/public/intl/messages/zh-CN.json +++ b/public/intl/messages/zh-CN.json @@ -17,6 +17,18 @@ "value": "活动日志" } ], + "label.add": [ + { + "type": 0, + "value": "添加" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "添加描述" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "域名" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "启用共享链接" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "行为类别" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -527,6 +569,12 @@ "value": "角色" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -683,6 +731,12 @@ "value": "未知" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -719,6 +773,12 @@ "value": "查看更多" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -749,12 +809,180 @@ "value": "网站" } ], + "label.window": [ + { + "type": 0, + "value": "窗口" + } + ], "label.yesterday": [ { "type": 0, "value": "昨天" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "创建报告" + } + ], + "labels.description": [ + { + "type": 0, + "value": "描述" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "未命名" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -814,7 +1042,7 @@ "message.delete-account": [ { "type": 0, - "value": "To delete this account, type " + "value": "确定删除该账户, 请在下面的输入框中输入 " }, { "type": 1, @@ -822,13 +1050,13 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " 进行二次确认。" } ], "message.delete-website": [ { "type": 0, - "value": "To delete this website, type " + "value": "确定删除该网站, 请在下面的输入框中输入 " }, { "type": 1, @@ -836,7 +1064,7 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " 进行二次确认。" } ], "message.delete-website-warning": [ @@ -897,18 +1125,50 @@ "value": " 个字符" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "无可用数据。" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "密码不一致" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "没有找到任何结果。" + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "这个团队没有任何网站。" + } + ], "message.no-teams": [ { "type": 0, @@ -921,6 +1181,12 @@ "value": "没有任何用户。" } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "你还没有设置任何网站。" + } + ], "message.page-not-found": [ { "type": 0, @@ -930,7 +1196,7 @@ "message.reset-website": [ { "type": 0, - "value": "To reset this website, type " + "value": "确定重置该网站, 请在下面的输入框中输入 " }, { "type": 1, @@ -938,7 +1204,7 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " 进行二次确认。" } ], "message.reset-website-warning": [ @@ -979,6 +1245,12 @@ "value": "未找到团队。" } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "团队中的任何人都可查看网站。" + } + ], "message.tracking-code": [ { "type": 0, @@ -988,7 +1260,7 @@ "message.user-deleted": [ { "type": 0, - "value": "User detected." + "value": "User deleted." } ], "message.visitor-log": [ @@ -1028,29 +1300,5 @@ "type": 0, "value": " 浏览器进行访问。" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "这个团队没有任何网站。" - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "你还没有设置任何网站。" - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "团队中的任何人都可查看网站。" - } ] } diff --git a/public/intl/messages/zh-TW.json b/public/intl/messages/zh-TW.json index 63d9a69e4..c51bd538e 100644 --- a/public/intl/messages/zh-TW.json +++ b/public/intl/messages/zh-TW.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -227,6 +239,12 @@ "value": "域名" } ], + "label.dropoff": [ + { + "type": 0, + "value": "Dropoff" + } + ], "label.edit": [ { "type": 0, @@ -245,6 +263,12 @@ "value": "啟用分享連結" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +281,18 @@ "value": "行為類別" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -275,6 +311,12 @@ "value": "Funnel" } ], + "label.insights": [ + { + "type": 0, + "value": "Insights" + } + ], "label.join": [ { "type": 0, @@ -523,6 +565,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +727,12 @@ "value": "未知" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +769,12 @@ "value": "查看更多" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +805,180 @@ "value": "網站" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -893,18 +1121,50 @@ "value": " characters" } ], + "message.new-version-available": [ + { + "type": 0, + "value": "A new version of Umami " + }, + { + "type": 1, + "value": "version" + }, + { + "type": 0, + "value": " is available!" + } + ], "message.no-data-available": [ { "type": 0, "value": "無可用數據。" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, "value": "密碼不一致" } ], + "message.no-results-found": [ + { + "type": 0, + "value": "No results were found." + } + ], + "message.no-team-websites": [ + { + "type": 0, + "value": "This team does not have any websites." + } + ], "message.no-teams": [ { "type": 0, @@ -917,6 +1177,12 @@ "value": "There are no users." } ], + "message.no-websites-configured": [ + { + "type": 0, + "value": "目前無任何網站設定。" + } + ], "message.page-not-found": [ { "type": 0, @@ -975,6 +1241,12 @@ "value": "Team not found." } ], + "message.team-websites-info": [ + { + "type": 0, + "value": "Websites can be viewed by anyone on the team." + } + ], "message.tracking-code": [ { "type": 0, @@ -1024,29 +1296,5 @@ "type": 0, "value": " 進行訪問。" } - ], - "messages.no-results-found": [ - { - "type": 0, - "value": "No results were found." - } - ], - "messages.no-team-websites": [ - { - "type": 0, - "value": "This team does not have any websites." - } - ], - "messages.no-websites-configured": [ - { - "type": 0, - "value": "目前無任何網站設定。" - } - ], - "messages.team-websites-info": [ - { - "type": 0, - "value": "Websites can be viewed by anyone on the team." - } ] } diff --git a/queries/admin/report.ts b/queries/admin/report.ts index 6b557a7a5..ee7a05920 100644 --- a/queries/admin/report.ts +++ b/queries/admin/report.ts @@ -13,19 +13,29 @@ export async function getReportById(reportId: string): Promise { }); } -export async function getReports(where: Prisma.ReportWhereInput): Promise { +export async function getUserReports(userId: string): Promise { return prisma.client.report.findMany({ - where, + where: { + userId, + }, + }); +} + +export async function getWebsiteReports(websiteId: string): Promise { + return prisma.client.report.findMany({ + where: { + websiteId, + }, }); } export async function updateReport( + reportId: string, data: Prisma.ReportUpdateInput, - where: Prisma.ReportWhereUniqueInput, ): Promise { - return prisma.client.report.update({ data, where }); + return prisma.client.report.update({ where: { id: reportId }, data }); } -export async function deleteReport(where: Prisma.ReportWhereUniqueInput): Promise { - return prisma.client.report.delete({ where }); +export async function deleteReport(reportId: string): Promise { + return prisma.client.report.delete({ where: { id: reportId } }); } diff --git a/queries/admin/team.ts b/queries/admin/team.ts index b965119b3..a8b3385ca 100644 --- a/queries/admin/team.ts +++ b/queries/admin/team.ts @@ -1,17 +1,31 @@ -import { Prisma, Team, TeamWebsite } from '@prisma/client'; +import { Prisma, Team } from '@prisma/client'; import prisma from 'lib/prisma'; -import { uuid } from 'lib/crypto'; import { ROLES } from 'lib/constants'; +import { uuid } from 'lib/crypto'; + +export interface GetTeamOptions { + includeTeamUser?: boolean; +} + +async function getTeam(where: Prisma.TeamWhereInput, options: GetTeamOptions = {}): Promise { + const { includeTeamUser = false } = options; -export async function getTeam(where: Prisma.TeamWhereInput): Promise { return prisma.client.team.findFirst({ where, include: { - teamUser: true, + teamUser: includeTeamUser, }, }); } +export function getTeamById(teamId: string, options: GetTeamOptions = {}) { + return getTeam({ id: teamId }, options); +} + +export function getTeamByAccessCode(accessCode: string, options: GetTeamOptions = {}) { + return getTeam({ accessCode }, options); +} + export async function getTeams(where: Prisma.TeamWhereInput): Promise { return prisma.client.team.findMany({ where, @@ -36,16 +50,15 @@ export async function createTeam(data: Prisma.TeamCreateInput, userId: string): ]); } -export async function updateTeam( - data: Prisma.TeamUpdateInput, - where: Prisma.TeamWhereUniqueInput, -): Promise { +export async function updateTeam(teamId: string, data: Prisma.TeamUpdateInput): Promise { return prisma.client.team.update({ + where: { + id: teamId, + }, data: { ...data, updatedAt: new Date(), }, - where, }); } diff --git a/queries/admin/teamUser.ts b/queries/admin/teamUser.ts index b1c295bec..c5b27a024 100644 --- a/queries/admin/teamUser.ts +++ b/queries/admin/teamUser.ts @@ -53,12 +53,14 @@ export async function createTeamUser( } export async function updateTeamUser( + teamUserId: string, data: Prisma.TeamUserUpdateInput, - where: Prisma.TeamUserWhereUniqueInput, ): Promise { return prisma.client.teamUser.update({ + where: { + id: teamUserId, + }, data, - where, }); } diff --git a/queries/admin/teamWebsite.ts b/queries/admin/teamWebsite.ts index 0aedc3c7a..169526ddf 100644 --- a/queries/admin/teamWebsite.ts +++ b/queries/admin/teamWebsite.ts @@ -22,7 +22,7 @@ export async function getTeamWebsite( }); } -export async function getTeamWebsiteByTeamMemberId( +export async function findTeamWebsiteByUserId( websiteId: string, userId: string, ): Promise { diff --git a/queries/admin/user.ts b/queries/admin/user.ts index c4a5150c7..f60c48010 100644 --- a/queries/admin/user.ts +++ b/queries/admin/user.ts @@ -5,9 +5,14 @@ import { ROLES } from 'lib/constants'; import prisma from 'lib/prisma'; import { Website, User, Role } from 'lib/types'; -export async function getUser( +export interface GetUserOptions { + includePassword?: boolean; + showDeleted?: boolean; +} + +async function getUser( where: Prisma.UserWhereInput | Prisma.UserWhereUniqueInput, - options: { includePassword?: boolean; showDeleted?: boolean } = {}, + options: GetUserOptions = {}, ): Promise { const { includePassword = false, showDeleted = false } = options; @@ -23,6 +28,14 @@ export async function getUser( }); } +export async function getUserById(userId: string, options: GetUserOptions = {}) { + return getUser({ id: userId }, options); +} + +export async function getUserByUsername(username: string, options: GetUserOptions = {}) { + return getUser({ username }, options); +} + export async function getUsers(): Promise { return prisma.client.user.findMany({ take: 100, @@ -73,7 +86,64 @@ export async function getUserTeams(userId: string): Promise< }); } -export async function getUserWebsites(userId: string): Promise { +export async function getUserWebsites( + userId: string, + options?: { includeTeams: boolean }, +): Promise { + const { rawQuery } = prisma; + + if (options?.includeTeams) { + const websites = await rawQuery( + ` + select + website_id as "id", + name, + domain, + share_id as "shareId", + reset_at as "resetAt", + user_id as "userId", + created_at as "createdAt", + updated_at as "updatedAt", + deleted_at as "deletedAt", + null as "teamId", + null as "teamName" + from website + where user_id = {{userId::uuid}} + and deleted_at is null + union + select + w.website_id as "id", + w.name, + w.domain, + w.share_id as "shareId", + w.reset_at as "resetAt", + w.user_id as "userId", + w.created_at as "createdAt", + w.updated_at as "updatedAt", + w.deleted_at as "deletedAt", + t.team_id as "teamId", + t.name as "teamName" + from website w + inner join team_website tw + on tw.website_id = w.website_id + inner join team t + on t.team_id = tw.team_id + inner join team_user tu + on tu.team_id = tw.team_id + where tu.user_id = {{userId::uuid}} + and w.deleted_at is null + `, + { userId }, + ); + + return websites.reduce((arr, item) => { + if (!arr.find(({ id }) => id === item.id)) { + return arr.concat(item); + } + return arr; + }, []); + } + return prisma.client.website.findMany({ where: { userId, diff --git a/queries/admin/website.ts b/queries/admin/website.ts index 8714d8c98..35f32bac2 100644 --- a/queries/admin/website.ts +++ b/queries/admin/website.ts @@ -2,12 +2,20 @@ import { Prisma, Website } from '@prisma/client'; import cache from 'lib/cache'; import prisma from 'lib/prisma'; -export async function getWebsite(where: Prisma.WebsiteWhereUniqueInput): Promise { +async function getWebsite(where: Prisma.WebsiteWhereUniqueInput): Promise { return prisma.client.website.findUnique({ where, }); } +export async function getWebsiteById(id: string) { + return getWebsite({ id }); +} + +export async function getWebsiteByShareId(shareId: string) { + return getWebsite({ shareId }); +} + export async function getWebsites(): Promise { return prisma.client.website.findMany({ orderBy: { diff --git a/queries/analytics/event/getEventMetrics.ts b/queries/analytics/event/getEventMetrics.ts deleted file mode 100644 index ea05dae43..000000000 --- a/queries/analytics/event/getEventMetrics.ts +++ /dev/null @@ -1,110 +0,0 @@ -import prisma from 'lib/prisma'; -import clickhouse from 'lib/clickhouse'; -import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; -import { WebsiteEventMetric } from 'lib/types'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; - -export async function getEventMetrics( - ...args: [ - websiteId: string, - data: { - startDate: Date; - endDate: Date; - timezone: string; - unit: string; - filters: { - url: string; - eventName: string; - }; - }, - ] -): Promise { - return runQuery({ - [PRISMA]: () => relationalQuery(...args), - [CLICKHOUSE]: () => clickhouseQuery(...args), - }); -} - -async function relationalQuery( - websiteId: string, - { - startDate, - endDate, - timezone = 'utc', - unit = 'day', - filters, - }: { - startDate: Date; - endDate: Date; - timezone: string; - unit: string; - filters: { - url: string; - eventName: string; - }; - }, -) { - const { toUuid, rawQuery, getDateQuery, getFilterQuery } = prisma; - const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params: any = [websiteId, resetDate, startDate, endDate]; - const filterQuery = getFilterQuery(filters, params); - - return rawQuery( - `select - event_name x, - ${getDateQuery('created_at', unit, timezone)} t, - count(*) y - from website_event - where website_id = $1${toUuid()} - and created_at >= $2 - and created_at between $3 and $4 - and event_type = ${EVENT_TYPE.customEvent} - ${filterQuery} - group by 1, 2 - order by 2`, - params, - ); -} - -async function clickhouseQuery( - websiteId: string, - { - startDate, - endDate, - timezone = 'utc', - unit = 'day', - filters, - }: { - startDate: Date; - endDate: Date; - timezone: string; - unit: string; - filters: { - url: string; - eventName: string; - }; - }, -) { - const { rawQuery, getDateQuery, getDateFormat, getBetweenDates, getFilterQuery } = clickhouse; - const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params = { websiteId }; - - return rawQuery( - `select - event_name x, - ${getDateQuery('created_at', unit, timezone)} t, - count(*) y - from website_event - where website_id = {websiteId:UUID} - and event_type = ${EVENT_TYPE.customEvent} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - ${getFilterQuery(filters, params)} - group by x, t - order by t`, - params, - ); -} diff --git a/queries/analytics/eventData/getEventDataEvents.ts b/queries/analytics/eventData/getEventDataEvents.ts new file mode 100644 index 000000000..634a28a26 --- /dev/null +++ b/queries/analytics/eventData/getEventDataEvents.ts @@ -0,0 +1,120 @@ +import prisma from 'lib/prisma'; +import clickhouse from 'lib/clickhouse'; +import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import { WebsiteEventDataFields } from 'lib/types'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; + +export async function getEventDataEvents( + ...args: [ + websiteId: string, + startDate: Date, + endDate: Date, + filters: { field?: string; event?: string }, + ] +): Promise { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery( + websiteId: string, + startDate: Date, + endDate: Date, + filters: { field?: string; event?: string }, +) { + const { rawQuery } = prisma; + const website = await loadWebsite(websiteId); + const { event } = filters; + + if (event) { + return rawQuery( + ` + select + we.event_name as event, + ed.event_key as field, + ed.data_type as type, + ed.string_value as value, + count(*) as total + from event_data as ed + inner join website_event as we + on we.event_id = ed.website_event_id + where ed.website_id = {{websiteId::uuid}} + and ed.created_at between {{startDate}} and {{endDate}} + and we.event_name = {{event}} + group by we.event_name, ed.event_key, ed.data_type, ed.string_value + order by 1 asc, 2 asc, 3 asc, 4 desc + `, + { websiteId, startDate: maxDate(startDate, website.resetAt), endDate, ...filters }, + ); + } + return rawQuery( + ` + select + we.event_name as event, + ed.event_key as field, + ed.data_type as type, + count(*) as total + from event_data as ed + inner join website_event as we + on we.event_id = ed.website_event_id + where ed.website_id = {{websiteId::uuid}} + and ed.created_at between {{startDate}} and {{endDate}} + group by we.event_name, ed.event_key, ed.data_type + order by 1 asc, 2 asc + limit 100 + `, + { websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, + ); +} + +async function clickhouseQuery( + websiteId: string, + startDate: Date, + endDate: Date, + filters: { field?: string; event?: string }, +) { + const { rawQuery } = clickhouse; + const website = await loadWebsite(websiteId); + const { event } = filters; + + if (event) { + return rawQuery( + ` + select + event_name as event, + event_key as field, + data_type as type, + string_value as value, + count(*) as total + from event_data + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_name = {event:String} + group by event_key, data_type, string_value, event_name + order by 1 asc, 2 asc, 3 asc, 4 desc + limit 100 + `, + { ...filters, websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, + ); + } + + return rawQuery( + ` + select + event_name as event, + event_key as field, + data_type as type, + count(*) as total + from event_data + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + group by event_key, data_type, event_name + order by 1 asc, 2 asc + limit 100 + `, + { websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, + ); +} diff --git a/queries/analytics/eventData/getEventDataFields.ts b/queries/analytics/eventData/getEventDataFields.ts index 6306d239e..516c58d0c 100644 --- a/queries/analytics/eventData/getEventDataFields.ts +++ b/queries/analytics/eventData/getEventDataFields.ts @@ -2,8 +2,8 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; import { WebsiteEventDataFields } from 'lib/types'; -import { loadWebsite } from 'lib/query'; -import { DEFAULT_CREATED_AT } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getEventDataFields( ...args: [websiteId: string, startDate: Date, endDate: Date, field?: string] @@ -15,82 +15,81 @@ export async function getEventDataFields( } async function relationalQuery(websiteId: string, startDate: Date, endDate: Date, field: string) { - const { toUuid, rawQuery } = prisma; + const { rawQuery } = prisma; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); if (field) { return rawQuery( - `select event_key as field, - string_value as value, - count(*) as total - from event_data - where website_id = $1${toUuid()} - and event_key = $2 - and created_at >= $3 - and created_at between $4 and $5 - group by event_key, string_value - order by 3 desc, 2 desc, 1 asc - limit 100 + ` + select + event_key as field, + string_value as value, + count(*) as total + from event_data + where website_id = {{websiteId::uuid}} + and event_key = {{field}} + and created_at between {{startDate}} and {{endDate}} + group by event_key, string_value + order by 3 desc, 2 desc, 1 asc + limit 100 `, - [websiteId, field, resetDate, startDate, endDate] as any, + { websiteId, field, startDate: maxDate(startDate, website.resetAt), endDate }, ); } return rawQuery( - `select - event_key as field, - data_type as type, - count(*) as total - from event_data - where website_id = $1${toUuid()} - and created_at >= $2 - and created_at between $3 and $4 - group by event_key, data_type - order by 3 desc, 2 asc, 1 asc - limit 100 + ` + select + event_key as field, + data_type as type, + count(*) as total + from event_data + where website_id = {{websiteId::uuid}} + and created_at between {{startDate}} and {{endDate}} + group by event_key, data_type + order by 3 desc, 2 asc, 1 asc + limit 100 `, - [websiteId, resetDate, startDate, endDate] as any, + { websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, ); } async function clickhouseQuery(websiteId: string, startDate: Date, endDate: Date, field: string) { - const { rawQuery, getDateFormat, getBetweenDates } = clickhouse; + const { rawQuery } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); if (field) { return rawQuery( - `select + ` + select event_key as field, string_value as value, count(*) as total - from event_data - where website_id = {websiteId:UUID} - and event_key = {field:String} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - group by event_key, string_value - order by 3 desc, 2 desc, 1 asc - limit 100 - `, - { websiteId, field }, + from event_data + where website_id = {websiteId:UUID} + and event_key = {field:String} + and created_at between {startDate:DateTime} and {endDate:DateTime} + group by event_key, string_value + order by 3 desc, 2 desc, 1 asc + limit 100 + `, + { websiteId, field, startDate: maxDate(startDate, website.resetAt), endDate }, ); } return rawQuery( - `select - event_key as field, - data_type as type, - count(*) as total - from event_data - where website_id = {websiteId:UUID} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - group by event_key, data_type - order by 3 desc, 2 asc, 1 asc - limit 100 + ` + select + event_key as field, + data_type as type, + count(*) as total + from event_data + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + group by event_key, data_type + order by 3 desc, 2 asc, 1 asc + limit 100 `, - { websiteId }, + { websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, ); } diff --git a/queries/analytics/eventData/getEventDataUsage.ts b/queries/analytics/eventData/getEventDataUsage.ts index 5d470c3c5..78bf7c916 100644 --- a/queries/analytics/eventData/getEventDataUsage.ts +++ b/queries/analytics/eventData/getEventDataUsage.ts @@ -1,28 +1,26 @@ import clickhouse from 'lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from 'lib/db'; export function getEventDataUsage(...args: [websiteIds: string[], startDate: Date, endDate: Date]) { return runQuery({ - [PRISMA]: () => relationalQuery(...args), + [PRISMA]: notImplemented, [CLICKHOUSE]: () => clickhouseQuery(...args), }); } -function relationalQuery(websiteIds: string[], startDate: Date, endDate: Date) { - throw new Error('Not Implemented'); -} - function clickhouseQuery(websiteIds: string[], startDate: Date, endDate: Date) { const { rawQuery } = clickhouse; return rawQuery( - `select - website_id as websiteId, - count(*) as count + ` + select + website_id as websiteId, + count(*) as count from event_data where created_at between {startDate:DateTime64} and {endDate:DateTime64} - and website_id in {websiteIds:Array(UUID)} - group by website_id`, + and website_id in {websiteIds:Array(UUID)} + group by website_id + `, { websiteIds, startDate, diff --git a/queries/analytics/eventData/saveEventData.ts b/queries/analytics/eventData/saveEventData.ts index f30ceb903..0f1ddb375 100644 --- a/queries/analytics/eventData/saveEventData.ts +++ b/queries/analytics/eventData/saveEventData.ts @@ -2,7 +2,7 @@ import { Prisma } from '@prisma/client'; import { DATA_TYPE } from 'lib/constants'; import { uuid } from 'lib/crypto'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; -import { flattenJSON } from 'lib/dynamicData'; +import { flattenJSON } from 'lib/data'; import kafka from 'lib/kafka'; import prisma from 'lib/prisma'; import { DynamicData } from 'lib/types'; @@ -31,7 +31,7 @@ async function relationalQuery(data: { const jsonKeys = flattenJSON(eventData); - //id, websiteEventId, eventStringValue + // id, websiteEventId, eventStringValue const flattendData = jsonKeys.map(a => ({ id: uuid(), websiteEventId: eventId, @@ -76,7 +76,9 @@ async function clickhouseQuery(data: { event_name: eventName, event_key: a.key, string_value: - a.dynamicDataType === DATA_TYPE.date ? getDateFormat(a.value, 'isoUtcDateTime') : a.value, + a.dynamicDataType === DATA_TYPE.date + ? getDateFormat(a.value, 'isoUtcDateTime') + : a.value.toString(), number_value: a.dynamicDataType === DATA_TYPE.number ? a.value : null, date_value: a.dynamicDataType === DATA_TYPE.date ? getDateFormat(a.value) : null, data_type: a.dynamicDataType, diff --git a/queries/analytics/events/getEventMetrics.ts b/queries/analytics/events/getEventMetrics.ts new file mode 100644 index 000000000..e97540366 --- /dev/null +++ b/queries/analytics/events/getEventMetrics.ts @@ -0,0 +1,87 @@ +import prisma from 'lib/prisma'; +import clickhouse from 'lib/clickhouse'; +import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; +import { WebsiteEventMetric } from 'lib/types'; +import { EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; + +export interface GetEventMetricsCriteria { + startDate: Date; + endDate: Date; + timezone: string; + unit: string; + filters: { + url: string; + eventName: string; + }; +} + +export async function getEventMetrics( + ...args: [websiteId: string, criteria: GetEventMetricsCriteria] +): Promise { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery(websiteId: string, criteria: GetEventMetricsCriteria) { + const { startDate, endDate, timezone = 'utc', unit = 'day', filters } = criteria; + const { rawQuery, getDateQuery, getFilterQuery } = prisma; + const website = await loadWebsite(websiteId); + const filterQuery = getFilterQuery(filters); + + return rawQuery( + ` + select + event_name x, + ${getDateQuery('created_at', unit, timezone)} t, + count(*) y + from website_event + where website_id = {{websiteId::uuid}} + and created_at between {{startDate}} and {{endDate}} + and event_type = {{eventType}} + ${filterQuery} + group by 1, 2 + order by 2 + `, + { + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.customEvent, + ...filters, + }, + ); +} + +async function clickhouseQuery(websiteId: string, criteria: GetEventMetricsCriteria) { + const { startDate, endDate, timezone = 'utc', unit = 'day', filters } = criteria; + const { rawQuery, getDateQuery, getFilterQuery } = clickhouse; + const website = await loadWebsite(websiteId); + const filterQuery = getFilterQuery(filters); + + return rawQuery( + ` + select + event_name x, + ${getDateQuery('created_at', unit, timezone)} t, + count(*) y + from website_event + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_type = {eventType:UInt32} + ${filterQuery} + group by x, t + order by t + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.customEvent, + }, + ); +} diff --git a/queries/analytics/event/getEventUsage.ts b/queries/analytics/events/getEventUsage.ts similarity index 51% rename from queries/analytics/event/getEventUsage.ts rename to queries/analytics/events/getEventUsage.ts index 1465264ca..e8ed975f6 100644 --- a/queries/analytics/event/getEventUsage.ts +++ b/queries/analytics/events/getEventUsage.ts @@ -1,28 +1,26 @@ import clickhouse from 'lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from 'lib/db'; export function getEventUsage(...args: [websiteIds: string[], startDate: Date, endDate: Date]) { return runQuery({ - [PRISMA]: () => relationalQuery(...args), + [PRISMA]: notImplemented, [CLICKHOUSE]: () => clickhouseQuery(...args), }); } -function relationalQuery(websiteIds: string[], startDate: Date, endDate: Date) { - throw new Error('Not Implemented'); -} - function clickhouseQuery(websiteIds: string[], startDate: Date, endDate: Date) { const { rawQuery } = clickhouse; return rawQuery( - `select - website_id as websiteId, - count(*) as count + ` + select + website_id as websiteId, + count(*) as count from website_event - where created_at between {startDate:DateTime64} and {endDate:DateTime64} - and website_id in {websiteIds:Array(UUID)} - group by website_id`, + where website_id in {websiteIds:Array(UUID)} + and created_at between {startDate:DateTime64} and {endDate:DateTime64} + group by website_id + `, { websiteIds, startDate, diff --git a/queries/analytics/event/getEvents.ts b/queries/analytics/events/getEvents.ts similarity index 63% rename from queries/analytics/event/getEvents.ts rename to queries/analytics/events/getEvents.ts index 8197019dc..17528d660 100644 --- a/queries/analytics/event/getEvents.ts +++ b/queries/analytics/events/getEvents.ts @@ -2,30 +2,31 @@ import clickhouse from 'lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; import prisma from 'lib/prisma'; -export function getEvents(...args: [websiteId: string, startAt: Date, eventType: number]) { +export function getEvents(...args: [websiteId: string, startDate: Date, eventType: number]) { return runQuery({ [PRISMA]: () => relationalQuery(...args), [CLICKHOUSE]: () => clickhouseQuery(...args), }); } -function relationalQuery(websiteId: string, startAt: Date, eventType: number) { +function relationalQuery(websiteId: string, startDate: Date, eventType: number) { return prisma.client.websiteEvent.findMany({ where: { websiteId, eventType, createdAt: { - gte: startAt, + gte: startDate, }, }, }); } -function clickhouseQuery(websiteId: string, startAt: Date, eventType: number) { +function clickhouseQuery(websiteId: string, startDate: Date, eventType: number) { const { rawQuery } = clickhouse; return rawQuery( - `select + ` + select event_id as id, website_id as websiteId, session_id as sessionId, @@ -35,12 +36,13 @@ function clickhouseQuery(websiteId: string, startAt: Date, eventType: number) { referrer_domain as referrerDomain, event_name as eventName from website_event - where event_type = {eventType:UInt32} - and website_id = {websiteId:UUID} - and created_at >= {startAt:DateTime('UTC')}`, + where website_id = {websiteId:UUID} + and created_at >= {startDate:DateTime} + and event_type = {eventType:UInt32} + `, { websiteId, - startAt, + startDate, eventType, }, ); diff --git a/queries/analytics/event/saveEvent.ts b/queries/analytics/events/saveEvent.ts similarity index 100% rename from queries/analytics/event/saveEvent.ts rename to queries/analytics/events/saveEvent.ts diff --git a/queries/analytics/pageview/getPageviewFunnel.ts b/queries/analytics/pageview/getPageviewFunnel.ts deleted file mode 100644 index bfd921c13..000000000 --- a/queries/analytics/pageview/getPageviewFunnel.ts +++ /dev/null @@ -1,114 +0,0 @@ -import clickhouse from 'lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; -import prisma from 'lib/prisma'; - -export async function getPageviewFunnel( - ...args: [ - websiteId: string, - criteria: { - windowMinutes: number; - startDate: Date; - endDate: Date; - urls: string[]; - }, - ] -) { - return runQuery({ - [PRISMA]: () => relationalQuery(...args), - [CLICKHOUSE]: () => clickhouseQuery(...args), - }); -} - -async function relationalQuery( - websiteId: string, - criteria: { - windowMinutes: number; - startDate: Date; - endDate: Date; - urls: string[]; - }, -): Promise< - { - x: string; - y: number; - }[] -> { - const { windowMinutes, startDate, endDate, urls } = criteria; - const { rawQuery, getFunnelQuery, toUuid } = prisma; - const { levelQuery, sumQuery, urlFilterQuery } = getFunnelQuery(urls, windowMinutes); - - const params: any = [websiteId, startDate, endDate, ...urls]; - - return rawQuery( - `WITH level0 AS ( - select distinct session_id, url_path, referrer_path, created_at - from website_event - where url_path in (${urlFilterQuery}) - and website_id = $1${toUuid()} - and created_at between $2 and $3 - ),level1 AS ( - select distinct session_id, url_path as level_1_url, created_at as level_1_created_at - from level0 - where url_path = $4 - )${levelQuery} - - SELECT ${sumQuery} - from level${urls.length}; - `, - params, - ).then((a: { [key: string]: number }) => { - return urls.map((b, i) => ({ x: b, y: a[0][`level${i + 1}`] || 0 })); - }); -} - -async function clickhouseQuery( - websiteId: string, - criteria: { - windowMinutes: number; - startDate: Date; - endDate: Date; - urls: string[]; - }, -): Promise< - { - x: string; - y: number; - }[] -> { - const { windowMinutes, startDate, endDate, urls } = criteria; - const { rawQuery, getBetweenDates, getFunnelQuery } = clickhouse; - const { columnsQuery, conditionQuery, urlParams } = getFunnelQuery(urls); - - const params = { - websiteId, - window: windowMinutes * 60, - ...urlParams, - }; - - return rawQuery<{ level: number; count: number }[]>( - ` - SELECT level, - count(*) AS count - FROM ( - SELECT session_id, - windowFunnel({window:UInt32}, 'strict_increase') - ( - created_at - ${columnsQuery} - ) AS level - FROM website_event - WHERE website_id = {websiteId:UUID} - and ${getBetweenDates('created_at', startDate, endDate)} - GROUP BY 1 - ) - GROUP BY level - ORDER BY level ASC; - `, - params, - ).then(results => { - return urls.map((a, i) => ({ - x: a, - y: results[i + 1]?.count || 0, - })); - }); -} diff --git a/queries/analytics/pageview/getPageviewStats.ts b/queries/analytics/pageview/getPageviewStats.ts deleted file mode 100644 index 989a6d4d2..000000000 --- a/queries/analytics/pageview/getPageviewStats.ts +++ /dev/null @@ -1,120 +0,0 @@ -import clickhouse from 'lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; -import prisma from 'lib/prisma'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; - -export async function getPageviewStats( - ...args: [ - websiteId: string, - criteria: { - startDate: Date; - endDate: Date; - timezone?: string; - unit?: string; - count?: string; - filters: object; - sessionKey?: string; - }, - ] -) { - return runQuery({ - [PRISMA]: () => relationalQuery(...args), - [CLICKHOUSE]: () => clickhouseQuery(...args), - }); -} - -async function relationalQuery( - websiteId: string, - criteria: { - startDate: Date; - endDate: Date; - timezone?: string; - unit?: string; - count?: string; - filters: object; - sessionKey?: string; - }, -) { - const { - startDate, - endDate, - timezone = 'utc', - unit = 'day', - count = '*', - filters = {}, - sessionKey = 'session_id', - } = criteria; - const { toUuid, getDateQuery, parseFilters, rawQuery } = prisma; - const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params: any = [websiteId, resetDate, startDate, endDate]; - const { filterQuery, joinSession } = parseFilters(filters, params); - - return rawQuery( - `select ${getDateQuery('website_event.created_at', unit, timezone)} x, - count(${count !== '*' ? `${count}${sessionKey}` : count}) y - from website_event - ${joinSession} - where website_event.website_id = $1${toUuid()} - and website_event.created_at >= $2 - and website_event.created_at between $3 and $4 - and event_type = ${EVENT_TYPE.pageView} - ${filterQuery} - group by 1`, - params, - ); -} - -async function clickhouseQuery( - websiteId: string, - criteria: { - startDate: Date; - endDate: Date; - timezone?: string; - unit?: string; - count?: string; - filters: object; - sessionKey?: string; - }, -) { - const { - startDate, - endDate, - timezone = 'UTC', - unit = 'day', - count = '*', - filters = {}, - } = criteria; - const { - parseFilters, - getDateFormat, - rawQuery, - getDateStringQuery, - getDateQuery, - getBetweenDates, - } = clickhouse; - const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params = { websiteId }; - const { filterQuery } = parseFilters(filters, params); - - return rawQuery( - `select - ${getDateStringQuery('g.t', unit)} as x, - g.y as y - from - (select - ${getDateQuery('created_at', unit, timezone)} t, - count(${count !== '*' ? 'distinct session_id' : count}) y - from website_event - where website_id = {websiteId:UUID} - and event_type = ${EVENT_TYPE.pageView} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - ${filterQuery} - group by t) g - order by t`, - params, - ); -} diff --git a/queries/analytics/pageview/getPageviewMetrics.ts b/queries/analytics/pageviews/getPageviewMetrics.ts similarity index 63% rename from queries/analytics/pageview/getPageviewMetrics.ts rename to queries/analytics/pageviews/getPageviewMetrics.ts index 5f575a893..1032540b8 100644 --- a/queries/analytics/pageview/getPageviewMetrics.ts +++ b/queries/analytics/pageviews/getPageviewMetrics.ts @@ -1,8 +1,9 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; +import { EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getPageviewMetrics( ...args: [ @@ -31,39 +32,41 @@ async function relationalQuery( }, ) { const { startDate, endDate, filters = {}, column } = criteria; - const { rawQuery, parseFilters, toUuid } = prisma; + const { rawQuery, parseFilters } = prisma; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params: any = [ + const params: any = { websiteId, - resetDate, - startDate, + startDate: maxDate(startDate, website.resetAt), endDate, - column === 'event_name' ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, - ]; + eventType: column === 'event_name' ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, + ...filters, + }; let excludeDomain = ''; if (column === 'referrer_domain') { - excludeDomain = 'and website_event.referrer_domain != $6'; - params.push(website.domain); + excludeDomain = + 'and (website_event.referrer_domain != {{domain}} or website_event.referrer_domain is null)'; + + params.domain = website.domain; } - const { filterQuery, joinSession } = parseFilters(filters, params); + const { filterQuery, joinSession } = parseFilters(filters); return rawQuery( - `select ${column} x, count(*) y + ` + select ${column} x, count(*) y from website_event ${joinSession} - where website_event.website_id = $1${toUuid()} - and website_event.created_at >= $2 - and website_event.created_at between $3 and $4 - and event_type = $5 + where website_event.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} + and event_type = {{eventType}} ${excludeDomain} ${filterQuery} group by 1 order by 2 desc - limit 100`, + limit 100 + `, params, ); } @@ -78,11 +81,12 @@ async function clickhouseQuery( }, ) { const { startDate, endDate, filters = {}, column } = criteria; - const { rawQuery, getDateFormat, parseFilters, getBetweenDates } = clickhouse; + const { rawQuery, parseFilters } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); const params = { websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, eventType: column === 'event_name' ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, domain: undefined, }; @@ -97,17 +101,18 @@ async function clickhouseQuery( const { filterQuery } = parseFilters(filters, params); return rawQuery( - `select ${column} x, count(*) y + ` + select ${column} x, count(*) y from website_event where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} and event_type = {eventType:UInt32} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} ${excludeDomain} ${filterQuery} group by x order by y desc - limit 100`, + limit 100 + `, params, ); } diff --git a/queries/analytics/pageviews/getPageviewStats.ts b/queries/analytics/pageviews/getPageviewStats.ts new file mode 100644 index 000000000..f6d4158c9 --- /dev/null +++ b/queries/analytics/pageviews/getPageviewStats.ts @@ -0,0 +1,103 @@ +import clickhouse from 'lib/clickhouse'; +import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import prisma from 'lib/prisma'; +import { EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; + +export interface PageviewStatsCriteria { + startDate: Date; + endDate: Date; + timezone?: string; + unit?: string; + count?: string; + filters: object; + sessionKey?: string; +} + +export async function getPageviewStats( + ...args: [websiteId: string, criteria: PageviewStatsCriteria] +) { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery(websiteId: string, criteria: PageviewStatsCriteria) { + const { + startDate, + endDate, + timezone = 'utc', + unit = 'day', + count = '*', + filters = {}, + sessionKey = 'session_id', + } = criteria; + const { getDateQuery, parseFilters, rawQuery } = prisma; + const website = await loadWebsite(websiteId); + const { filterQuery, joinSession } = parseFilters(filters); + + return rawQuery( + ` + select + ${getDateQuery('website_event.created_at', unit, timezone)} x, + count(${count !== '*' ? `${count}${sessionKey}` : count}) y + from website_event + ${joinSession} + where website_event.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} + and event_type = {{eventType}} + ${filterQuery} + group by 1 + `, + { + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + ...filters, + }, + ); +} + +async function clickhouseQuery(websiteId: string, criteria: PageviewStatsCriteria) { + const { + startDate, + endDate, + timezone = 'UTC', + unit = 'day', + count = '*', + filters = {}, + } = criteria; + const { parseFilters, rawQuery, getDateStringQuery, getDateQuery } = clickhouse; + const website = await loadWebsite(websiteId); + const { filterQuery } = parseFilters(filters); + + return rawQuery( + ` + select + ${getDateStringQuery('g.t', unit)} as x, + g.y as y + from ( + select + ${getDateQuery('created_at', unit, timezone)} as t, + count(${count !== '*' ? 'distinct session_id' : count}) as y + from website_event + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_type = {eventType:UInt32} + ${filterQuery} + group by t + ) as g + order by t + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + }, + ); +} diff --git a/queries/analytics/reports/getFunnel.ts b/queries/analytics/reports/getFunnel.ts new file mode 100644 index 000000000..3c5c65e09 --- /dev/null +++ b/queries/analytics/reports/getFunnel.ts @@ -0,0 +1,206 @@ +import clickhouse from 'lib/clickhouse'; +import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import prisma from 'lib/prisma'; + +export async function getFunnel( + ...args: [ + websiteId: string, + criteria: { + windowMinutes: number; + startDate: Date; + endDate: Date; + urls: string[]; + }, + ] +) { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery( + websiteId: string, + criteria: { + windowMinutes: number; + startDate: Date; + endDate: Date; + urls: string[]; + }, +): Promise< + { + x: string; + y: number; + z: number; + }[] +> { + const { windowMinutes, startDate, endDate, urls } = criteria; + const { rawQuery, getAddMinutesQuery } = prisma; + const { levelQuery, sumQuery } = getFunnelQuery(urls, windowMinutes); + + function getFunnelQuery( + urls: string[], + windowMinutes: number, + ): { + levelQuery: string; + sumQuery: string; + } { + return urls.reduce( + (pv, cv, i) => { + const levelNumber = i + 1; + const startSum = i > 0 ? 'union ' : ''; + + if (levelNumber >= 2) { + pv.levelQuery += ` + , level${levelNumber} AS ( + select distinct we.session_id, we.created_at + from level${i} l + join website_event we + on l.session_id = we.session_id + where we.created_at between l.created_at + and ${getAddMinutesQuery(`l.created_at `, windowMinutes)} + and we.referrer_path = {{${i - 1}}} + and we.url_path = {{${i}}} + and we.created_at <= {{endDate}} + and we.website_id = {{websiteId::uuid}} + )`; + } + + pv.sumQuery += `\n${startSum}select ${levelNumber} as level, count(distinct(session_id)) as count from level${levelNumber}`; + + return pv; + }, + { + levelQuery: '', + sumQuery: '', + }, + ); + } + + return rawQuery( + ` + WITH level1 AS ( + select distinct session_id, created_at + from website_event + where website_id = {{websiteId::uuid}} + and created_at between {{startDate}} and {{endDate}} + and url_path = {{0}} + ) + ${levelQuery} + ${sumQuery} + ORDER BY level; + `, + { + websiteId, + startDate, + endDate, + ...urls, + }, + ).then(results => { + return urls.map((a, i) => ({ + x: a, + y: results[i]?.count || 0, + z: (1 - Number(results[i]?.count) / Number(results[i - 1]?.count)) * 100 || 0, // drop off + })); + }); +} + +async function clickhouseQuery( + websiteId: string, + criteria: { + windowMinutes: number; + startDate: Date; + endDate: Date; + urls: string[]; + }, +): Promise< + { + x: string; + y: number; + z: number; + }[] +> { + const { windowMinutes, startDate, endDate, urls } = criteria; + const { rawQuery } = clickhouse; + const { levelQuery, sumQuery, urlFilterQuery, urlParams } = getFunnelQuery(urls, windowMinutes); + + function getFunnelQuery( + urls: string[], + windowMinutes: number, + ): { + levelQuery: string; + sumQuery: string; + urlFilterQuery: string; + urlParams: { [key: string]: string }; + } { + return urls.reduce( + (pv, cv, i) => { + const levelNumber = i + 1; + const startSum = i > 0 ? 'union all ' : ''; + const startFilter = i > 0 ? ', ' : ''; + + if (levelNumber >= 2) { + pv.levelQuery += `\n + , level${levelNumber} AS ( + select distinct y.session_id as session_id, + y.url_path as url_path, + y.referrer_path as referrer_path, + y.created_at as created_at + from level${i} x + join level0 y + on x.session_id = y.session_id + where y.created_at between x.created_at and x.created_at + interval ${windowMinutes} minute + and y.referrer_path = {url${i - 1}:String} + and y.url_path = {url${i}:String} + )`; + } + + pv.sumQuery += `\n${startSum}select ${levelNumber} as level, count(distinct(session_id)) as count from level${levelNumber}`; + pv.urlFilterQuery += `${startFilter}{url${i}:String} `; + pv.urlParams[`url${i}`] = cv; + + return pv; + }, + { + levelQuery: '', + sumQuery: '', + urlFilterQuery: '', + urlParams: {}, + }, + ); + } + + return rawQuery<{ level: number; count: number }[]>( + ` + WITH level0 AS ( + select distinct session_id, url_path, referrer_path, created_at + from umami.website_event + where url_path in (${urlFilterQuery}) + and website_id = {websiteId:UUID} + and created_at between {startDate:DateTime64} and {endDate:DateTime64} + ), + level1 AS ( + select * + from level0 + where url_path = {url0:String} + ) + ${levelQuery} + select * + from ( + ${sumQuery} + ) ORDER BY level; + `, + { + websiteId, + startDate, + endDate, + ...urlParams, + }, + ).then(results => { + return urls.map((a, i) => ({ + x: a, + y: results[i]?.count || 0, + z: (1 - Number(results[i]?.count) / Number(results[i - 1]?.count)) * 100 || 0, // drop off + })); + }); +} diff --git a/queries/analytics/reports/getInsights.ts b/queries/analytics/reports/getInsights.ts new file mode 100644 index 000000000..1d8970ed0 --- /dev/null +++ b/queries/analytics/reports/getInsights.ts @@ -0,0 +1,42 @@ +import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import prisma from 'lib/prisma'; +import clickhouse from 'lib/clickhouse'; + +export interface GetInsightsCriteria { + startDate: Date; + endDate: Date; + fields: string[]; + filters: string[]; + groups: string[]; +} + +export async function getInsights(...args: [websiteId: string, criteria: GetInsightsCriteria]) { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery( + websiteId: string, + criteria: GetInsightsCriteria, +): Promise< + { + x: string; + y: number; + }[] +> { + return null; +} + +async function clickhouseQuery( + websiteId: string, + criteria: GetInsightsCriteria, +): Promise< + { + x: string; + y: number; + }[] +> { + return null; +} diff --git a/queries/analytics/session/getSession.ts b/queries/analytics/session/getSession.ts deleted file mode 100644 index 2fd8d18f6..000000000 --- a/queries/analytics/session/getSession.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Prisma } from '@prisma/client'; -import prisma from 'lib/prisma'; - -export async function getSession(where: Prisma.SessionWhereUniqueInput) { - return prisma.client.session.findUnique({ - where, - }); -} diff --git a/queries/analytics/session/createSession.ts b/queries/analytics/sessions/createSession.ts similarity index 100% rename from queries/analytics/session/createSession.ts rename to queries/analytics/sessions/createSession.ts diff --git a/queries/analytics/sessions/getSession.ts b/queries/analytics/sessions/getSession.ts new file mode 100644 index 000000000..256ada4c0 --- /dev/null +++ b/queries/analytics/sessions/getSession.ts @@ -0,0 +1,9 @@ +import prisma from 'lib/prisma'; + +export async function getSession(id: string) { + return prisma.client.session.findUnique({ + where: { + id, + }, + }); +} diff --git a/queries/analytics/session/getSessionMetrics.ts b/queries/analytics/sessions/getSessionMetrics.ts similarity index 58% rename from queries/analytics/session/getSessionMetrics.ts rename to queries/analytics/sessions/getSessionMetrics.ts index ef8c79c5f..aec2d8f13 100644 --- a/queries/analytics/session/getSessionMetrics.ts +++ b/queries/analytics/sessions/getSessionMetrics.ts @@ -1,8 +1,9 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; +import { DEFAULT_RESET_DATE, EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getSessionMetrics( ...args: [ @@ -21,11 +22,9 @@ async function relationalQuery( criteria: { startDate: Date; endDate: Date; column: string; filters: object }, ) { const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); const { startDate, endDate, column, filters = {} } = criteria; - const { toUuid, parseFilters, rawQuery } = prisma; - const params: any = [websiteId, resetDate, startDate, endDate]; - const { filterQuery, joinSession } = parseFilters(filters, params); + const { parseFilters, rawQuery } = prisma; + const { filterQuery, joinSession } = parseFilters(filters); return rawQuery( `select ${column} x, count(*) y @@ -36,15 +35,19 @@ async function relationalQuery( join website on website_event.website_id = website.website_id ${joinSession} - where website.website_id = $1${toUuid()} - and website_event.created_at >= $2 - and website_event.created_at between $3 and $4 + where website.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} ${filterQuery} ) group by 1 order by 2 desc limit 100`, - params, + { + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + ...filters, + }, ); } @@ -53,23 +56,29 @@ async function clickhouseQuery( data: { startDate: Date; endDate: Date; column: string; filters: object }, ) { const { startDate, endDate, column, filters = {} } = data; - const { getDateFormat, parseFilters, getBetweenDates, rawQuery } = clickhouse; + const { parseFilters, rawQuery } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params = { websiteId }; - const { filterQuery } = parseFilters(filters, params); + const { filterQuery } = parseFilters(filters); return rawQuery( - `select ${column} x, count(distinct session_id) y + ` + select + ${column} x, count(distinct session_id) y from website_event as x where website_id = {websiteId:UUID} - and event_type = ${EVENT_TYPE.pageView} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_type = {eventType:UInt32} ${filterQuery} group by x order by y desc - limit 100`, - params, + limit 100 + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + }, ); } diff --git a/queries/analytics/session/getSessions.ts b/queries/analytics/sessions/getSessions.ts similarity index 77% rename from queries/analytics/session/getSessions.ts rename to queries/analytics/sessions/getSessions.ts index a4fbb5016..6936f902e 100644 --- a/queries/analytics/session/getSessions.ts +++ b/queries/analytics/sessions/getSessions.ts @@ -9,22 +9,23 @@ export async function getSessions(...args: [websiteId: string, startAt: Date]) { }); } -async function relationalQuery(websiteId: string, startAt: Date) { +async function relationalQuery(websiteId: string, startDate: Date) { return prisma.client.session.findMany({ where: { websiteId, createdAt: { - gte: startAt, + gte: startDate, }, }, }); } -async function clickhouseQuery(websiteId: string, startAt: Date) { +async function clickhouseQuery(websiteId: string, startDate: Date) { const { rawQuery } = clickhouse; return rawQuery( - `select distinct + ` + select distinct session_id as id, website_id as websiteId, created_at as createdAt, @@ -41,10 +42,11 @@ async function clickhouseQuery(websiteId: string, startAt: Date) { city from website_event where website_id = {websiteId:UUID} - and created_at >= {startAt:DateTime('UTC')}`, + and created_at >= {startDate:DateTime} + `, { websiteId, - startAt, + startDate, }, ); } diff --git a/queries/analytics/session/saveSessionData.ts b/queries/analytics/sessions/saveSessionData.ts similarity index 96% rename from queries/analytics/session/saveSessionData.ts rename to queries/analytics/sessions/saveSessionData.ts index 192053f10..ef32bcfb5 100644 --- a/queries/analytics/session/saveSessionData.ts +++ b/queries/analytics/sessions/saveSessionData.ts @@ -1,6 +1,6 @@ import { DATA_TYPE } from 'lib/constants'; import { uuid } from 'lib/crypto'; -import { flattenJSON } from 'lib/dynamicData'; +import { flattenJSON } from 'lib/data'; import prisma from 'lib/prisma'; import { DynamicData } from 'lib/types'; diff --git a/queries/analytics/stats/getActiveVisitors.ts b/queries/analytics/stats/getActiveVisitors.ts index 89f092c15..8dcfd7c92 100644 --- a/queries/analytics/stats/getActiveVisitors.ts +++ b/queries/analytics/stats/getActiveVisitors.ts @@ -11,31 +11,32 @@ export async function getActiveVisitors(...args: [websiteId: string]) { } async function relationalQuery(websiteId: string) { - const { toUuid, rawQuery } = prisma; - - const date = subMinutes(new Date(), 5); - const params: any = [websiteId, date]; + const { rawQuery } = prisma; return rawQuery( - `select count(distinct session_id) x + ` + select count(distinct session_id) x from website_event - join website + join website on website_event.website_id = website.website_id - where website.website_id = $1${toUuid()} - and website_event.created_at >= $2`, - params, + where website.website_id = {{websiteId::uuid}} + and website_event.created_at >= {{startAt}} + `, + { websiteId, startAt: subMinutes(new Date(), 5) }, ); } async function clickhouseQuery(websiteId: string) { const { rawQuery } = clickhouse; - const params = { websiteId, startAt: subMinutes(new Date(), 5) }; return rawQuery( - `select count(distinct session_id) x + ` + select + count(distinct session_id) x from website_event where website_id = {websiteId:UUID} - and created_at >= {startAt:DateTime('UTC')}`, - params, + and created_at >= {startAt:DateTime} + `, + { websiteId, startAt: subMinutes(new Date(), 5) }, ); } diff --git a/queries/analytics/stats/getRealtimeData.ts b/queries/analytics/stats/getRealtimeData.ts index 8c2152151..98a5595b9 100644 --- a/queries/analytics/stats/getRealtimeData.ts +++ b/queries/analytics/stats/getRealtimeData.ts @@ -1,6 +1,5 @@ -import { md5 } from 'lib/crypto'; -import { getSessions } from '../session/getSessions'; -import { getEvents } from '../event/getEvents'; +import { md5 } from 'next-basics'; +import { getSessions, getEvents } from 'queries'; import { EVENT_TYPE } from 'lib/constants'; export async function getRealtimeData(websiteId, time) { diff --git a/queries/analytics/stats/getWebsiteDateRange.ts b/queries/analytics/stats/getWebsiteDateRange.ts new file mode 100644 index 000000000..45885e45c --- /dev/null +++ b/queries/analytics/stats/getWebsiteDateRange.ts @@ -0,0 +1,51 @@ +import prisma from 'lib/prisma'; +import clickhouse from 'lib/clickhouse'; +import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; +import { loadWebsite } from 'lib/load'; +import { DEFAULT_RESET_DATE } from 'lib/constants'; +import { maxDate } from 'lib/date'; + +export async function getWebsiteDateRange(...args: [websiteId: string]) { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery(websiteId: string) { + const { rawQuery } = prisma; + const website = await loadWebsite(websiteId); + + const result = await rawQuery( + ` + select + min(created_at) as mindate, + max(created_at) as maxdate + from website_event + where website_id = {{websiteId::uuid}} + and created_at >= {{startDate}} + `, + { websiteId, startDate: maxDate(new Date(DEFAULT_RESET_DATE), new Date(website.resetAt)) }, + ); + + return result[0] ?? null; +} + +async function clickhouseQuery(websiteId: string) { + const { rawQuery } = clickhouse; + const website = await loadWebsite(websiteId); + + const result = await rawQuery( + ` + select + min(created_at) as mindate, + max(created_at) as maxdate + from website_event + where website_id = {websiteId:UUID} + and created_at >= {startDate:DateTime} + `, + { websiteId, startDate: maxDate(new Date(DEFAULT_RESET_DATE), new Date(website.resetAt)) }, + ); + + return result[0] ?? null; +} diff --git a/queries/analytics/stats/getWebsiteStats.ts b/queries/analytics/stats/getWebsiteStats.ts index 5d5a1f9a1..4d3730ee4 100644 --- a/queries/analytics/stats/getWebsiteStats.ts +++ b/queries/analytics/stats/getWebsiteStats.ts @@ -1,8 +1,9 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; +import { EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getWebsiteStats( ...args: [ @@ -21,34 +22,41 @@ async function relationalQuery( criteria: { startDate: Date; endDate: Date; filters: object }, ) { const { startDate, endDate, filters = {} } = criteria; - const { toUuid, getDateQuery, getTimestampInterval, parseFilters, rawQuery } = prisma; + const { getDateQuery, getTimestampIntervalQuery, parseFilters, rawQuery } = prisma; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params: any = [websiteId, resetDate, startDate, endDate]; - const { filterQuery, joinSession } = parseFilters(filters, params); + const { filterQuery, joinSession } = parseFilters(filters); return rawQuery( - `select sum(t.c) as "pageviews", - count(distinct t.session_id) as "uniques", - sum(case when t.c = 1 then 1 else 0 end) as "bounces", - sum(t.time) as "totaltime" - from ( - select website_event.session_id, - ${getDateQuery('website_event.created_at', 'hour')}, - count(*) c, - ${getTimestampInterval('website_event.created_at')} as "time" - from website_event - join website - on website_event.website_id = website.website_id - ${joinSession} - where event_type = ${EVENT_TYPE.pageView} - and website.website_id = $1${toUuid()} - and website_event.created_at >= $2 - and website_event.created_at between $3 and $4 - ${filterQuery} - group by 1, 2 - ) t`, - params, + ` + select + sum(t.c) as "pageviews", + count(distinct t.session_id) as "uniques", + sum(case when t.c = 1 then 1 else 0 end) as "bounces", + sum(t.time) as "totaltime" + from ( + select + website_event.session_id, + ${getDateQuery('website_event.created_at', 'hour')}, + count(*) as c, + ${getTimestampIntervalQuery('website_event.created_at')} as "time" + from website_event + join website + on website_event.website_id = website.website_id + ${joinSession} + where event_type = {{eventType}} + and website.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} + ${filterQuery} + group by 1, 2 + ) as t + `, + { + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + ...filters, + }, ); } @@ -57,32 +65,38 @@ async function clickhouseQuery( criteria: { startDate: Date; endDate: Date; filters: object }, ) { const { startDate, endDate, filters = {} } = criteria; - const { rawQuery, getDateFormat, getDateQuery, getBetweenDates, parseFilters } = clickhouse; + const { rawQuery, getDateQuery, parseFilters } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params = { websiteId }; - const { filterQuery } = parseFilters(filters, params); + const { filterQuery } = parseFilters(filters); return rawQuery( - `select - sum(t.c) as "pageviews", - count(distinct t.session_id) as "uniques", - sum(if(t.c = 1, 1, 0)) as "bounces", - sum(if(max_time < min_time + interval 1 hour, max_time-min_time, 0)) as "totaltime" - from ( - select session_id, - ${getDateQuery('created_at', 'day')} time_series, - count(*) c, - min(created_at) min_time, - max(created_at) max_time - from website_event - where event_type = ${EVENT_TYPE.pageView} - and website_id = {websiteId:UUID} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - ${filterQuery} - group by session_id, time_series - ) t;`, - params, + ` + select + sum(t.c) as "pageviews", + count(distinct t.session_id) as "uniques", + sum(if(t.c = 1, 1, 0)) as "bounces", + sum(if(max_time < min_time + interval 1 hour, max_time-min_time, 0)) as "totaltime" + from ( + select + session_id, + ${getDateQuery('created_at', 'day')} time_series, + count(*) c, + min(created_at) min_time, + max(created_at) max_time + from website_event + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_type = {eventType:UInt32} + ${filterQuery} + group by session_id, time_series + ) as t; + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + }, ); } diff --git a/queries/index.js b/queries/index.js index b0e4e00b0..f509e0392 100644 --- a/queries/index.js +++ b/queries/index.js @@ -1,21 +1,26 @@ +export * from './admin/report'; export * from './admin/team'; export * from './admin/teamUser'; +export * from './admin/teamWebsite'; export * from './admin/user'; -export * from './admin/report'; export * from './admin/website'; -export * from './analytics/event/getEventMetrics'; -export * from './analytics/event/getEventUsage'; -export * from './analytics/event/getEvents'; +export * from './analytics/events/getEventMetrics'; +export * from './analytics/events/getEventUsage'; +export * from './analytics/events/getEvents'; +export * from './analytics/eventData/getEventDataEvents'; export * from './analytics/eventData/getEventDataFields'; export * from './analytics/eventData/getEventDataUsage'; -export * from './analytics/event/saveEvent'; -export * from './analytics/pageview/getPageviewFunnel'; -export * from './analytics/pageview/getPageviewMetrics'; -export * from './analytics/pageview/getPageviewStats'; -export * from './analytics/session/createSession'; -export * from './analytics/session/getSession'; -export * from './analytics/session/getSessionMetrics'; -export * from './analytics/session/getSessions'; +export * from './analytics/events/saveEvent'; +export * from './analytics/reports/getFunnel'; +export * from './analytics/reports/getInsights'; +export * from './analytics/pageviews/getPageviewMetrics'; +export * from './analytics/pageviews/getPageviewStats'; +export * from './analytics/sessions/createSession'; +export * from './analytics/sessions/getSession'; +export * from './analytics/sessions/getSessionMetrics'; +export * from './analytics/sessions/getSessions'; +export * from './analytics/sessions/saveSessionData'; export * from './analytics/stats/getActiveVisitors'; export * from './analytics/stats/getRealtimeData'; +export * from './analytics/stats/getWebsiteDateRange'; export * from './analytics/stats/getWebsiteStats'; diff --git a/scripts/telemetry.js b/scripts/telemetry.js index 67fe32021..24cd40c91 100644 --- a/scripts/telemetry.js +++ b/scripts/telemetry.js @@ -1,42 +1,24 @@ -const fs = require('fs-extra'); -const path = require('path'); const os = require('os'); const isCI = require('is-ci'); const pkg = require('../package.json'); -const dest = path.resolve(__dirname, '../.next/cache/umami.json'); -const url = 'https://telemetry.umami.is/api/send'; - -async function sendTelemetry(action) { - let json = {}; - - try { - json = await fs.readJSON(dest); - } catch { - // Ignore - } - - try { - await fs.writeJSON(dest, { version: pkg.version }); - } catch { - // Ignore - } +const url = 'https://api.umami.is/v1/telemetry'; +async function sendTelemetry(type) { const { default: isDocker } = await import('is-docker'); const { default: fetch } = await import('node-fetch'); - const upgrade = json.version !== undefined && json.version !== pkg.version; - const payload = { - action, - version: pkg.version, - node: process.version, - platform: os.platform(), - arch: os.arch(), - os: `${os.type()} (${os.version()})`, - docker: isDocker(), - ci: isCI, - prev: json.version, - upgrade, + const data = { + type, + payload: { + version: pkg.version, + node: process.version, + platform: os.platform(), + arch: os.arch(), + os: `${os.type()} (${os.version()})`, + isDocker: isDocker(), + isCi: isCI, + }, }; try { @@ -46,7 +28,7 @@ async function sendTelemetry(action) { headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify(payload), + body: JSON.stringify(data), }); } catch { // Ignore diff --git a/store/websites.js b/store/websites.ts similarity index 52% rename from store/websites.js rename to store/websites.ts index 34f8242d0..0d210af6d 100644 --- a/store/websites.js +++ b/store/websites.ts @@ -1,28 +1,20 @@ import { create } from 'zustand'; import produce from 'immer'; -import app from './app'; -import { parseDateRange } from 'lib/date'; +import { DateRange } from 'lib/types'; const store = create(() => ({})); -export function getWebsiteDateRange(websiteId) { +export function getWebsiteDateRange(websiteId: string) { return store.getState()?.[websiteId]; } -export function setWebsiteDateRange(websiteId, value) { +export function setWebsiteDateRange(websiteId: string, dateRange: DateRange) { store.setState( produce(state => { if (!state[websiteId]) { state[websiteId] = {}; } - let dateRange = value; - - if (typeof value === 'string') { - const { locale } = app.getState(); - dateRange = parseDateRange(value, locale); - } - state[websiteId].dateRange = { ...dateRange, modified: Date.now() }; return state; diff --git a/yarn.lock b/yarn.lock index db55eecab..275bcd631 100644 --- a/yarn.lock +++ b/yarn.lock @@ -303,7 +303,7 @@ "@babel/highlight@^7.22.5": version "7.22.5" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== dependencies: "@babel/helper-validator-identifier" "^7.22.5" @@ -1078,19 +1078,19 @@ "@jridgewell/trace-mapping" "0.3.9" "@csstools/css-parser-algorithms@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.0.tgz#0cc3a656dc2d638370ecf6f98358973bfbd00141" - integrity sha512-dTKSIHHWc0zPvcS5cqGP+/TPFUJB0ekJ9dGKvMAFoNuBFhDPBt9OMGNZiIA5vTiNdGHHBeScYPXIGBMnVOahsA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz#ec4fc764ba45d2bb7ee2774667e056aa95003f3a" + integrity sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA== "@csstools/css-tokenizer@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.1.tgz#07ae11a0a06365d7ec686549db7b729bc036528e" - integrity sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz#9d70e6dcbe94e44c7400a2929928db35c4de32b5" + integrity sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA== "@csstools/media-query-list-parser@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.2.tgz#6ef642b728d30c1009bfbba3211c7e4c11302728" - integrity sha512-M8cFGGwl866o6++vIY7j1AKuq9v57cf+dGepScwCcbut9ypJNr4Cj+LLTWligYUZ0uyhEoJDKt5lvyBfh2L3ZQ== + version "2.1.3" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.3.tgz#4471ebd436a22019378fe9c8ac8c0f30c4fbb796" + integrity sha512-ATul1u+pic4aVpstgueqxEv4MsObEbszAxfTXpx9LHaeD3LAh+wFqdCteyegWmjk0k5rkSCAvIOaJe9U3DD09w== "@csstools/postcss-cascade-layers@^1.1.1": version "1.1.1" @@ -1325,15 +1325,15 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" - integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.6.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" + integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== -"@eslint/eslintrc@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" - integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== +"@eslint/eslintrc@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93" + integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1345,10 +1345,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.44.0": - version "8.44.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" - integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== +"@eslint/js@^8.46.0": + version "8.46.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6" + integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA== "@fastify/accept-negotiator@^1.1.0": version "1.1.0" @@ -1726,9 +1726,9 @@ unstorage "^1.0.0" "@netlify/plugin-nextjs@^4.27.3": - version "4.39.0" - resolved "https://registry.yarnpkg.com/@netlify/plugin-nextjs/-/plugin-nextjs-4.39.0.tgz#8e447e80f29c0dcc6d45ef2a5f68815e17e72205" - integrity sha512-CkxVG+zidqHLb1nHEx0nMtt7DmSr4a27B4JFxr8jbFU8np9pHiLQ4bR+UvW5tzHdYSfw30Rt9XEQyHo1theq2Q== + version "4.39.1" + resolved "https://registry.yarnpkg.com/@netlify/plugin-nextjs/-/plugin-nextjs-4.39.1.tgz#e9d5abe281389e30d59cf5839496bb2a14a196db" + integrity sha512-gdpTDRYJg8g55MQBy1JMcVJ3UgHC71M/u7BccI9oqvizVtV7ESgyCdJgGFPfZJJGCgWe2ANfQCk1wgA0yosnow== dependencies: "@netlify/esbuild" "0.14.39" "@netlify/functions" "^1.6.0" @@ -1832,22 +1832,22 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@prisma/client@4.15.0": - version "4.15.0" - resolved "https://registry.npmjs.org/@prisma/client/-/client-4.15.0.tgz" - integrity sha512-xnROvyABcGiwqRNdrObHVZkD9EjkJYHOmVdlKy1yGgI+XOzvMzJ4tRg3dz1pUlsyhKxXGCnjIQjWW+2ur+YXuw== +"@prisma/client@5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.0.0.tgz#9f0cd4164f4ffddb28bb1811c27eb7fa1e01a087" + integrity sha512-XlO5ELNAQ7rV4cXIDJUNBEgdLwX3pjtt9Q/RHqDpGf43szpNJx2hJnggfFs7TKNx0cOFsl6KJCSfqr5duEU/bQ== dependencies: - "@prisma/engines-version" "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" + "@prisma/engines-version" "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584" -"@prisma/engines-version@4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944": - version "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" - resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944.tgz" - integrity sha512-sVOig4tjGxxlYaFcXgE71f/rtFhzyYrfyfNFUsxCIEJyVKU9rdOWIlIwQ2NQ7PntvGnn+x0XuFo4OC1jvPJKzg== +"@prisma/engines-version@4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584": + version "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584.tgz#b36eda5620872d3fac810c302a7e46cf41daa033" + integrity sha512-HHiUF6NixsldsP3JROq07TYBLEjXFKr6PdH8H4gK/XAoTmIplOJBCgrIUMrsRAnEuGyRoRLXKXWUb943+PFoKQ== -"@prisma/engines@4.15.0": - version "4.15.0" - resolved "https://registry.npmjs.org/@prisma/engines/-/engines-4.15.0.tgz" - integrity sha512-FTaOCGs0LL0OW68juZlGxFtYviZa4xdQj/rQEdat2txw0s3Vu/saAPKjNVXfIgUsGXmQ72HPgNr6935/P8FNAA== +"@prisma/engines@5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.0.0.tgz#5249650eabe77c458c90f2be97d8210353c2e22e" + integrity sha512-kyT/8fd0OpWmhAU5YnY7eP31brW1q1YrTGoblWrhQJDiN/1K+Z8S1kylcmtjqx5wsUGcP1HBWutayA/jtyt+sg== "@react-spring/animated@~9.7.3": version "9.7.3" @@ -2249,17 +2249,17 @@ dependencies: tslib "^2.4.0" -"@tanstack/query-core@4.29.19": - version "4.29.19" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.29.19.tgz#49ccbd0606633d1e55baf3b91ab7cc7aef411b1d" - integrity sha512-uPe1DukeIpIHpQi6UzIgBcXsjjsDaLnc7hF+zLBKnaUlh7jFE/A+P8t4cU4VzKPMFB/C970n/9SxtpO5hmIRgw== +"@tanstack/query-core@4.32.0": + version "4.32.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.32.0.tgz#e0f4a830283612430450c13badd353766423f523" + integrity sha512-ei4IYwL2kmlKSlCw9WgvV7PpXi0MiswVwfQRxawhJA690zWO3dU49igaQ/UMTl+Jy9jj9dK5IKAYvbX7kUvviQ== "@tanstack/react-query@^4.16.1": - version "4.29.19" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.29.19.tgz#6ba187f2d0ea36ae83ff1f67068f53c88ce7b228" - integrity sha512-XiTIOHHQ5Cw1WUlHaD4fmVUMhoWjuNJlAeJGq7eM4BraI5z7y8WkZO+NR8PSuRnQGblpuVdjClQbDFtwxTtTUw== + version "4.32.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.32.0.tgz#701b45b149cfd4b54a68705f9100973db3ba5d5d" + integrity sha512-B8WUMcByYAH9500ENejDCATOmEZhqjtS9wsfiQ3BNa+s+yAynY8SESI8WWHhSqUmjd0pmCSFRP6BOUGSda3QXA== dependencies: - "@tanstack/query-core" "4.29.19" + "@tanstack/query-core" "4.32.0" use-sync-external-store "^1.2.0" "@trysound/sax@0.2.0": @@ -2377,7 +2377,7 @@ "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash@^4.14.175": @@ -2412,7 +2412,7 @@ "@types/normalize-package-data@^2.4.0": version "2.4.1" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/parse-json@^4.0.0": @@ -2774,7 +2774,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2795,9 +2795,9 @@ ajv@^8.0.0, ajv@^8.8.0: uri-js "^4.2.2" ajv@^8.0.1: - version "8.11.2" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz" - integrity sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg== + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -2823,7 +2823,7 @@ ansi-regex@^5.0.1: ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" @@ -2873,6 +2873,14 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" @@ -2894,9 +2902,20 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.findlastindex@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" + integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + array.prototype.flat@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" @@ -2906,7 +2925,7 @@ array.prototype.flat@^1.3.1: array.prototype.flatmap@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: call-bind "^1.0.2" @@ -2925,9 +2944,21 @@ array.prototype.tosorted@^1.1.1: es-shim-unscopables "^1.0.0" get-intrinsic "^1.1.3" +arraybuffer.prototype.slice@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" + integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + arrify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== asn1@~0.2.3: @@ -2949,7 +2980,7 @@ ast-types-flow@^0.0.7: astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== asynckit@^0.4.0: @@ -2976,7 +3007,7 @@ autoprefixer@^10.4.13: available-typed-arrays@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== aws-sign2@~0.7.0: @@ -2999,6 +3030,11 @@ axobject-query@^2.2.0: resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== +b4a@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9" + integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== + babel-plugin-polyfill-corejs2@^0.3.3: version "0.3.3" resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" @@ -3046,7 +3082,7 @@ balanced-match@^1.0.0: balanced-match@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== base64-js@^1.3.1: @@ -3162,7 +3198,7 @@ busboy@1.6.0: call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -3240,9 +3276,9 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: supports-color "^7.1.0" chart.js@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.3.0.tgz#ac363030ab3fec572850d2d872956f32a46326a1" - integrity sha512-ynG0E79xGfMaV2xAHdbhwiPLczxnNNnasrmPEXriXsPJGjmhOBYzFVEsB65w2qMDz+CaBJJuJD0inE/ab/h36g== + version "4.3.2" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.3.2.tgz#904ebe0376eb368a659a92d2050df47336847e4c" + integrity sha512-pvQNyFOY1QmbmIr8oDORL16/FFivfxj8V26VFpFilMo4cNvkV5WXLJetDio365pd9gKUHGdirUTbqJfw8tr+Dg== dependencies: "@kurkle/color" "^0.3.0" @@ -3281,6 +3317,13 @@ ci-info@^3.2.0: resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz" integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== +citty@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.2.tgz#bae07bfd1962439735d7698c7954f76025690603" + integrity sha512-Me9nf0/BEmMOnuQzMOVXgpzkMUNbd0Am8lTl/13p0aRGAoLGk5T5sdet/42CrIGmWdG67BgHUhcKK1my1ujUEg== + dependencies: + consola "^3.2.3" + classnames@^2.3.1: version "2.3.2" resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" @@ -3346,7 +3389,7 @@ cluster-key-slot@^1.1.0: color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" @@ -3360,7 +3403,7 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.0.0, color-name@~1.1.4: @@ -3394,7 +3437,7 @@ colorette@^1.4.0: resolved "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== -colorette@^2.0.16, colorette@^2.0.19: +colorette@^2.0.16: version "2.0.20" resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== @@ -3443,7 +3486,7 @@ concat-with-sourcemaps@^1.1.0: dependencies: source-map "^0.6.1" -consola@^3.1.0: +consola@^3.1.0, consola@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== @@ -3565,10 +3608,10 @@ css-declaration-sorter@^6.3.1: resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz" integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== -css-functions-list@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz" - integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w== +css-functions-list@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.0.tgz#8290b7d064bf483f48d6559c10e98dc4d1ad19ee" + integrity sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg== css-has-pseudo@^3.0.4: version "3.0.4" @@ -3640,7 +3683,7 @@ cssdb@^7.1.0: cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cssfilter@0.0.10: @@ -3818,7 +3861,7 @@ dashdash@^1.12.0: data-uri-to-buffer@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== date-fns-tz@^1.1.4: @@ -3845,7 +3888,7 @@ debounce@^1.2.1: debug@^3.2.7: version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" @@ -3859,7 +3902,7 @@ debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: decamelize-keys@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== dependencies: decamelize "^1.1.0" @@ -3897,10 +3940,10 @@ deepmerge@^4.2.2, deepmerge@^4.3.1: resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" @@ -3968,10 +4011,10 @@ detect-indent@^6.0.0: resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== -detect-libc@^2.0.0, detect-libc@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== +detect-libc@^2.0.0, detect-libc@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" + integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== diff@^4.0.1: version "4.0.2" @@ -3987,7 +4030,7 @@ dir-glob@^3.0.1: doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" @@ -4081,7 +4124,7 @@ electron-to-chromium@^1.4.431: emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: @@ -4120,12 +4163,57 @@ entities@^4.4.0: error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.20.4: +es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: + version "1.22.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" + integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.1" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.1" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.0" + safe-array-concat "^1.0.0" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.10" + +es-abstract@^1.19.1: version "1.21.1" resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz" integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== @@ -4171,7 +4259,7 @@ es-module-lexer@^1.0.5: es-set-tostringtag@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== dependencies: get-intrinsic "^1.1.3" @@ -4180,14 +4268,14 @@ es-set-tostringtag@^2.0.1: es-shim-unscopables@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== dependencies: has "^1.0.3" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -4229,7 +4317,7 @@ escalade@^3.1.1: escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: @@ -4253,9 +4341,9 @@ eslint-config-next@^12.2.4: eslint-plugin-react-hooks "^4.5.0" eslint-config-prettier@^8.5.0: - version "8.8.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz" - integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== + version "8.9.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.9.0.tgz#094b6254b2804b0544f7cee535f802b6d29ee10b" + integrity sha512-+sbni7NfVXnOpnRadUA8S28AUlsZt9GjgFvABIRL9Hkn8KqNzOp+7Lw4QWtrwn20KzU3wqu1QoOj2m+7rKRqkA== eslint-import-resolver-alias@^1.1.2: version "1.1.2" @@ -4282,33 +4370,36 @@ eslint-import-resolver-typescript@^2.7.1: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-module-utils@^2.7.4: - version "2.7.4" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz" - integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== +eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: debug "^3.2.7" eslint-plugin-import@^2.26.0: - version "2.27.5" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz" - integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + version "2.28.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz#8d66d6925117b06c4018d491ae84469eb3cb1005" + integrity sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q== dependencies: array-includes "^3.1.6" + array.prototype.findlastindex "^1.2.2" array.prototype.flat "^1.3.1" array.prototype.flatmap "^1.3.1" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.7.4" + eslint-module-utils "^2.8.0" has "^1.0.3" - is-core-module "^2.11.0" + is-core-module "^2.12.1" is-glob "^4.0.3" minimatch "^3.1.2" + object.fromentries "^2.0.6" + object.groupby "^1.0.0" object.values "^1.1.6" - resolve "^1.22.1" - semver "^6.3.0" - tsconfig-paths "^3.14.1" + resolve "^1.22.3" + semver "^6.3.1" + tsconfig-paths "^3.14.2" eslint-plugin-jsx-a11y@^6.5.1: version "6.6.1" @@ -4370,40 +4461,40 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f" + integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw== eslint@^8.33.0: - version "8.44.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500" - integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== + version "8.46.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552" + integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.1.0" - "@eslint/js" "8.44.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.1" + "@eslint/js" "^8.46.0" "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.6.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.2" + espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -4413,7 +4504,6 @@ eslint@^8.33.0: globals "^13.19.0" graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" @@ -4425,13 +4515,12 @@ eslint@^8.33.0: natural-compare "^1.4.0" optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f" - integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: acorn "^8.9.0" acorn-jsx "^5.3.2" @@ -4463,7 +4552,7 @@ estraverse@^4.1.1: estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^0.6.1: @@ -4567,6 +4656,11 @@ fast-equals@^3.0.1: resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-3.0.3.tgz#8e6cb4e51ca1018d87dd41982ef92758b3e4197f" integrity sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg== +fast-fifo@^1.1.0, fast-fifo@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.0.tgz#03e381bcbfb29932d7c3afde6e15e83e05ab4d8b" + integrity sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw== + fast-glob@^3.0.3, fast-glob@^3.2.7: version "3.2.12" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" @@ -4579,9 +4673,9 @@ fast-glob@^3.0.3, fast-glob@^3.2.7: micromatch "^4.0.4" fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" - integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -4601,7 +4695,7 @@ fast-levenshtein@^2.0.6: fastest-levenshtein@^1.0.16: version "1.0.16" - resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: @@ -4613,7 +4707,7 @@ fastq@^1.6.0: fetch-blob@^3.1.2, fetch-blob@^3.1.4: version "3.2.0" - resolved "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== dependencies: node-domexception "^1.0.0" @@ -4674,7 +4768,7 @@ follow-redirects@^1.15.2: for-each@^0.3.3: version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" @@ -4695,7 +4789,7 @@ form-data@~2.3.2: formdata-polyfill@^4.0.10: version "4.0.10" - resolved "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== dependencies: fetch-blob "^3.1.2" @@ -4757,12 +4851,12 @@ fsevents@~2.3.2: function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function.prototype.name@^1.1.5: version "1.1.5" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== dependencies: call-bind "^1.0.2" @@ -4770,9 +4864,9 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== generic-names@^4.0.0: @@ -4792,13 +4886,14 @@ gensync@^1.0.0-beta.2: resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" has "^1.0.3" + has-proto "^1.0.1" has-symbols "^1.0.3" get-own-enumerable-property-symbols@^3.0.0: @@ -4818,7 +4913,7 @@ get-stream@^6.0.0: get-symbol-description@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -4887,14 +4982,14 @@ glob@^8.0.3: global-modules@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== dependencies: global-prefix "^3.0.0" global-prefix@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== dependencies: ini "^1.3.5" @@ -4915,7 +5010,7 @@ globals@^13.19.0: globalthis@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: define-properties "^1.1.3" @@ -4953,7 +5048,7 @@ globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: globjoin@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== globrex@^0.1.2: @@ -4963,7 +5058,7 @@ globrex@^0.1.2: gopd@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" @@ -5006,17 +5101,17 @@ har-validator@~5.1.0: hard-rejection@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: @@ -5026,31 +5121,31 @@ has-flag@^4.0.0: has-property-descriptors@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== dependencies: get-intrinsic "^1.1.1" has-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" has@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" @@ -5069,7 +5164,7 @@ hosted-git-info@^2.1.4: hosted-git-info@^4.0.1: version "4.1.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" @@ -5140,7 +5235,7 @@ import-cwd@^3.0.0: dependencies: import-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -5157,7 +5252,7 @@ import-from@^3.0.0: import-lazy@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== imurmurhash@^0.1.4: @@ -5190,10 +5285,10 @@ inherits@2, inherits@^2.0.3, inherits@^2.0.4: ini@^1.3.5, ini@~1.3.0: version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.3, internal-slot@^1.0.4: +internal-slot@^1.0.3: version "1.0.4" resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz" integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== @@ -5202,6 +5297,15 @@ internal-slot@^1.0.3, internal-slot@^1.0.4: has "^1.0.3" side-channel "^1.0.4" +internal-slot@^1.0.4, internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + internmap@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz" @@ -5247,11 +5351,6 @@ ioredis@^5.3.2: redis-parser "^3.0.0" standard-as-callback "^2.1.0" -ip-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-5.0.0.tgz#cd313b2ae9c80c07bd3851e12bf4fa4dc5480632" - integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw== - ipaddr.js@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" @@ -5280,18 +5379,18 @@ iron-webcrypto@^0.7.0: resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-0.7.1.tgz#7323e1f32fbc5d3e1f25a228fdbf0bcde3c276c6" integrity sha512-K/UmlEhPCPXEHV5hAtH5C0tI5JnFuOrv4yO/j7ODPl3HaiiHBLbOLTde+ieUaAyfCATe4LoAnclyF+hmSCOVmQ== -is-array-buffer@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz" - integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.0" is-typed-array "^1.1.10" is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-arrayish@^0.3.1: @@ -5301,7 +5400,7 @@ is-arrayish@^0.3.1: is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" @@ -5315,7 +5414,7 @@ is-binary-path@~2.1.0: is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -5330,7 +5429,7 @@ is-builtin-module@^3.2.1: is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-ci@^3.0.1: @@ -5340,23 +5439,16 @@ is-ci@^3.0.1: dependencies: ci-info "^3.2.0" -is-core-module@^2.11.0, is-core-module@^2.5.0: - version "2.11.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -is-core-module@^2.9.0: +is-core-module@^2.11.0, is-core-module@^2.12.0, is-core-module@^2.12.1, is-core-module@^2.5.0, is-core-module@^2.9.0: version "2.12.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: has "^1.0.3" is-date-object@^1.0.1: version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" @@ -5378,7 +5470,7 @@ is-extglob@^2.1.1: is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: @@ -5400,12 +5492,12 @@ is-module@^1.0.0: is-negative-zero@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" @@ -5432,7 +5524,7 @@ is-path-inside@^3.0.1, is-path-inside@^3.0.2, is-path-inside@^3.0.3: is-plain-obj@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-obj@^2.0.0: @@ -5442,7 +5534,7 @@ is-plain-obj@^2.0.0: is-plain-object@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-promise@^4.0.0: @@ -5459,7 +5551,7 @@ is-reference@1.2.1: is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -5472,7 +5564,7 @@ is-regexp@^1.0.0: is-shared-array-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" @@ -5484,28 +5576,24 @@ is-stream@^2.0.0: is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + which-typed-array "^1.1.11" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" @@ -5514,7 +5602,7 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" @@ -5526,10 +5614,15 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isbot@^3.4.5: - version "3.6.12" - resolved "https://registry.yarnpkg.com/isbot/-/isbot-3.6.12.tgz#db01e46fe669d821a7583f067f2b43356f5c50c2" - integrity sha512-dGc3jRIORywaaqs4G5wj+58i5/l1eoI75q7XNiyW9Sgfoyr3QkyDZUXw+cuB7AOFq/0aruCQrGLrnKJlQarP/g== + version "3.6.13" + resolved "https://registry.yarnpkg.com/isbot/-/isbot-3.6.13.tgz#e060f727cb53475a4dab1569321ced0f84633d63" + integrity sha512-uoP4uK5Dc2CrabmK+Gue1jTL+scHiCc1c9rblRpJwG8CPxjLIv8jmGyyGRGkbPOweayhkskdZsEQXG6p+QCQrg== isexe@^2.0.0: version "2.0.0" @@ -5550,6 +5643,11 @@ jest-worker@^26.2.1: merge-stream "^2.0.0" supports-color "^7.0.0" +jiti@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.19.1.tgz#fa99e4b76a23053e0e7cde098efe1704a14c16f1" + integrity sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg== + joycon@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz" @@ -5597,7 +5695,7 @@ json-parse-better-errors@^1.0.1: json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: @@ -5607,7 +5705,7 @@ json-schema-traverse@^0.4.1: json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-schema@0.4.0: @@ -5632,9 +5730,9 @@ json-stringify-safe@~5.0.1: resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^1.0.1: +json5@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" @@ -5725,7 +5823,7 @@ kafkajs@^2.1.0: kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^3.0.3: @@ -5765,7 +5863,7 @@ lilconfig@^2.0.3, lilconfig@^2.0.5: lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lint-staged@^11.0.0: @@ -5789,18 +5887,21 @@ lint-staged@^11.0.0: supports-color "8.1.1" listhen@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.0.4.tgz#29a177da59322a7ebdf88768d13d2e555e8fc43e" - integrity sha512-r94k7kmXHb8e8wpv7+UP/qqhhD+j/9TgX19QKim2cEJuWCLwlTw+5BkCFmYyjhQ7Bt8KdVun/2DcD7MF2Fe3+g== + version "1.1.2" + resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.1.2.tgz#c95082b0fdbd50d73abeab748893768dbefa7db8" + integrity sha512-rLX5V57oonazmc6zoZ2LzfbSOfGzDOLdQ/eTEh/d3f1xYMACH1yIU8nr0YGl2WiR+l31o3QCN4/VH2dUNyYvTA== dependencies: + citty "^0.1.2" clipboardy "^3.0.0" - colorette "^2.0.19" + consola "^3.2.3" defu "^6.1.2" get-port-please "^3.0.1" http-shutdown "^1.2.2" - ip-regex "^5.0.0" + jiti "^1.19.1" + mlly "^1.4.0" node-forge "^1.3.1" - ufo "^1.1.1" + pathe "^1.1.1" + ufo "^1.1.2" listr2@^3.12.2: version "3.14.0" @@ -5902,7 +6003,7 @@ lodash.pick@^4.4.0: lodash.truncate@^4.4.2: version "4.4.2" - resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== lodash.uniq@^4.5.0: @@ -5994,7 +6095,7 @@ make-error@^1.1.1: map-obj@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== map-obj@^4.0.0, map-obj@^4.1.0: @@ -6004,7 +6105,7 @@ map-obj@^4.0.0, map-obj@^4.1.0: mathml-tag-names@^2.1.3: version "2.1.3" - resolved "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz" + resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== maxmind@^4.3.6: @@ -6027,7 +6128,7 @@ mdn-data@2.0.28: mdn-data@2.0.30: version "2.0.30" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== "memoize-one@>=3.1.1 <6", memoize-one@^5.1.1: @@ -6183,6 +6284,16 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mlly@^1.2.0, mlly@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.0.tgz#830c10d63f1f97bd8785377b24dc2a15d972832b" + integrity sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg== + dependencies: + acorn "^8.9.0" + pathe "^1.1.1" + pkg-types "^1.0.3" + ufo "^1.1.2" + mmdb-lib@2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/mmdb-lib/-/mmdb-lib-2.0.2.tgz" @@ -6227,7 +6338,7 @@ ms@2.1.2: ms@^2.1.1: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== murmurhash@^2.0.0: @@ -6260,10 +6371,10 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -next-basics@^0.31.0: - version "0.31.0" - resolved "https://registry.npmjs.org/next-basics/-/next-basics-0.31.0.tgz" - integrity sha512-uAum7v4DQ37IdqKdmLTFLMyN+ir7FNMeMHQcTd1RQ14sm/fO/tntadlsXulwj/A5xs3gmnW/gfGkLX7VnNjreg== +next-basics@^0.35.0: + version "0.35.0" + resolved "https://registry.yarnpkg.com/next-basics/-/next-basics-0.35.0.tgz#aa68fd35a0e3fbabfdaf570cd092b6a7cf8df6f5" + integrity sha512-yqXZMLe109hSJ8sebI/f2m1XNnVuQowpELOhZSGOFOmLfvUyFBAEi0ULdqX1eb8xbttLgjcrumrZfMgmEwuCPw== dependencies: bcryptjs "^2.4.3" jsonwebtoken "^9.0.0" @@ -6310,7 +6421,7 @@ node-addon-api@^6.1.0: node-domexception@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== node-fetch-native@^1.1.1, node-fetch-native@^1.2.0: @@ -6326,9 +6437,9 @@ node-fetch@^2.0.0, node-fetch@^2.6.6: whatwg-url "^5.0.0" node-fetch@^3.2.8: - version "3.3.1" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz" - integrity sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow== + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== dependencies: data-uri-to-buffer "^4.0.0" fetch-blob "^3.1.4" @@ -6423,19 +6534,19 @@ object-assign@^4, object-assign@^4.1.1: resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-inspect@^1.12.2, object-inspect@^1.9.0: +object-inspect@^1.12.2, object-inspect@^1.12.3, object-inspect@^1.9.0: version "1.12.3" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.3, object.assign@^4.1.4: version "4.1.4" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" @@ -6461,6 +6572,16 @@ object.fromentries@^2.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +object.groupby@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" + integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.21.2" + get-intrinsic "^1.2.1" + object.hasown@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz" @@ -6471,7 +6592,7 @@ object.hasown@^1.1.2: object.values@^1.1.6: version "1.1.6" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" @@ -6602,7 +6723,7 @@ parse-json@^4.0.0: parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -6632,7 +6753,7 @@ path-key@^3.0.0, path-key@^3.1.0: path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-type@^3.0.0: @@ -6652,7 +6773,7 @@ pathe@^0.3.0: resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.3.9.tgz#4baff768f37f03e3d9341502865fb93116f65191" integrity sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g== -pathe@^1.1.1: +pathe@^1.1.0, pathe@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== @@ -6692,6 +6813,15 @@ pify@^5.0.0: resolved "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz" @@ -6901,7 +7031,7 @@ postcss-media-minmax@^5.0.0: postcss-media-query-parser@^0.2.3: version "0.2.3" - resolved "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== postcss-merge-longhand@^5.1.7: @@ -7183,7 +7313,7 @@ postcss-replace-overflow-wrap@^4.0.0: postcss-resolve-nested-selector@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw== postcss-rtlcss@^4.0.1: @@ -7195,7 +7325,7 @@ postcss-rtlcss@^4.0.1: postcss-safe-parser@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== postcss-selector-not@^6.0.1: @@ -7205,7 +7335,7 @@ postcss-selector-not@^6.0.1: dependencies: postcss-selector-parser "^6.0.10" -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9: +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.11" resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz" integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== @@ -7259,10 +7389,10 @@ postcss@^8.1.10: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.4.21, postcss@^8.4.24: - version "8.4.25" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.25.tgz#4a133f5e379eda7f61e906c3b1aaa9b81292726f" - integrity sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw== +postcss@^8.4.21, postcss@^8.4.25: + version "8.4.27" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057" + integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" @@ -7308,12 +7438,12 @@ pretty-bytes@^5.6.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -prisma@4.15.0: - version "4.15.0" - resolved "https://registry.npmjs.org/prisma/-/prisma-4.15.0.tgz" - integrity sha512-iKZZpobPl48gTcSZVawLMQ3lEy6BnXwtoMj7hluoGFYu2kQ6F9LBuBrUyF95zRVnNo8/3KzLXJXJ5TEnLSJFiA== +prisma@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.0.0.tgz#f6571c46dc2478172cb7bc1bb62d74026a2c2630" + integrity sha512-KYWk83Fhi1FH59jSpavAYTt2eoMVW9YKgu8ci0kuUnt6Dup5Qy47pcB4/TLmiPAbhGrxxSz7gsSnJcCmkyPANA== dependencies: - "@prisma/engines" "4.15.0" + "@prisma/engines" "5.0.0" promise.series@^0.2.0: version "0.2.0" @@ -7385,6 +7515,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +queue-tick@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" + integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== + quick-lru@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" @@ -7721,14 +7856,14 @@ regexp-tree@^0.1.24: resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== +regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" regexpu-core@4.5.4: version "4.5.4" @@ -7823,7 +7958,7 @@ request@2.88.0: require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== resolve-from@^4.0.0: @@ -7833,7 +7968,7 @@ resolve-from@^4.0.0: resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.22.1: @@ -7845,6 +7980,15 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.3: + version "1.22.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.3.tgz#4b4055349ffb962600972da1fdc33c46a4eb3283" + integrity sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw== + dependencies: + is-core-module "^2.12.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.3: version "2.0.0-next.4" resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz" @@ -7978,6 +8122,16 @@ rxjs@^7.5.1: dependencies: tslib "^2.1.0" +safe-array-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" + integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" @@ -7990,7 +8144,7 @@ safe-identifier@^0.4.2: safe-regex-test@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== dependencies: call-bind "^1.0.2" @@ -8038,25 +8192,30 @@ semver-compare@^1.0.0: resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4, semver@^7.3.8: - version "7.5.2" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz" - integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== - dependencies: - lru-cache "^6.0.0" +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.3.7, semver@^7.5.0, semver@^7.5.2: +semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" +semver@^7.3.8: + version "7.5.2" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz" + integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== + dependencies: + lru-cache "^6.0.0" + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" @@ -8065,17 +8224,17 @@ serialize-javascript@^4.0.0: randombytes "^2.1.0" sharp@^0.32.1: - version "0.32.1" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.1.tgz#41aa0d0b2048b2e0ee453d9fcb14ec1f408390fe" - integrity sha512-kQTFtj7ldpUqSe8kDxoGLZc1rnMFU0AO2pqbX6pLy3b7Oj8ivJIdoKNwxHVQG2HN6XpHPJqCSM2nsma2gOXvOg== + version "0.32.4" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.4.tgz#0354653b7924f2520b2264ac9bcd10a58bf411b6" + integrity sha512-exUnZewqVZC6UXqXuQ8fyJJv0M968feBi04jb9GcUHrWtkRoAKnbJt8IfwT4NJs7FskArbJ14JAFGVuooszoGg== dependencies: color "^4.2.3" - detect-libc "^2.0.1" + detect-libc "^2.0.2" node-addon-api "^6.1.0" prebuild-install "^7.1.1" - semver "^7.5.0" + semver "^7.5.4" simple-get "^4.0.1" - tar-fs "^2.1.1" + tar-fs "^3.0.4" tunnel-agent "^0.6.0" shebang-command@^1.2.0: @@ -8109,7 +8268,7 @@ shell-quote@^1.6.1: side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -8173,7 +8332,7 @@ slice-ansi@^3.0.0: slice-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" @@ -8211,30 +8370,30 @@ sourcemap-codec@^1.4.8: integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + version "3.0.13" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== sprintf-js@~1.0.2: version "1.0.3" @@ -8276,6 +8435,14 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== +streamx@^2.15.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.0.tgz#f58c92e6f726b5390dcabd6dd9094d29a854d698" + integrity sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg== + dependencies: + fast-fifo "^1.1.0" + queue-tick "^1.0.1" + string-argv@0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" @@ -8318,9 +8485,18 @@ string.prototype.padend@^3.0.0: define-properties "^1.1.3" es-abstract "^1.19.1" +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + string.prototype.trimend@^1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== dependencies: call-bind "^1.0.2" @@ -8329,7 +8505,7 @@ string.prototype.trimend@^1.0.6: string.prototype.trimstart@^1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" @@ -8361,7 +8537,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: @@ -8388,7 +8564,7 @@ strip-indent@^4.0.0: dependencies: min-indent "^1.0.1" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -8405,7 +8581,7 @@ style-inject@^0.3.0: style-search@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== styled-jsx@5.1.1: @@ -8424,11 +8600,11 @@ stylehacks@^5.1.1: postcss-selector-parser "^6.0.4" stylelint-config-css-modules@^4.1.0: - version "4.2.0" - resolved "https://registry.npmjs.org/stylelint-config-css-modules/-/stylelint-config-css-modules-4.2.0.tgz" - integrity sha512-5x7lzPNCc42puQEAFdr7dSzQ00aIg1vCVyV+QPUiSp2oZILpAt8HTgveXaDttazxcwWPBNJrxrLpa556xUP7Bw== + version "4.3.0" + resolved "https://registry.yarnpkg.com/stylelint-config-css-modules/-/stylelint-config-css-modules-4.3.0.tgz#aa2a861f9cf30c31676013db5412c15048ca97c3" + integrity sha512-KvIvhzzjpcjHKkGSPkQCueoZJHrb6sZ6GCtrQb/J45HQTBVwJAeNYXaSZZK6ZQOC7NxJ4v5kLxpQLDiCK6zzgw== optionalDependencies: - stylelint-scss "^4.3.0" + stylelint-scss "^5.0.0 || ^6.0.0" stylelint-config-prettier@^9.0.3: version "9.0.5" @@ -8440,21 +8616,20 @@ stylelint-config-recommended@^9.0.0: resolved "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz" integrity sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ== -stylelint-scss@^4.3.0: - version "4.4.0" - resolved "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.4.0.tgz" - integrity sha512-Qy66a+/30aylFhPmUArHhVsHOun1qrO93LGT15uzLuLjWS7hKDfpFm34mYo1ndR4MCo8W4bEZM1+AlJRJORaaw== +"stylelint-scss@^5.0.0 || ^6.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-5.0.1.tgz#b33a6580b5734eace083cfc2cc3021225e28547f" + integrity sha512-n87iCRZrr2J7//I/QFsDXxFLnHKw633U4qvWZ+mOW6KDAp/HLj06H+6+f9zOuTYy+MdGdTuCSDROCpQIhw5fvQ== dependencies: - lodash "^4.17.21" postcss-media-query-parser "^0.2.3" postcss-resolve-nested-selector "^0.1.1" - postcss-selector-parser "^6.0.6" - postcss-value-parser "^4.1.0" + postcss-selector-parser "^6.0.13" + postcss-value-parser "^4.2.0" stylelint@^15.10.1: - version "15.10.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.1.tgz#93f189958687e330c106b010cbec0c41dcae506d" - integrity sha512-CYkzYrCFfA/gnOR+u9kJ1PpzwG10WLVnoxHDuBA/JiwGqdM9+yx9+ou6SE/y9YHtfv1mcLo06fdadHTOx4gBZQ== + version "15.10.2" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.2.tgz#0ee5a8371d3a2e1ff27fefd48309d3ddef7c3405" + integrity sha512-UxqSb3hB74g4DTO45QhUHkJMjKKU//lNUAOWyvPBVPZbCknJ5HjOWWZo+UDuhHa9FLeVdHBZXxu43eXkjyIPWg== dependencies: "@csstools/css-parser-algorithms" "^2.3.0" "@csstools/css-tokenizer" "^2.1.1" @@ -8463,7 +8638,7 @@ stylelint@^15.10.1: balanced-match "^2.0.0" colord "^2.9.3" cosmiconfig "^8.2.0" - css-functions-list "^3.1.0" + css-functions-list "^3.2.0" css-tree "^2.3.1" debug "^4.3.4" fast-glob "^3.3.0" @@ -8483,7 +8658,7 @@ stylelint@^15.10.1: micromatch "^4.0.5" normalize-path "^3.0.0" picocolors "^1.0.0" - postcss "^8.4.24" + postcss "^8.4.25" postcss-resolve-nested-selector "^0.1.1" postcss-safe-parser "^6.0.0" postcss-selector-parser "^6.0.13" @@ -8506,7 +8681,7 @@ supports-color@8.1.1: supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" @@ -8528,7 +8703,7 @@ supports-hyperlinks@^3.0.0: supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svg-parser@^2.0.4: @@ -8538,7 +8713,7 @@ svg-parser@^2.0.4: svg-tags@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== svgo@^2.7.0, svgo@^2.8.0: @@ -8568,7 +8743,7 @@ svgo@^3.0.2: table@^6.8.1: version "6.8.1" - resolved "https://registry.npmjs.org/table/-/table-6.8.1.tgz" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== dependencies: ajv "^8.0.1" @@ -8577,7 +8752,7 @@ table@^6.8.1: string-width "^4.2.3" strip-ansi "^6.0.1" -tar-fs@^2.0.0, tar-fs@^2.1.1: +tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== @@ -8587,6 +8762,15 @@ tar-fs@^2.0.0, tar-fs@^2.1.1: pump "^3.0.0" tar-stream "^2.1.4" +tar-fs@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.4.tgz#a21dc60a2d5d9f55e0089ccd78124f1d3771dbbf" + integrity sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w== + dependencies: + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^3.1.5" + tar-stream@^2.1.4: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" @@ -8598,6 +8782,15 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" +tar-stream@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.6.tgz#6520607b55a06f4a2e2e04db360ba7d338cc5bab" + integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + tar@^6.1.2: version "6.1.15" resolved "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz" @@ -8727,13 +8920,13 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tsconfig-paths@^3.14.1: - version "3.14.1" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== +tsconfig-paths@^3.14.1, tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== dependencies: "@types/json5" "^0.0.29" - json5 "^1.0.1" + json5 "^1.0.2" minimist "^1.2.6" strip-bom "^3.0.0" @@ -8813,9 +9006,39 @@ type-fest@^1.0.1, type-fest@^1.2.1, type-fest@^1.2.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + typed-array-length@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== dependencies: call-bind "^1.0.2" @@ -8834,14 +9057,14 @@ typescript@^4.0, typescript@^4.5, typescript@^4.9.5: resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -ufo@^1.0.0, ufo@^1.1.1, ufo@^1.1.2: +ufo@^1.0.0, ufo@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.1.2.tgz#d0d9e0fa09dece0c31ffd57bd363f030a35cfe76" integrity sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -8954,7 +9177,7 @@ use-sync-external-store@1.2.0, use-sync-external-store@^1.2.0: util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== uuid@3.4.0, uuid@^3.3.2: @@ -8962,10 +9185,10 @@ uuid@3.4.0, uuid@^3.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== v8-compile-cache-lib@^3.0.1: version "3.0.1" @@ -8974,7 +9197,7 @@ v8-compile-cache-lib@^3.0.1: validate-npm-package-license@^3.0.1: version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" @@ -9007,7 +9230,7 @@ vue@^3.2.23: web-streams-polyfill@^3.0.3: version "3.2.1" - resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== webidl-conversions@^3.0.0: @@ -9025,7 +9248,7 @@ whatwg-url@^5.0.0: which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -9034,17 +9257,16 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== +which-typed-array@^1.1.10, which-typed-array@^1.1.11, which-typed-array@^1.1.9: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== dependencies: available-typed-arrays "^1.0.5" call-bind "^1.0.2" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" which@^1.2.9, which@^1.3.1: version "1.3.1"