diff --git a/.eslintrc.json b/.eslintrc.json
index 691ae90c..82f6a122 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -13,13 +13,6 @@
"ecmaVersion": 11,
"sourceType": "module"
},
- "settings": {
- "import/resolver": {
- "node": {
- "moduleDirectory": ["node_modules", "src/"]
- }
- }
- },
"extends": [
"plugin:@typescript-eslint/recommended",
"eslint:recommended",
diff --git a/src/app/(main)/App.tsx b/src/app/(main)/App.tsx
index aca94bc2..4cbb1c80 100644
--- a/src/app/(main)/App.tsx
+++ b/src/app/(main)/App.tsx
@@ -2,7 +2,7 @@
import { Loading } from 'react-basics';
import Script from 'next/script';
import { usePathname } from 'next/navigation';
-import { useLogin, useConfig } from 'components/hooks';
+import { useLogin, useConfig } from '@/components/hooks';
import UpdateNotice from './UpdateNotice';
export function App({ children }) {
diff --git a/src/app/(main)/NavBar.tsx b/src/app/(main)/NavBar.tsx
index a4c70662..147f7085 100644
--- a/src/app/(main)/NavBar.tsx
+++ b/src/app/(main)/NavBar.tsx
@@ -3,14 +3,14 @@ import { useEffect } from 'react';
import { Icon, Text } from 'react-basics';
import Link from 'next/link';
import classNames from 'classnames';
-import HamburgerButton from 'components/common/HamburgerButton';
-import ThemeButton from 'components/input/ThemeButton';
-import LanguageButton from 'components/input/LanguageButton';
-import ProfileButton from 'components/input/ProfileButton';
-import TeamsButton from 'components/input/TeamsButton';
-import Icons from 'components/icons';
-import { useMessages, useNavigation, useTeamUrl } from 'components/hooks';
-import { getItem, setItem } from 'lib/storage';
+import HamburgerButton from '@/components/common/HamburgerButton';
+import ThemeButton from '@/components/input/ThemeButton';
+import LanguageButton from '@/components/input/LanguageButton';
+import ProfileButton from '@/components/input/ProfileButton';
+import TeamsButton from '@/components/input/TeamsButton';
+import Icons from '@/components/icons';
+import { useMessages, useNavigation, useTeamUrl } from '@/components/hooks';
+import { getItem, setItem } from '@/lib/storage';
import styles from './NavBar.module.css';
export function NavBar() {
diff --git a/src/app/(main)/UpdateNotice.tsx b/src/app/(main)/UpdateNotice.tsx
index 338d2f14..7504943b 100644
--- a/src/app/(main)/UpdateNotice.tsx
+++ b/src/app/(main)/UpdateNotice.tsx
@@ -1,10 +1,10 @@
import { useEffect, useCallback, useState } from 'react';
import { createPortal } from 'react-dom';
import { Button } from 'react-basics';
-import { setItem } from 'lib/storage';
-import useStore, { checkVersion } from 'store/version';
-import { REPO_URL, VERSION_CHECK } from 'lib/constants';
-import { useMessages } from 'components/hooks';
+import { setItem } from '@/lib/storage';
+import useStore, { checkVersion } from '@/store/version';
+import { REPO_URL, VERSION_CHECK } from '@/lib/constants';
+import { useMessages } from '@/components/hooks';
import { usePathname } from 'next/navigation';
import styles from './UpdateNotice.module.css';
diff --git a/src/app/(main)/console/TestConsole.tsx b/src/app/(main)/console/TestConsole.tsx
index 6842b26d..21b98df6 100644
--- a/src/app/(main)/console/TestConsole.tsx
+++ b/src/app/(main)/console/TestConsole.tsx
@@ -1,12 +1,12 @@
import { Button } from 'react-basics';
import Link from 'next/link';
import Script from 'next/script';
-import WebsiteSelect from 'components/input/WebsiteSelect';
-import Page from 'components/layout/Page';
-import PageHeader from 'components/layout/PageHeader';
-import EventsChart from 'components/metrics/EventsChart';
+import WebsiteSelect from '@/components/input/WebsiteSelect';
+import Page from '@/components/layout/Page';
+import PageHeader from '@/components/layout/PageHeader';
+import EventsChart from '@/components/metrics/EventsChart';
import WebsiteChart from '../websites/[websiteId]/WebsiteChart';
-import { useApi, useNavigation } from 'components/hooks';
+import { useApi, useNavigation } from '@/components/hooks';
import styles from './TestConsole.module.css';
export function TestConsole({ websiteId }: { websiteId: string }) {
diff --git a/src/app/(main)/dashboard/DashboardEdit.tsx b/src/app/(main)/dashboard/DashboardEdit.tsx
index 3360aaee..d15ae197 100644
--- a/src/app/(main)/dashboard/DashboardEdit.tsx
+++ b/src/app/(main)/dashboard/DashboardEdit.tsx
@@ -3,8 +3,8 @@ import { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd';
import classNames from 'classnames';
import { Button, Loading, Toggle, SearchField } from 'react-basics';
import { firstBy } from 'thenby';
-import useDashboard, { saveDashboard } from 'store/dashboard';
-import { useMessages, useWebsites } from 'components/hooks';
+import useDashboard, { saveDashboard } from '@/store/dashboard';
+import { useMessages, useWebsites } from '@/components/hooks';
import styles from './DashboardEdit.module.css';
const DRAG_ID = 'dashboard-website-ordering';
diff --git a/src/app/(main)/dashboard/DashboardPage.tsx b/src/app/(main)/dashboard/DashboardPage.tsx
index 2a4bb916..83b27e09 100644
--- a/src/app/(main)/dashboard/DashboardPage.tsx
+++ b/src/app/(main)/dashboard/DashboardPage.tsx
@@ -1,14 +1,14 @@
'use client';
import { Icon, Icons, Loading, Text } from 'react-basics';
-import PageHeader from 'components/layout/PageHeader';
-import Pager from 'components/common/Pager';
+import PageHeader from '@/components/layout/PageHeader';
+import Pager from '@/components/common/Pager';
import WebsiteChartList from '../websites/[websiteId]/WebsiteChartList';
-import DashboardSettingsButton from 'app/(main)/dashboard/DashboardSettingsButton';
-import DashboardEdit from 'app/(main)/dashboard/DashboardEdit';
-import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
-import { useMessages, useLocale, useTeamUrl, useWebsites } from 'components/hooks';
-import useDashboard from 'store/dashboard';
-import LinkButton from 'components/common/LinkButton';
+import DashboardSettingsButton from '@/app/(main)/dashboard/DashboardSettingsButton';
+import DashboardEdit from '@/app/(main)/dashboard/DashboardEdit';
+import EmptyPlaceholder from '@/components/common/EmptyPlaceholder';
+import { useMessages, useLocale, useTeamUrl, useWebsites } from '@/components/hooks';
+import useDashboard from '@/store/dashboard';
+import LinkButton from '@/components/common/LinkButton';
export function DashboardPage() {
const { formatMessage, labels, messages } = useMessages();
diff --git a/src/app/(main)/dashboard/DashboardSettingsButton.tsx b/src/app/(main)/dashboard/DashboardSettingsButton.tsx
index 9e1d3dbc..1c473a22 100644
--- a/src/app/(main)/dashboard/DashboardSettingsButton.tsx
+++ b/src/app/(main)/dashboard/DashboardSettingsButton.tsx
@@ -1,7 +1,7 @@
import { TooltipPopup, Icon, Text, Flexbox, Button } from 'react-basics';
-import Icons from 'components/icons';
-import { saveDashboard } from 'store/dashboard';
-import { useMessages } from 'components/hooks';
+import Icons from '@/components/icons';
+import { saveDashboard } from '@/store/dashboard';
+import { useMessages } from '@/components/hooks';
export function DashboardSettingsButton() {
const { formatMessage, labels } = useMessages();
diff --git a/src/app/(main)/layout.tsx b/src/app/(main)/layout.tsx
index 8e47d7ee..dd1baec8 100644
--- a/src/app/(main)/layout.tsx
+++ b/src/app/(main)/layout.tsx
@@ -1,7 +1,7 @@
import { Metadata } from 'next';
import App from './App';
import NavBar from './NavBar';
-import Page from 'components/layout/Page';
+import Page from '@/components/layout/Page';
import styles from './layout.module.css';
export default async function ({ children }) {
diff --git a/src/app/(main)/profile/DateRangeSetting.tsx b/src/app/(main)/profile/DateRangeSetting.tsx
index 25b5afbd..37d2ca43 100644
--- a/src/app/(main)/profile/DateRangeSetting.tsx
+++ b/src/app/(main)/profile/DateRangeSetting.tsx
@@ -1,8 +1,8 @@
-import DateFilter from 'components/input/DateFilter';
+import DateFilter from '@/components/input/DateFilter';
import { Button, Flexbox } from 'react-basics';
-import { useDateRange, useMessages } from 'components/hooks';
-import { DEFAULT_DATE_RANGE } from 'lib/constants';
-import { DateRange } from 'lib/types';
+import { useDateRange, useMessages } from '@/components/hooks';
+import { DEFAULT_DATE_RANGE } from '@/lib/constants';
+import { DateRange } from '@/lib/types';
import styles from './DateRangeSetting.module.css';
export function DateRangeSetting() {
diff --git a/src/app/(main)/profile/LanguageSetting.tsx b/src/app/(main)/profile/LanguageSetting.tsx
index 41ff3dde..a47394b3 100644
--- a/src/app/(main)/profile/LanguageSetting.tsx
+++ b/src/app/(main)/profile/LanguageSetting.tsx
@@ -1,8 +1,8 @@
import { useState } from 'react';
import { Button, Dropdown, Item, Flexbox } from 'react-basics';
-import { useLocale, useMessages } from 'components/hooks';
-import { DEFAULT_LOCALE } from 'lib/constants';
-import { languages } from 'lib/lang';
+import { useLocale, useMessages } from '@/components/hooks';
+import { DEFAULT_LOCALE } from '@/lib/constants';
+import { languages } from '@/lib/lang';
import styles from './LanguageSetting.module.css';
export function LanguageSetting() {
diff --git a/src/app/(main)/profile/PasswordChangeButton.tsx b/src/app/(main)/profile/PasswordChangeButton.tsx
index 552663ca..63249a2b 100644
--- a/src/app/(main)/profile/PasswordChangeButton.tsx
+++ b/src/app/(main)/profile/PasswordChangeButton.tsx
@@ -1,7 +1,7 @@
import { Button, Icon, Text, useToasts, ModalTrigger, Modal } from 'react-basics';
-import PasswordEditForm from 'app/(main)/profile/PasswordEditForm';
-import Icons from 'components/icons';
-import { useMessages } from 'components/hooks';
+import PasswordEditForm from '@/app/(main)/profile/PasswordEditForm';
+import Icons from '@/components/icons';
+import { useMessages } from '@/components/hooks';
export function PasswordChangeButton() {
const { formatMessage, labels, messages } = useMessages();
diff --git a/src/app/(main)/profile/PasswordEditForm.tsx b/src/app/(main)/profile/PasswordEditForm.tsx
index 1402efa2..c352d516 100644
--- a/src/app/(main)/profile/PasswordEditForm.tsx
+++ b/src/app/(main)/profile/PasswordEditForm.tsx
@@ -1,6 +1,6 @@
import { useRef } from 'react';
import { Form, FormRow, FormInput, FormButtons, PasswordField, Button } from 'react-basics';
-import { useApi, useMessages } from 'components/hooks';
+import { useApi, useMessages } from '@/components/hooks';
export function PasswordEditForm({ onSave, onClose }) {
const { formatMessage, labels, messages } = useMessages();
diff --git a/src/app/(main)/profile/ProfileHeader.tsx b/src/app/(main)/profile/ProfileHeader.tsx
index e2d69cc7..05871fba 100644
--- a/src/app/(main)/profile/ProfileHeader.tsx
+++ b/src/app/(main)/profile/ProfileHeader.tsx
@@ -1,5 +1,5 @@
-import PageHeader from 'components/layout/PageHeader';
-import { useMessages } from 'components/hooks';
+import PageHeader from '@/components/layout/PageHeader';
+import { useMessages } from '@/components/hooks';
export function ProfileHeader() {
const { formatMessage, labels } = useMessages();
diff --git a/src/app/(main)/profile/ProfileSettings.tsx b/src/app/(main)/profile/ProfileSettings.tsx
index 9c7db39f..f9dfe06d 100644
--- a/src/app/(main)/profile/ProfileSettings.tsx
+++ b/src/app/(main)/profile/ProfileSettings.tsx
@@ -1,11 +1,11 @@
import { Form, FormRow } from 'react-basics';
-import TimezoneSetting from 'app/(main)/profile/TimezoneSetting';
-import DateRangeSetting from 'app/(main)/profile/DateRangeSetting';
-import LanguageSetting from 'app/(main)/profile/LanguageSetting';
-import ThemeSetting from 'app/(main)/profile/ThemeSetting';
+import TimezoneSetting from '@/app/(main)/profile/TimezoneSetting';
+import DateRangeSetting from '@/app/(main)/profile/DateRangeSetting';
+import LanguageSetting from '@/app/(main)/profile/LanguageSetting';
+import ThemeSetting from '@/app/(main)/profile/ThemeSetting';
import PasswordChangeButton from './PasswordChangeButton';
-import { useLogin, useMessages } from 'components/hooks';
-import { ROLES } from 'lib/constants';
+import { useLogin, useMessages } from '@/components/hooks';
+import { ROLES } from '@/lib/constants';
export function ProfileSettings() {
const { user } = useLogin();
diff --git a/src/app/(main)/profile/ThemeSetting.tsx b/src/app/(main)/profile/ThemeSetting.tsx
index 577728b7..49ea7161 100644
--- a/src/app/(main)/profile/ThemeSetting.tsx
+++ b/src/app/(main)/profile/ThemeSetting.tsx
@@ -1,8 +1,8 @@
import classNames from 'classnames';
import { Button, Icon } from 'react-basics';
-import { useTheme } from 'components/hooks';
-import Sun from 'assets/sun.svg';
-import Moon from 'assets/moon.svg';
+import { useTheme } from '@/components/hooks';
+import Sun from '@/assets/sun.svg';
+import Moon from '@/assets/moon.svg';
import styles from './ThemeSetting.module.css';
export function ThemeSetting() {
diff --git a/src/app/(main)/profile/TimezoneSetting.tsx b/src/app/(main)/profile/TimezoneSetting.tsx
index 00858ac7..56c85813 100644
--- a/src/app/(main)/profile/TimezoneSetting.tsx
+++ b/src/app/(main)/profile/TimezoneSetting.tsx
@@ -1,7 +1,7 @@
import { useState } from 'react';
import { Dropdown, Item, Button, Flexbox } from 'react-basics';
-import { useTimezone, useMessages } from 'components/hooks';
-import { getTimezone } from 'lib/date';
+import { useTimezone, useMessages } from '@/components/hooks';
+import { getTimezone } from '@/lib/date';
import styles from './TimezoneSetting.module.css';
const timezones = Intl.supportedValuesOf('timeZone');
diff --git a/src/app/(main)/reports/ReportDeleteButton.tsx b/src/app/(main)/reports/ReportDeleteButton.tsx
index d51f7144..504f4ee3 100644
--- a/src/app/(main)/reports/ReportDeleteButton.tsx
+++ b/src/app/(main)/reports/ReportDeleteButton.tsx
@@ -1,6 +1,6 @@
import { Button, Icon, Icons, Modal, ModalTrigger, Text } from 'react-basics';
-import { useApi, useMessages, useModified } from 'components/hooks';
-import ConfirmationForm from 'components/common/ConfirmationForm';
+import { useApi, useMessages, useModified } from '@/components/hooks';
+import ConfirmationForm from '@/components/common/ConfirmationForm';
export function ReportDeleteButton({
reportId,
diff --git a/src/app/(main)/reports/ReportsDataTable.tsx b/src/app/(main)/reports/ReportsDataTable.tsx
index b03edfc2..0cc5a96c 100644
--- a/src/app/(main)/reports/ReportsDataTable.tsx
+++ b/src/app/(main)/reports/ReportsDataTable.tsx
@@ -1,6 +1,6 @@
-import { useReports } from 'components/hooks';
+import { useReports } from '@/components/hooks';
import ReportsTable from './ReportsTable';
-import DataTable from 'components/common/DataTable';
+import DataTable from '@/components/common/DataTable';
import { ReactNode } from 'react';
export default function ReportsDataTable({
diff --git a/src/app/(main)/reports/ReportsHeader.tsx b/src/app/(main)/reports/ReportsHeader.tsx
index 92f538ea..ff9cb294 100644
--- a/src/app/(main)/reports/ReportsHeader.tsx
+++ b/src/app/(main)/reports/ReportsHeader.tsx
@@ -1,8 +1,8 @@
-import PageHeader from 'components/layout/PageHeader';
+import PageHeader from '@/components/layout/PageHeader';
import { Icon, Icons, Text } from 'react-basics';
-import { useLogin, useMessages, useTeamUrl } from 'components/hooks';
-import LinkButton from 'components/common/LinkButton';
-import { ROLES } from 'lib/constants';
+import { useLogin, useMessages, useTeamUrl } from '@/components/hooks';
+import LinkButton from '@/components/common/LinkButton';
+import { ROLES } from '@/lib/constants';
export function ReportsHeader() {
const { formatMessage, labels } = useMessages();
diff --git a/src/app/(main)/reports/ReportsPage.tsx b/src/app/(main)/reports/ReportsPage.tsx
index 5b031cfa..64d43c70 100644
--- a/src/app/(main)/reports/ReportsPage.tsx
+++ b/src/app/(main)/reports/ReportsPage.tsx
@@ -2,7 +2,7 @@
import { Metadata } from 'next';
import ReportsHeader from './ReportsHeader';
import ReportsDataTable from './ReportsDataTable';
-import { useTeamUrl } from 'components/hooks';
+import { useTeamUrl } from '@/components/hooks';
export default function ReportsPage() {
const { teamId } = useTeamUrl();
diff --git a/src/app/(main)/reports/ReportsTable.tsx b/src/app/(main)/reports/ReportsTable.tsx
index c35468aa..a891b6d0 100644
--- a/src/app/(main)/reports/ReportsTable.tsx
+++ b/src/app/(main)/reports/ReportsTable.tsx
@@ -1,7 +1,7 @@
import { GridColumn, GridTable, Icon, Icons, Text } from 'react-basics';
-import LinkButton from 'components/common/LinkButton';
-import { useMessages, useLogin, useTeamUrl } from 'components/hooks';
-import { REPORT_TYPES } from 'lib/constants';
+import LinkButton from '@/components/common/LinkButton';
+import { useMessages, useLogin, useTeamUrl } from '@/components/hooks';
+import { REPORT_TYPES } from '@/lib/constants';
import ReportDeleteButton from './ReportDeleteButton';
export function ReportsTable({ data = [], showDomain }: { data: any[]; showDomain?: boolean }) {
diff --git a/src/app/(main)/reports/[reportId]/BaseParameters.tsx b/src/app/(main)/reports/[reportId]/BaseParameters.tsx
index 77de51f3..1f4881be 100644
--- a/src/app/(main)/reports/[reportId]/BaseParameters.tsx
+++ b/src/app/(main)/reports/[reportId]/BaseParameters.tsx
@@ -1,9 +1,9 @@
import { useContext } from 'react';
import { FormRow } from 'react-basics';
-import { parseDateRange } from 'lib/date';
-import DateFilter from 'components/input/DateFilter';
-import WebsiteSelect from 'components/input/WebsiteSelect';
-import { useMessages, useTeamUrl, useWebsite } from 'components/hooks';
+import { parseDateRange } from '@/lib/date';
+import DateFilter from '@/components/input/DateFilter';
+import WebsiteSelect from '@/components/input/WebsiteSelect';
+import { useMessages, useTeamUrl, useWebsite } from '@/components/hooks';
import { ReportContext } from './Report';
import styles from './BaseParameters.module.css';
diff --git a/src/app/(main)/reports/[reportId]/FieldAddForm.tsx b/src/app/(main)/reports/[reportId]/FieldAddForm.tsx
index 9217ce4d..6560a947 100644
--- a/src/app/(main)/reports/[reportId]/FieldAddForm.tsx
+++ b/src/app/(main)/reports/[reportId]/FieldAddForm.tsx
@@ -1,6 +1,6 @@
import { useState } from 'react';
import { createPortal } from 'react-dom';
-import { REPORT_PARAMETERS } from 'lib/constants';
+import { REPORT_PARAMETERS } from '@/lib/constants';
import PopupForm from './PopupForm';
import FieldSelectForm from './FieldSelectForm';
diff --git a/src/app/(main)/reports/[reportId]/FieldAggregateForm.tsx b/src/app/(main)/reports/[reportId]/FieldAggregateForm.tsx
index 6b5bf636..5db0e580 100644
--- a/src/app/(main)/reports/[reportId]/FieldAggregateForm.tsx
+++ b/src/app/(main)/reports/[reportId]/FieldAggregateForm.tsx
@@ -1,5 +1,5 @@
import { Form, FormRow, Menu, Item } from 'react-basics';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
export default function FieldAggregateForm({
name,
diff --git a/src/app/(main)/reports/[reportId]/FieldFilterEditForm.tsx b/src/app/(main)/reports/[reportId]/FieldFilterEditForm.tsx
index bfe4ff5f..d171c780 100644
--- a/src/app/(main)/reports/[reportId]/FieldFilterEditForm.tsx
+++ b/src/app/(main)/reports/[reportId]/FieldFilterEditForm.tsx
@@ -1,6 +1,12 @@
-import { useFilters, useFormat, useLocale, useMessages, useWebsiteValues } from 'components/hooks';
-import { OPERATORS } from 'lib/constants';
-import { isEqualsOperator } from 'lib/params';
+import {
+ useFilters,
+ useFormat,
+ useLocale,
+ useMessages,
+ useWebsiteValues,
+} from '@/components/hooks';
+import { OPERATORS } from '@/lib/constants';
+import { isEqualsOperator } from '@/lib/params';
import { useMemo, useState } from 'react';
import {
Button,
diff --git a/src/app/(main)/reports/[reportId]/FieldParameters.tsx b/src/app/(main)/reports/[reportId]/FieldParameters.tsx
index 36cfbda9..de80cc69 100644
--- a/src/app/(main)/reports/[reportId]/FieldParameters.tsx
+++ b/src/app/(main)/reports/[reportId]/FieldParameters.tsx
@@ -1,5 +1,5 @@
-import { useFields, useMessages } from 'components/hooks';
-import Icons from 'components/icons';
+import { useFields, useMessages } from '@/components/hooks';
+import Icons from '@/components/icons';
import { useContext } from 'react';
import { Button, FormRow, Icon, Popup, PopupTrigger } from 'react-basics';
import FieldSelectForm from '../[reportId]/FieldSelectForm';
diff --git a/src/app/(main)/reports/[reportId]/FieldSelectForm.tsx b/src/app/(main)/reports/[reportId]/FieldSelectForm.tsx
index dfd402cf..f73d59f7 100644
--- a/src/app/(main)/reports/[reportId]/FieldSelectForm.tsx
+++ b/src/app/(main)/reports/[reportId]/FieldSelectForm.tsx
@@ -1,5 +1,5 @@
import { Menu, Item, Form, FormRow } from 'react-basics';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import styles from './FieldSelectForm.module.css';
import { Key } from 'react';
diff --git a/src/app/(main)/reports/[reportId]/FilterParameters.tsx b/src/app/(main)/reports/[reportId]/FilterParameters.tsx
index ddbe4d1e..538c4ce5 100644
--- a/src/app/(main)/reports/[reportId]/FilterParameters.tsx
+++ b/src/app/(main)/reports/[reportId]/FilterParameters.tsx
@@ -1,13 +1,13 @@
import { useContext } from 'react';
-import { useMessages, useFormat, useFilters, useFields } from 'components/hooks';
-import Icons from 'components/icons';
+import { useMessages, useFormat, useFilters, useFields } from '@/components/hooks';
+import Icons from '@/components/icons';
import { Button, FormRow, Icon, Popup, PopupTrigger } from 'react-basics';
import FilterSelectForm from '../[reportId]/FilterSelectForm';
import ParameterList from '../[reportId]/ParameterList';
import PopupForm from '../[reportId]/PopupForm';
import { ReportContext } from './Report';
import FieldFilterEditForm from '../[reportId]/FieldFilterEditForm';
-import { isSearchOperator } from 'lib/params';
+import { isSearchOperator } from '@/lib/params';
import styles from './FilterParameters.module.css';
export function FilterParameters() {
diff --git a/src/app/(main)/reports/[reportId]/ParameterList.tsx b/src/app/(main)/reports/[reportId]/ParameterList.tsx
index d4b6477b..3c0401a0 100644
--- a/src/app/(main)/reports/[reportId]/ParameterList.tsx
+++ b/src/app/(main)/reports/[reportId]/ParameterList.tsx
@@ -1,8 +1,8 @@
import { ReactNode } from 'react';
import { Icon } from 'react-basics';
-import Icons from 'components/icons';
-import Empty from 'components/common/Empty';
-import { useMessages } from 'components/hooks';
+import Icons from '@/components/icons';
+import Empty from '@/components/common/Empty';
+import { useMessages } from '@/components/hooks';
import styles from './ParameterList.module.css';
import classNames from 'classnames';
diff --git a/src/app/(main)/reports/[reportId]/Report.tsx b/src/app/(main)/reports/[reportId]/Report.tsx
index d6de9d42..1aed007c 100644
--- a/src/app/(main)/reports/[reportId]/Report.tsx
+++ b/src/app/(main)/reports/[reportId]/Report.tsx
@@ -1,7 +1,7 @@
import { createContext, ReactNode } from 'react';
import { Loading } from 'react-basics';
import classNames from 'classnames';
-import { useReport } from 'components/hooks';
+import { useReport } from '@/components/hooks';
import styles from './Report.module.css';
export const ReportContext = createContext(null);
diff --git a/src/app/(main)/reports/[reportId]/ReportHeader.tsx b/src/app/(main)/reports/[reportId]/ReportHeader.tsx
index 7ab80fcd..816a2df3 100644
--- a/src/app/(main)/reports/[reportId]/ReportHeader.tsx
+++ b/src/app/(main)/reports/[reportId]/ReportHeader.tsx
@@ -1,10 +1,10 @@
import { useContext } from 'react';
import { Icon, LoadingButton, InlineEditField, useToasts } from 'react-basics';
-import { useMessages, useApi, useNavigation, useTeamUrl } from 'components/hooks';
+import { useMessages, useApi, useNavigation, useTeamUrl } from '@/components/hooks';
import { ReportContext } from './Report';
import styles from './ReportHeader.module.css';
-import { REPORT_TYPES } from 'lib/constants';
-import Breadcrumb from 'components/common/Breadcrumb';
+import { REPORT_TYPES } from '@/lib/constants';
+import Breadcrumb from '@/components/common/Breadcrumb';
export function ReportHeader({ icon }) {
const { report, updateReport } = useContext(ReportContext);
diff --git a/src/app/(main)/reports/[reportId]/ReportPage.tsx b/src/app/(main)/reports/[reportId]/ReportPage.tsx
index da1a0342..8a3a94ad 100644
--- a/src/app/(main)/reports/[reportId]/ReportPage.tsx
+++ b/src/app/(main)/reports/[reportId]/ReportPage.tsx
@@ -1,5 +1,5 @@
'use client';
-import { useReport } from 'components/hooks';
+import { useReport } from '@/components/hooks';
import EventDataReport from '../event-data/EventDataReport';
import FunnelReport from '../funnel/FunnelReport';
import GoalReport from '../goals/GoalsReport';
diff --git a/src/app/(main)/reports/create/ReportTemplates.tsx b/src/app/(main)/reports/create/ReportTemplates.tsx
index af19d4aa..c26e3a91 100644
--- a/src/app/(main)/reports/create/ReportTemplates.tsx
+++ b/src/app/(main)/reports/create/ReportTemplates.tsx
@@ -1,12 +1,12 @@
-import Funnel from 'assets/funnel.svg';
-import Money from 'assets/money.svg';
-import Lightbulb from 'assets/lightbulb.svg';
-import Magnet from 'assets/magnet.svg';
-import Path from 'assets/path.svg';
-import Tag from 'assets/tag.svg';
-import Target from 'assets/target.svg';
-import { useMessages, useTeamUrl } from 'components/hooks';
-import PageHeader from 'components/layout/PageHeader';
+import Funnel from '@/assets/funnel.svg';
+import Money from '@/assets/money.svg';
+import Lightbulb from '@/assets/lightbulb.svg';
+import Magnet from '@/assets/magnet.svg';
+import Path from '@/assets/path.svg';
+import Tag from '@/assets/tag.svg';
+import Target from '@/assets/target.svg';
+import { useMessages, useTeamUrl } from '@/components/hooks';
+import PageHeader from '@/components/layout/PageHeader';
import Link from 'next/link';
import { Button, Icon, Icons, Text } from 'react-basics';
import styles from './ReportTemplates.module.css';
diff --git a/src/app/(main)/reports/event-data/EventDataParameters.tsx b/src/app/(main)/reports/event-data/EventDataParameters.tsx
index 7b61c112..9e931cf5 100644
--- a/src/app/(main)/reports/event-data/EventDataParameters.tsx
+++ b/src/app/(main)/reports/event-data/EventDataParameters.tsx
@@ -1,9 +1,9 @@
import { useContext } from 'react';
import { Form, FormRow, FormButtons, SubmitButton, PopupTrigger, Icon, Popup } from 'react-basics';
-import Empty from 'components/common/Empty';
-import Icons from 'components/icons';
-import { useApi, useMessages } from 'components/hooks';
-import { DATA_TYPES, REPORT_PARAMETERS } from 'lib/constants';
+import Empty from '@/components/common/Empty';
+import Icons from '@/components/icons';
+import { useApi, useMessages } from '@/components/hooks';
+import { DATA_TYPES, REPORT_PARAMETERS } from '@/lib/constants';
import { ReportContext } from '../[reportId]/Report';
import FieldAddForm from '../[reportId]/FieldAddForm';
import ParameterList from '../[reportId]/ParameterList';
diff --git a/src/app/(main)/reports/event-data/EventDataReport.tsx b/src/app/(main)/reports/event-data/EventDataReport.tsx
index fb786b31..8205a488 100644
--- a/src/app/(main)/reports/event-data/EventDataReport.tsx
+++ b/src/app/(main)/reports/event-data/EventDataReport.tsx
@@ -4,7 +4,7 @@ import ReportMenu from '../[reportId]/ReportMenu';
import ReportBody from '../[reportId]/ReportBody';
import EventDataParameters from './EventDataParameters';
import EventDataTable from './EventDataTable';
-import Nodes from 'assets/nodes.svg';
+import Nodes from '@/assets/nodes.svg';
const defaultParameters = {
type: 'event-data',
diff --git a/src/app/(main)/reports/event-data/EventDataTable.tsx b/src/app/(main)/reports/event-data/EventDataTable.tsx
index 740cbce4..f42e792d 100644
--- a/src/app/(main)/reports/event-data/EventDataTable.tsx
+++ b/src/app/(main)/reports/event-data/EventDataTable.tsx
@@ -1,6 +1,6 @@
import { useContext } from 'react';
import { GridTable, GridColumn } from 'react-basics';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import { ReportContext } from '../[reportId]/Report';
export function EventDataTable() {
diff --git a/src/app/(main)/reports/funnel/FunnelChart.tsx b/src/app/(main)/reports/funnel/FunnelChart.tsx
index 0da71d6f..be3da614 100644
--- a/src/app/(main)/reports/funnel/FunnelChart.tsx
+++ b/src/app/(main)/reports/funnel/FunnelChart.tsx
@@ -1,8 +1,8 @@
import { useContext } from 'react';
import classNames from 'classnames';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import { ReportContext } from '../[reportId]/Report';
-import { formatLongNumber } from 'lib/format';
+import { formatLongNumber } from '@/lib/format';
import styles from './FunnelChart.module.css';
export interface FunnelChartProps {
diff --git a/src/app/(main)/reports/funnel/FunnelParameters.tsx b/src/app/(main)/reports/funnel/FunnelParameters.tsx
index ef4ffbfb..3db57135 100644
--- a/src/app/(main)/reports/funnel/FunnelParameters.tsx
+++ b/src/app/(main)/reports/funnel/FunnelParameters.tsx
@@ -1,5 +1,5 @@
import { useContext } from 'react';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import {
Icon,
Form,
@@ -12,7 +12,7 @@ import {
TextField,
Button,
} from 'react-basics';
-import Icons from 'components/icons';
+import Icons from '@/components/icons';
import FunnelStepAddForm from './FunnelStepAddForm';
import { ReportContext } from '../[reportId]/Report';
import BaseParameters from '../[reportId]/BaseParameters';
diff --git a/src/app/(main)/reports/funnel/FunnelReport.tsx b/src/app/(main)/reports/funnel/FunnelReport.tsx
index 850bbd90..e0c90e4a 100644
--- a/src/app/(main)/reports/funnel/FunnelReport.tsx
+++ b/src/app/(main)/reports/funnel/FunnelReport.tsx
@@ -4,8 +4,8 @@ import Report from '../[reportId]/Report';
import ReportHeader from '../[reportId]/ReportHeader';
import ReportMenu from '../[reportId]/ReportMenu';
import ReportBody from '../[reportId]/ReportBody';
-import Funnel from 'assets/funnel.svg';
-import { REPORT_TYPES } from 'lib/constants';
+import Funnel from '@/assets/funnel.svg';
+import { REPORT_TYPES } from '@/lib/constants';
const defaultParameters = {
type: REPORT_TYPES.funnel,
diff --git a/src/app/(main)/reports/funnel/FunnelStepAddForm.tsx b/src/app/(main)/reports/funnel/FunnelStepAddForm.tsx
index 7d77b0c7..d7917d7d 100644
--- a/src/app/(main)/reports/funnel/FunnelStepAddForm.tsx
+++ b/src/app/(main)/reports/funnel/FunnelStepAddForm.tsx
@@ -1,5 +1,5 @@
import { useState } from 'react';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import { Button, FormRow, TextField, Flexbox, Dropdown, Item } from 'react-basics';
import styles from './FunnelStepAddForm.module.css';
diff --git a/src/app/(main)/reports/goals/GoalsAddForm.tsx b/src/app/(main)/reports/goals/GoalsAddForm.tsx
index a82eea28..b7354533 100644
--- a/src/app/(main)/reports/goals/GoalsAddForm.tsx
+++ b/src/app/(main)/reports/goals/GoalsAddForm.tsx
@@ -1,4 +1,4 @@
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import { useState } from 'react';
import { Button, Dropdown, Flexbox, FormRow, Item, TextField } from 'react-basics';
import styles from './GoalsAddForm.module.css';
diff --git a/src/app/(main)/reports/goals/GoalsChart.tsx b/src/app/(main)/reports/goals/GoalsChart.tsx
index dedbd07c..34ea485e 100644
--- a/src/app/(main)/reports/goals/GoalsChart.tsx
+++ b/src/app/(main)/reports/goals/GoalsChart.tsx
@@ -1,8 +1,8 @@
import { useContext } from 'react';
import classNames from 'classnames';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import { ReportContext } from '../[reportId]/Report';
-import { formatLongNumber } from 'lib/format';
+import { formatLongNumber } from '@/lib/format';
import styles from './GoalsChart.module.css';
export function GoalsChart({ className }: { className?: string; isLoading?: boolean }) {
diff --git a/src/app/(main)/reports/goals/GoalsParameters.tsx b/src/app/(main)/reports/goals/GoalsParameters.tsx
index 8d85dc20..51866645 100644
--- a/src/app/(main)/reports/goals/GoalsParameters.tsx
+++ b/src/app/(main)/reports/goals/GoalsParameters.tsx
@@ -1,6 +1,6 @@
-import { useMessages } from 'components/hooks';
-import Icons from 'components/icons';
-import { formatNumber } from 'lib/format';
+import { useMessages } from '@/components/hooks';
+import Icons from '@/components/icons';
+import { formatNumber } from '@/lib/format';
import { useContext } from 'react';
import {
Button,
diff --git a/src/app/(main)/reports/goals/GoalsReport.tsx b/src/app/(main)/reports/goals/GoalsReport.tsx
index 020d7d09..ae540f3b 100644
--- a/src/app/(main)/reports/goals/GoalsReport.tsx
+++ b/src/app/(main)/reports/goals/GoalsReport.tsx
@@ -4,8 +4,8 @@ import Report from '../[reportId]/Report';
import ReportHeader from '../[reportId]/ReportHeader';
import ReportMenu from '../[reportId]/ReportMenu';
import ReportBody from '../[reportId]/ReportBody';
-import Target from 'assets/target.svg';
-import { REPORT_TYPES } from 'lib/constants';
+import Target from '@/assets/target.svg';
+import { REPORT_TYPES } from '@/lib/constants';
const defaultParameters = {
type: REPORT_TYPES.goals,
diff --git a/src/app/(main)/reports/insights/InsightsParameters.tsx b/src/app/(main)/reports/insights/InsightsParameters.tsx
index 7f58de6a..6b3402fb 100644
--- a/src/app/(main)/reports/insights/InsightsParameters.tsx
+++ b/src/app/(main)/reports/insights/InsightsParameters.tsx
@@ -1,4 +1,4 @@
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import { useContext } from 'react';
import { Form, FormButtons, SubmitButton } from 'react-basics';
import BaseParameters from '../[reportId]/BaseParameters';
diff --git a/src/app/(main)/reports/insights/InsightsReport.tsx b/src/app/(main)/reports/insights/InsightsReport.tsx
index adfbbd20..d43576fa 100644
--- a/src/app/(main)/reports/insights/InsightsReport.tsx
+++ b/src/app/(main)/reports/insights/InsightsReport.tsx
@@ -4,8 +4,8 @@ import ReportMenu from '../[reportId]/ReportMenu';
import ReportBody from '../[reportId]/ReportBody';
import InsightsParameters from './InsightsParameters';
import InsightsTable from './InsightsTable';
-import Lightbulb from 'assets/lightbulb.svg';
-import { REPORT_TYPES } from 'lib/constants';
+import Lightbulb from '@/assets/lightbulb.svg';
+import { REPORT_TYPES } from '@/lib/constants';
const defaultParameters = {
type: REPORT_TYPES.insights,
diff --git a/src/app/(main)/reports/insights/InsightsTable.tsx b/src/app/(main)/reports/insights/InsightsTable.tsx
index 692d7824..6864d919 100644
--- a/src/app/(main)/reports/insights/InsightsTable.tsx
+++ b/src/app/(main)/reports/insights/InsightsTable.tsx
@@ -1,9 +1,9 @@
import { useContext, useEffect, useState } from 'react';
import { GridTable, GridColumn } from 'react-basics';
-import { useFormat, useMessages } from 'components/hooks';
+import { useFormat, useMessages } from '@/components/hooks';
import { ReportContext } from '../[reportId]/Report';
-import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
-import { formatShortTime } from 'lib/format';
+import EmptyPlaceholder from '@/components/common/EmptyPlaceholder';
+import { formatShortTime } from '@/lib/format';
export function InsightsTable() {
const [fields, setFields] = useState([]);
diff --git a/src/app/(main)/reports/journey/JourneyParameters.tsx b/src/app/(main)/reports/journey/JourneyParameters.tsx
index eca9c42d..ffa5df89 100644
--- a/src/app/(main)/reports/journey/JourneyParameters.tsx
+++ b/src/app/(main)/reports/journey/JourneyParameters.tsx
@@ -1,5 +1,5 @@
import { useContext } from 'react';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import {
Dropdown,
Form,
diff --git a/src/app/(main)/reports/journey/JourneyReport.tsx b/src/app/(main)/reports/journey/JourneyReport.tsx
index 9048b3d1..4322fa2a 100644
--- a/src/app/(main)/reports/journey/JourneyReport.tsx
+++ b/src/app/(main)/reports/journey/JourneyReport.tsx
@@ -5,8 +5,8 @@ import ReportMenu from '../[reportId]/ReportMenu';
import ReportBody from '../[reportId]/ReportBody';
import JourneyParameters from './JourneyParameters';
import JourneyView from './JourneyView';
-import Path from 'assets/path.svg';
-import { REPORT_TYPES } from 'lib/constants';
+import Path from '@/assets/path.svg';
+import { REPORT_TYPES } from '@/lib/constants';
const defaultParameters = {
type: REPORT_TYPES.journey,
diff --git a/src/app/(main)/reports/journey/JourneyView.tsx b/src/app/(main)/reports/journey/JourneyView.tsx
index ae980a6e..abddf023 100644
--- a/src/app/(main)/reports/journey/JourneyView.tsx
+++ b/src/app/(main)/reports/journey/JourneyView.tsx
@@ -2,11 +2,11 @@ import { useContext, useMemo, useState } from 'react';
import { TextOverflow, TooltipPopup } from 'react-basics';
import { firstBy } from 'thenby';
import classNames from 'classnames';
-import { useEscapeKey, useMessages } from 'components/hooks';
-import { objectToArray } from 'lib/data';
+import { useEscapeKey, useMessages } from '@/components/hooks';
+import { objectToArray } from '@/lib/data';
import { ReportContext } from '../[reportId]/Report';
import styles from './JourneyView.module.css';
-import { formatLongNumber } from 'lib/format';
+import { formatLongNumber } from '@/lib/format';
const NODE_HEIGHT = 60;
const NODE_GAP = 10;
diff --git a/src/app/(main)/reports/retention/RetentionParameters.tsx b/src/app/(main)/reports/retention/RetentionParameters.tsx
index f441177c..56cbdbd3 100644
--- a/src/app/(main)/reports/retention/RetentionParameters.tsx
+++ b/src/app/(main)/reports/retention/RetentionParameters.tsx
@@ -1,10 +1,10 @@
import { useContext } from 'react';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import { Form, FormButtons, FormRow, SubmitButton } from 'react-basics';
import { ReportContext } from '../[reportId]/Report';
-import { MonthSelect } from 'components/input/MonthSelect';
+import { MonthSelect } from '@/components/input/MonthSelect';
import BaseParameters from '../[reportId]/BaseParameters';
-import { parseDateRange } from 'lib/date';
+import { parseDateRange } from '@/lib/date';
export function RetentionParameters() {
const { report, runReport, isRunning, updateReport } = useContext(ReportContext);
diff --git a/src/app/(main)/reports/retention/RetentionReport.tsx b/src/app/(main)/reports/retention/RetentionReport.tsx
index 81b565dc..054a1a66 100644
--- a/src/app/(main)/reports/retention/RetentionReport.tsx
+++ b/src/app/(main)/reports/retention/RetentionReport.tsx
@@ -4,9 +4,9 @@ import Report from '../[reportId]/Report';
import ReportHeader from '../[reportId]/ReportHeader';
import ReportMenu from '../[reportId]/ReportMenu';
import ReportBody from '../[reportId]/ReportBody';
-import Magnet from 'assets/magnet.svg';
-import { REPORT_TYPES } from 'lib/constants';
-import { parseDateRange } from 'lib/date';
+import Magnet from '@/assets/magnet.svg';
+import { REPORT_TYPES } from '@/lib/constants';
+import { parseDateRange } from '@/lib/date';
import { endOfMonth, startOfMonth } from 'date-fns';
const defaultParameters = {
diff --git a/src/app/(main)/reports/retention/RetentionTable.tsx b/src/app/(main)/reports/retention/RetentionTable.tsx
index 6d825567..23f0a8b0 100644
--- a/src/app/(main)/reports/retention/RetentionTable.tsx
+++ b/src/app/(main)/reports/retention/RetentionTable.tsx
@@ -1,9 +1,9 @@
import { useContext } from 'react';
import classNames from 'classnames';
import { ReportContext } from '../[reportId]/Report';
-import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
-import { useMessages, useLocale } from 'components/hooks';
-import { formatDate } from 'lib/date';
+import EmptyPlaceholder from '@/components/common/EmptyPlaceholder';
+import { useMessages, useLocale } from '@/components/hooks';
+import { formatDate } from '@/lib/date';
import styles from './RetentionTable.module.css';
const DAYS = [1, 2, 3, 4, 5, 6, 7, 14, 21, 28];
diff --git a/src/app/(main)/reports/revenue/RevenueParameters.tsx b/src/app/(main)/reports/revenue/RevenueParameters.tsx
index 8e344e4d..5cee14de 100644
--- a/src/app/(main)/reports/revenue/RevenueParameters.tsx
+++ b/src/app/(main)/reports/revenue/RevenueParameters.tsx
@@ -1,5 +1,5 @@
-import { useMessages } from 'components/hooks';
-import useRevenueValues from 'components/hooks/queries/useRevenueValues';
+import { useMessages } from '@/components/hooks';
+import useRevenueValues from '@/components/hooks/queries/useRevenueValues';
import { useContext } from 'react';
import { Dropdown, Form, FormButtons, FormInput, FormRow, Item, SubmitButton } from 'react-basics';
import BaseParameters from '../[reportId]/BaseParameters';
diff --git a/src/app/(main)/reports/revenue/RevenueReport.tsx b/src/app/(main)/reports/revenue/RevenueReport.tsx
index 7b75ebd2..8400c651 100644
--- a/src/app/(main)/reports/revenue/RevenueReport.tsx
+++ b/src/app/(main)/reports/revenue/RevenueReport.tsx
@@ -1,5 +1,5 @@
-import Money from 'assets/money.svg';
-import { REPORT_TYPES } from 'lib/constants';
+import Money from '@/assets/money.svg';
+import { REPORT_TYPES } from '@/lib/constants';
import Report from '../[reportId]/Report';
import ReportBody from '../[reportId]/ReportBody';
import ReportHeader from '../[reportId]/ReportHeader';
diff --git a/src/app/(main)/reports/revenue/RevenueTable.tsx b/src/app/(main)/reports/revenue/RevenueTable.tsx
index 0b9fcdc3..184797e9 100644
--- a/src/app/(main)/reports/revenue/RevenueTable.tsx
+++ b/src/app/(main)/reports/revenue/RevenueTable.tsx
@@ -1,9 +1,9 @@
-import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
-import { useMessages } from 'components/hooks';
+import EmptyPlaceholder from '@/components/common/EmptyPlaceholder';
+import { useMessages } from '@/components/hooks';
import { useContext } from 'react';
import { GridColumn, GridTable } from 'react-basics';
import { ReportContext } from '../[reportId]/Report';
-import { formatLongCurrency } from 'lib/format';
+import { formatLongCurrency } from '@/lib/format';
export function RevenueTable() {
const { report } = useContext(ReportContext);
diff --git a/src/app/(main)/reports/revenue/RevenueView.tsx b/src/app/(main)/reports/revenue/RevenueView.tsx
index 2d559893..bd3d6c63 100644
--- a/src/app/(main)/reports/revenue/RevenueView.tsx
+++ b/src/app/(main)/reports/revenue/RevenueView.tsx
@@ -1,16 +1,16 @@
import classNames from 'classnames';
import { colord } from 'colord';
-import BarChart from 'components/charts/BarChart';
-import PieChart from 'components/charts/PieChart';
-import TypeIcon from 'components/common/TypeIcon';
-import { useCountryNames, useLocale, useMessages } from 'components/hooks';
-import { GridRow } from 'components/layout/Grid';
-import ListTable from 'components/metrics/ListTable';
-import MetricCard from 'components/metrics/MetricCard';
-import MetricsBar from 'components/metrics/MetricsBar';
-import { renderDateLabels } from 'lib/charts';
-import { CHART_COLORS } from 'lib/constants';
-import { formatLongCurrency, formatLongNumber } from 'lib/format';
+import BarChart from '@/components/charts/BarChart';
+import PieChart from '@/components/charts/PieChart';
+import TypeIcon from '@/components/common/TypeIcon';
+import { useCountryNames, useLocale, useMessages } from '@/components/hooks';
+import { GridRow } from '@/components/layout/Grid';
+import ListTable from '@/components/metrics/ListTable';
+import MetricCard from '@/components/metrics/MetricCard';
+import MetricsBar from '@/components/metrics/MetricsBar';
+import { renderDateLabels } from '@/lib/charts';
+import { CHART_COLORS } from '@/lib/constants';
+import { formatLongCurrency, formatLongNumber } from '@/lib/format';
import { useCallback, useContext, useMemo } from 'react';
import { ReportContext } from '../[reportId]/Report';
import RevenueTable from './RevenueTable';
diff --git a/src/app/(main)/reports/utm/UTMParameters.tsx b/src/app/(main)/reports/utm/UTMParameters.tsx
index c76df77d..5ae6017f 100644
--- a/src/app/(main)/reports/utm/UTMParameters.tsx
+++ b/src/app/(main)/reports/utm/UTMParameters.tsx
@@ -1,5 +1,5 @@
import { useContext } from 'react';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import { Form, FormButtons, SubmitButton } from 'react-basics';
import { ReportContext } from '../[reportId]/Report';
import BaseParameters from '../[reportId]/BaseParameters';
diff --git a/src/app/(main)/reports/utm/UTMReport.tsx b/src/app/(main)/reports/utm/UTMReport.tsx
index 7183b9f7..d9d2f579 100644
--- a/src/app/(main)/reports/utm/UTMReport.tsx
+++ b/src/app/(main)/reports/utm/UTMReport.tsx
@@ -5,8 +5,8 @@ import ReportMenu from '../[reportId]/ReportMenu';
import ReportBody from '../[reportId]/ReportBody';
import UTMParameters from './UTMParameters';
import UTMView from './UTMView';
-import Tag from 'assets/tag.svg';
-import { REPORT_TYPES } from 'lib/constants';
+import Tag from '@/assets/tag.svg';
+import { REPORT_TYPES } from '@/lib/constants';
const defaultParameters = {
type: REPORT_TYPES.utm,
diff --git a/src/app/(main)/reports/utm/UTMView.tsx b/src/app/(main)/reports/utm/UTMView.tsx
index f10a68d8..ba025824 100644
--- a/src/app/(main)/reports/utm/UTMView.tsx
+++ b/src/app/(main)/reports/utm/UTMView.tsx
@@ -1,11 +1,11 @@
import { useContext } from 'react';
import { firstBy } from 'thenby';
import { ReportContext } from '../[reportId]/Report';
-import { CHART_COLORS, UTM_PARAMS } from 'lib/constants';
-import PieChart from 'components/charts/PieChart';
-import ListTable from 'components/metrics/ListTable';
+import { CHART_COLORS, UTM_PARAMS } from '@/lib/constants';
+import PieChart from '@/components/charts/PieChart';
+import ListTable from '@/components/metrics/ListTable';
import styles from './UTMView.module.css';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
function toArray(data: { [key: string]: number } = {}) {
return Object.keys(data)
diff --git a/src/app/(main)/settings/SettingsLayout.tsx b/src/app/(main)/settings/SettingsLayout.tsx
index 28e9a074..08dcc3eb 100644
--- a/src/app/(main)/settings/SettingsLayout.tsx
+++ b/src/app/(main)/settings/SettingsLayout.tsx
@@ -1,7 +1,7 @@
'use client';
import { ReactNode } from 'react';
-import { useLogin, useMessages } from 'components/hooks';
-import MenuLayout from 'components/layout/MenuLayout';
+import { useLogin, useMessages } from '@/components/hooks';
+import MenuLayout from '@/components/layout/MenuLayout';
export default function SettingsLayout({ children }: { children: ReactNode }) {
const { user } = useLogin();
diff --git a/src/app/(main)/settings/teams/TeamAddForm.tsx b/src/app/(main)/settings/teams/TeamAddForm.tsx
index c0fc7513..e940aa17 100644
--- a/src/app/(main)/settings/teams/TeamAddForm.tsx
+++ b/src/app/(main)/settings/teams/TeamAddForm.tsx
@@ -1,4 +1,4 @@
-import { useApi, useMessages } from 'components/hooks';
+import { useApi, useMessages } from '@/components/hooks';
import {
Button,
Form,
diff --git a/src/app/(main)/settings/teams/TeamJoinForm.tsx b/src/app/(main)/settings/teams/TeamJoinForm.tsx
index 939b5d4b..0a82260c 100644
--- a/src/app/(main)/settings/teams/TeamJoinForm.tsx
+++ b/src/app/(main)/settings/teams/TeamJoinForm.tsx
@@ -8,7 +8,7 @@ import {
Button,
SubmitButton,
} from 'react-basics';
-import { useApi, useMessages, useModified } from 'components/hooks';
+import { useApi, useMessages, useModified } from '@/components/hooks';
export function TeamJoinForm({ onSave, onClose }: { onSave: () => void; onClose: () => void }) {
const { formatMessage, labels, getMessage } = useMessages();
diff --git a/src/app/(main)/settings/teams/TeamLeaveButton.tsx b/src/app/(main)/settings/teams/TeamLeaveButton.tsx
index b8a24c7e..5f5b54f3 100644
--- a/src/app/(main)/settings/teams/TeamLeaveButton.tsx
+++ b/src/app/(main)/settings/teams/TeamLeaveButton.tsx
@@ -1,4 +1,4 @@
-import { useLocale, useLogin, useMessages, useModified } from 'components/hooks';
+import { useLocale, useLogin, useMessages, useModified } from '@/components/hooks';
import { useRouter } from 'next/navigation';
import { Button, Icon, Icons, Modal, ModalTrigger, Text } from 'react-basics';
import TeamDeleteForm from './TeamLeaveForm';
diff --git a/src/app/(main)/settings/teams/TeamLeaveForm.tsx b/src/app/(main)/settings/teams/TeamLeaveForm.tsx
index 8c9726be..9951aa93 100644
--- a/src/app/(main)/settings/teams/TeamLeaveForm.tsx
+++ b/src/app/(main)/settings/teams/TeamLeaveForm.tsx
@@ -1,5 +1,5 @@
-import { useApi, useMessages, useModified } from 'components/hooks';
-import ConfirmationForm from 'components/common/ConfirmationForm';
+import { useApi, useMessages, useModified } from '@/components/hooks';
+import ConfirmationForm from '@/components/common/ConfirmationForm';
export function TeamLeaveForm({
teamId,
diff --git a/src/app/(main)/settings/teams/TeamsAddButton.tsx b/src/app/(main)/settings/teams/TeamsAddButton.tsx
index 6ec4cf39..58c138a8 100644
--- a/src/app/(main)/settings/teams/TeamsAddButton.tsx
+++ b/src/app/(main)/settings/teams/TeamsAddButton.tsx
@@ -1,8 +1,8 @@
import { Button, Icon, Modal, ModalTrigger, Text, useToasts } from 'react-basics';
-import Icons from 'components/icons';
-import { useMessages, useModified } from 'components/hooks';
+import Icons from '@/components/icons';
+import { useMessages, useModified } from '@/components/hooks';
import TeamAddForm from './TeamAddForm';
-import { messages } from 'components/messages';
+import { messages } from '@/components/messages';
export function TeamsAddButton({ onSave }: { onSave?: () => void }) {
const { formatMessage, labels } = useMessages();
diff --git a/src/app/(main)/settings/teams/TeamsDataTable.tsx b/src/app/(main)/settings/teams/TeamsDataTable.tsx
index e8563b2e..9b8c9b27 100644
--- a/src/app/(main)/settings/teams/TeamsDataTable.tsx
+++ b/src/app/(main)/settings/teams/TeamsDataTable.tsx
@@ -1,6 +1,6 @@
-import DataTable from 'components/common/DataTable';
-import TeamsTable from 'app/(main)/settings/teams/TeamsTable';
-import { useLogin, useTeams } from 'components/hooks';
+import DataTable from '@/components/common/DataTable';
+import TeamsTable from '@/app/(main)/settings/teams/TeamsTable';
+import { useLogin, useTeams } from '@/components/hooks';
import { ReactNode } from 'react';
export function TeamsDataTable({
diff --git a/src/app/(main)/settings/teams/TeamsHeader.tsx b/src/app/(main)/settings/teams/TeamsHeader.tsx
index 8aa5e7a3..e1911a19 100644
--- a/src/app/(main)/settings/teams/TeamsHeader.tsx
+++ b/src/app/(main)/settings/teams/TeamsHeader.tsx
@@ -1,7 +1,7 @@
import { Flexbox } from 'react-basics';
-import PageHeader from 'components/layout/PageHeader';
-import { ROLES } from 'lib/constants';
-import { useLogin, useMessages } from 'components/hooks';
+import PageHeader from '@/components/layout/PageHeader';
+import { ROLES } from '@/lib/constants';
+import { useLogin, useMessages } from '@/components/hooks';
import TeamsJoinButton from './TeamsJoinButton';
import TeamsAddButton from './TeamsAddButton';
diff --git a/src/app/(main)/settings/teams/TeamsJoinButton.tsx b/src/app/(main)/settings/teams/TeamsJoinButton.tsx
index 24925bb6..bbf2d685 100644
--- a/src/app/(main)/settings/teams/TeamsJoinButton.tsx
+++ b/src/app/(main)/settings/teams/TeamsJoinButton.tsx
@@ -1,6 +1,6 @@
import { Button, Icon, Modal, ModalTrigger, Text, useToasts } from 'react-basics';
-import Icons from 'components/icons';
-import { useMessages, useModified } from 'components/hooks';
+import Icons from '@/components/icons';
+import { useMessages, useModified } from '@/components/hooks';
import TeamJoinForm from './TeamJoinForm';
export function TeamsJoinButton() {
diff --git a/src/app/(main)/settings/teams/TeamsTable.tsx b/src/app/(main)/settings/teams/TeamsTable.tsx
index a7a03958..8e7efa27 100644
--- a/src/app/(main)/settings/teams/TeamsTable.tsx
+++ b/src/app/(main)/settings/teams/TeamsTable.tsx
@@ -1,8 +1,8 @@
import { GridColumn, GridTable, Icon, Text } from 'react-basics';
-import { useMessages } from 'components/hooks';
-import Icons from 'components/icons';
-import { ROLES } from 'lib/constants';
-import LinkButton from 'components/common/LinkButton';
+import { useMessages } from '@/components/hooks';
+import Icons from '@/components/icons';
+import { ROLES } from '@/lib/constants';
+import LinkButton from '@/components/common/LinkButton';
export function TeamsTable({
data = [],
diff --git a/src/app/(main)/settings/users/UserAddButton.tsx b/src/app/(main)/settings/users/UserAddButton.tsx
index 832cf75b..e1b04842 100644
--- a/src/app/(main)/settings/users/UserAddButton.tsx
+++ b/src/app/(main)/settings/users/UserAddButton.tsx
@@ -1,6 +1,6 @@
import { Button, Icon, Text, Modal, Icons, ModalTrigger, useToasts } from 'react-basics';
import UserAddForm from './UserAddForm';
-import { useMessages, useModified } from 'components/hooks';
+import { useMessages, useModified } from '@/components/hooks';
export function UserAddButton({ onSave }: { onSave?: () => void }) {
const { formatMessage, labels, messages } = useMessages();
diff --git a/src/app/(main)/settings/users/UserAddForm.tsx b/src/app/(main)/settings/users/UserAddForm.tsx
index 979f399f..13f2faf5 100644
--- a/src/app/(main)/settings/users/UserAddForm.tsx
+++ b/src/app/(main)/settings/users/UserAddForm.tsx
@@ -10,8 +10,8 @@ import {
SubmitButton,
Button,
} from 'react-basics';
-import { useApi, useMessages } from 'components/hooks';
-import { ROLES } from 'lib/constants';
+import { useApi, useMessages } from '@/components/hooks';
+import { ROLES } from '@/lib/constants';
export function UserAddForm({ onSave, onClose }) {
const { post, useMutation } = useApi();
diff --git a/src/app/(main)/settings/users/UserDeleteButton.tsx b/src/app/(main)/settings/users/UserDeleteButton.tsx
index 9f1f8459..0909720e 100644
--- a/src/app/(main)/settings/users/UserDeleteButton.tsx
+++ b/src/app/(main)/settings/users/UserDeleteButton.tsx
@@ -1,5 +1,5 @@
import { Button, Icon, Icons, Modal, ModalTrigger, Text } from 'react-basics';
-import { useMessages, useLogin } from 'components/hooks';
+import { useMessages, useLogin } from '@/components/hooks';
import UserDeleteForm from './UserDeleteForm';
export function UserDeleteButton({
diff --git a/src/app/(main)/settings/users/UserDeleteForm.tsx b/src/app/(main)/settings/users/UserDeleteForm.tsx
index 9b49647f..68a3e85e 100644
--- a/src/app/(main)/settings/users/UserDeleteForm.tsx
+++ b/src/app/(main)/settings/users/UserDeleteForm.tsx
@@ -1,5 +1,5 @@
-import { useApi, useMessages, useModified } from 'components/hooks';
-import ConfirmationForm from 'components/common/ConfirmationForm';
+import { useApi, useMessages, useModified } from '@/components/hooks';
+import ConfirmationForm from '@/components/common/ConfirmationForm';
export function UserDeleteForm({ userId, username, onSave, onClose }) {
const { FormattedMessage, messages, labels, formatMessage } = useMessages();
diff --git a/src/app/(main)/settings/users/UsersDataTable.tsx b/src/app/(main)/settings/users/UsersDataTable.tsx
index 03addc74..867f4090 100644
--- a/src/app/(main)/settings/users/UsersDataTable.tsx
+++ b/src/app/(main)/settings/users/UsersDataTable.tsx
@@ -1,5 +1,5 @@
-import DataTable from 'components/common/DataTable';
-import { useUsers } from 'components/hooks';
+import DataTable from '@/components/common/DataTable';
+import { useUsers } from '@/components/hooks';
import UsersTable from './UsersTable';
import { ReactNode } from 'react';
diff --git a/src/app/(main)/settings/users/UsersHeader.tsx b/src/app/(main)/settings/users/UsersHeader.tsx
index 6f4387c7..d07a159f 100644
--- a/src/app/(main)/settings/users/UsersHeader.tsx
+++ b/src/app/(main)/settings/users/UsersHeader.tsx
@@ -1,5 +1,5 @@
-import PageHeader from 'components/layout/PageHeader';
-import { useMessages } from 'components/hooks';
+import PageHeader from '@/components/layout/PageHeader';
+import { useMessages } from '@/components/hooks';
import UserAddButton from './UserAddButton';
export function UsersHeader({ onAdd }: { onAdd?: () => void }) {
diff --git a/src/app/(main)/settings/users/UsersTable.tsx b/src/app/(main)/settings/users/UsersTable.tsx
index e074be24..c698f38b 100644
--- a/src/app/(main)/settings/users/UsersTable.tsx
+++ b/src/app/(main)/settings/users/UsersTable.tsx
@@ -1,9 +1,9 @@
import { Text, Icon, Icons, GridTable, GridColumn } from 'react-basics';
import { formatDistance } from 'date-fns';
-import { ROLES } from 'lib/constants';
-import { useMessages, useLocale } from 'components/hooks';
+import { ROLES } from '@/lib/constants';
+import { useMessages, useLocale } from '@/components/hooks';
import UserDeleteButton from './UserDeleteButton';
-import LinkButton from 'components/common/LinkButton';
+import LinkButton from '@/components/common/LinkButton';
export function UsersTable({
data = [],
diff --git a/src/app/(main)/settings/users/[userId]/UserEditForm.tsx b/src/app/(main)/settings/users/[userId]/UserEditForm.tsx
index 1acfc581..70f21f63 100644
--- a/src/app/(main)/settings/users/[userId]/UserEditForm.tsx
+++ b/src/app/(main)/settings/users/[userId]/UserEditForm.tsx
@@ -9,8 +9,8 @@ import {
SubmitButton,
PasswordField,
} from 'react-basics';
-import { useApi, useLogin, useMessages } from 'components/hooks';
-import { ROLES } from 'lib/constants';
+import { useApi, useLogin, useMessages } from '@/components/hooks';
+import { ROLES } from '@/lib/constants';
import { useContext, useRef } from 'react';
import { UserContext } from './UserProvider';
diff --git a/src/app/(main)/settings/users/[userId]/UserProvider.tsx b/src/app/(main)/settings/users/[userId]/UserProvider.tsx
index b289fca0..ed559c91 100644
--- a/src/app/(main)/settings/users/[userId]/UserProvider.tsx
+++ b/src/app/(main)/settings/users/[userId]/UserProvider.tsx
@@ -1,5 +1,5 @@
import { createContext, ReactNode, useEffect } from 'react';
-import { useModified, useUser } from 'components/hooks';
+import { useModified, useUser } from '@/components/hooks';
import { Loading } from 'react-basics';
export const UserContext = createContext(null);
diff --git a/src/app/(main)/settings/users/[userId]/UserSettings.tsx b/src/app/(main)/settings/users/[userId]/UserSettings.tsx
index f9e17a85..0d98205f 100644
--- a/src/app/(main)/settings/users/[userId]/UserSettings.tsx
+++ b/src/app/(main)/settings/users/[userId]/UserSettings.tsx
@@ -1,12 +1,12 @@
import { Key, useContext, useState } from 'react';
import { Item, Tabs, useToasts } from 'react-basics';
-import Icons from 'components/icons';
+import Icons from '@/components/icons';
import UserEditForm from './UserEditForm';
-import PageHeader from 'components/layout/PageHeader';
-import { useMessages } from 'components/hooks';
+import PageHeader from '@/components/layout/PageHeader';
+import { useMessages } from '@/components/hooks';
import UserWebsites from './UserWebsites';
import { UserContext } from './UserProvider';
-import Breadcrumb from 'components/common/Breadcrumb';
+import Breadcrumb from '@/components/common/Breadcrumb';
export function UserSettings({ userId }: { userId: string }) {
const { formatMessage, labels, messages } = useMessages();
diff --git a/src/app/(main)/settings/users/[userId]/UserWebsites.tsx b/src/app/(main)/settings/users/[userId]/UserWebsites.tsx
index bfc6f74b..15521b17 100644
--- a/src/app/(main)/settings/users/[userId]/UserWebsites.tsx
+++ b/src/app/(main)/settings/users/[userId]/UserWebsites.tsx
@@ -1,6 +1,6 @@
-import WebsitesTable from 'app/(main)/settings/websites/WebsitesTable';
-import DataTable from 'components/common/DataTable';
-import { useWebsites } from 'components/hooks';
+import WebsitesTable from '@/app/(main)/settings/websites/WebsitesTable';
+import DataTable from '@/components/common/DataTable';
+import { useWebsites } from '@/components/hooks';
export function UserWebsites({ userId }) {
const queryResult = useWebsites({ userId });
diff --git a/src/app/(main)/settings/websites/WebsiteAddButton.tsx b/src/app/(main)/settings/websites/WebsiteAddButton.tsx
index e534461c..6f32fc9f 100644
--- a/src/app/(main)/settings/websites/WebsiteAddButton.tsx
+++ b/src/app/(main)/settings/websites/WebsiteAddButton.tsx
@@ -1,4 +1,4 @@
-import { useMessages, useModified } from 'components/hooks';
+import { useMessages, useModified } from '@/components/hooks';
import { Button, Icon, Icons, Modal, ModalTrigger, Text, useToasts } from 'react-basics';
import WebsiteAddForm from './WebsiteAddForm';
diff --git a/src/app/(main)/settings/websites/WebsiteAddForm.tsx b/src/app/(main)/settings/websites/WebsiteAddForm.tsx
index 2bb4a0a8..90672412 100644
--- a/src/app/(main)/settings/websites/WebsiteAddForm.tsx
+++ b/src/app/(main)/settings/websites/WebsiteAddForm.tsx
@@ -7,9 +7,9 @@ import {
Button,
SubmitButton,
} from 'react-basics';
-import { useApi } from 'components/hooks';
-import { DOMAIN_REGEX } from 'lib/constants';
-import { useMessages } from 'components/hooks';
+import { useApi } from '@/components/hooks';
+import { DOMAIN_REGEX } from '@/lib/constants';
+import { useMessages } from '@/components/hooks';
export function WebsiteAddForm({
teamId,
diff --git a/src/app/(main)/settings/websites/WebsitesDataTable.tsx b/src/app/(main)/settings/websites/WebsitesDataTable.tsx
index d91bbeef..023df857 100644
--- a/src/app/(main)/settings/websites/WebsitesDataTable.tsx
+++ b/src/app/(main)/settings/websites/WebsitesDataTable.tsx
@@ -1,7 +1,7 @@
import { ReactNode } from 'react';
-import WebsitesTable from 'app/(main)/settings/websites/WebsitesTable';
-import DataTable from 'components/common/DataTable';
-import { useWebsites } from 'components/hooks';
+import WebsitesTable from '@/app/(main)/settings/websites/WebsitesTable';
+import DataTable from '@/components/common/DataTable';
+import { useWebsites } from '@/components/hooks';
export function WebsitesDataTable({
teamId,
diff --git a/src/app/(main)/settings/websites/WebsitesHeader.tsx b/src/app/(main)/settings/websites/WebsitesHeader.tsx
index 6f322371..34e87a13 100644
--- a/src/app/(main)/settings/websites/WebsitesHeader.tsx
+++ b/src/app/(main)/settings/websites/WebsitesHeader.tsx
@@ -1,5 +1,5 @@
-import { useMessages } from 'components/hooks';
-import PageHeader from 'components/layout/PageHeader';
+import { useMessages } from '@/components/hooks';
+import PageHeader from '@/components/layout/PageHeader';
import WebsiteAddButton from './WebsiteAddButton';
export interface WebsitesHeaderProps {
diff --git a/src/app/(main)/settings/websites/WebsitesSettingsPage.tsx b/src/app/(main)/settings/websites/WebsitesSettingsPage.tsx
index ff0938d1..61909a9e 100644
--- a/src/app/(main)/settings/websites/WebsitesSettingsPage.tsx
+++ b/src/app/(main)/settings/websites/WebsitesSettingsPage.tsx
@@ -1,8 +1,8 @@
'use client';
-import { useLogin } from 'components/hooks';
+import { useLogin } from '@/components/hooks';
import WebsitesDataTable from './WebsitesDataTable';
import WebsitesHeader from './WebsitesHeader';
-import { ROLES } from 'lib/constants';
+import { ROLES } from '@/lib/constants';
export default function WebsitesSettingsPage({ teamId }: { teamId: string }) {
const { user } = useLogin();
diff --git a/src/app/(main)/settings/websites/WebsitesTable.tsx b/src/app/(main)/settings/websites/WebsitesTable.tsx
index 5e9aef2c..79749b97 100644
--- a/src/app/(main)/settings/websites/WebsitesTable.tsx
+++ b/src/app/(main)/settings/websites/WebsitesTable.tsx
@@ -1,7 +1,7 @@
import { ReactNode } from 'react';
import { Text, Icon, Icons, GridTable, GridColumn } from 'react-basics';
-import { useMessages, useTeamUrl } from 'components/hooks';
-import LinkButton from 'components/common/LinkButton';
+import { useMessages, useTeamUrl } from '@/components/hooks';
+import LinkButton from '@/components/common/LinkButton';
export interface WebsitesTableProps {
data: any[];
diff --git a/src/app/(main)/settings/websites/[websiteId]/ShareUrl.tsx b/src/app/(main)/settings/websites/[websiteId]/ShareUrl.tsx
index 1e53e9c3..318e4e95 100644
--- a/src/app/(main)/settings/websites/[websiteId]/ShareUrl.tsx
+++ b/src/app/(main)/settings/websites/[websiteId]/ShareUrl.tsx
@@ -9,9 +9,9 @@ import {
LoadingButton,
} from 'react-basics';
import { useContext, useState } from 'react';
-import { getRandomChars } from 'lib/crypto';
-import { useApi, useMessages, useModified } from 'components/hooks';
-import { WebsiteContext } from 'app/(main)/websites/[websiteId]/WebsiteProvider';
+import { getRandomChars } from '@/lib/crypto';
+import { useApi, useMessages, useModified } from '@/components/hooks';
+import { WebsiteContext } from '@/app/(main)/websites/[websiteId]/WebsiteProvider';
const generateId = () => getRandomChars(16);
diff --git a/src/app/(main)/settings/websites/[websiteId]/TrackingCode.tsx b/src/app/(main)/settings/websites/[websiteId]/TrackingCode.tsx
index 95fb7068..cacdf689 100644
--- a/src/app/(main)/settings/websites/[websiteId]/TrackingCode.tsx
+++ b/src/app/(main)/settings/websites/[websiteId]/TrackingCode.tsx
@@ -1,5 +1,5 @@
import { TextArea } from 'react-basics';
-import { useMessages, useConfig } from 'components/hooks';
+import { useMessages, useConfig } from '@/components/hooks';
const SCRIPT_NAME = 'script.js';
diff --git a/src/app/(main)/settings/websites/[websiteId]/WebsiteData.tsx b/src/app/(main)/settings/websites/[websiteId]/WebsiteData.tsx
index bc6a3169..d11f24df 100644
--- a/src/app/(main)/settings/websites/[websiteId]/WebsiteData.tsx
+++ b/src/app/(main)/settings/websites/[websiteId]/WebsiteData.tsx
@@ -1,10 +1,10 @@
import { Button, Modal, ModalTrigger, ActionForm } from 'react-basics';
import { useRouter } from 'next/navigation';
-import { useLogin, useMessages, useModified, useTeams, useTeamUrl } from 'components/hooks';
+import { useLogin, useMessages, useModified, useTeams, useTeamUrl } from '@/components/hooks';
import WebsiteDeleteForm from './WebsiteDeleteForm';
import WebsiteResetForm from './WebsiteResetForm';
import WebsiteTransferForm from './WebsiteTransferForm';
-import { ROLES } from 'lib/constants';
+import { ROLES } from '@/lib/constants';
export function WebsiteData({ websiteId, onSave }: { websiteId: string; onSave?: () => void }) {
const { formatMessage, labels, messages } = useMessages();
diff --git a/src/app/(main)/settings/websites/[websiteId]/WebsiteDeleteForm.tsx b/src/app/(main)/settings/websites/[websiteId]/WebsiteDeleteForm.tsx
index 077a8f4a..5eef3544 100644
--- a/src/app/(main)/settings/websites/[websiteId]/WebsiteDeleteForm.tsx
+++ b/src/app/(main)/settings/websites/[websiteId]/WebsiteDeleteForm.tsx
@@ -1,5 +1,5 @@
-import { useApi, useMessages } from 'components/hooks';
-import TypeConfirmationForm from 'components/common/TypeConfirmationForm';
+import { useApi, useMessages } from '@/components/hooks';
+import TypeConfirmationForm from '@/components/common/TypeConfirmationForm';
const CONFIRM_VALUE = 'DELETE';
diff --git a/src/app/(main)/settings/websites/[websiteId]/WebsiteEditForm.tsx b/src/app/(main)/settings/websites/[websiteId]/WebsiteEditForm.tsx
index 15538661..aeef7f34 100644
--- a/src/app/(main)/settings/websites/[websiteId]/WebsiteEditForm.tsx
+++ b/src/app/(main)/settings/websites/[websiteId]/WebsiteEditForm.tsx
@@ -1,8 +1,8 @@
import { useContext, useRef } from 'react';
import { SubmitButton, Form, FormInput, FormRow, FormButtons, TextField } from 'react-basics';
-import { useApi, useMessages, useModified } from 'components/hooks';
-import { DOMAIN_REGEX } from 'lib/constants';
-import { WebsiteContext } from 'app/(main)/websites/[websiteId]/WebsiteProvider';
+import { useApi, useMessages, useModified } from '@/components/hooks';
+import { DOMAIN_REGEX } from '@/lib/constants';
+import { WebsiteContext } from '@/app/(main)/websites/[websiteId]/WebsiteProvider';
export function WebsiteEditForm({ websiteId, onSave }: { websiteId: string; onSave?: () => void }) {
const website = useContext(WebsiteContext);
diff --git a/src/app/(main)/settings/websites/[websiteId]/WebsiteResetForm.tsx b/src/app/(main)/settings/websites/[websiteId]/WebsiteResetForm.tsx
index c43f3efb..73886aa9 100644
--- a/src/app/(main)/settings/websites/[websiteId]/WebsiteResetForm.tsx
+++ b/src/app/(main)/settings/websites/[websiteId]/WebsiteResetForm.tsx
@@ -1,5 +1,5 @@
-import { useApi, useMessages } from 'components/hooks';
-import TypeConfirmationForm from 'components/common/TypeConfirmationForm';
+import { useApi, useMessages } from '@/components/hooks';
+import TypeConfirmationForm from '@/components/common/TypeConfirmationForm';
const CONFIRM_VALUE = 'RESET';
diff --git a/src/app/(main)/settings/websites/[websiteId]/WebsiteSettings.tsx b/src/app/(main)/settings/websites/[websiteId]/WebsiteSettings.tsx
index 11f662b1..5bea2704 100644
--- a/src/app/(main)/settings/websites/[websiteId]/WebsiteSettings.tsx
+++ b/src/app/(main)/settings/websites/[websiteId]/WebsiteSettings.tsx
@@ -1,8 +1,8 @@
-import { WebsiteContext } from 'app/(main)/websites/[websiteId]/WebsiteProvider';
-import Breadcrumb from 'components/common/Breadcrumb';
-import { useMessages } from 'components/hooks';
-import Icons from 'components/icons';
-import PageHeader from 'components/layout/PageHeader';
+import { WebsiteContext } from '@/app/(main)/websites/[websiteId]/WebsiteProvider';
+import Breadcrumb from '@/components/common/Breadcrumb';
+import { useMessages } from '@/components/hooks';
+import Icons from '@/components/icons';
+import PageHeader from '@/components/layout/PageHeader';
import Link from 'next/link';
import { Key, useContext, useState } from 'react';
import { Button, Icon, Item, Tabs, Text, useToasts } from 'react-basics';
diff --git a/src/app/(main)/settings/websites/[websiteId]/WebsiteSettingsPage.tsx b/src/app/(main)/settings/websites/[websiteId]/WebsiteSettingsPage.tsx
index 00147629..8d7badb8 100644
--- a/src/app/(main)/settings/websites/[websiteId]/WebsiteSettingsPage.tsx
+++ b/src/app/(main)/settings/websites/[websiteId]/WebsiteSettingsPage.tsx
@@ -1,5 +1,5 @@
'use client';
-import WebsiteProvider from 'app/(main)/websites/[websiteId]/WebsiteProvider';
+import WebsiteProvider from '@/app/(main)/websites/[websiteId]/WebsiteProvider';
import WebsiteSettings from './WebsiteSettings';
export default function WebsiteSettingsPage({ websiteId }: { websiteId: string }) {
diff --git a/src/app/(main)/settings/websites/[websiteId]/WebsiteTransferForm.tsx b/src/app/(main)/settings/websites/[websiteId]/WebsiteTransferForm.tsx
index eb568a7f..8214fb16 100644
--- a/src/app/(main)/settings/websites/[websiteId]/WebsiteTransferForm.tsx
+++ b/src/app/(main)/settings/websites/[websiteId]/WebsiteTransferForm.tsx
@@ -10,9 +10,9 @@ import {
Item,
Flexbox,
} from 'react-basics';
-import { useApi, useLogin, useMessages, useTeams } from 'components/hooks';
-import { WebsiteContext } from 'app/(main)/websites/[websiteId]/WebsiteProvider';
-import { ROLES } from 'lib/constants';
+import { useApi, useLogin, useMessages, useTeams } from '@/components/hooks';
+import { WebsiteContext } from '@/app/(main)/websites/[websiteId]/WebsiteProvider';
+import { ROLES } from '@/lib/constants';
export function WebsiteTransferForm({
websiteId,
@@ -71,7 +71,8 @@ export function WebsiteTransferForm({
{result.data
.filter(({ teamUser }) =>
teamUser.find(
- ({ role, userId }) => [ ROLES.teamOwner, ROLES.teamManager ].includes(role) && userId === user.id,
+ ({ role, userId }) =>
+ [ROLES.teamOwner, ROLES.teamManager].includes(role) && userId === user.id,
),
)
.map(({ id, name }) => {
diff --git a/src/app/(main)/teams/[teamId]/TeamProvider.tsx b/src/app/(main)/teams/[teamId]/TeamProvider.tsx
index 467a5d22..ed2d5467 100644
--- a/src/app/(main)/teams/[teamId]/TeamProvider.tsx
+++ b/src/app/(main)/teams/[teamId]/TeamProvider.tsx
@@ -1,6 +1,6 @@
'use client';
import { createContext, ReactNode, useEffect } from 'react';
-import { useTeam, useModified } from 'components/hooks';
+import { useTeam, useModified } from '@/components/hooks';
import { Loading } from 'react-basics';
export const TeamContext = createContext(null);
diff --git a/src/app/(main)/teams/[teamId]/settings/TeamSettingsLayout.tsx b/src/app/(main)/teams/[teamId]/settings/TeamSettingsLayout.tsx
index f7df620a..8c638d29 100644
--- a/src/app/(main)/teams/[teamId]/settings/TeamSettingsLayout.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/TeamSettingsLayout.tsx
@@ -1,7 +1,7 @@
'use client';
import { ReactNode } from 'react';
-import { useMessages, useTeamUrl } from 'components/hooks';
-import MenuLayout from 'components/layout/MenuLayout';
+import { useMessages, useTeamUrl } from '@/components/hooks';
+import MenuLayout from '@/components/layout/MenuLayout';
export default function TeamSettingsLayout({ children }: { children: ReactNode }) {
const { formatMessage, labels } = useMessages();
diff --git a/src/app/(main)/teams/[teamId]/settings/members/TeamMemberEditButton.tsx b/src/app/(main)/teams/[teamId]/settings/members/TeamMemberEditButton.tsx
index 9cc99869..85292f60 100644
--- a/src/app/(main)/teams/[teamId]/settings/members/TeamMemberEditButton.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/members/TeamMemberEditButton.tsx
@@ -1,4 +1,4 @@
-import { useMessages, useModified } from 'components/hooks';
+import { useMessages, useModified } from '@/components/hooks';
import { Button, Icon, Icons, Modal, ModalTrigger, Text, useToasts } from 'react-basics';
import TeamMemberEditForm from './TeamMemberEditForm';
diff --git a/src/app/(main)/teams/[teamId]/settings/members/TeamMemberEditForm.tsx b/src/app/(main)/teams/[teamId]/settings/members/TeamMemberEditForm.tsx
index 40183989..4ce605df 100644
--- a/src/app/(main)/teams/[teamId]/settings/members/TeamMemberEditForm.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/members/TeamMemberEditForm.tsx
@@ -1,5 +1,5 @@
-import { useApi, useMessages } from 'components/hooks';
-import { ROLES } from 'lib/constants';
+import { useApi, useMessages } from '@/components/hooks';
+import { ROLES } from '@/lib/constants';
import {
Button,
Dropdown,
diff --git a/src/app/(main)/teams/[teamId]/settings/members/TeamMemberRemoveButton.tsx b/src/app/(main)/teams/[teamId]/settings/members/TeamMemberRemoveButton.tsx
index 3f024395..7344f263 100644
--- a/src/app/(main)/teams/[teamId]/settings/members/TeamMemberRemoveButton.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/members/TeamMemberRemoveButton.tsx
@@ -1,6 +1,6 @@
-import ConfirmationForm from 'components/common/ConfirmationForm';
-import { useApi, useMessages, useModified } from 'components/hooks';
-import { messages } from 'components/messages';
+import ConfirmationForm from '@/components/common/ConfirmationForm';
+import { useApi, useMessages, useModified } from '@/components/hooks';
+import { messages } from '@/components/messages';
import { Button, Icon, Icons, Modal, ModalTrigger, Text } from 'react-basics';
import { FormattedMessage } from 'react-intl';
diff --git a/src/app/(main)/teams/[teamId]/settings/members/TeamMembersDataTable.tsx b/src/app/(main)/teams/[teamId]/settings/members/TeamMembersDataTable.tsx
index 996283a7..9de26415 100644
--- a/src/app/(main)/teams/[teamId]/settings/members/TeamMembersDataTable.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/members/TeamMembersDataTable.tsx
@@ -1,6 +1,6 @@
-import DataTable from 'components/common/DataTable';
+import DataTable from '@/components/common/DataTable';
import TeamMembersTable from './TeamMembersTable';
-import { useTeamMembers } from 'components/hooks';
+import { useTeamMembers } from '@/components/hooks';
export function TeamMembersDataTable({
teamId,
diff --git a/src/app/(main)/teams/[teamId]/settings/members/TeamMembersPage.tsx b/src/app/(main)/teams/[teamId]/settings/members/TeamMembersPage.tsx
index de0c4c0a..557a40ba 100644
--- a/src/app/(main)/teams/[teamId]/settings/members/TeamMembersPage.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/members/TeamMembersPage.tsx
@@ -1,9 +1,9 @@
'use client';
-import { TeamContext } from 'app/(main)/teams/[teamId]/TeamProvider';
+import { TeamContext } from '@/app/(main)/teams/[teamId]/TeamProvider';
import TeamMembersDataTable from './TeamMembersDataTable';
-import PageHeader from 'components/layout/PageHeader';
-import { useLogin, useMessages } from 'components/hooks';
-import { ROLES } from 'lib/constants';
+import PageHeader from '@/components/layout/PageHeader';
+import { useLogin, useMessages } from '@/components/hooks';
+import { ROLES } from '@/lib/constants';
import { useContext } from 'react';
export function TeamMembersPage({ teamId }: { teamId: string }) {
diff --git a/src/app/(main)/teams/[teamId]/settings/members/TeamMembersTable.tsx b/src/app/(main)/teams/[teamId]/settings/members/TeamMembersTable.tsx
index 67cb23c7..0054437a 100644
--- a/src/app/(main)/teams/[teamId]/settings/members/TeamMembersTable.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/members/TeamMembersTable.tsx
@@ -1,6 +1,6 @@
import { GridColumn, GridTable } from 'react-basics';
-import { useMessages, useLogin } from 'components/hooks';
-import { ROLES } from 'lib/constants';
+import { useMessages, useLogin } from '@/components/hooks';
+import { ROLES } from '@/lib/constants';
import TeamMemberRemoveButton from './TeamMemberRemoveButton';
import TeamMemberEditButton from './TeamMemberEditButton';
diff --git a/src/app/(main)/teams/[teamId]/settings/team/TeamDeleteForm.tsx b/src/app/(main)/teams/[teamId]/settings/team/TeamDeleteForm.tsx
index 3cbdf550..5e7f5cf8 100644
--- a/src/app/(main)/teams/[teamId]/settings/team/TeamDeleteForm.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/team/TeamDeleteForm.tsx
@@ -1,5 +1,5 @@
-import TypeConfirmationForm from 'components/common/TypeConfirmationForm';
-import { useApi, useMessages } from 'components/hooks';
+import TypeConfirmationForm from '@/components/common/TypeConfirmationForm';
+import { useApi, useMessages } from '@/components/hooks';
const CONFIRM_VALUE = 'DELETE';
diff --git a/src/app/(main)/teams/[teamId]/settings/team/TeamDetails.tsx b/src/app/(main)/teams/[teamId]/settings/team/TeamDetails.tsx
index 70858ee4..f3f258bd 100644
--- a/src/app/(main)/teams/[teamId]/settings/team/TeamDetails.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/team/TeamDetails.tsx
@@ -1,11 +1,11 @@
-import { TeamContext } from 'app/(main)/teams/[teamId]/TeamProvider';
-import { useLogin, useMessages } from 'components/hooks';
-import Icons from 'components/icons';
-import PageHeader from 'components/layout/PageHeader';
-import { ROLES } from 'lib/constants';
+import { TeamContext } from '@/app/(main)/teams/[teamId]/TeamProvider';
+import { useLogin, useMessages } from '@/components/hooks';
+import Icons from '@/components/icons';
+import PageHeader from '@/components/layout/PageHeader';
+import { ROLES } from '@/lib/constants';
import { useContext, useState } from 'react';
import { Flexbox, Item, Tabs } from 'react-basics';
-import TeamLeaveButton from 'app/(main)/settings/teams/TeamLeaveButton';
+import TeamLeaveButton from '@/app/(main)/settings/teams/TeamLeaveButton';
import TeamManage from './TeamManage';
import TeamEditForm from './TeamEditForm';
diff --git a/src/app/(main)/teams/[teamId]/settings/team/TeamEditForm.tsx b/src/app/(main)/teams/[teamId]/settings/team/TeamEditForm.tsx
index 19204965..ac158fa7 100644
--- a/src/app/(main)/teams/[teamId]/settings/team/TeamEditForm.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/team/TeamEditForm.tsx
@@ -9,10 +9,10 @@ import {
Flexbox,
useToasts,
} from 'react-basics';
-import { getRandomChars } from 'lib/crypto';
+import { getRandomChars } from '@/lib/crypto';
import { useContext, useRef, useState } from 'react';
-import { useApi, useMessages, useModified } from 'components/hooks';
-import { TeamContext } from 'app/(main)/teams/[teamId]/TeamProvider';
+import { useApi, useMessages, useModified } from '@/components/hooks';
+import { TeamContext } from '@/app/(main)/teams/[teamId]/TeamProvider';
const generateId = () => getRandomChars(16);
diff --git a/src/app/(main)/teams/[teamId]/settings/team/TeamManage.tsx b/src/app/(main)/teams/[teamId]/settings/team/TeamManage.tsx
index 40cbee04..24ca93d3 100644
--- a/src/app/(main)/teams/[teamId]/settings/team/TeamManage.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/team/TeamManage.tsx
@@ -1,4 +1,4 @@
-import { useMessages, useModified } from 'components/hooks';
+import { useMessages, useModified } from '@/components/hooks';
import { useRouter } from 'next/navigation';
import { ActionForm, Button, Modal, ModalTrigger } from 'react-basics';
import TeamDeleteForm from './TeamDeleteForm';
diff --git a/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsiteRemoveButton.tsx b/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsiteRemoveButton.tsx
index 336e151a..fdd76cd2 100644
--- a/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsiteRemoveButton.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsiteRemoveButton.tsx
@@ -1,4 +1,4 @@
-import { useApi, useMessages } from 'components/hooks';
+import { useApi, useMessages } from '@/components/hooks';
import { Icon, Icons, LoadingButton, Text } from 'react-basics';
export function TeamWebsiteRemoveButton({ teamId, websiteId, onSave }) {
diff --git a/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesDataTable.tsx b/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesDataTable.tsx
index 9e2985d4..63aa47f5 100644
--- a/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesDataTable.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesDataTable.tsx
@@ -1,5 +1,5 @@
-import DataTable from 'components/common/DataTable';
-import { useTeamWebsites } from 'components/hooks';
+import DataTable from '@/components/common/DataTable';
+import { useTeamWebsites } from '@/components/hooks';
import TeamWebsitesTable from './TeamWebsitesTable';
export function TeamWebsitesDataTable({
diff --git a/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesPage.tsx b/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesPage.tsx
index 882ef8ec..d46d928a 100644
--- a/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesPage.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesPage.tsx
@@ -1,10 +1,10 @@
'use client';
-import { TeamContext } from 'app/(main)/teams/[teamId]/TeamProvider';
-import WebsiteAddButton from 'app/(main)/settings/websites/WebsiteAddButton';
-import { useLogin, useMessages } from 'components/hooks';
-import PageHeader from 'components/layout/PageHeader';
+import { TeamContext } from '@/app/(main)/teams/[teamId]/TeamProvider';
+import WebsiteAddButton from '@/app/(main)/settings/websites/WebsiteAddButton';
+import { useLogin, useMessages } from '@/components/hooks';
+import PageHeader from '@/components/layout/PageHeader';
import TeamWebsitesDataTable from './TeamWebsitesDataTable';
-import { ROLES } from 'lib/constants';
+import { ROLES } from '@/lib/constants';
import { useContext } from 'react';
export function TeamWebsitesPage({ teamId }: { teamId: string }) {
diff --git a/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesTable.tsx b/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesTable.tsx
index dc6760a6..76c343b1 100644
--- a/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesTable.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesTable.tsx
@@ -1,7 +1,7 @@
import { GridColumn, GridTable, Icon, Text } from 'react-basics';
-import { useLogin, useMessages } from 'components/hooks';
-import Icons from 'components/icons';
-import LinkButton from 'components/common/LinkButton';
+import { useLogin, useMessages } from '@/components/hooks';
+import Icons from '@/components/icons';
+import LinkButton from '@/components/common/LinkButton';
export function TeamWebsitesTable({
teamId,
diff --git a/src/app/(main)/teams/[teamId]/settings/websites/[websiteId]/page.tsx b/src/app/(main)/teams/[teamId]/settings/websites/[websiteId]/page.tsx
index a6895296..a18f8a2e 100644
--- a/src/app/(main)/teams/[teamId]/settings/websites/[websiteId]/page.tsx
+++ b/src/app/(main)/teams/[teamId]/settings/websites/[websiteId]/page.tsx
@@ -1,4 +1,4 @@
-import Page from 'app/(main)/settings/websites/[websiteId]/page';
+import Page from '@/app/(main)/settings/websites/[websiteId]/page';
export default function ({ params }) {
return ;
diff --git a/src/app/(main)/websites/WebsitesPage.tsx b/src/app/(main)/websites/WebsitesPage.tsx
index d6f8524b..b5e40b30 100644
--- a/src/app/(main)/websites/WebsitesPage.tsx
+++ b/src/app/(main)/websites/WebsitesPage.tsx
@@ -1,7 +1,7 @@
'use client';
-import WebsitesHeader from 'app/(main)/settings/websites/WebsitesHeader';
-import WebsitesDataTable from 'app/(main)/settings/websites/WebsitesDataTable';
-import { useTeamUrl } from 'components/hooks';
+import WebsitesHeader from '@/app/(main)/settings/websites/WebsitesHeader';
+import WebsitesDataTable from '@/app/(main)/settings/websites/WebsitesDataTable';
+import { useTeamUrl } from '@/components/hooks';
export default function WebsitesPage() {
const { teamId } = useTeamUrl();
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx b/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx
index ddeba789..68192307 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx
@@ -1,7 +1,7 @@
import { useMemo } from 'react';
-import PageviewsChart from 'components/metrics/PageviewsChart';
-import useWebsitePageviews from 'components/hooks/queries/useWebsitePageviews';
-import { useDateRange } from 'components/hooks';
+import PageviewsChart from '@/components/metrics/PageviewsChart';
+import useWebsitePageviews from '@/components/hooks/queries/useWebsitePageviews';
+import { useDateRange } from '@/components/hooks';
export function WebsiteChart({
websiteId,
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteChartList.tsx b/src/app/(main)/websites/[websiteId]/WebsiteChartList.tsx
index e33e948a..b27f9870 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteChartList.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteChartList.tsx
@@ -3,10 +3,10 @@ import { useMemo } from 'react';
import { firstBy } from 'thenby';
import Link from 'next/link';
import WebsiteChart from './WebsiteChart';
-import useDashboard from 'store/dashboard';
+import useDashboard from '@/store/dashboard';
import WebsiteHeader from './WebsiteHeader';
import { WebsiteMetricsBar } from './WebsiteMetricsBar';
-import { useMessages, useLocale, useTeamUrl } from 'components/hooks';
+import { useMessages, useLocale, useTeamUrl } from '@/components/hooks';
export default function WebsiteChartList({
websites,
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteDetailsPage.tsx b/src/app/(main)/websites/[websiteId]/WebsiteDetailsPage.tsx
index 3eeeb18f..460792ef 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteDetailsPage.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteDetailsPage.tsx
@@ -1,13 +1,13 @@
'use client';
import { usePathname } from 'next/navigation';
-import FilterTags from 'components/metrics/FilterTags';
-import { useNavigation } from 'components/hooks';
+import FilterTags from '@/components/metrics/FilterTags';
+import { useNavigation } from '@/components/hooks';
import WebsiteChart from './WebsiteChart';
import WebsiteExpandedView from './WebsiteExpandedView';
import WebsiteHeader from './WebsiteHeader';
import WebsiteMetricsBar from './WebsiteMetricsBar';
import WebsiteTableView from './WebsiteTableView';
-import { FILTER_COLUMNS } from 'lib/constants';
+import { FILTER_COLUMNS } from '@/lib/constants';
export default function WebsiteDetailsPage({ websiteId }: { websiteId: string }) {
const pathname = usePathname();
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx b/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx
index 95e718b4..e4a08b05 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx
@@ -1,21 +1,22 @@
-import LinkButton from 'components/common/LinkButton';
-import { useLocale, useMessages, useNavigation } from 'components/hooks';
-import SideNav from 'components/layout/SideNav';
-import BrowsersTable from 'components/metrics/BrowsersTable';
-import CitiesTable from 'components/metrics/CitiesTable';
-import CountriesTable from 'components/metrics/CountriesTable';
-import DevicesTable from 'components/metrics/DevicesTable';
-import EventsTable from 'components/metrics/EventsTable';
-import HostsTable from 'components/metrics/HostsTable';
-import LanguagesTable from 'components/metrics/LanguagesTable';
-import OSTable from 'components/metrics/OSTable';
-import PagesTable from 'components/metrics/PagesTable';
-import QueryParametersTable from 'components/metrics/QueryParametersTable';
-import ReferrersTable from 'components/metrics/ReferrersTable';
-import RegionsTable from 'components/metrics/RegionsTable';
-import ScreenTable from 'components/metrics/ScreenTable';
-import TagsTable from 'components/metrics/TagsTable';
import { Dropdown, Icon, Icons, Item, Text } from 'react-basics';
+import LinkButton from '@/components/common/LinkButton';
+import { useLocale, useMessages, useNavigation } from '@/components/hooks';
+import SideNav from '@/components/layout/SideNav';
+import BrowsersTable from '@/components/metrics/BrowsersTable';
+import CitiesTable from '@/components/metrics/CitiesTable';
+import CountriesTable from '@/components/metrics/CountriesTable';
+import DevicesTable from '@/components/metrics/DevicesTable';
+import EventsTable from '@/components/metrics/EventsTable';
+import HostsTable from '@/components/metrics/HostsTable';
+import LanguagesTable from '@/components/metrics/LanguagesTable';
+import OSTable from '@/components/metrics/OSTable';
+import PagesTable from '@/components/metrics/PagesTable';
+import QueryParametersTable from '@/components/metrics/QueryParametersTable';
+import ReferrersTable from '@/components/metrics/ReferrersTable';
+import RegionsTable from '@/components/metrics/RegionsTable';
+import ScreenTable from '@/components/metrics/ScreenTable';
+import TagsTable from '@/components/metrics/TagsTable';
+import ChannelsTable from '@/components/metrics/ChannelsTable';
import styles from './WebsiteExpandedView.module.css';
const views = {
@@ -36,6 +37,7 @@ const views = {
event: EventsTable,
query: QueryParametersTable,
tag: TagsTable,
+ channel: ChannelsTable,
};
export default function WebsiteExpandedView({
@@ -64,6 +66,11 @@ export default function WebsiteExpandedView({
label: formatMessage(labels.referrers),
url: renderUrl({ view: 'referrer' }),
},
+ {
+ key: 'channel',
+ label: formatMessage(labels.channels),
+ url: renderUrl({ view: 'channel' }),
+ },
{
key: 'browser',
label: formatMessage(labels.browsers),
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteFilterButton.tsx b/src/app/(main)/websites/[websiteId]/WebsiteFilterButton.tsx
index a6229e95..02b74418 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteFilterButton.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteFilterButton.tsx
@@ -1,8 +1,8 @@
import { Button, Icon, Icons, Popup, PopupTrigger, Text } from 'react-basics';
-import PopupForm from 'app/(main)/reports/[reportId]/PopupForm';
-import FilterSelectForm from 'app/(main)/reports/[reportId]/FilterSelectForm';
-import { useFields, useMessages, useNavigation, useDateRange } from 'components/hooks';
-import { OPERATOR_PREFIXES } from 'lib/constants';
+import PopupForm from '@/app/(main)/reports/[reportId]/PopupForm';
+import FilterSelectForm from '@/app/(main)/reports/[reportId]/FilterSelectForm';
+import { useFields, useMessages, useNavigation, useDateRange } from '@/components/hooks';
+import { OPERATOR_PREFIXES } from '@/lib/constants';
import styles from './WebsiteFilterButton.module.css';
export function WebsiteFilterButton({
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx b/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx
index edd10b99..b568dd3d 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx
@@ -1,13 +1,13 @@
import classNames from 'classnames';
-import Favicon from 'components/common/Favicon';
-import { useMessages, useTeamUrl, useWebsite } from 'components/hooks';
-import Icons from 'components/icons';
-import ActiveUsers from 'components/metrics/ActiveUsers';
+import Favicon from '@/components/common/Favicon';
+import { useMessages, useTeamUrl, useWebsite } from '@/components/hooks';
+import Icons from '@/components/icons';
+import ActiveUsers from '@/components/metrics/ActiveUsers';
import Link from 'next/link';
import { usePathname } from 'next/navigation';
import { ReactNode } from 'react';
import { Button, Icon, Text } from 'react-basics';
-import Lightning from 'assets/lightning.svg';
+import Lightning from '@/assets/lightning.svg';
import styles from './WebsiteHeader.module.css';
export function WebsiteHeader({
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx b/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx
index a6e7ad40..f206d3c9 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx
@@ -1,14 +1,14 @@
-import classNames from 'classnames';
-import { useDateRange, useMessages, useSticky } from 'components/hooks';
-import WebsiteDateFilter from 'components/input/WebsiteDateFilter';
-import MetricCard from 'components/metrics/MetricCard';
-import MetricsBar from 'components/metrics/MetricsBar';
-import { formatShortTime, formatLongNumber } from 'lib/format';
-import WebsiteFilterButton from './WebsiteFilterButton';
-import useWebsiteStats from 'components/hooks/queries/useWebsiteStats';
-import styles from './WebsiteMetricsBar.module.css';
import { Dropdown, Item } from 'react-basics';
-import useStore, { setWebsiteDateCompare } from 'store/websites';
+import classNames from 'classnames';
+import { useDateRange, useMessages, useSticky } from '@/components/hooks';
+import WebsiteDateFilter from '@/components/input/WebsiteDateFilter';
+import MetricCard from '@/components/metrics/MetricCard';
+import MetricsBar from '@/components/metrics/MetricsBar';
+import { formatShortTime, formatLongNumber } from '@/lib/format';
+import useWebsiteStats from '@/components/hooks/queries/useWebsiteStats';
+import useStore, { setWebsiteDateCompare } from '@/store/websites';
+import WebsiteFilterButton from './WebsiteFilterButton';
+import styles from './WebsiteMetricsBar.module.css';
export function WebsiteMetricsBar({
websiteId,
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteProvider.tsx b/src/app/(main)/websites/[websiteId]/WebsiteProvider.tsx
index 3cdfdd5d..198ad030 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteProvider.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteProvider.tsx
@@ -1,6 +1,6 @@
'use client';
import { createContext, ReactNode, useEffect } from 'react';
-import { useModified, useWebsite } from 'components/hooks';
+import { useModified, useWebsite } from '@/components/hooks';
import { Loading } from 'react-basics';
export const WebsiteContext = createContext(null);
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteTableView.tsx b/src/app/(main)/websites/[websiteId]/WebsiteTableView.tsx
index 2782cac6..02422075 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteTableView.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteTableView.tsx
@@ -1,13 +1,13 @@
-import { Grid, GridRow } from 'components/layout/Grid';
-import PagesTable from 'components/metrics/PagesTable';
-import ReferrersTable from 'components/metrics/ReferrersTable';
-import BrowsersTable from 'components/metrics/BrowsersTable';
-import OSTable from 'components/metrics/OSTable';
-import DevicesTable from 'components/metrics/DevicesTable';
-import WorldMap from 'components/metrics/WorldMap';
-import CountriesTable from 'components/metrics/CountriesTable';
-import EventsTable from 'components/metrics/EventsTable';
-import EventsChart from 'components/metrics/EventsChart';
+import { Grid, GridRow } from '@/components/layout/Grid';
+import PagesTable from '@/components/metrics/PagesTable';
+import ReferrersTable from '@/components/metrics/ReferrersTable';
+import BrowsersTable from '@/components/metrics/BrowsersTable';
+import OSTable from '@/components/metrics/OSTable';
+import DevicesTable from '@/components/metrics/DevicesTable';
+import WorldMap from '@/components/metrics/WorldMap';
+import CountriesTable from '@/components/metrics/CountriesTable';
+import EventsTable from '@/components/metrics/EventsTable';
+import EventsChart from '@/components/metrics/EventsChart';
import { usePathname } from 'next/navigation';
export default function WebsiteTableView({ websiteId }: { websiteId: string }) {
diff --git a/src/app/(main)/websites/[websiteId]/compare/WebsiteComparePage.tsx b/src/app/(main)/websites/[websiteId]/compare/WebsiteComparePage.tsx
index 21cd6597..10a2eed1 100644
--- a/src/app/(main)/websites/[websiteId]/compare/WebsiteComparePage.tsx
+++ b/src/app/(main)/websites/[websiteId]/compare/WebsiteComparePage.tsx
@@ -1,9 +1,9 @@
'use client';
import WebsiteHeader from '../WebsiteHeader';
import WebsiteMetricsBar from '../WebsiteMetricsBar';
-import FilterTags from 'components/metrics/FilterTags';
-import { useNavigation } from 'components/hooks';
-import { FILTER_COLUMNS } from 'lib/constants';
+import FilterTags from '@/components/metrics/FilterTags';
+import { useNavigation } from '@/components/hooks';
+import { FILTER_COLUMNS } from '@/lib/constants';
import WebsiteChart from '../WebsiteChart';
import WebsiteCompareTables from './WebsiteCompareTables';
diff --git a/src/app/(main)/websites/[websiteId]/compare/WebsiteCompareTables.tsx b/src/app/(main)/websites/[websiteId]/compare/WebsiteCompareTables.tsx
index af5a06d4..ce7f5b47 100644
--- a/src/app/(main)/websites/[websiteId]/compare/WebsiteCompareTables.tsx
+++ b/src/app/(main)/websites/[websiteId]/compare/WebsiteCompareTables.tsx
@@ -1,25 +1,25 @@
-import { useDateRange, useMessages, useNavigation } from 'components/hooks';
-import { Grid, GridRow } from 'components/layout/Grid';
-import SideNav from 'components/layout/SideNav';
-import BrowsersTable from 'components/metrics/BrowsersTable';
-import ChangeLabel from 'components/metrics/ChangeLabel';
-import CitiesTable from 'components/metrics/CitiesTable';
-import CountriesTable from 'components/metrics/CountriesTable';
-import DevicesTable from 'components/metrics/DevicesTable';
-import EventsTable from 'components/metrics/EventsTable';
-import LanguagesTable from 'components/metrics/LanguagesTable';
-import MetricsTable from 'components/metrics/MetricsTable';
-import OSTable from 'components/metrics/OSTable';
-import PagesTable from 'components/metrics/PagesTable';
-import QueryParametersTable from 'components/metrics/QueryParametersTable';
-import ReferrersTable from 'components/metrics/ReferrersTable';
-import RegionsTable from 'components/metrics/RegionsTable';
-import ScreenTable from 'components/metrics/ScreenTable';
-import TagsTable from 'components/metrics/TagsTable';
-import { getCompareDate } from 'lib/date';
-import { formatNumber } from 'lib/format';
+import { useDateRange, useMessages, useNavigation } from '@/components/hooks';
+import { Grid, GridRow } from '@/components/layout/Grid';
+import SideNav from '@/components/layout/SideNav';
+import BrowsersTable from '@/components/metrics/BrowsersTable';
+import ChangeLabel from '@/components/metrics/ChangeLabel';
+import CitiesTable from '@/components/metrics/CitiesTable';
+import CountriesTable from '@/components/metrics/CountriesTable';
+import DevicesTable from '@/components/metrics/DevicesTable';
+import EventsTable from '@/components/metrics/EventsTable';
+import LanguagesTable from '@/components/metrics/LanguagesTable';
+import MetricsTable from '@/components/metrics/MetricsTable';
+import OSTable from '@/components/metrics/OSTable';
+import PagesTable from '@/components/metrics/PagesTable';
+import QueryParametersTable from '@/components/metrics/QueryParametersTable';
+import ReferrersTable from '@/components/metrics/ReferrersTable';
+import RegionsTable from '@/components/metrics/RegionsTable';
+import ScreenTable from '@/components/metrics/ScreenTable';
+import TagsTable from '@/components/metrics/TagsTable';
+import { getCompareDate } from '@/lib/date';
+import { formatNumber } from '@/lib/format';
import { useState } from 'react';
-import useStore from 'store/websites';
+import useStore from '@/store/websites';
import styles from './WebsiteCompareTables.module.css';
const views = {
diff --git a/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx b/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx
index 760f34f9..453aa9a8 100644
--- a/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx
+++ b/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx
@@ -1,9 +1,9 @@
import { GridColumn, GridTable } from 'react-basics';
-import { useEventDataProperties, useEventDataValues, useMessages } from 'components/hooks';
-import { LoadingPanel } from 'components/common/LoadingPanel';
-import PieChart from 'components/charts/PieChart';
+import { useEventDataProperties, useEventDataValues, useMessages } from '@/components/hooks';
+import { LoadingPanel } from '@/components/common/LoadingPanel';
+import PieChart from '@/components/charts/PieChart';
import { useState } from 'react';
-import { CHART_COLORS } from 'lib/constants';
+import { CHART_COLORS } from '@/lib/constants';
import styles from './EventProperties.module.css';
export function EventProperties({ websiteId }: { websiteId: string }) {
diff --git a/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx b/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx
index 32eb985c..ce9048d3 100644
--- a/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx
+++ b/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx
@@ -1,6 +1,6 @@
-import { useWebsiteEvents } from 'components/hooks';
+import { useWebsiteEvents } from '@/components/hooks';
import EventsTable from './EventsTable';
-import DataTable from 'components/common/DataTable';
+import DataTable from '@/components/common/DataTable';
import { ReactNode } from 'react';
export default function EventsDataTable({
diff --git a/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx b/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx
index d039b67f..e90a7790 100644
--- a/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx
+++ b/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx
@@ -1,9 +1,9 @@
-import { useMessages } from 'components/hooks';
-import useWebsiteSessionStats from 'components/hooks/queries/useWebsiteSessionStats';
-import WebsiteDateFilter from 'components/input/WebsiteDateFilter';
-import MetricCard from 'components/metrics/MetricCard';
-import MetricsBar from 'components/metrics/MetricsBar';
-import { formatLongNumber } from 'lib/format';
+import { useMessages } from '@/components/hooks';
+import useWebsiteSessionStats from '@/components/hooks/queries/useWebsiteSessionStats';
+import WebsiteDateFilter from '@/components/input/WebsiteDateFilter';
+import MetricCard from '@/components/metrics/MetricCard';
+import MetricsBar from '@/components/metrics/MetricsBar';
+import { formatLongNumber } from '@/lib/format';
import { Flexbox } from 'react-basics';
export function EventsMetricsBar({ websiteId }: { websiteId: string }) {
diff --git a/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx b/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx
index 7dfc0394..cf4c19ef 100644
--- a/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx
+++ b/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx
@@ -2,10 +2,10 @@
import WebsiteHeader from '../WebsiteHeader';
import EventsDataTable from './EventsDataTable';
import EventsMetricsBar from './EventsMetricsBar';
-import EventsChart from 'components/metrics/EventsChart';
-import { GridRow } from 'components/layout/Grid';
-import MetricsTable from 'components/metrics/MetricsTable';
-import { useMessages } from 'components/hooks';
+import EventsChart from '@/components/metrics/EventsChart';
+import { GridRow } from '@/components/layout/Grid';
+import MetricsTable from '@/components/metrics/MetricsTable';
+import { useMessages } from '@/components/hooks';
import { Item, Tabs } from 'react-basics';
import { useState } from 'react';
import EventProperties from './EventProperties';
diff --git a/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx b/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx
index 42eb8f7a..8e6cdf76 100644
--- a/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx
+++ b/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx
@@ -1,9 +1,9 @@
import { GridTable, GridColumn, Icon } from 'react-basics';
-import { useMessages, useTeamUrl, useTimezone } from 'components/hooks';
-import Empty from 'components/common/Empty';
-import Avatar from 'components/common/Avatar';
+import { useMessages, useTeamUrl, useTimezone } from '@/components/hooks';
+import Empty from '@/components/common/Empty';
+import Avatar from '@/components/common/Avatar';
import Link from 'next/link';
-import Icons from 'components/icons';
+import Icons from '@/components/icons';
export function EventsTable({ data = [] }) {
const { formatTimezoneDate } = useTimezone();
diff --git a/src/app/(main)/websites/[websiteId]/layout.tsx b/src/app/(main)/websites/[websiteId]/layout.tsx
index 1df69cd3..2542f65a 100644
--- a/src/app/(main)/websites/[websiteId]/layout.tsx
+++ b/src/app/(main)/websites/[websiteId]/layout.tsx
@@ -6,7 +6,7 @@ export default async function ({
params,
}: {
children: any;
- params: { websiteId: string };
+ params: Promise<{ websiteId: string }>;
}) {
const { websiteId } = await params;
diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeCountries.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimeCountries.tsx
index 51663441..c3a3b8f7 100644
--- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeCountries.tsx
+++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeCountries.tsx
@@ -1,9 +1,9 @@
import { useCallback } from 'react';
-import ListTable from 'components/metrics/ListTable';
-import { useLocale, useCountryNames, useMessages } from 'components/hooks';
+import ListTable from '@/components/metrics/ListTable';
+import { useLocale, useCountryNames, useMessages } from '@/components/hooks';
import classNames from 'classnames';
import styles from './RealtimeCountries.module.css';
-import TypeIcon from 'components/common/TypeIcon';
+import TypeIcon from '@/components/common/TypeIcon';
export function RealtimeCountries({ data }) {
const { formatMessage, labels } = useMessages();
diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeHeader.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimeHeader.tsx
index c27143aa..6db56b76 100644
--- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeHeader.tsx
+++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeHeader.tsx
@@ -1,6 +1,6 @@
-import MetricCard from 'components/metrics/MetricCard';
-import { useMessages } from 'components/hooks';
-import { RealtimeData } from 'lib/types';
+import MetricCard from '@/components/metrics/MetricCard';
+import { useMessages } from '@/components/hooks';
+import { RealtimeData } from '@/lib/types';
import styles from './RealtimeHeader.module.css';
export function RealtimeHeader({ data }: { data: RealtimeData }) {
diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeHome.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimeHome.tsx
index 0ed5fbde..104cf334 100644
--- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeHome.tsx
+++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeHome.tsx
@@ -1,9 +1,9 @@
import { useEffect } from 'react';
import { useRouter } from 'next/navigation';
-import Page from 'components/layout/Page';
-import PageHeader from 'components/layout/PageHeader';
-import { useApi, useMessages } from 'components/hooks';
-import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
+import Page from '@/components/layout/Page';
+import PageHeader from '@/components/layout/PageHeader';
+import { useApi, useMessages } from '@/components/hooks';
+import EmptyPlaceholder from '@/components/common/EmptyPlaceholder';
export function RealtimeHome() {
const { formatMessage, labels, messages } = useMessages();
diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx
index 103b5eba..1f56983d 100644
--- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx
+++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx
@@ -1,11 +1,11 @@
-import useFormat from 'components//hooks/useFormat';
-import Empty from 'components/common/Empty';
-import FilterButtons from 'components/common/FilterButtons';
-import { useCountryNames, useLocale, useMessages, useTimezone } from 'components/hooks';
-import Icons from 'components/icons';
-import { BROWSERS, OS_NAMES } from 'lib/constants';
-import { stringToColor } from 'lib/format';
-import { RealtimeData } from 'lib/types';
+import useFormat from '@/components//hooks/useFormat';
+import Empty from '@/components/common/Empty';
+import FilterButtons from '@/components/common/FilterButtons';
+import { useCountryNames, useLocale, useMessages, useTimezone } from '@/components/hooks';
+import Icons from '@/components/icons';
+import { BROWSERS, OS_NAMES } from '@/lib/constants';
+import { stringToColor } from '@/lib/format';
+import { RealtimeData } from '@/lib/types';
import { useContext, useMemo, useState } from 'react';
import { Icon, SearchField, StatusLight, Text } from 'react-basics';
import { FixedSizeList } from 'react-window';
diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeUrls.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimeUrls.tsx
index 15b40f01..ce95bf41 100644
--- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeUrls.tsx
+++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeUrls.tsx
@@ -1,11 +1,11 @@
import { Key, useContext, useState } from 'react';
import { ButtonGroup, Button, Flexbox } from 'react-basics';
import thenby from 'thenby';
-import { percentFilter } from 'lib/filters';
-import ListTable from 'components/metrics/ListTable';
-import { FILTER_PAGES, FILTER_REFERRERS } from 'lib/constants';
-import { useMessages } from 'components/hooks';
-import { RealtimeData } from 'lib/types';
+import { percentFilter } from '@/lib/filters';
+import ListTable from '@/components/metrics/ListTable';
+import { FILTER_PAGES, FILTER_REFERRERS } from '@/lib/constants';
+import { useMessages } from '@/components/hooks';
+import { RealtimeData } from '@/lib/types';
import { WebsiteContext } from '../WebsiteProvider';
export function RealtimeUrls({ data }: { data: RealtimeData }) {
diff --git a/src/app/(main)/websites/[websiteId]/realtime/WebsiteRealtimePage.tsx b/src/app/(main)/websites/[websiteId]/realtime/WebsiteRealtimePage.tsx
index 7030cc32..6edc28f9 100644
--- a/src/app/(main)/websites/[websiteId]/realtime/WebsiteRealtimePage.tsx
+++ b/src/app/(main)/websites/[websiteId]/realtime/WebsiteRealtimePage.tsx
@@ -1,16 +1,16 @@
'use client';
import { firstBy } from 'thenby';
-import { Grid, GridRow } from 'components/layout/Grid';
-import Page from 'components/layout/Page';
-import RealtimeChart from 'components/metrics/RealtimeChart';
-import WorldMap from 'components/metrics/WorldMap';
-import { useRealtime } from 'components/hooks';
+import { Grid, GridRow } from '@/components/layout/Grid';
+import Page from '@/components/layout/Page';
+import RealtimeChart from '@/components/metrics/RealtimeChart';
+import WorldMap from '@/components/metrics/WorldMap';
+import { useRealtime } from '@/components/hooks';
import RealtimeLog from './RealtimeLog';
import RealtimeHeader from './RealtimeHeader';
import RealtimeUrls from './RealtimeUrls';
import RealtimeCountries from './RealtimeCountries';
import WebsiteHeader from '../WebsiteHeader';
-import { percentFilter } from 'lib/filters';
+import { percentFilter } from '@/lib/filters';
export function WebsiteRealtimePage({ websiteId }) {
const { data, isLoading, error } = useRealtime(websiteId);
diff --git a/src/app/(main)/websites/[websiteId]/reports/WebsiteReportsPage.tsx b/src/app/(main)/websites/[websiteId]/reports/WebsiteReportsPage.tsx
index 051f6ed3..e61aacb1 100644
--- a/src/app/(main)/websites/[websiteId]/reports/WebsiteReportsPage.tsx
+++ b/src/app/(main)/websites/[websiteId]/reports/WebsiteReportsPage.tsx
@@ -1,9 +1,9 @@
'use client';
import Link from 'next/link';
import { Button, Flexbox, Icon, Icons, Text } from 'react-basics';
-import { useMessages, useTeamUrl } from 'components/hooks';
+import { useMessages, useTeamUrl } from '@/components/hooks';
import WebsiteHeader from '../WebsiteHeader';
-import ReportsDataTable from 'app/(main)/reports/ReportsDataTable';
+import ReportsDataTable from '@/app/(main)/reports/ReportsDataTable';
export function WebsiteReportsPage({ websiteId }) {
const { formatMessage, labels } = useMessages();
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionProperties.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionProperties.tsx
index 49b63e74..a0b47bc9 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionProperties.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionProperties.tsx
@@ -1,9 +1,9 @@
import { GridColumn, GridTable } from 'react-basics';
-import { useSessionDataProperties, useSessionDataValues, useMessages } from 'components/hooks';
-import { LoadingPanel } from 'components/common/LoadingPanel';
-import PieChart from 'components/charts/PieChart';
+import { useSessionDataProperties, useSessionDataValues, useMessages } from '@/components/hooks';
+import { LoadingPanel } from '@/components/common/LoadingPanel';
+import PieChart from '@/components/charts/PieChart';
import { useState } from 'react';
-import { CHART_COLORS } from 'lib/constants';
+import { CHART_COLORS } from '@/lib/constants';
import styles from './SessionProperties.module.css';
export function SessionProperties({ websiteId }: { websiteId: string }) {
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx
index 788d0066..56e0df62 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx
@@ -1,6 +1,6 @@
-import { useWebsiteSessions } from 'components/hooks';
+import { useWebsiteSessions } from '@/components/hooks';
import SessionsTable from './SessionsTable';
-import DataTable from 'components/common/DataTable';
+import DataTable from '@/components/common/DataTable';
import { ReactNode } from 'react';
export default function SessionsDataTable({
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsMetricsBar.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsMetricsBar.tsx
index 803e7a06..62d60de8 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionsMetricsBar.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsMetricsBar.tsx
@@ -1,9 +1,9 @@
-import { useMessages } from 'components/hooks';
-import useWebsiteSessionStats from 'components/hooks/queries/useWebsiteSessionStats';
-import WebsiteDateFilter from 'components/input/WebsiteDateFilter';
-import MetricCard from 'components/metrics/MetricCard';
-import MetricsBar from 'components/metrics/MetricsBar';
-import { formatLongNumber } from 'lib/format';
+import { useMessages } from '@/components/hooks';
+import useWebsiteSessionStats from '@/components/hooks/queries/useWebsiteSessionStats';
+import WebsiteDateFilter from '@/components/input/WebsiteDateFilter';
+import MetricCard from '@/components/metrics/MetricCard';
+import MetricsBar from '@/components/metrics/MetricsBar';
+import { formatLongNumber } from '@/lib/format';
import { Flexbox } from 'react-basics';
export function SessionsMetricsBar({ websiteId }: { websiteId: string }) {
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx
index 30fd193db..2ee044db 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx
@@ -3,11 +3,11 @@ import WebsiteHeader from '../WebsiteHeader';
import SessionsDataTable from './SessionsDataTable';
import SessionsMetricsBar from './SessionsMetricsBar';
import SessionProperties from './SessionProperties';
-import WorldMap from 'components/metrics/WorldMap';
-import { GridRow } from 'components/layout/Grid';
+import WorldMap from '@/components/metrics/WorldMap';
+import { GridRow } from '@/components/layout/Grid';
import { Item, Tabs } from 'react-basics';
import { useState } from 'react';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import SessionsWeekly from './SessionsWeekly';
export function SessionsPage({ websiteId }) {
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx
index 3fea4836..ddb3ed65 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx
@@ -1,9 +1,9 @@
import Link from 'next/link';
import { GridColumn, GridTable } from 'react-basics';
-import { useFormat, useMessages, useTimezone } from 'components/hooks';
-import Avatar from 'components/common/Avatar';
+import { useFormat, useMessages, useTimezone } from '@/components/hooks';
+import Avatar from '@/components/common/Avatar';
import styles from './SessionsTable.module.css';
-import TypeIcon from 'components/common/TypeIcon';
+import TypeIcon from '@/components/common/TypeIcon';
export function SessionsTable({ data = [] }: { data: any[]; showDomain?: boolean }) {
const { formatTimezoneDate } = useTimezone();
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsWeekly.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsWeekly.tsx
index 4280b7e9..6082f0e2 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionsWeekly.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsWeekly.tsx
@@ -1,7 +1,7 @@
import { format, startOfDay, addHours } from 'date-fns';
-import { useLocale, useMessages, useWebsiteSessionsWeekly } from 'components/hooks';
-import { LoadingPanel } from 'components/common/LoadingPanel';
-import { getDayOfWeekAsDate } from 'lib/date';
+import { useLocale, useMessages, useWebsiteSessionsWeekly } from '@/components/hooks';
+import { LoadingPanel } from '@/components/common/LoadingPanel';
+import { getDayOfWeekAsDate } from '@/lib/date';
import styles from './SessionsWeekly.module.css';
import classNames from 'classnames';
import { TooltipPopup } from 'react-basics';
diff --git a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionActivity.tsx b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionActivity.tsx
index 15b02758..0a020d5c 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionActivity.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionActivity.tsx
@@ -1,7 +1,7 @@
import { isSameDay } from 'date-fns';
import { Loading, Icon, StatusLight } from 'react-basics';
-import Icons from 'components/icons';
-import { useSessionActivity, useTimezone } from 'components/hooks';
+import Icons from '@/components/icons';
+import { useSessionActivity, useTimezone } from '@/components/hooks';
import styles from './SessionActivity.module.css';
import { Fragment } from 'react';
diff --git a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionData.tsx b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionData.tsx
index 39b6afd1..56d4a0d9 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionData.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionData.tsx
@@ -1,9 +1,9 @@
import { TextOverflow } from 'react-basics';
-import { useMessages, useSessionData } from 'components/hooks';
-import Empty from 'components/common/Empty';
-import { DATA_TYPES } from 'lib/constants';
+import { useMessages, useSessionData } from '@/components/hooks';
+import Empty from '@/components/common/Empty';
+import { DATA_TYPES } from '@/lib/constants';
import styles from './SessionData.module.css';
-import { LoadingPanel } from 'components/common/LoadingPanel';
+import { LoadingPanel } from '@/components/common/LoadingPanel';
export function SessionData({ websiteId, sessionId }: { websiteId: string; sessionId: string }) {
const { formatMessage, labels } = useMessages();
diff --git a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionDetailsPage.tsx b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionDetailsPage.tsx
index d6a07edc..9ccf275f 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionDetailsPage.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionDetailsPage.tsx
@@ -1,7 +1,7 @@
'use client';
-import Avatar from 'components/common/Avatar';
-import { LoadingPanel } from 'components/common/LoadingPanel';
-import { useWebsiteSession } from 'components/hooks';
+import Avatar from '@/components/common/Avatar';
+import { LoadingPanel } from '@/components/common/LoadingPanel';
+import { useWebsiteSession } from '@/components/hooks';
import WebsiteHeader from '../../WebsiteHeader';
import { SessionActivity } from './SessionActivity';
import { SessionData } from './SessionData';
diff --git a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionInfo.tsx b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionInfo.tsx
index 6f9a8f3d..889eb972 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionInfo.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionInfo.tsx
@@ -1,7 +1,7 @@
-import { useFormat, useLocale, useMessages, useRegionNames, useTimezone } from 'components/hooks';
-import TypeIcon from 'components/common/TypeIcon';
+import { useFormat, useLocale, useMessages, useRegionNames, useTimezone } from '@/components/hooks';
+import TypeIcon from '@/components/common/TypeIcon';
import { Icon, CopyIcon } from 'react-basics';
-import Icons from 'components/icons';
+import Icons from '@/components/icons';
import styles from './SessionInfo.module.css';
export default function SessionInfo({ data }) {
diff --git a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionStats.tsx b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionStats.tsx
index ea606582..eb385e9b 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionStats.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionStats.tsx
@@ -1,7 +1,7 @@
-import { useMessages } from 'components/hooks';
-import MetricCard from 'components/metrics/MetricCard';
-import MetricsBar from 'components/metrics/MetricsBar';
-import { formatShortTime } from 'lib/format';
+import { useMessages } from '@/components/hooks';
+import MetricCard from '@/components/metrics/MetricCard';
+import MetricsBar from '@/components/metrics/MetricsBar';
+import { formatShortTime } from '@/lib/format';
export function SessionStats({ data }) {
const { formatMessage, labels } = useMessages();
diff --git a/src/app/Providers.tsx b/src/app/Providers.tsx
index bbc10a35..66884c2f 100644
--- a/src/app/Providers.tsx
+++ b/src/app/Providers.tsx
@@ -2,8 +2,8 @@
import { IntlProvider } from 'react-intl';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { ReactBasicsProvider } from 'react-basics';
-import ErrorBoundary from 'components/common/ErrorBoundary';
-import { useLocale } from 'components/hooks';
+import ErrorBoundary from '@/components/common/ErrorBoundary';
+import { useLocale } from '@/components/hooks';
import 'chartjs-adapter-date-fns';
import { useEffect } from 'react';
diff --git a/src/app/api/admin/users/route.ts b/src/app/api/admin/users/route.ts
index 5ed4a8ff..2185e03e 100644
--- a/src/app/api/admin/users/route.ts
+++ b/src/app/api/admin/users/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { json, unauthorized } from 'lib/response';
-import { pagingParams } from 'lib/schema';
-import { canViewUsers } from 'lib/auth';
-import { getUsers } from 'queries/prisma/user';
+import { parseRequest } from '@/lib/request';
+import { json, unauthorized } from '@/lib/response';
+import { pagingParams } from '@/lib/schema';
+import { canViewUsers } from '@/lib/auth';
+import { getUsers } from '@/queries/prisma/user';
export async function GET(request: Request) {
const schema = z.object({
diff --git a/src/app/api/admin/websites/route.ts b/src/app/api/admin/websites/route.ts
index 014ef8d5..ec399c0d 100644
--- a/src/app/api/admin/websites/route.ts
+++ b/src/app/api/admin/websites/route.ts
@@ -1,10 +1,10 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { json, unauthorized } from 'lib/response';
-import { pagingParams } from 'lib/schema';
-import { canViewAllWebsites } from 'lib/auth';
-import { getWebsites } from 'queries/prisma/website';
-import { ROLES } from 'lib/constants';
+import { parseRequest } from '@/lib/request';
+import { json, unauthorized } from '@/lib/response';
+import { pagingParams } from '@/lib/schema';
+import { canViewAllWebsites } from '@/lib/auth';
+import { getWebsites } from '@/queries/prisma/website';
+import { ROLES } from '@/lib/constants';
export async function GET(request: Request) {
const schema = z.object({
diff --git a/src/app/api/auth/login/route.ts b/src/app/api/auth/login/route.ts
index f972fa05..0b48fe83 100644
--- a/src/app/api/auth/login/route.ts
+++ b/src/app/api/auth/login/route.ts
@@ -1,13 +1,13 @@
import { z } from 'zod';
-import { checkPassword } from 'lib/auth';
-import { createSecureToken } from 'lib/jwt';
+import { checkPassword } from '@/lib/auth';
+import { createSecureToken } from '@/lib/jwt';
import { redisEnabled } from '@umami/redis-client';
-import { getUserByUsername } from 'queries';
-import { json, unauthorized } from 'lib/response';
-import { parseRequest } from 'lib/request';
-import { saveAuth } from 'lib/auth';
-import { secret } from 'lib/crypto';
-import { ROLES } from 'lib/constants';
+import { getUserByUsername } from '@/queries';
+import { json, unauthorized } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
+import { saveAuth } from '@/lib/auth';
+import { secret } from '@/lib/crypto';
+import { ROLES } from '@/lib/constants';
export async function POST(request: Request) {
const schema = z.object({
diff --git a/src/app/api/auth/logout/route.ts b/src/app/api/auth/logout/route.ts
index ce7ce7f8..22bb3091 100644
--- a/src/app/api/auth/logout/route.ts
+++ b/src/app/api/auth/logout/route.ts
@@ -1,5 +1,5 @@
import { getClient, redisEnabled } from '@umami/redis-client';
-import { ok } from 'lib/response';
+import { ok } from '@/lib/response';
export async function POST(request: Request) {
if (redisEnabled) {
diff --git a/src/app/api/auth/sso/route.ts b/src/app/api/auth/sso/route.ts
index e06e403c..4a713424 100644
--- a/src/app/api/auth/sso/route.ts
+++ b/src/app/api/auth/sso/route.ts
@@ -1,7 +1,7 @@
import { redisEnabled } from '@umami/redis-client';
-import { json } from 'lib/response';
-import { parseRequest } from 'lib/request';
-import { saveAuth } from 'lib/auth';
+import { json } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
+import { saveAuth } from '@/lib/auth';
export async function POST(request: Request) {
const { auth, error } = await parseRequest(request);
diff --git a/src/app/api/auth/verify/route.ts b/src/app/api/auth/verify/route.ts
index db62a339..4d98b554 100644
--- a/src/app/api/auth/verify/route.ts
+++ b/src/app/api/auth/verify/route.ts
@@ -1,5 +1,5 @@
-import { parseRequest } from 'lib/request';
-import { json } from 'lib/response';
+import { parseRequest } from '@/lib/request';
+import { json } from '@/lib/response';
export async function GET(request: Request) {
const { auth, error } = await parseRequest(request);
diff --git a/src/app/api/me/password/route.ts b/src/app/api/me/password/route.ts
index b4089bf4..69bef49b 100644
--- a/src/app/api/me/password/route.ts
+++ b/src/app/api/me/password/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { checkPassword, hashPassword } from 'lib/auth';
-import { parseRequest } from 'lib/request';
-import { json, badRequest } from 'lib/response';
-import { getUser, updateUser } from 'queries/prisma/user';
+import { checkPassword, hashPassword } from '@/lib/auth';
+import { parseRequest } from '@/lib/request';
+import { json, badRequest } from '@/lib/response';
+import { getUser, updateUser } from '@/queries/prisma/user';
export async function POST(request: Request) {
const schema = z.object({
diff --git a/src/app/api/me/route.ts b/src/app/api/me/route.ts
index 60a14271..59a32552 100644
--- a/src/app/api/me/route.ts
+++ b/src/app/api/me/route.ts
@@ -1,5 +1,5 @@
-import { parseRequest } from 'lib/request';
-import { json } from 'lib/response';
+import { parseRequest } from '@/lib/request';
+import { json } from '@/lib/response';
export async function GET(request: Request) {
const { auth, error } = await parseRequest(request);
diff --git a/src/app/api/me/teams/route.ts b/src/app/api/me/teams/route.ts
index 0624e94f..2ea6575e 100644
--- a/src/app/api/me/teams/route.ts
+++ b/src/app/api/me/teams/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { pagingParams } from 'lib/schema';
-import { getUserTeams } from 'queries';
-import { json } from 'lib/response';
-import { parseRequest } from 'lib/request';
+import { pagingParams } from '@/lib/schema';
+import { getUserTeams } from '@/queries';
+import { json } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
export async function GET(request: Request) {
const schema = z.object({
diff --git a/src/app/api/me/websites/route.ts b/src/app/api/me/websites/route.ts
index 725ca94b..a8df856a 100644
--- a/src/app/api/me/websites/route.ts
+++ b/src/app/api/me/websites/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { pagingParams } from 'lib/schema';
-import { getUserWebsites } from 'queries';
-import { json } from 'lib/response';
-import { parseRequest } from 'lib/request';
+import { pagingParams } from '@/lib/schema';
+import { getUserWebsites } from '@/queries';
+import { json } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
export async function GET(request: Request) {
const schema = z.object({
diff --git a/src/app/api/realtime/[websiteId]/route.ts b/src/app/api/realtime/[websiteId]/route.ts
index b575ac12..7f9c1a9a 100644
--- a/src/app/api/realtime/[websiteId]/route.ts
+++ b/src/app/api/realtime/[websiteId]/route.ts
@@ -1,9 +1,9 @@
-import { json, unauthorized } from 'lib/response';
-import { getRealtimeData } from 'queries';
-import { canViewWebsite } from 'lib/auth';
+import { json, unauthorized } from '@/lib/response';
+import { getRealtimeData } from '@/queries';
+import { canViewWebsite } from '@/lib/auth';
import { startOfMinute, subMinutes } from 'date-fns';
-import { REALTIME_RANGE } from 'lib/constants';
-import { parseRequest } from 'lib/request';
+import { REALTIME_RANGE } from '@/lib/constants';
+import { parseRequest } from '@/lib/request';
export async function GET(
request: Request,
diff --git a/src/app/api/reports/[reportId]/route.ts b/src/app/api/reports/[reportId]/route.ts
index 0d7c0845..ba90ee08 100644
--- a/src/app/api/reports/[reportId]/route.ts
+++ b/src/app/api/reports/[reportId]/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { deleteReport, getReport, updateReport } from 'queries';
-import { canDeleteReport, canUpdateReport, canViewReport } from 'lib/auth';
-import { unauthorized, json, notFound, ok } from 'lib/response';
-import { reportTypeParam } from 'lib/schema';
+import { parseRequest } from '@/lib/request';
+import { deleteReport, getReport, updateReport } from '@/queries';
+import { canDeleteReport, canUpdateReport, canViewReport } from '@/lib/auth';
+import { unauthorized, json, notFound, ok } from '@/lib/response';
+import { reportTypeParam } from '@/lib/schema';
export async function GET(request: Request, { params }: { params: Promise<{ reportId: string }> }) {
const { auth, error } = await parseRequest(request);
diff --git a/src/app/api/reports/funnel/route.ts b/src/app/api/reports/funnel/route.ts
index 23a05014..471ae709 100644
--- a/src/app/api/reports/funnel/route.ts
+++ b/src/app/api/reports/funnel/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { canViewWebsite } from 'lib/auth';
-import { unauthorized, json } from 'lib/response';
-import { parseRequest } from 'lib/request';
-import { getFunnel } from 'queries';
-import { reportParms } from 'lib/schema';
+import { canViewWebsite } from '@/lib/auth';
+import { unauthorized, json } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
+import { getFunnel } from '@/queries';
+import { reportParms } from '@/lib/schema';
export async function POST(request: Request) {
const schema = z.object({
diff --git a/src/app/api/reports/goals/route.ts b/src/app/api/reports/goals/route.ts
index 7aceabc8..b419c569 100644
--- a/src/app/api/reports/goals/route.ts
+++ b/src/app/api/reports/goals/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { canViewWebsite } from 'lib/auth';
-import { unauthorized, json } from 'lib/response';
-import { parseRequest } from 'lib/request';
-import { getGoals } from 'queries/analytics/reports/getGoals';
-import { reportParms } from 'lib/schema';
+import { canViewWebsite } from '@/lib/auth';
+import { unauthorized, json } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
+import { getGoals } from '@/queries/analytics/reports/getGoals';
+import { reportParms } from '@/lib/schema';
export async function POST(request: Request) {
const schema = z.object({
diff --git a/src/app/api/reports/insights/route.ts b/src/app/api/reports/insights/route.ts
index a7ed1c15..b3569cba 100644
--- a/src/app/api/reports/insights/route.ts
+++ b/src/app/api/reports/insights/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { canViewWebsite } from 'lib/auth';
-import { unauthorized, json } from 'lib/response';
-import { parseRequest } from 'lib/request';
-import { getInsights } from 'queries';
-import { reportParms } from 'lib/schema';
+import { canViewWebsite } from '@/lib/auth';
+import { unauthorized, json } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
+import { getInsights } from '@/queries';
+import { reportParms } from '@/lib/schema';
function convertFilters(filters: any[]) {
return filters.reduce((obj, filter) => {
diff --git a/src/app/api/reports/journey/route.ts b/src/app/api/reports/journey/route.ts
index f5121fdc..b8a0a0a4 100644
--- a/src/app/api/reports/journey/route.ts
+++ b/src/app/api/reports/journey/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { canViewWebsite } from 'lib/auth';
-import { unauthorized, json } from 'lib/response';
-import { parseRequest } from 'lib/request';
-import { getJourney } from 'queries';
-import { reportParms } from 'lib/schema';
+import { canViewWebsite } from '@/lib/auth';
+import { unauthorized, json } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
+import { getJourney } from '@/queries';
+import { reportParms } from '@/lib/schema';
export async function POST(request: Request) {
const schema = z.object({
diff --git a/src/app/api/reports/retention/route.ts b/src/app/api/reports/retention/route.ts
index 8e854fa9..83220bb4 100644
--- a/src/app/api/reports/retention/route.ts
+++ b/src/app/api/reports/retention/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { canViewWebsite } from 'lib/auth';
-import { unauthorized, json } from 'lib/response';
-import { parseRequest } from 'lib/request';
-import { getRetention } from 'queries';
-import { reportParms, timezoneParam } from 'lib/schema';
+import { canViewWebsite } from '@/lib/auth';
+import { unauthorized, json } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
+import { getRetention } from '@/queries';
+import { reportParms, timezoneParam } from '@/lib/schema';
export async function POST(request: Request) {
const schema = z.object({
diff --git a/src/app/api/reports/revenue/route.ts b/src/app/api/reports/revenue/route.ts
index abece8a1..db7d036b 100644
--- a/src/app/api/reports/revenue/route.ts
+++ b/src/app/api/reports/revenue/route.ts
@@ -1,10 +1,10 @@
import { z } from 'zod';
-import { canViewWebsite } from 'lib/auth';
-import { unauthorized, json } from 'lib/response';
-import { parseRequest } from 'lib/request';
-import { reportParms, timezoneParam } from 'lib/schema';
-import { getRevenue } from 'queries/analytics/reports/getRevenue';
-import { getRevenueValues } from 'queries/analytics/reports/getRevenueValues';
+import { canViewWebsite } from '@/lib/auth';
+import { unauthorized, json } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
+import { reportParms, timezoneParam } from '@/lib/schema';
+import { getRevenue } from '@/queries/analytics/reports/getRevenue';
+import { getRevenueValues } from '@/queries/analytics/reports/getRevenueValues';
export async function GET(request: Request) {
const { auth, query, error } = await parseRequest(request);
diff --git a/src/app/api/reports/route.ts b/src/app/api/reports/route.ts
index 19c175bd..e50c57bc 100644
--- a/src/app/api/reports/route.ts
+++ b/src/app/api/reports/route.ts
@@ -1,10 +1,10 @@
import { z } from 'zod';
-import { uuid } from 'lib/crypto';
-import { pagingParams, reportTypeParam } from 'lib/schema';
-import { parseRequest } from 'lib/request';
-import { canViewTeam, canViewWebsite, canUpdateWebsite } from 'lib/auth';
-import { unauthorized, json } from 'lib/response';
-import { getReports, createReport } from 'queries';
+import { uuid } from '@/lib/crypto';
+import { pagingParams, reportTypeParam } from '@/lib/schema';
+import { parseRequest } from '@/lib/request';
+import { canViewTeam, canViewWebsite, canUpdateWebsite } from '@/lib/auth';
+import { unauthorized, json } from '@/lib/response';
+import { getReports, createReport } from '@/queries';
export async function GET(request: Request) {
const schema = z.object({
diff --git a/src/app/api/reports/utm/route.ts b/src/app/api/reports/utm/route.ts
index 2412134d..38e88a6d 100644
--- a/src/app/api/reports/utm/route.ts
+++ b/src/app/api/reports/utm/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { canViewWebsite } from 'lib/auth';
-import { unauthorized, json } from 'lib/response';
-import { parseRequest } from 'lib/request';
-import { getUTM } from 'queries';
-import { reportParms } from 'lib/schema';
+import { canViewWebsite } from '@/lib/auth';
+import { unauthorized, json } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
+import { getUTM } from '@/queries';
+import { reportParms } from '@/lib/schema';
export async function POST(request: Request) {
const schema = z.object({
diff --git a/src/app/api/scripts/telemetry/route.ts b/src/app/api/scripts/telemetry/route.ts
index ecd83fcb..54cee565 100644
--- a/src/app/api/scripts/telemetry/route.ts
+++ b/src/app/api/scripts/telemetry/route.ts
@@ -1,4 +1,4 @@
-import { CURRENT_VERSION, TELEMETRY_PIXEL } from 'lib/constants';
+import { CURRENT_VERSION, TELEMETRY_PIXEL } from '@/lib/constants';
export async function GET() {
if (
diff --git a/src/app/api/send/route.ts b/src/app/api/send/route.ts
index dd3253ba..8c9acad9 100644
--- a/src/app/api/send/route.ts
+++ b/src/app/api/send/route.ts
@@ -1,15 +1,15 @@
import { z } from 'zod';
import { isbot } from 'isbot';
-import { createToken, parseToken } from 'lib/jwt';
-import { safeDecodeURI } from 'lib/url';
-import clickhouse from 'lib/clickhouse';
-import { parseRequest } from 'lib/request';
-import { badRequest, json, forbidden, serverError } from 'lib/response';
-import { fetchSession, fetchWebsite } from 'lib/load';
-import { getClientInfo, hasBlockedIp } from 'lib/detect';
-import { secret, uuid, visitSalt } from 'lib/crypto';
-import { COLLECTION_TYPE } from 'lib/constants';
-import { createSession, saveEvent, saveSessionData } from 'queries';
+import { createToken, parseToken } from '@/lib/jwt';
+import { safeDecodeURI } from '@/lib/url';
+import clickhouse from '@/lib/clickhouse';
+import { parseRequest } from '@/lib/request';
+import { badRequest, json, forbidden, serverError } from '@/lib/response';
+import { fetchSession, fetchWebsite } from '@/lib/load';
+import { getClientInfo, hasBlockedIp } from '@/lib/detect';
+import { secret, uuid, visitSalt } from '@/lib/crypto';
+import { COLLECTION_TYPE } from '@/lib/constants';
+import { createSession, saveEvent, saveSessionData } from '@/queries';
export async function POST(request: Request) {
// Bot check
diff --git a/src/app/api/share/[shareId]/route.ts b/src/app/api/share/[shareId]/route.ts
index 934d51a1..e387938d 100644
--- a/src/app/api/share/[shareId]/route.ts
+++ b/src/app/api/share/[shareId]/route.ts
@@ -1,7 +1,7 @@
-import { json, notFound } from 'lib/response';
-import { createToken } from 'lib/jwt';
-import { secret } from 'lib/crypto';
-import { getSharedWebsite } from 'queries';
+import { json, notFound } from '@/lib/response';
+import { createToken } from '@/lib/jwt';
+import { secret } from '@/lib/crypto';
+import { getSharedWebsite } from '@/queries';
export async function GET(request: Request, { params }: { params: Promise<{ shareId: string }> }) {
const { shareId } = await params;
diff --git a/src/app/api/teams/[teamId]/route.ts b/src/app/api/teams/[teamId]/route.ts
index 0c5db380..f7f4b331 100644
--- a/src/app/api/teams/[teamId]/route.ts
+++ b/src/app/api/teams/[teamId]/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { unauthorized, json, notFound, ok } from 'lib/response';
-import { canDeleteTeam, canUpdateTeam, canViewTeam } from 'lib/auth';
-import { parseRequest } from 'lib/request';
-import { deleteTeam, getTeam, updateTeam } from 'queries';
+import { unauthorized, json, notFound, ok } from '@/lib/response';
+import { canDeleteTeam, canUpdateTeam, canViewTeam } from '@/lib/auth';
+import { parseRequest } from '@/lib/request';
+import { deleteTeam, getTeam, updateTeam } from '@/queries';
export async function GET(request: Request, { params }: { params: Promise<{ teamId: string }> }) {
const { auth, error } = await parseRequest(request);
diff --git a/src/app/api/teams/[teamId]/users/[userId]/route.ts b/src/app/api/teams/[teamId]/users/[userId]/route.ts
index 9276c194..cadcd8b0 100644
--- a/src/app/api/teams/[teamId]/users/[userId]/route.ts
+++ b/src/app/api/teams/[teamId]/users/[userId]/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { unauthorized, json, badRequest, ok } from 'lib/response';
-import { canDeleteTeam, canUpdateTeam } from 'lib/auth';
-import { parseRequest } from 'lib/request';
-import { deleteTeam, getTeamUser, updateTeamUser } from 'queries';
+import { unauthorized, json, badRequest, ok } from '@/lib/response';
+import { canDeleteTeam, canUpdateTeam } from '@/lib/auth';
+import { parseRequest } from '@/lib/request';
+import { deleteTeam, getTeamUser, updateTeamUser } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/teams/[teamId]/users/route.ts b/src/app/api/teams/[teamId]/users/route.ts
index a69a6b85..5ec9435f 100644
--- a/src/app/api/teams/[teamId]/users/route.ts
+++ b/src/app/api/teams/[teamId]/users/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { unauthorized, json, badRequest } from 'lib/response';
-import { canAddUserToTeam, canUpdateTeam } from 'lib/auth';
-import { parseRequest } from 'lib/request';
-import { pagingParams, roleParam } from 'lib/schema';
-import { createTeamUser, getTeamUser, getTeamUsers } from 'queries';
+import { unauthorized, json, badRequest } from '@/lib/response';
+import { canAddUserToTeam, canUpdateTeam } from '@/lib/auth';
+import { parseRequest } from '@/lib/request';
+import { pagingParams, roleParam } from '@/lib/schema';
+import { createTeamUser, getTeamUser, getTeamUsers } from '@/queries';
export async function GET(request: Request, { params }: { params: Promise<{ teamId: string }> }) {
const schema = z.object({
diff --git a/src/app/api/teams/[teamId]/websites/route.ts b/src/app/api/teams/[teamId]/websites/route.ts
index 9f800e0e..f69ab465 100644
--- a/src/app/api/teams/[teamId]/websites/route.ts
+++ b/src/app/api/teams/[teamId]/websites/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { unauthorized, json } from 'lib/response';
-import { canViewTeam } from 'lib/auth';
-import { parseRequest } from 'lib/request';
-import { pagingParams } from 'lib/schema';
-import { getTeamWebsites } from 'queries';
+import { unauthorized, json } from '@/lib/response';
+import { canViewTeam } from '@/lib/auth';
+import { parseRequest } from '@/lib/request';
+import { pagingParams } from '@/lib/schema';
+import { getTeamWebsites } from '@/queries';
export async function GET(request: Request, { params }: { params: Promise<{ teamId: string }> }) {
const schema = z.object({
diff --git a/src/app/api/teams/join/route.ts b/src/app/api/teams/join/route.ts
index 76d4a83f..3464054c 100644
--- a/src/app/api/teams/join/route.ts
+++ b/src/app/api/teams/join/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { unauthorized, json, badRequest, notFound } from 'lib/response';
-import { canCreateTeam } from 'lib/auth';
-import { parseRequest } from 'lib/request';
-import { ROLES } from 'lib/constants';
-import { createTeamUser, findTeam, getTeamUser } from 'queries';
+import { unauthorized, json, badRequest, notFound } from '@/lib/response';
+import { canCreateTeam } from '@/lib/auth';
+import { parseRequest } from '@/lib/request';
+import { ROLES } from '@/lib/constants';
+import { createTeamUser, findTeam, getTeamUser } from '@/queries';
export async function POST(request: Request) {
const schema = z.object({
diff --git a/src/app/api/teams/route.ts b/src/app/api/teams/route.ts
index 11be6c5f..d319d87b 100644
--- a/src/app/api/teams/route.ts
+++ b/src/app/api/teams/route.ts
@@ -1,10 +1,10 @@
import { z } from 'zod';
-import { getRandomChars } from 'lib/crypto';
-import { unauthorized, json } from 'lib/response';
-import { canCreateTeam } from 'lib/auth';
-import { uuid } from 'lib/crypto';
-import { parseRequest } from 'lib/request';
-import { createTeam } from 'queries';
+import { getRandomChars } from '@/lib/crypto';
+import { unauthorized, json } from '@/lib/response';
+import { canCreateTeam } from '@/lib/auth';
+import { uuid } from '@/lib/crypto';
+import { parseRequest } from '@/lib/request';
+import { createTeam } from '@/queries';
export async function POST(request: Request) {
const schema = z.object({
diff --git a/src/app/api/users/[userId]/route.ts b/src/app/api/users/[userId]/route.ts
index 6bf776f3..abb3331d 100644
--- a/src/app/api/users/[userId]/route.ts
+++ b/src/app/api/users/[userId]/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { canUpdateUser, canViewUser, canDeleteUser } from 'lib/auth';
-import { getUser, getUserByUsername, updateUser, deleteUser } from 'queries';
-import { json, unauthorized, badRequest, ok } from 'lib/response';
-import { hashPassword } from 'lib/auth';
-import { parseRequest } from 'lib/request';
+import { canUpdateUser, canViewUser, canDeleteUser } from '@/lib/auth';
+import { getUser, getUserByUsername, updateUser, deleteUser } from '@/queries';
+import { json, unauthorized, badRequest, ok } from '@/lib/response';
+import { hashPassword } from '@/lib/auth';
+import { parseRequest } from '@/lib/request';
export async function GET(request: Request, { params }: { params: Promise<{ userId: string }> }) {
const { auth, error } = await parseRequest(request);
diff --git a/src/app/api/users/[userId]/teams/route.ts b/src/app/api/users/[userId]/teams/route.ts
index 329e7413..ff659525 100644
--- a/src/app/api/users/[userId]/teams/route.ts
+++ b/src/app/api/users/[userId]/teams/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { pagingParams } from 'lib/schema';
-import { getUserTeams } from 'queries';
-import { unauthorized, json } from 'lib/response';
-import { parseRequest } from 'lib/request';
+import { pagingParams } from '@/lib/schema';
+import { getUserTeams } from '@/queries';
+import { unauthorized, json } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
export async function GET(request: Request, { params }: { params: Promise<{ userId: string }> }) {
const schema = z.object({
diff --git a/src/app/api/users/[userId]/usage/route.ts b/src/app/api/users/[userId]/usage/route.ts
index 72510bd3..168ae42e 100644
--- a/src/app/api/users/[userId]/usage/route.ts
+++ b/src/app/api/users/[userId]/usage/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { json, unauthorized } from 'lib/response';
-import { getAllUserWebsitesIncludingTeamOwner } from 'queries/prisma/website';
-import { getEventUsage } from 'queries/analytics/events/getEventUsage';
-import { getEventDataUsage } from 'queries/analytics/events/getEventDataUsage';
-import { parseRequest } from 'lib/request';
+import { json, unauthorized } from '@/lib/response';
+import { getAllUserWebsitesIncludingTeamOwner } from '@/queries/prisma/website';
+import { getEventUsage } from '@/queries/analytics/events/getEventUsage';
+import { getEventDataUsage } from '@/queries/analytics/events/getEventDataUsage';
+import { parseRequest } from '@/lib/request';
export async function GET(request: Request, { params }: { params: Promise<{ userId: string }> }) {
const schema = z.object({
diff --git a/src/app/api/users/[userId]/websites/route.ts b/src/app/api/users/[userId]/websites/route.ts
index 22aced51..77d41084 100644
--- a/src/app/api/users/[userId]/websites/route.ts
+++ b/src/app/api/users/[userId]/websites/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { unauthorized, json } from 'lib/response';
-import { getUserWebsites } from 'queries/prisma/website';
-import { pagingParams } from 'lib/schema';
-import { parseRequest } from 'lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { getUserWebsites } from '@/queries/prisma/website';
+import { pagingParams } from '@/lib/schema';
+import { parseRequest } from '@/lib/request';
export async function GET(request: Request, { params }: { params: Promise<{ userId: string }> }) {
const schema = z.object({
diff --git a/src/app/api/users/route.ts b/src/app/api/users/route.ts
index 06c95b5e..320f72bd 100644
--- a/src/app/api/users/route.ts
+++ b/src/app/api/users/route.ts
@@ -1,10 +1,10 @@
import { z } from 'zod';
-import { hashPassword, canCreateUser } from 'lib/auth';
-import { ROLES } from 'lib/constants';
-import { uuid } from 'lib/crypto';
-import { parseRequest } from 'lib/request';
-import { unauthorized, json, badRequest } from 'lib/response';
-import { createUser, getUserByUsername } from 'queries';
+import { hashPassword, canCreateUser } from '@/lib/auth';
+import { ROLES } from '@/lib/constants';
+import { uuid } from '@/lib/crypto';
+import { parseRequest } from '@/lib/request';
+import { unauthorized, json, badRequest } from '@/lib/response';
+import { createUser, getUserByUsername } from '@/queries';
export async function POST(request: Request) {
const schema = z.object({
diff --git a/src/app/api/version/route.ts b/src/app/api/version/route.ts
index 605d2583..275a4118 100644
--- a/src/app/api/version/route.ts
+++ b/src/app/api/version/route.ts
@@ -1,5 +1,5 @@
-import { json } from 'lib/response';
-import { CURRENT_VERSION } from 'lib/constants';
+import { json } from '@/lib/response';
+import { CURRENT_VERSION } from '@/lib/constants';
export async function GET() {
return json({ version: CURRENT_VERSION });
diff --git a/src/app/api/websites/[websiteId]/active/route.ts b/src/app/api/websites/[websiteId]/active/route.ts
index 9e25cea6..88c0fd17 100644
--- a/src/app/api/websites/[websiteId]/active/route.ts
+++ b/src/app/api/websites/[websiteId]/active/route.ts
@@ -1,7 +1,7 @@
-import { canViewWebsite } from 'lib/auth';
-import { json, unauthorized } from 'lib/response';
-import { getActiveVisitors } from 'queries';
-import { parseRequest } from 'lib/request';
+import { canViewWebsite } from '@/lib/auth';
+import { json, unauthorized } from '@/lib/response';
+import { getActiveVisitors } from '@/queries';
+import { parseRequest } from '@/lib/request';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/daterange/route.ts b/src/app/api/websites/[websiteId]/daterange/route.ts
index 75423454..ea2d10d2 100644
--- a/src/app/api/websites/[websiteId]/daterange/route.ts
+++ b/src/app/api/websites/[websiteId]/daterange/route.ts
@@ -1,7 +1,7 @@
-import { canViewWebsite } from 'lib/auth';
-import { getWebsiteDateRange } from 'queries';
-import { json, unauthorized } from 'lib/response';
-import { parseRequest } from 'lib/request';
+import { canViewWebsite } from '@/lib/auth';
+import { getWebsiteDateRange } from '@/queries';
+import { json, unauthorized } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/event-data/events/route.ts b/src/app/api/websites/[websiteId]/event-data/events/route.ts
index 4937482a..3e32aa83 100644
--- a/src/app/api/websites/[websiteId]/event-data/events/route.ts
+++ b/src/app/api/websites/[websiteId]/event-data/events/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { getEventDataEvents } from 'queries/analytics/events/getEventDataEvents';
+import { parseRequest } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { getEventDataEvents } from '@/queries/analytics/events/getEventDataEvents';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/event-data/fields/route.ts b/src/app/api/websites/[websiteId]/event-data/fields/route.ts
index e95998ed..60101e45 100644
--- a/src/app/api/websites/[websiteId]/event-data/fields/route.ts
+++ b/src/app/api/websites/[websiteId]/event-data/fields/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { getEventDataFields } from 'queries';
+import { parseRequest } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { getEventDataFields } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/event-data/properties/route.ts b/src/app/api/websites/[websiteId]/event-data/properties/route.ts
index 25f915b1..fe085f74 100644
--- a/src/app/api/websites/[websiteId]/event-data/properties/route.ts
+++ b/src/app/api/websites/[websiteId]/event-data/properties/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { getEventDataProperties } from 'queries';
+import { parseRequest } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { getEventDataProperties } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/event-data/stats/route.ts b/src/app/api/websites/[websiteId]/event-data/stats/route.ts
index a8093e61..6928aa1e 100644
--- a/src/app/api/websites/[websiteId]/event-data/stats/route.ts
+++ b/src/app/api/websites/[websiteId]/event-data/stats/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { getEventDataStats } from 'queries';
+import { parseRequest } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { getEventDataStats } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/event-data/values/route.ts b/src/app/api/websites/[websiteId]/event-data/values/route.ts
index 7734d920..2a912439 100644
--- a/src/app/api/websites/[websiteId]/event-data/values/route.ts
+++ b/src/app/api/websites/[websiteId]/event-data/values/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { getEventDataValues } from 'queries';
+import { parseRequest } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { getEventDataValues } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/events/route.ts b/src/app/api/websites/[websiteId]/events/route.ts
index 71046b3c..66eaba2c 100644
--- a/src/app/api/websites/[websiteId]/events/route.ts
+++ b/src/app/api/websites/[websiteId]/events/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { pagingParams } from 'lib/schema';
-import { getWebsiteEvents } from 'queries';
+import { parseRequest } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { pagingParams } from '@/lib/schema';
+import { getWebsiteEvents } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/events/series/route.ts b/src/app/api/websites/[websiteId]/events/series/route.ts
index f8646e49..da4b0d4f 100644
--- a/src/app/api/websites/[websiteId]/events/series/route.ts
+++ b/src/app/api/websites/[websiteId]/events/series/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { parseRequest, getRequestDateRange, getRequestFilters } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { filterParams, timezoneParam, unitParam } from 'lib/schema';
-import { getEventMetrics } from 'queries';
+import { parseRequest, getRequestDateRange, getRequestFilters } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { filterParams, timezoneParam, unitParam } from '@/lib/schema';
+import { getEventMetrics } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/metrics/route.ts b/src/app/api/websites/[websiteId]/metrics/route.ts
index 44312429..17c8676f 100644
--- a/src/app/api/websites/[websiteId]/metrics/route.ts
+++ b/src/app/api/websites/[websiteId]/metrics/route.ts
@@ -1,10 +1,10 @@
import { z } from 'zod';
-import { canViewWebsite } from 'lib/auth';
-import { SESSION_COLUMNS, EVENT_COLUMNS, FILTER_COLUMNS, OPERATORS } from 'lib/constants';
-import { getRequestFilters, getRequestDateRange, parseRequest } from 'lib/request';
-import { json, unauthorized, badRequest } from 'lib/response';
-import { getPageviewMetrics, getSessionMetrics } from 'queries';
-import { filterParams } from 'lib/schema';
+import { canViewWebsite } from '@/lib/auth';
+import { SESSION_COLUMNS, EVENT_COLUMNS, FILTER_COLUMNS, OPERATORS } from '@/lib/constants';
+import { getRequestFilters, getRequestDateRange, parseRequest } from '@/lib/request';
+import { json, unauthorized, badRequest } from '@/lib/response';
+import { getPageviewMetrics, getSessionMetrics } from '@/queries';
+import { filterParams } from '@/lib/schema';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/pageviews/route.ts b/src/app/api/websites/[websiteId]/pageviews/route.ts
index 020e139b..e603ae9c 100644
--- a/src/app/api/websites/[websiteId]/pageviews/route.ts
+++ b/src/app/api/websites/[websiteId]/pageviews/route.ts
@@ -1,10 +1,10 @@
import { z } from 'zod';
-import { canViewWebsite } from 'lib/auth';
-import { getRequestFilters, getRequestDateRange, parseRequest } from 'lib/request';
-import { unitParam, timezoneParam, filterParams } from 'lib/schema';
-import { getCompareDate } from 'lib/date';
-import { unauthorized, json } from 'lib/response';
-import { getPageviewStats, getSessionStats } from 'queries';
+import { canViewWebsite } from '@/lib/auth';
+import { getRequestFilters, getRequestDateRange, parseRequest } from '@/lib/request';
+import { unitParam, timezoneParam, filterParams } from '@/lib/schema';
+import { getCompareDate } from '@/lib/date';
+import { unauthorized, json } from '@/lib/response';
+import { getPageviewStats, getSessionStats } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/reports/route.ts b/src/app/api/websites/[websiteId]/reports/route.ts
index 44f62625..c6941f53 100644
--- a/src/app/api/websites/[websiteId]/reports/route.ts
+++ b/src/app/api/websites/[websiteId]/reports/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { canViewWebsite } from 'lib/auth';
-import { getWebsiteReports } from 'queries';
-import { pagingParams } from 'lib/schema';
-import { parseRequest } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { getWebsiteReports } from '@/queries';
+import { pagingParams } from '@/lib/schema';
+import { parseRequest } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/reset/route.ts b/src/app/api/websites/[websiteId]/reset/route.ts
index 8f2df289..62edceea 100644
--- a/src/app/api/websites/[websiteId]/reset/route.ts
+++ b/src/app/api/websites/[websiteId]/reset/route.ts
@@ -1,7 +1,7 @@
-import { canUpdateWebsite } from 'lib/auth';
-import { resetWebsite } from 'queries';
-import { unauthorized, ok } from 'lib/response';
-import { parseRequest } from 'lib/request';
+import { canUpdateWebsite } from '@/lib/auth';
+import { resetWebsite } from '@/queries';
+import { unauthorized, ok } from '@/lib/response';
+import { parseRequest } from '@/lib/request';
export async function POST(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/route.ts b/src/app/api/websites/[websiteId]/route.ts
index b72a5e1d..f4ea327b 100644
--- a/src/app/api/websites/[websiteId]/route.ts
+++ b/src/app/api/websites/[websiteId]/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { canUpdateWebsite, canDeleteWebsite, canViewWebsite } from 'lib/auth';
-import { SHARE_ID_REGEX } from 'lib/constants';
-import { parseRequest } from 'lib/request';
-import { ok, json, unauthorized, serverError } from 'lib/response';
-import { deleteWebsite, getWebsite, updateWebsite } from 'queries';
+import { canUpdateWebsite, canDeleteWebsite, canViewWebsite } from '@/lib/auth';
+import { SHARE_ID_REGEX } from '@/lib/constants';
+import { parseRequest } from '@/lib/request';
+import { ok, json, unauthorized, serverError } from '@/lib/response';
+import { deleteWebsite, getWebsite, updateWebsite } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/session-data/properties/route.ts b/src/app/api/websites/[websiteId]/session-data/properties/route.ts
index 5729ddbd..a6d9e2a4 100644
--- a/src/app/api/websites/[websiteId]/session-data/properties/route.ts
+++ b/src/app/api/websites/[websiteId]/session-data/properties/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { getSessionDataProperties } from 'queries';
+import { parseRequest } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { getSessionDataProperties } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/session-data/values/route.ts b/src/app/api/websites/[websiteId]/session-data/values/route.ts
index f14b1916..1c12f00d 100644
--- a/src/app/api/websites/[websiteId]/session-data/values/route.ts
+++ b/src/app/api/websites/[websiteId]/session-data/values/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { getEventDataEvents } from 'queries/analytics/events/getEventDataEvents';
+import { parseRequest } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { getEventDataEvents } from '@/queries/analytics/events/getEventDataEvents';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/sessions/[sessionId]/activity/route.ts b/src/app/api/websites/[websiteId]/sessions/[sessionId]/activity/route.ts
index ccd05d4d..aac40c38 100644
--- a/src/app/api/websites/[websiteId]/sessions/[sessionId]/activity/route.ts
+++ b/src/app/api/websites/[websiteId]/sessions/[sessionId]/activity/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { getSessionActivity } from 'queries';
+import { parseRequest } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { getSessionActivity } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/sessions/[sessionId]/properties/route.ts b/src/app/api/websites/[websiteId]/sessions/[sessionId]/properties/route.ts
index a95a0233..9c389c82 100644
--- a/src/app/api/websites/[websiteId]/sessions/[sessionId]/properties/route.ts
+++ b/src/app/api/websites/[websiteId]/sessions/[sessionId]/properties/route.ts
@@ -1,7 +1,7 @@
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { getSessionData } from 'queries';
-import { parseRequest } from 'lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { getSessionData } from '@/queries';
+import { parseRequest } from '@/lib/request';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/sessions/[sessionId]/route.ts b/src/app/api/websites/[websiteId]/sessions/[sessionId]/route.ts
index 0a968eb2..c4621ef4 100644
--- a/src/app/api/websites/[websiteId]/sessions/[sessionId]/route.ts
+++ b/src/app/api/websites/[websiteId]/sessions/[sessionId]/route.ts
@@ -1,7 +1,7 @@
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { getWebsiteSession } from 'queries';
-import { parseRequest } from 'lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { getWebsiteSession } from '@/queries';
+import { parseRequest } from '@/lib/request';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/sessions/route.ts b/src/app/api/websites/[websiteId]/sessions/route.ts
index da8d9d09..5a14f00f 100644
--- a/src/app/api/websites/[websiteId]/sessions/route.ts
+++ b/src/app/api/websites/[websiteId]/sessions/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { pagingParams } from 'lib/schema';
-import { getWebsiteSessions } from 'queries';
+import { parseRequest } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { pagingParams } from '@/lib/schema';
+import { getWebsiteSessions } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/sessions/stats/route.ts b/src/app/api/websites/[websiteId]/sessions/stats/route.ts
index a45784f7..e8e8e6c8 100644
--- a/src/app/api/websites/[websiteId]/sessions/stats/route.ts
+++ b/src/app/api/websites/[websiteId]/sessions/stats/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { parseRequest, getRequestDateRange, getRequestFilters } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { filterParams } from 'lib/schema';
-import { getWebsiteSessionStats } from 'queries';
+import { parseRequest, getRequestDateRange, getRequestFilters } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { filterParams } from '@/lib/schema';
+import { getWebsiteSessionStats } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/sessions/weekly/route.ts b/src/app/api/websites/[websiteId]/sessions/weekly/route.ts
index b57bb95c..20be378d 100644
--- a/src/app/api/websites/[websiteId]/sessions/weekly/route.ts
+++ b/src/app/api/websites/[websiteId]/sessions/weekly/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { parseRequest } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { pagingParams, timezoneParam } from 'lib/schema';
-import { getWebsiteSessionsWeekly } from 'queries';
+import { parseRequest } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { pagingParams, timezoneParam } from '@/lib/schema';
+import { getWebsiteSessionsWeekly } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/stats/route.ts b/src/app/api/websites/[websiteId]/stats/route.ts
index 55dc4e3e..c146271f 100644
--- a/src/app/api/websites/[websiteId]/stats/route.ts
+++ b/src/app/api/websites/[websiteId]/stats/route.ts
@@ -1,10 +1,10 @@
import { z } from 'zod';
-import { parseRequest, getRequestDateRange, getRequestFilters } from 'lib/request';
-import { unauthorized, json } from 'lib/response';
-import { canViewWebsite } from 'lib/auth';
-import { getCompareDate } from 'lib/date';
-import { filterParams } from 'lib/schema';
-import { getWebsiteStats } from 'queries';
+import { parseRequest, getRequestDateRange, getRequestFilters } from '@/lib/request';
+import { unauthorized, json } from '@/lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { getCompareDate } from '@/lib/date';
+import { filterParams } from '@/lib/schema';
+import { getWebsiteStats } from '@/queries';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/transfer/route.ts b/src/app/api/websites/[websiteId]/transfer/route.ts
index d3e497cd..03c0ae7f 100644
--- a/src/app/api/websites/[websiteId]/transfer/route.ts
+++ b/src/app/api/websites/[websiteId]/transfer/route.ts
@@ -1,8 +1,8 @@
import { z } from 'zod';
-import { canTransferWebsiteToTeam, canTransferWebsiteToUser } from 'lib/auth';
-import { updateWebsite } from 'queries';
-import { parseRequest } from 'lib/request';
-import { badRequest, unauthorized, json } from 'lib/response';
+import { canTransferWebsiteToTeam, canTransferWebsiteToUser } from '@/lib/auth';
+import { updateWebsite } from '@/queries';
+import { parseRequest } from '@/lib/request';
+import { badRequest, unauthorized, json } from '@/lib/response';
export async function POST(
request: Request,
diff --git a/src/app/api/websites/[websiteId]/values/route.ts b/src/app/api/websites/[websiteId]/values/route.ts
index b81bdcc8..ed3cfae6 100644
--- a/src/app/api/websites/[websiteId]/values/route.ts
+++ b/src/app/api/websites/[websiteId]/values/route.ts
@@ -1,9 +1,9 @@
import { z } from 'zod';
-import { canViewWebsite } from 'lib/auth';
-import { EVENT_COLUMNS, FILTER_COLUMNS, SESSION_COLUMNS } from 'lib/constants';
-import { getValues } from 'queries';
-import { parseRequest, getRequestDateRange } from 'lib/request';
-import { badRequest, json, unauthorized } from 'lib/response';
+import { canViewWebsite } from '@/lib/auth';
+import { EVENT_COLUMNS, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants';
+import { getValues } from '@/queries';
+import { parseRequest, getRequestDateRange } from '@/lib/request';
+import { badRequest, json, unauthorized } from '@/lib/response';
export async function GET(
request: Request,
diff --git a/src/app/api/websites/route.ts b/src/app/api/websites/route.ts
index dfc48cee..b8fb2a0b 100644
--- a/src/app/api/websites/route.ts
+++ b/src/app/api/websites/route.ts
@@ -1,10 +1,10 @@
import { z } from 'zod';
-import { canCreateTeamWebsite, canCreateWebsite } from 'lib/auth';
-import { json, unauthorized } from 'lib/response';
-import { uuid } from 'lib/crypto';
-import { parseRequest } from 'lib/request';
-import { createWebsite, getUserWebsites } from 'queries';
-import { pagingParams } from 'lib/schema';
+import { canCreateTeamWebsite, canCreateWebsite } from '@/lib/auth';
+import { json, unauthorized } from '@/lib/response';
+import { uuid } from '@/lib/crypto';
+import { parseRequest } from '@/lib/request';
+import { createWebsite, getUserWebsites } from '@/queries';
+import { pagingParams } from '@/lib/schema';
export async function GET(request: Request) {
const schema = z.object({ ...pagingParams });
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 3c0ed43c..f88d8169 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -5,8 +5,8 @@ import '@fontsource/inter/400.css';
import '@fontsource/inter/500.css';
import '@fontsource/inter/700.css';
import 'react-basics/dist/styles.css';
-import 'styles/index.css';
-import 'styles/variables.css';
+import '@/styles/index.css';
+import '@/styles/variables.css';
export default function ({ children }) {
return (
diff --git a/src/app/login/LoginForm.tsx b/src/app/login/LoginForm.tsx
index 3101bf48..a808c622 100644
--- a/src/app/login/LoginForm.tsx
+++ b/src/app/login/LoginForm.tsx
@@ -9,10 +9,10 @@ import {
Icon,
} from 'react-basics';
import { useRouter } from 'next/navigation';
-import { useApi, useMessages } from 'components/hooks';
-import { setUser } from 'store/app';
-import { setClientAuthToken } from 'lib/client';
-import Logo from 'assets/logo.svg';
+import { useApi, useMessages } from '@/components/hooks';
+import { setUser } from '@/store/app';
+import { setClientAuthToken } from '@/lib/client';
+import Logo from '@/assets/logo.svg';
import styles from './LoginForm.module.css';
export function LoginForm() {
diff --git a/src/app/logout/LogoutPage.tsx b/src/app/logout/LogoutPage.tsx
index 11d96329..d3dc481a 100644
--- a/src/app/logout/LogoutPage.tsx
+++ b/src/app/logout/LogoutPage.tsx
@@ -1,9 +1,9 @@
'use client';
import { useEffect } from 'react';
import { useRouter } from 'next/navigation';
-import { useApi } from 'components/hooks';
-import { setUser } from 'store/app';
-import { removeClientAuthToken } from 'lib/client';
+import { useApi } from '@/components/hooks';
+import { setUser } from '@/store/app';
+import { removeClientAuthToken } from '@/lib/client';
export function LogoutPage() {
const disabled = !!(process.env.disableLogin || process.env.cloudMode);
diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx
index 7a2bbb53..c673e40f 100644
--- a/src/app/not-found.tsx
+++ b/src/app/not-found.tsx
@@ -1,6 +1,6 @@
'use client';
import { Flexbox } from 'react-basics';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
export default function () {
const { formatMessage, labels } = useMessages();
diff --git a/src/app/share/[...shareId]/Footer.tsx b/src/app/share/[...shareId]/Footer.tsx
index 3a07c12a..e1ba9833 100644
--- a/src/app/share/[...shareId]/Footer.tsx
+++ b/src/app/share/[...shareId]/Footer.tsx
@@ -1,4 +1,4 @@
-import { CURRENT_VERSION, HOMEPAGE_URL } from 'lib/constants';
+import { CURRENT_VERSION, HOMEPAGE_URL } from '@/lib/constants';
import styles from './Footer.module.css';
export function Footer() {
diff --git a/src/app/share/[...shareId]/Header.module.css b/src/app/share/[...shareId]/Header.module.css
index d353d79a..04478199 100644
--- a/src/app/share/[...shareId]/Header.module.css
+++ b/src/app/share/[...shareId]/Header.module.css
@@ -7,10 +7,6 @@
height: 100px;
}
-.row {
- align-items: center;
-}
-
.title {
display: flex;
flex-direction: row;
diff --git a/src/app/share/[...shareId]/Header.tsx b/src/app/share/[...shareId]/Header.tsx
index ddfb52a5..a71a5b56 100644
--- a/src/app/share/[...shareId]/Header.tsx
+++ b/src/app/share/[...shareId]/Header.tsx
@@ -1,9 +1,9 @@
import { Icon, Text } from 'react-basics';
import Link from 'next/link';
-import LanguageButton from 'components/input/LanguageButton';
-import ThemeButton from 'components/input/ThemeButton';
-import SettingsButton from 'components/input/SettingsButton';
-import Icons from 'components/icons';
+import LanguageButton from '@/components/input/LanguageButton';
+import ThemeButton from '@/components/input/ThemeButton';
+import SettingsButton from '@/components/input/SettingsButton';
+import Icons from '@/components/icons';
import styles from './Header.module.css';
export function Header() {
diff --git a/src/app/share/[...shareId]/SharePage.tsx b/src/app/share/[...shareId]/SharePage.tsx
index c4d9af62..00c7ec3f 100644
--- a/src/app/share/[...shareId]/SharePage.tsx
+++ b/src/app/share/[...shareId]/SharePage.tsx
@@ -1,11 +1,11 @@
'use client';
import WebsiteDetailsPage from '../../(main)/websites/[websiteId]/WebsiteDetailsPage';
-import { useShareToken } from 'components/hooks';
-import Page from 'components/layout/Page';
+import { useShareToken } from '@/components/hooks';
+import Page from '@/components/layout/Page';
import Header from './Header';
import Footer from './Footer';
import styles from './SharePage.module.css';
-import { WebsiteProvider } from 'app/(main)/websites/[websiteId]/WebsiteProvider';
+import { WebsiteProvider } from '@/app/(main)/websites/[websiteId]/WebsiteProvider';
export default function SharePage({ shareId }) {
const { shareToken, isLoading } = useShareToken(shareId);
diff --git a/src/app/sso/SSOPage.tsx b/src/app/sso/SSOPage.tsx
index e577767a..eb7c0f0a 100644
--- a/src/app/sso/SSOPage.tsx
+++ b/src/app/sso/SSOPage.tsx
@@ -2,7 +2,7 @@
import { useEffect } from 'react';
import { Loading } from 'react-basics';
import { useRouter, useSearchParams } from 'next/navigation';
-import { setClientAuthToken } from 'lib/client';
+import { setClientAuthToken } from '@/lib/client';
export default function SSOPage() {
const router = useRouter();
diff --git a/src/components/charts/BarChart.tsx b/src/components/charts/BarChart.tsx
index 7c16730e..f6a6e5e0 100644
--- a/src/components/charts/BarChart.tsx
+++ b/src/components/charts/BarChart.tsx
@@ -1,7 +1,7 @@
-import BarChartTooltip from 'components/charts/BarChartTooltip';
-import Chart, { ChartProps } from 'components/charts/Chart';
-import { useTheme } from 'components/hooks';
-import { renderNumberLabels } from 'lib/charts';
+import BarChartTooltip from '@/components/charts/BarChartTooltip';
+import Chart, { ChartProps } from '@/components/charts/Chart';
+import { useTheme } from '@/components/hooks';
+import { renderNumberLabels } from '@/lib/charts';
import { useMemo, useState } from 'react';
export interface BarChartProps extends ChartProps {
diff --git a/src/components/charts/BarChartTooltip.tsx b/src/components/charts/BarChartTooltip.tsx
index 201c6e4c..af31c874 100644
--- a/src/components/charts/BarChartTooltip.tsx
+++ b/src/components/charts/BarChartTooltip.tsx
@@ -1,6 +1,6 @@
-import { useLocale } from 'components/hooks';
-import { formatDate } from 'lib/date';
-import { formatLongCurrency, formatLongNumber } from 'lib/format';
+import { useLocale } from '@/components/hooks';
+import { formatDate } from '@/lib/date';
+import { formatLongCurrency, formatLongNumber } from '@/lib/format';
import { Flexbox, StatusLight } from 'react-basics';
const formats = {
diff --git a/src/components/charts/BubbleChart.tsx b/src/components/charts/BubbleChart.tsx
index 956e260c..dfe67f3a 100644
--- a/src/components/charts/BubbleChart.tsx
+++ b/src/components/charts/BubbleChart.tsx
@@ -1,7 +1,7 @@
-import { Chart, ChartProps } from 'components/charts/Chart';
+import { Chart, ChartProps } from '@/components/charts/Chart';
import { useState } from 'react';
import { StatusLight } from 'react-basics';
-import { formatLongNumber } from 'lib/format';
+import { formatLongNumber } from '@/lib/format';
export interface BubbleChartProps extends ChartProps {
type?: 'bubble';
diff --git a/src/components/charts/Chart.tsx b/src/components/charts/Chart.tsx
index a4badbce..dde01eb4 100644
--- a/src/components/charts/Chart.tsx
+++ b/src/components/charts/Chart.tsx
@@ -2,9 +2,9 @@ import { useState, useRef, useEffect, useMemo, ReactNode } from 'react';
import { Loading } from 'react-basics';
import classNames from 'classnames';
import ChartJS, { LegendItem, ChartOptions } from 'chart.js/auto';
-import HoverTooltip from 'components/common/HoverTooltip';
-import Legend from 'components/metrics/Legend';
-import { DEFAULT_ANIMATION_DURATION } from 'lib/constants';
+import HoverTooltip from '@/components/common/HoverTooltip';
+import Legend from '@/components/metrics/Legend';
+import { DEFAULT_ANIMATION_DURATION } from '@/lib/constants';
import styles from './Chart.module.css';
export interface ChartProps {
diff --git a/src/components/charts/PieChart.tsx b/src/components/charts/PieChart.tsx
index 57d676ca..a98b9730 100644
--- a/src/components/charts/PieChart.tsx
+++ b/src/components/charts/PieChart.tsx
@@ -1,7 +1,7 @@
-import { Chart, ChartProps } from 'components/charts/Chart';
+import { Chart, ChartProps } from '@/components/charts/Chart';
import { useState } from 'react';
import { StatusLight } from 'react-basics';
-import { formatLongNumber } from 'lib/format';
+import { formatLongNumber } from '@/lib/format';
export interface PieChartProps extends ChartProps {
type?: 'doughnut' | 'pie';
diff --git a/src/components/common/Avatar.tsx b/src/components/common/Avatar.tsx
index 2e82b078..d0cae247 100644
--- a/src/components/common/Avatar.tsx
+++ b/src/components/common/Avatar.tsx
@@ -1,7 +1,7 @@
import { useMemo } from 'react';
import { createAvatar } from '@dicebear/core';
import { lorelei } from '@dicebear/collection';
-import { getColor, getPastel } from 'lib/colors';
+import { getColor, getPastel } from '@/lib/colors';
const lib = lorelei;
diff --git a/src/components/common/ConfirmationForm.tsx b/src/components/common/ConfirmationForm.tsx
index 26b4ff24..8b617ab5 100644
--- a/src/components/common/ConfirmationForm.tsx
+++ b/src/components/common/ConfirmationForm.tsx
@@ -1,6 +1,6 @@
import { ReactNode } from 'react';
import { Button, LoadingButton, Form, FormButtons } from 'react-basics';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
export interface ConfirmationFormProps {
message: ReactNode;
diff --git a/src/components/common/DataTable.tsx b/src/components/common/DataTable.tsx
index f3b144a6..b19ddf91 100644
--- a/src/components/common/DataTable.tsx
+++ b/src/components/common/DataTable.tsx
@@ -1,12 +1,12 @@
import { ReactNode } from 'react';
import classNames from 'classnames';
import { Loading, SearchField } from 'react-basics';
-import { useMessages, useNavigation } from 'components/hooks';
-import Empty from 'components/common/Empty';
-import Pager from 'components/common/Pager';
-import { PagedQueryResult } from 'lib/types';
+import { useMessages, useNavigation } from '@/components/hooks';
+import Empty from '@/components/common/Empty';
+import Pager from '@/components/common/Pager';
+import { PagedQueryResult } from '@/lib/types';
import styles from './DataTable.module.css';
-import { LoadingPanel } from 'components/common/LoadingPanel';
+import { LoadingPanel } from '@/components/common/LoadingPanel';
const DEFAULT_SEARCH_DELAY = 600;
diff --git a/src/components/common/Empty.tsx b/src/components/common/Empty.tsx
index 8e7d2d00..cf6d11cc 100644
--- a/src/components/common/Empty.tsx
+++ b/src/components/common/Empty.tsx
@@ -1,5 +1,5 @@
import classNames from 'classnames';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import styles from './Empty.module.css';
export interface EmptyProps {
diff --git a/src/components/common/EmptyPlaceholder.tsx b/src/components/common/EmptyPlaceholder.tsx
index 640e45d5..2fd606cd 100644
--- a/src/components/common/EmptyPlaceholder.tsx
+++ b/src/components/common/EmptyPlaceholder.tsx
@@ -1,6 +1,6 @@
import { ReactNode } from 'react';
import { Icon, Text, Flexbox } from 'react-basics';
-import Logo from 'assets/logo.svg';
+import Logo from '@/assets/logo.svg';
export interface EmptyPlaceholderProps {
message?: string;
diff --git a/src/components/common/ErrorBoundary.tsx b/src/components/common/ErrorBoundary.tsx
index 9669580f..b9521bb4 100644
--- a/src/components/common/ErrorBoundary.tsx
+++ b/src/components/common/ErrorBoundary.tsx
@@ -1,7 +1,7 @@
import { ErrorInfo, ReactNode } from 'react';
import { ErrorBoundary as Boundary } from 'react-error-boundary';
import { Button } from 'react-basics';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import styles from './ErrorBoundary.module.css';
const logError = (error: Error, info: ErrorInfo) => {
diff --git a/src/components/common/ErrorMessage.tsx b/src/components/common/ErrorMessage.tsx
index 7ed8662a..bf3eefb1 100644
--- a/src/components/common/ErrorMessage.tsx
+++ b/src/components/common/ErrorMessage.tsx
@@ -1,6 +1,6 @@
import { Icon, Icons, Text } from 'react-basics';
import styles from './ErrorMessage.module.css';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
export function ErrorMessage() {
const { formatMessage, messages } = useMessages();
diff --git a/src/components/common/FilterLink.tsx b/src/components/common/FilterLink.tsx
index cdb928d8..9d726b58 100644
--- a/src/components/common/FilterLink.tsx
+++ b/src/components/common/FilterLink.tsx
@@ -1,5 +1,5 @@
import classNames from 'classnames';
-import { useMessages, useNavigation } from 'components/hooks';
+import { useMessages, useNavigation } from '@/components/hooks';
import Link from 'next/link';
import { ReactNode } from 'react';
import { Icon, Icons } from 'react-basics';
diff --git a/src/components/common/LinkButton.tsx b/src/components/common/LinkButton.tsx
index 83d95151..3aa2a76a 100644
--- a/src/components/common/LinkButton.tsx
+++ b/src/components/common/LinkButton.tsx
@@ -1,8 +1,8 @@
+import { ReactNode } from 'react';
import classNames from 'classnames';
import Link from 'next/link';
-import { useLocale } from 'components/hooks';
+import { useLocale } from '@/components/hooks';
import styles from './LinkButton.module.css';
-import { ReactNode } from 'react';
export interface LinkButtonProps {
href: string;
diff --git a/src/components/common/LoadingPanel.tsx b/src/components/common/LoadingPanel.tsx
index 36de9365..4d27618a 100644
--- a/src/components/common/LoadingPanel.tsx
+++ b/src/components/common/LoadingPanel.tsx
@@ -1,8 +1,8 @@
import { ReactNode } from 'react';
import classNames from 'classnames';
import { Loading } from 'react-basics';
-import ErrorMessage from 'components/common/ErrorMessage';
-import Empty from 'components/common/Empty';
+import ErrorMessage from '@/components/common/ErrorMessage';
+import Empty from '@/components/common/Empty';
import styles from './LoadingPanel.module.css';
export function LoadingPanel({
diff --git a/src/components/common/Pager.tsx b/src/components/common/Pager.tsx
index 3e0a8033..b33d2236 100644
--- a/src/components/common/Pager.tsx
+++ b/src/components/common/Pager.tsx
@@ -1,6 +1,6 @@
import classNames from 'classnames';
import { Button, Icon, Icons } from 'react-basics';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import styles from './Pager.module.css';
export interface PagerProps {
diff --git a/src/components/common/TypeConfirmationForm.tsx b/src/components/common/TypeConfirmationForm.tsx
index 2dfb2dff..ca911e17 100644
--- a/src/components/common/TypeConfirmationForm.tsx
+++ b/src/components/common/TypeConfirmationForm.tsx
@@ -7,7 +7,7 @@ import {
TextField,
SubmitButton,
} from 'react-basics';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
export function TypeConfirmationForm({
confirmationValue,
diff --git a/src/components/hooks/queries/useConfig.ts b/src/components/hooks/queries/useConfig.ts
index f4e911a0..223f4550 100644
--- a/src/components/hooks/queries/useConfig.ts
+++ b/src/components/hooks/queries/useConfig.ts
@@ -1,6 +1,6 @@
import { useEffect } from 'react';
-import useStore, { setConfig } from 'store/app';
-import { getConfig } from 'app/actions/getConfig';
+import useStore, { setConfig } from '@/store/app';
+import { getConfig } from '@/app/actions/getConfig';
export function useConfig() {
const { config } = useStore();
diff --git a/src/components/hooks/queries/useLogin.ts b/src/components/hooks/queries/useLogin.ts
index a54f38d1..f88efbf0 100644
--- a/src/components/hooks/queries/useLogin.ts
+++ b/src/components/hooks/queries/useLogin.ts
@@ -1,5 +1,5 @@
import { UseQueryResult } from '@tanstack/react-query';
-import useStore, { setUser } from 'store/app';
+import useStore, { setUser } from '@/store/app';
import { useApi } from '../useApi';
const selector = (state: { user: any }) => state.user;
diff --git a/src/components/hooks/queries/useRealtime.ts b/src/components/hooks/queries/useRealtime.ts
index b87f74c4..c81ae90a 100644
--- a/src/components/hooks/queries/useRealtime.ts
+++ b/src/components/hooks/queries/useRealtime.ts
@@ -1,6 +1,6 @@
-import { useTimezone } from 'components/hooks';
-import { REALTIME_INTERVAL } from 'lib/constants';
-import { RealtimeData } from 'lib/types';
+import { useTimezone } from '@/components/hooks';
+import { REALTIME_INTERVAL } from '@/lib/constants';
+import { RealtimeData } from '@/lib/types';
import { useApi } from '../useApi';
export function useRealtime(websiteId: string) {
diff --git a/src/components/hooks/queries/useShareToken.ts b/src/components/hooks/queries/useShareToken.ts
index f9db7dbf..cf17c756 100644
--- a/src/components/hooks/queries/useShareToken.ts
+++ b/src/components/hooks/queries/useShareToken.ts
@@ -1,4 +1,4 @@
-import useStore, { setShareToken } from 'store/app';
+import useStore, { setShareToken } from '@/store/app';
import { useApi } from '../useApi';
const selector = (state: { shareToken: string }) => state.shareToken;
diff --git a/src/components/hooks/queries/useWebsiteSessions.ts b/src/components/hooks/queries/useWebsiteSessions.ts
index ad7bb616..09e34a80 100644
--- a/src/components/hooks/queries/useWebsiteSessions.ts
+++ b/src/components/hooks/queries/useWebsiteSessions.ts
@@ -1,7 +1,7 @@
import { useApi } from '../useApi';
import { usePagedQuery } from '../usePagedQuery';
import useModified from '../useModified';
-import { useFilterParams } from 'components/hooks/useFilterParams';
+import { useFilterParams } from '@/components/hooks/useFilterParams';
export function useWebsiteSessions(websiteId: string, params?: { [key: string]: string | number }) {
const { get } = useApi();
diff --git a/src/components/hooks/queries/useWebsiteSessionsWeekly.ts b/src/components/hooks/queries/useWebsiteSessionsWeekly.ts
index c4e83f98..f3aa3b00 100644
--- a/src/components/hooks/queries/useWebsiteSessionsWeekly.ts
+++ b/src/components/hooks/queries/useWebsiteSessionsWeekly.ts
@@ -1,6 +1,6 @@
import { useApi } from '../useApi';
import useModified from '../useModified';
-import { useFilterParams } from 'components/hooks/useFilterParams';
+import { useFilterParams } from '@/components/hooks/useFilterParams';
export function useWebsiteSessionsWeekly(
websiteId: string,
diff --git a/src/components/hooks/queries/useWebsiteValues.ts b/src/components/hooks/queries/useWebsiteValues.ts
index 73a7c755..845954aa 100644
--- a/src/components/hooks/queries/useWebsiteValues.ts
+++ b/src/components/hooks/queries/useWebsiteValues.ts
@@ -1,5 +1,5 @@
import { useApi } from '../useApi';
-import { useCountryNames, useRegionNames } from 'components/hooks';
+import { useCountryNames, useRegionNames } from '@/components/hooks';
import useLocale from '../useLocale';
export function useWebsiteValues({
diff --git a/src/components/hooks/useApi.ts b/src/components/hooks/useApi.ts
index e71d5618..2e3aee8f 100644
--- a/src/components/hooks/useApi.ts
+++ b/src/components/hooks/useApi.ts
@@ -1,9 +1,9 @@
import { useCallback } from 'react';
import * as reactQuery from '@tanstack/react-query';
-import { getClientAuthToken } from 'lib/client';
-import { SHARE_TOKEN_HEADER } from 'lib/constants';
-import { httpGet, httpPost, httpPut, httpDelete } from 'lib/fetch';
-import useStore from 'store/app';
+import { getClientAuthToken } from '@/lib/client';
+import { SHARE_TOKEN_HEADER } from '@/lib/constants';
+import { httpGet, httpPost, httpPut, httpDelete } from '@/lib/fetch';
+import useStore from '@/store/app';
const selector = (state: { shareToken: { token?: string } }) => state.shareToken;
diff --git a/src/components/hooks/useCountryNames.ts b/src/components/hooks/useCountryNames.ts
index 8581eedf..12f2f0dd 100644
--- a/src/components/hooks/useCountryNames.ts
+++ b/src/components/hooks/useCountryNames.ts
@@ -1,5 +1,5 @@
import { useState, useEffect } from 'react';
-import { httpGet } from 'lib/fetch';
+import { httpGet } from '@/lib/fetch';
import enUS from '../../../public/intl/country/en-US.json';
const countryNames = {
diff --git a/src/components/hooks/useDateRange.ts b/src/components/hooks/useDateRange.ts
index 85aed285..61838980 100644
--- a/src/components/hooks/useDateRange.ts
+++ b/src/components/hooks/useDateRange.ts
@@ -1,9 +1,9 @@
-import { getMinimumUnit, parseDateRange } from 'lib/date';
-import { setItem } from 'lib/storage';
-import { DATE_RANGE_CONFIG, DEFAULT_DATE_COMPARE, DEFAULT_DATE_RANGE } from 'lib/constants';
-import websiteStore, { setWebsiteDateRange, setWebsiteDateCompare } from 'store/websites';
-import appStore, { setDateRange } from 'store/app';
-import { DateRange } from 'lib/types';
+import { getMinimumUnit, parseDateRange } from '@/lib/date';
+import { setItem } from '@/lib/storage';
+import { DATE_RANGE_CONFIG, DEFAULT_DATE_COMPARE, DEFAULT_DATE_RANGE } from '@/lib/constants';
+import websiteStore, { setWebsiteDateRange, setWebsiteDateCompare } from '@/store/websites';
+import appStore, { setDateRange } from '@/store/app';
+import { DateRange } from '@/lib/types';
import { useLocale } from './useLocale';
import { useApi } from './useApi';
diff --git a/src/components/hooks/useFilters.ts b/src/components/hooks/useFilters.ts
index 5f89eca4..2b99785a 100644
--- a/src/components/hooks/useFilters.ts
+++ b/src/components/hooks/useFilters.ts
@@ -1,5 +1,5 @@
import { useMessages } from './useMessages';
-import { OPERATORS } from 'lib/constants';
+import { OPERATORS } from '@/lib/constants';
export function useFilters() {
const { formatMessage, labels } = useMessages();
diff --git a/src/components/hooks/useFormat.ts b/src/components/hooks/useFormat.ts
index 10030721..927e21e8 100644
--- a/src/components/hooks/useFormat.ts
+++ b/src/components/hooks/useFormat.ts
@@ -1,5 +1,5 @@
import useMessages from './useMessages';
-import { BROWSERS, OS_NAMES } from 'lib/constants';
+import { BROWSERS, OS_NAMES } from '@/lib/constants';
import useLocale from './useLocale';
import useCountryNames from './useCountryNames';
import useLanguageNames from './useLanguageNames';
diff --git a/src/components/hooks/useLanguageNames.ts b/src/components/hooks/useLanguageNames.ts
index 847105c1..8c28d560 100644
--- a/src/components/hooks/useLanguageNames.ts
+++ b/src/components/hooks/useLanguageNames.ts
@@ -1,5 +1,5 @@
import { useState, useEffect } from 'react';
-import { httpGet } from 'lib/fetch';
+import { httpGet } from '@/lib/fetch';
import enUS from '../../../public/intl/language/en-US.json';
const languageNames = {
diff --git a/src/components/hooks/useLocale.ts b/src/components/hooks/useLocale.ts
index 1ac8945e..f128e99a 100644
--- a/src/components/hooks/useLocale.ts
+++ b/src/components/hooks/useLocale.ts
@@ -1,9 +1,9 @@
import { useEffect } from 'react';
-import { httpGet } from 'lib/fetch';
-import { setItem } from 'lib/storage';
-import { LOCALE_CONFIG } from 'lib/constants';
-import { getDateLocale, getTextDirection } from 'lib/lang';
-import useStore, { setLocale } from 'store/app';
+import { httpGet } from '@/lib/fetch';
+import { setItem } from '@/lib/storage';
+import { LOCALE_CONFIG } from '@/lib/constants';
+import { getDateLocale, getTextDirection } from '@/lib/lang';
+import useStore, { setLocale } from '@/store/app';
import { useForceUpdate } from './useForceUpdate';
import enUS from '../../../public/intl/country/en-US.json';
diff --git a/src/components/hooks/useMessages.ts b/src/components/hooks/useMessages.ts
index ab37cc19..da370348 100644
--- a/src/components/hooks/useMessages.ts
+++ b/src/components/hooks/useMessages.ts
@@ -1,5 +1,5 @@
import { useIntl, FormattedMessage } from 'react-intl';
-import { messages, labels } from 'components/messages';
+import { messages, labels } from '@/components/messages';
export function useMessages(): any {
const intl = useIntl();
diff --git a/src/components/hooks/useModified.ts b/src/components/hooks/useModified.ts
index 858be87e..fd8dc2e6 100644
--- a/src/components/hooks/useModified.ts
+++ b/src/components/hooks/useModified.ts
@@ -1,4 +1,4 @@
-import useStore from 'store/modified';
+import useStore from '@/store/modified';
export function useModified(key?: string) {
const modified = useStore(state => state?.[key]);
diff --git a/src/components/hooks/useNavigation.ts b/src/components/hooks/useNavigation.ts
index 2c5dddc4..b727ee90 100644
--- a/src/components/hooks/useNavigation.ts
+++ b/src/components/hooks/useNavigation.ts
@@ -1,6 +1,6 @@
import { useMemo } from 'react';
import { usePathname, useRouter, useSearchParams } from 'next/navigation';
-import { buildUrl } from 'lib/url';
+import { buildUrl } from '@/lib/url';
export function useNavigation(): {
pathname: string;
diff --git a/src/components/hooks/usePagedQuery.ts b/src/components/hooks/usePagedQuery.ts
index a4cc68a6..bd59189a 100644
--- a/src/components/hooks/usePagedQuery.ts
+++ b/src/components/hooks/usePagedQuery.ts
@@ -1,6 +1,6 @@
import { UseQueryOptions } from '@tanstack/react-query';
import { useState } from 'react';
-import { PageResult, PageParams, PagedQueryResult } from 'lib/types';
+import { PageResult, PageParams, PagedQueryResult } from '@/lib/types';
import { useApi } from './useApi';
import { useNavigation } from './useNavigation';
diff --git a/src/components/hooks/useTheme.ts b/src/components/hooks/useTheme.ts
index c8e397d5..9bbe063c 100644
--- a/src/components/hooks/useTheme.ts
+++ b/src/components/hooks/useTheme.ts
@@ -1,7 +1,7 @@
import { useEffect, useMemo } from 'react';
-import useStore, { setTheme } from 'store/app';
-import { getItem, setItem } from 'lib/storage';
-import { DEFAULT_THEME, THEME_COLORS, THEME_CONFIG } from 'lib/constants';
+import useStore, { setTheme } from '@/store/app';
+import { getItem, setItem } from '@/lib/storage';
+import { DEFAULT_THEME, THEME_COLORS, THEME_CONFIG } from '@/lib/constants';
import { colord } from 'colord';
const selector = (state: { theme: string }) => state.theme;
diff --git a/src/components/hooks/useTimezone.ts b/src/components/hooks/useTimezone.ts
index 4dfecdb4..5f01c2ab 100644
--- a/src/components/hooks/useTimezone.ts
+++ b/src/components/hooks/useTimezone.ts
@@ -1,7 +1,7 @@
-import { setItem } from 'lib/storage';
-import { TIMEZONE_CONFIG } from 'lib/constants';
+import { setItem } from '@/lib/storage';
+import { TIMEZONE_CONFIG } from '@/lib/constants';
import { formatInTimeZone, zonedTimeToUtc, utcToZonedTime } from 'date-fns-tz';
-import useStore, { setTimezone } from 'store/app';
+import useStore, { setTimezone } from '@/store/app';
const selector = (state: { timezone: string }) => state.timezone;
diff --git a/src/components/icons.ts b/src/components/icons.ts
index 1cf26543..e952e500 100644
--- a/src/components/icons.ts
+++ b/src/components/icons.ts
@@ -1,30 +1,30 @@
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 Change from 'assets/change.svg';
-import Clock from 'assets/clock.svg';
-import Compare from 'assets/compare.svg';
-import Dashboard from 'assets/dashboard.svg';
-import Eye from 'assets/eye.svg';
-import Gear from 'assets/gear.svg';
-import Globe from 'assets/globe.svg';
-import Location from 'assets/location.svg';
-import Lock from 'assets/lock.svg';
-import Logo from 'assets/logo.svg';
-import Magnet from 'assets/magnet.svg';
-import Moon from 'assets/moon.svg';
-import Nodes from 'assets/nodes.svg';
-import Overview from 'assets/overview.svg';
-import Profile from 'assets/profile.svg';
-import PushPin from 'assets/pushpin.svg';
-import Reports from 'assets/reports.svg';
-import Sun from 'assets/sun.svg';
-import User from 'assets/user.svg';
-import Users from 'assets/users.svg';
-import Visitor from 'assets/visitor.svg';
+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 Change from '@/assets/change.svg';
+import Clock from '@/assets/clock.svg';
+import Compare from '@/assets/compare.svg';
+import Dashboard from '@/assets/dashboard.svg';
+import Eye from '@/assets/eye.svg';
+import Gear from '@/assets/gear.svg';
+import Globe from '@/assets/globe.svg';
+import Location from '@/assets/location.svg';
+import Lock from '@/assets/lock.svg';
+import Logo from '@/assets/logo.svg';
+import Magnet from '@/assets/magnet.svg';
+import Moon from '@/assets/moon.svg';
+import Nodes from '@/assets/nodes.svg';
+import Overview from '@/assets/overview.svg';
+import Profile from '@/assets/profile.svg';
+import PushPin from '@/assets/pushpin.svg';
+import Reports from '@/assets/reports.svg';
+import Sun from '@/assets/sun.svg';
+import User from '@/assets/user.svg';
+import Users from '@/assets/users.svg';
+import Visitor from '@/assets/visitor.svg';
const icons = {
...Icons,
diff --git a/src/components/input/DateFilter.tsx b/src/components/input/DateFilter.tsx
index e486551d..443827a0 100644
--- a/src/components/input/DateFilter.tsx
+++ b/src/components/input/DateFilter.tsx
@@ -1,10 +1,10 @@
import { useState } from 'react';
import { Icon, Modal, Dropdown, Item, Text, Flexbox } from 'react-basics';
import { endOfYear, isSameDay } from 'date-fns';
-import DatePickerForm from 'components/metrics/DatePickerForm';
-import { useLocale, useMessages } from 'components/hooks';
-import Icons from 'components/icons';
-import { formatDate, parseDateValue } from 'lib/date';
+import DatePickerForm from '@/components/metrics/DatePickerForm';
+import { useLocale, useMessages } from '@/components/hooks';
+import Icons from '@/components/icons';
+import { formatDate, parseDateValue } from '@/lib/date';
import styles from './DateFilter.module.css';
import classNames from 'classnames';
diff --git a/src/components/input/LanguageButton.tsx b/src/components/input/LanguageButton.tsx
index 5da3bf78..54ce55eb 100644
--- a/src/components/input/LanguageButton.tsx
+++ b/src/components/input/LanguageButton.tsx
@@ -1,8 +1,8 @@
import { Icon, Button, PopupTrigger, Popup } from 'react-basics';
import classNames from 'classnames';
-import { languages } from 'lib/lang';
-import { useLocale } from 'components/hooks';
-import Icons from 'components/icons';
+import { languages } from '@/lib/lang';
+import { useLocale } from '@/components/hooks';
+import Icons from '@/components/icons';
import styles from './LanguageButton.module.css';
export function LanguageButton() {
diff --git a/src/components/input/LogoutButton.tsx b/src/components/input/LogoutButton.tsx
index ddc71142..a1a34a00 100644
--- a/src/components/input/LogoutButton.tsx
+++ b/src/components/input/LogoutButton.tsx
@@ -1,6 +1,6 @@
import { Button, Icon, Icons, TooltipPopup } from 'react-basics';
import Link from 'next/link';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
export function LogoutButton({
tooltipPosition = 'top',
diff --git a/src/components/input/MonthSelect.tsx b/src/components/input/MonthSelect.tsx
index acb17dfe..144f5bd8 100644
--- a/src/components/input/MonthSelect.tsx
+++ b/src/components/input/MonthSelect.tsx
@@ -9,9 +9,9 @@ import {
Popup,
} from 'react-basics';
import { startOfMonth, endOfMonth } from 'date-fns';
-import Icons from 'components/icons';
-import { useLocale } from 'components/hooks';
-import { formatDate } from 'lib/date';
+import Icons from '@/components/icons';
+import { useLocale } from '@/components/hooks';
+import { formatDate } from '@/lib/date';
import styles from './MonthSelect.module.css';
export function MonthSelect({ date = new Date(), onChange }) {
diff --git a/src/components/input/ProfileButton.tsx b/src/components/input/ProfileButton.tsx
index b1875165..86a9d333 100644
--- a/src/components/input/ProfileButton.tsx
+++ b/src/components/input/ProfileButton.tsx
@@ -1,9 +1,9 @@
import { Key } from 'react';
import { Icon, Button, PopupTrigger, Popup, Menu, Item, Text } from 'react-basics';
import { useRouter } from 'next/navigation';
-import Icons from 'components/icons';
-import { useMessages, useLogin, useLocale } from 'components/hooks';
-import { CURRENT_VERSION } from 'lib/constants';
+import Icons from '@/components/icons';
+import { useMessages, useLogin, useLocale } from '@/components/hooks';
+import { CURRENT_VERSION } from '@/lib/constants';
import styles from './ProfileButton.module.css';
export function ProfileButton() {
diff --git a/src/components/input/RefreshButton.tsx b/src/components/input/RefreshButton.tsx
index cd68c40a..35bfbf3c 100644
--- a/src/components/input/RefreshButton.tsx
+++ b/src/components/input/RefreshButton.tsx
@@ -1,8 +1,8 @@
import { LoadingButton, Icon, TooltipPopup } from 'react-basics';
-import { setWebsiteDateRange } from 'store/websites';
-import { useDateRange } from 'components/hooks';
-import Icons from 'components/icons';
-import { useMessages } from 'components/hooks';
+import { setWebsiteDateRange } from '@/store/websites';
+import { useDateRange } from '@/components/hooks';
+import Icons from '@/components/icons';
+import { useMessages } from '@/components/hooks';
export function RefreshButton({
websiteId,
diff --git a/src/components/input/SettingsButton.tsx b/src/components/input/SettingsButton.tsx
index 535d03c3..d3dc471f 100644
--- a/src/components/input/SettingsButton.tsx
+++ b/src/components/input/SettingsButton.tsx
@@ -1,8 +1,8 @@
import { Button, Icon, PopupTrigger, Popup, Form, FormRow } from 'react-basics';
-import TimezoneSetting from 'app/(main)/profile/TimezoneSetting';
-import DateRangeSetting from 'app/(main)/profile/DateRangeSetting';
-import Icons from 'components/icons';
-import { useMessages } from 'components/hooks';
+import TimezoneSetting from '@/app/(main)/profile/TimezoneSetting';
+import DateRangeSetting from '@/app/(main)/profile/DateRangeSetting';
+import Icons from '@/components/icons';
+import { useMessages } from '@/components/hooks';
import styles from './SettingsButton.module.css';
export function SettingsButton() {
diff --git a/src/components/input/TeamsButton.tsx b/src/components/input/TeamsButton.tsx
index b4e2f157..f967a64c 100644
--- a/src/components/input/TeamsButton.tsx
+++ b/src/components/input/TeamsButton.tsx
@@ -1,8 +1,8 @@
import { Key } from 'react';
import { Text, Icon, Button, Popup, Menu, Item, PopupTrigger, Flexbox } from 'react-basics';
import classNames from 'classnames';
-import Icons from 'components/icons';
-import { useLogin, useMessages, useTeams, useTeamUrl } from 'components/hooks';
+import Icons from '@/components/icons';
+import { useLogin, useMessages, useTeams, useTeamUrl } from '@/components/hooks';
import styles from './TeamsButton.module.css';
export function TeamsButton({
diff --git a/src/components/input/ThemeButton.tsx b/src/components/input/ThemeButton.tsx
index ece571ab..fd7d79a0 100644
--- a/src/components/input/ThemeButton.tsx
+++ b/src/components/input/ThemeButton.tsx
@@ -1,7 +1,7 @@
import { useTransition, animated } from '@react-spring/web';
import { Button, Icon } from 'react-basics';
-import { useTheme } from 'components/hooks';
-import Icons from 'components/icons';
+import { useTheme } from '@/components/hooks';
+import Icons from '@/components/icons';
import styles from './ThemeButton.module.css';
export function ThemeButton() {
@@ -28,7 +28,7 @@ export function ThemeButton() {
diff --git a/src/components/input/WebsiteDateFilter.tsx b/src/components/input/WebsiteDateFilter.tsx
index 486f5de1..97beaf12 100644
--- a/src/components/input/WebsiteDateFilter.tsx
+++ b/src/components/input/WebsiteDateFilter.tsx
@@ -1,10 +1,10 @@
-import { useDateRange, useLocale } from 'components/hooks';
+import { useDateRange, useLocale } from '@/components/hooks';
import { isAfter } from 'date-fns';
-import { getOffsetDateRange } from 'lib/date';
+import { getOffsetDateRange } from '@/lib/date';
import { Button, Icon, Icons } from 'react-basics';
import DateFilter from './DateFilter';
import styles from './WebsiteDateFilter.module.css';
-import { DateRange } from 'lib/types';
+import { DateRange } from '@/lib/types';
export function WebsiteDateFilter({
websiteId,
diff --git a/src/components/input/WebsiteSelect.tsx b/src/components/input/WebsiteSelect.tsx
index 0540ed38..ed78efc8 100644
--- a/src/components/input/WebsiteSelect.tsx
+++ b/src/components/input/WebsiteSelect.tsx
@@ -1,7 +1,7 @@
import { useState, Key } from 'react';
import { Dropdown, Item } from 'react-basics';
-import { useWebsite, useWebsites, useMessages } from 'components/hooks';
-import Empty from 'components/common/Empty';
+import { useWebsite, useWebsites, useMessages } from '@/components/hooks';
+import Empty from '@/components/common/Empty';
import styles from './WebsiteSelect.module.css';
export function WebsiteSelect({
diff --git a/src/components/layout/MenuLayout.tsx b/src/components/layout/MenuLayout.tsx
index 2edd1091..1465c062 100644
--- a/src/components/layout/MenuLayout.tsx
+++ b/src/components/layout/MenuLayout.tsx
@@ -1,6 +1,6 @@
import { ReactNode } from 'react';
import { usePathname } from 'next/navigation';
-import SideNav from 'components/layout/SideNav';
+import SideNav from '@/components/layout/SideNav';
import styles from './MenuLayout.module.css';
export function MenuLayout({ items = [], children }: { items: any[]; children: ReactNode }) {
diff --git a/src/components/layout/NavGroup.module.css b/src/components/layout/NavGroup.module.css
index d827da86..4979210a 100644
--- a/src/components/layout/NavGroup.module.css
+++ b/src/components/layout/NavGroup.module.css
@@ -51,11 +51,6 @@ a.item {
color: var(--base900);
}
-.item.disabled {
- color: var(--base500) !important;
- pointer-events: none;
-}
-
.minimized .text,
.minimized .header {
display: none;
diff --git a/src/components/layout/NavGroup.tsx b/src/components/layout/NavGroup.tsx
index e95b61fa..723f9a7e 100644
--- a/src/components/layout/NavGroup.tsx
+++ b/src/components/layout/NavGroup.tsx
@@ -3,7 +3,7 @@ import { Icon, Text, TooltipPopup } from 'react-basics';
import classNames from 'classnames';
import { usePathname } from 'next/navigation';
import Link from 'next/link';
-import Icons from 'components/icons';
+import Icons from '@/components/icons';
import styles from './NavGroup.module.css';
export interface NavGroupProps {
diff --git a/src/components/layout/Page.tsx b/src/components/layout/Page.tsx
index 83312d12..c06054b4 100644
--- a/src/components/layout/Page.tsx
+++ b/src/components/layout/Page.tsx
@@ -2,7 +2,7 @@
import { ReactNode } from 'react';
import classNames from 'classnames';
import { Banner, Loading } from 'react-basics';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import styles from './Page.module.css';
export function Page({
diff --git a/src/components/messages.ts b/src/components/messages.ts
index 688dd11d..80d23d2a 100644
--- a/src/components/messages.ts
+++ b/src/components/messages.ts
@@ -280,6 +280,7 @@ export const labels = defineMessages({
lastSeen: { id: 'label.last-seen', defaultMessage: 'Last seen' },
firstSeen: { id: 'label.first-seen', defaultMessage: 'First seen' },
properties: { id: 'label.properties', defaultMessage: 'Properties' },
+ channels: { id: 'label.channels', defaultMessage: 'Channels' },
});
export const messages = defineMessages({
diff --git a/src/components/metrics/ActiveUsers.tsx b/src/components/metrics/ActiveUsers.tsx
index 966b91d9..50c676ab 100644
--- a/src/components/metrics/ActiveUsers.tsx
+++ b/src/components/metrics/ActiveUsers.tsx
@@ -1,7 +1,7 @@
import { useMemo } from 'react';
import { StatusLight } from 'react-basics';
-import { useApi } from 'components/hooks';
-import { useMessages } from 'components/hooks';
+import { useApi } from '@/components/hooks';
+import { useMessages } from '@/components/hooks';
import styles from './ActiveUsers.module.css';
export function ActiveUsers({
diff --git a/src/components/metrics/BrowsersTable.tsx b/src/components/metrics/BrowsersTable.tsx
index d0cec124..500686b1 100644
--- a/src/components/metrics/BrowsersTable.tsx
+++ b/src/components/metrics/BrowsersTable.tsx
@@ -1,8 +1,8 @@
-import FilterLink from 'components/common/FilterLink';
-import MetricsTable, { MetricsTableProps } from 'components/metrics/MetricsTable';
-import { useMessages } from 'components/hooks';
-import { useFormat } from 'components/hooks';
-import TypeIcon from 'components/common/TypeIcon';
+import FilterLink from '@/components/common/FilterLink';
+import MetricsTable, { MetricsTableProps } from '@/components/metrics/MetricsTable';
+import { useMessages } from '@/components/hooks';
+import { useFormat } from '@/components/hooks';
+import TypeIcon from '@/components/common/TypeIcon';
export function BrowsersTable(props: MetricsTableProps) {
const { formatMessage, labels } = useMessages();
diff --git a/src/components/metrics/ChannelsTable.tsx b/src/components/metrics/ChannelsTable.tsx
new file mode 100644
index 00000000..645ca936
--- /dev/null
+++ b/src/components/metrics/ChannelsTable.tsx
@@ -0,0 +1,17 @@
+import MetricsTable, { MetricsTableProps } from '@/components/metrics/MetricsTable';
+import { useMessages } from '@/components/hooks';
+
+export function BrowsersTable(props: MetricsTableProps) {
+ const { formatMessage, labels } = useMessages();
+
+ return (
+
+ );
+}
+
+export default BrowsersTable;
diff --git a/src/components/metrics/CitiesTable.tsx b/src/components/metrics/CitiesTable.tsx
index fd628e7f..1e5fc735 100644
--- a/src/components/metrics/CitiesTable.tsx
+++ b/src/components/metrics/CitiesTable.tsx
@@ -1,8 +1,8 @@
import MetricsTable, { MetricsTableProps } from './MetricsTable';
-import { emptyFilter } from 'lib/filters';
-import FilterLink from 'components/common/FilterLink';
-import { useMessages } from 'components/hooks';
-import { useFormat } from 'components/hooks';
+import { emptyFilter } from '@/lib/filters';
+import FilterLink from '@/components/common/FilterLink';
+import { useMessages } from '@/components/hooks';
+import { useFormat } from '@/components/hooks';
export function CitiesTable(props: MetricsTableProps) {
const { formatMessage, labels } = useMessages();
diff --git a/src/components/metrics/CountriesTable.tsx b/src/components/metrics/CountriesTable.tsx
index f4560ae3..cdd05115 100644
--- a/src/components/metrics/CountriesTable.tsx
+++ b/src/components/metrics/CountriesTable.tsx
@@ -1,8 +1,8 @@
-import FilterLink from 'components/common/FilterLink';
-import { useCountryNames } from 'components/hooks';
-import { useLocale, useMessages, useFormat } from 'components/hooks';
+import FilterLink from '@/components/common/FilterLink';
+import { useCountryNames } from '@/components/hooks';
+import { useLocale, useMessages, useFormat } from '@/components/hooks';
import MetricsTable, { MetricsTableProps } from './MetricsTable';
-import TypeIcon from 'components/common/TypeIcon';
+import TypeIcon from '@/components/common/TypeIcon';
export function CountriesTable({ ...props }: MetricsTableProps) {
const { locale } = useLocale();
diff --git a/src/components/metrics/DatePickerForm.tsx b/src/components/metrics/DatePickerForm.tsx
index 892cd127..d1a5c7db 100644
--- a/src/components/metrics/DatePickerForm.tsx
+++ b/src/components/metrics/DatePickerForm.tsx
@@ -1,9 +1,9 @@
import { useState } from 'react';
import { Button, ButtonGroup, Calendar } from 'react-basics';
import { isAfter, isBefore, isSameDay, startOfDay, endOfDay } from 'date-fns';
-import { useLocale } from 'components/hooks';
-import { FILTER_DAY, FILTER_RANGE } from 'lib/constants';
-import { useMessages } from 'components/hooks';
+import { useLocale } from '@/components/hooks';
+import { FILTER_DAY, FILTER_RANGE } from '@/lib/constants';
+import { useMessages } from '@/components/hooks';
import styles from './DatePickerForm.module.css';
export function DatePickerForm({
diff --git a/src/components/metrics/DevicesTable.tsx b/src/components/metrics/DevicesTable.tsx
index c25afe4f..ed327c33 100644
--- a/src/components/metrics/DevicesTable.tsx
+++ b/src/components/metrics/DevicesTable.tsx
@@ -1,8 +1,8 @@
import MetricsTable, { MetricsTableProps } from './MetricsTable';
-import FilterLink from 'components/common/FilterLink';
-import { useMessages } from 'components/hooks';
-import { useFormat } from 'components/hooks';
-import TypeIcon from 'components/common/TypeIcon';
+import FilterLink from '@/components/common/FilterLink';
+import { useMessages } from '@/components/hooks';
+import { useFormat } from '@/components/hooks';
+import TypeIcon from '@/components/common/TypeIcon';
export function DevicesTable(props: MetricsTableProps) {
const { formatMessage, labels } = useMessages();
diff --git a/src/components/metrics/EventsChart.tsx b/src/components/metrics/EventsChart.tsx
index 2ba2caee..9655c4a4 100644
--- a/src/components/metrics/EventsChart.tsx
+++ b/src/components/metrics/EventsChart.tsx
@@ -1,8 +1,8 @@
import { colord } from 'colord';
-import BarChart from 'components/charts/BarChart';
-import { useDateRange, useLocale, useWebsiteEventsSeries } from 'components/hooks';
-import { renderDateLabels } from 'lib/charts';
-import { CHART_COLORS } from 'lib/constants';
+import BarChart from '@/components/charts/BarChart';
+import { useDateRange, useLocale, useWebsiteEventsSeries } from '@/components/hooks';
+import { renderDateLabels } from '@/lib/charts';
+import { CHART_COLORS } from '@/lib/constants';
import { useMemo } from 'react';
export interface EventsChartProps {
diff --git a/src/components/metrics/EventsTable.tsx b/src/components/metrics/EventsTable.tsx
index c90ae988..bc753b3b 100644
--- a/src/components/metrics/EventsTable.tsx
+++ b/src/components/metrics/EventsTable.tsx
@@ -1,5 +1,5 @@
import MetricsTable, { MetricsTableProps } from './MetricsTable';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
export function EventsTable(props: MetricsTableProps) {
const { formatMessage, labels } = useMessages();
diff --git a/src/components/metrics/FilterTags.tsx b/src/components/metrics/FilterTags.tsx
index 60cf90c1..fcba3c9e 100644
--- a/src/components/metrics/FilterTags.tsx
+++ b/src/components/metrics/FilterTags.tsx
@@ -7,13 +7,13 @@ import {
useMessages,
useFormat,
useFilters,
-} from 'components/hooks';
-import PopupForm from 'app/(main)/reports/[reportId]/PopupForm';
-import FieldFilterEditForm from 'app/(main)/reports/[reportId]/FieldFilterEditForm';
-import { OPERATOR_PREFIXES } from 'lib/constants';
-import { isSearchOperator, parseParameterValue } from 'lib/params';
+} from '@/components/hooks';
+import PopupForm from '@/app/(main)/reports/[reportId]/PopupForm';
+import FieldFilterEditForm from '@/app/(main)/reports/[reportId]/FieldFilterEditForm';
+import { OPERATOR_PREFIXES } from '@/lib/constants';
+import { isSearchOperator, parseParameterValue } from '@/lib/params';
import styles from './FilterTags.module.css';
-import WebsiteFilterButton from 'app/(main)/websites/[websiteId]/WebsiteFilterButton';
+import WebsiteFilterButton from '@/app/(main)/websites/[websiteId]/WebsiteFilterButton';
export function FilterTags({
websiteId,
diff --git a/src/components/metrics/HostsTable.tsx b/src/components/metrics/HostsTable.tsx
index 45147eac..e034b970 100644
--- a/src/components/metrics/HostsTable.tsx
+++ b/src/components/metrics/HostsTable.tsx
@@ -1,6 +1,6 @@
import MetricsTable, { MetricsTableProps } from './MetricsTable';
-import FilterLink from 'components/common/FilterLink';
-import { useMessages } from 'components/hooks';
+import FilterLink from '@/components/common/FilterLink';
+import { useMessages } from '@/components/hooks';
import { Flexbox } from 'react-basics';
export function HostsTable(props: MetricsTableProps) {
diff --git a/src/components/metrics/LanguagesTable.tsx b/src/components/metrics/LanguagesTable.tsx
index 24b62046..3ced249e 100644
--- a/src/components/metrics/LanguagesTable.tsx
+++ b/src/components/metrics/LanguagesTable.tsx
@@ -1,8 +1,8 @@
import MetricsTable, { MetricsTableProps } from './MetricsTable';
-import { percentFilter } from 'lib/filters';
-import { useLocale } from 'components/hooks';
-import { useMessages } from 'components/hooks';
-import { useFormat } from 'components/hooks';
+import { percentFilter } from '@/lib/filters';
+import { useLocale } from '@/components/hooks';
+import { useMessages } from '@/components/hooks';
+import { useFormat } from '@/components/hooks';
export function LanguagesTable({
onDataLoad,
diff --git a/src/components/metrics/ListTable.tsx b/src/components/metrics/ListTable.tsx
index 59ded491..6fbf390a 100644
--- a/src/components/metrics/ListTable.tsx
+++ b/src/components/metrics/ListTable.tsx
@@ -1,9 +1,9 @@
import { FixedSizeList } from 'react-window';
import { useSpring, animated, config } from '@react-spring/web';
import classNames from 'classnames';
-import Empty from 'components/common/Empty';
-import { formatLongNumber } from 'lib/format';
-import { useMessages } from 'components/hooks';
+import Empty from '@/components/common/Empty';
+import { formatLongNumber } from '@/lib/format';
+import { useMessages } from '@/components/hooks';
import styles from './ListTable.module.css';
import { ReactNode } from 'react';
diff --git a/src/components/metrics/MetricCard.tsx b/src/components/metrics/MetricCard.tsx
index 64f2a1b6..41766167 100644
--- a/src/components/metrics/MetricCard.tsx
+++ b/src/components/metrics/MetricCard.tsx
@@ -1,7 +1,7 @@
import classNames from 'classnames';
import { useSpring, animated } from '@react-spring/web';
-import { formatNumber } from 'lib/format';
-import ChangeLabel from 'components/metrics/ChangeLabel';
+import { formatNumber } from '@/lib/format';
+import ChangeLabel from '@/components/metrics/ChangeLabel';
import styles from './MetricCard.module.css';
export interface MetricCardProps {
diff --git a/src/components/metrics/MetricsBar.tsx b/src/components/metrics/MetricsBar.tsx
index 60a21706..6e9f22de 100644
--- a/src/components/metrics/MetricsBar.tsx
+++ b/src/components/metrics/MetricsBar.tsx
@@ -1,7 +1,7 @@
import { ReactNode } from 'react';
import { Loading, cloneChildren } from 'react-basics';
-import ErrorMessage from 'components/common/ErrorMessage';
-import { formatLongNumber } from 'lib/format';
+import ErrorMessage from '@/components/common/ErrorMessage';
+import { formatLongNumber } from '@/lib/format';
import styles from './MetricsBar.module.css';
export interface MetricsBarProps {
diff --git a/src/components/metrics/MetricsTable.tsx b/src/components/metrics/MetricsTable.tsx
index 4db599b9..33b457b5 100644
--- a/src/components/metrics/MetricsTable.tsx
+++ b/src/components/metrics/MetricsTable.tsx
@@ -1,18 +1,18 @@
import { ReactNode, useMemo, useState } from 'react';
import { Loading, Icon, Text, SearchField } from 'react-basics';
import classNames from 'classnames';
-import ErrorMessage from 'components/common/ErrorMessage';
-import LinkButton from 'components/common/LinkButton';
-import { DEFAULT_ANIMATION_DURATION } from 'lib/constants';
-import { percentFilter } from 'lib/filters';
+import ErrorMessage from '@/components/common/ErrorMessage';
+import LinkButton from '@/components/common/LinkButton';
+import { DEFAULT_ANIMATION_DURATION } from '@/lib/constants';
+import { percentFilter } from '@/lib/filters';
import {
useNavigation,
useWebsiteMetrics,
useMessages,
useLocale,
useFormat,
-} from 'components/hooks';
-import Icons from 'components/icons';
+} from '@/components/hooks';
+import Icons from '@/components/icons';
import ListTable, { ListTableProps } from './ListTable';
import styles from './MetricsTable.module.css';
diff --git a/src/components/metrics/OSTable.tsx b/src/components/metrics/OSTable.tsx
index 6989504c..37b79549 100644
--- a/src/components/metrics/OSTable.tsx
+++ b/src/components/metrics/OSTable.tsx
@@ -1,7 +1,7 @@
import MetricsTable, { MetricsTableProps } from './MetricsTable';
-import FilterLink from 'components/common/FilterLink';
-import { useMessages, useFormat } from 'components/hooks';
-import TypeIcon from 'components/common/TypeIcon';
+import FilterLink from '@/components/common/FilterLink';
+import { useMessages, useFormat } from '@/components/hooks';
+import TypeIcon from '@/components/common/TypeIcon';
export function OSTable(props: MetricsTableProps) {
const { formatMessage, labels } = useMessages();
diff --git a/src/components/metrics/PagesTable.tsx b/src/components/metrics/PagesTable.tsx
index b2d8ca9c..8163b3d9 100644
--- a/src/components/metrics/PagesTable.tsx
+++ b/src/components/metrics/PagesTable.tsx
@@ -1,8 +1,8 @@
-import { WebsiteContext } from 'app/(main)/websites/[websiteId]/WebsiteProvider';
-import FilterButtons from 'components/common/FilterButtons';
-import FilterLink from 'components/common/FilterLink';
-import { useMessages, useNavigation } from 'components/hooks';
-import { emptyFilter } from 'lib/filters';
+import { WebsiteContext } from '@/app/(main)/websites/[websiteId]/WebsiteProvider';
+import FilterButtons from '@/components/common/FilterButtons';
+import FilterLink from '@/components/common/FilterLink';
+import { useMessages, useNavigation } from '@/components/hooks';
+import { emptyFilter } from '@/lib/filters';
import { useContext } from 'react';
import MetricsTable, { MetricsTableProps } from './MetricsTable';
diff --git a/src/components/metrics/PageviewsChart.tsx b/src/components/metrics/PageviewsChart.tsx
index 6274defc..6fa3285f 100644
--- a/src/components/metrics/PageviewsChart.tsx
+++ b/src/components/metrics/PageviewsChart.tsx
@@ -1,7 +1,7 @@
import { useMemo } from 'react';
-import BarChart, { BarChartProps } from 'components/charts/BarChart';
-import { useLocale, useTheme, useMessages } from 'components/hooks';
-import { renderDateLabels } from 'lib/charts';
+import BarChart, { BarChartProps } from '@/components/charts/BarChart';
+import { useLocale, useTheme, useMessages } from '@/components/hooks';
+import { renderDateLabels } from '@/lib/charts';
export interface PagepageviewsChartProps extends BarChartProps {
data: {
diff --git a/src/components/metrics/QueryParametersTable.tsx b/src/components/metrics/QueryParametersTable.tsx
index 4ee15ae5..26f01faf 100644
--- a/src/components/metrics/QueryParametersTable.tsx
+++ b/src/components/metrics/QueryParametersTable.tsx
@@ -1,9 +1,9 @@
import { useState } from 'react';
-import FilterButtons from 'components/common/FilterButtons';
-import { emptyFilter, paramFilter } from 'lib/filters';
-import { FILTER_RAW, FILTER_COMBINED } from 'lib/constants';
+import FilterButtons from '@/components/common/FilterButtons';
+import { emptyFilter, paramFilter } from '@/lib/filters';
+import { FILTER_RAW, FILTER_COMBINED } from '@/lib/constants';
import MetricsTable, { MetricsTableProps } from './MetricsTable';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
import styles from './QueryParametersTable.module.css';
const filters = {
diff --git a/src/components/metrics/RealtimeChart.tsx b/src/components/metrics/RealtimeChart.tsx
index b2819f9c..f5697caa 100644
--- a/src/components/metrics/RealtimeChart.tsx
+++ b/src/components/metrics/RealtimeChart.tsx
@@ -1,8 +1,8 @@
import { useMemo, useRef } from 'react';
import { startOfMinute, subMinutes, isBefore } from 'date-fns';
import PageviewsChart from './PageviewsChart';
-import { DEFAULT_ANIMATION_DURATION, REALTIME_RANGE } from 'lib/constants';
-import { RealtimeData } from 'lib/types';
+import { DEFAULT_ANIMATION_DURATION, REALTIME_RANGE } from '@/lib/constants';
+import { RealtimeData } from '@/lib/types';
export interface RealtimeChartProps {
data: RealtimeData;
diff --git a/src/components/metrics/ReferrersTable.tsx b/src/components/metrics/ReferrersTable.tsx
index d83c4d12..9e326994 100644
--- a/src/components/metrics/ReferrersTable.tsx
+++ b/src/components/metrics/ReferrersTable.tsx
@@ -1,6 +1,6 @@
-import FilterLink from 'components/common/FilterLink';
-import Favicon from 'components/common/Favicon';
-import { useMessages } from 'components/hooks';
+import FilterLink from '@/components/common/FilterLink';
+import Favicon from '@/components/common/Favicon';
+import { useMessages } from '@/components/hooks';
import MetricsTable, { MetricsTableProps } from './MetricsTable';
export function ReferrersTable(props: MetricsTableProps) {
diff --git a/src/components/metrics/RegionsTable.tsx b/src/components/metrics/RegionsTable.tsx
index 0c3a931f..0b7e3bdf 100644
--- a/src/components/metrics/RegionsTable.tsx
+++ b/src/components/metrics/RegionsTable.tsx
@@ -1,8 +1,8 @@
-import FilterLink from 'components/common/FilterLink';
-import { emptyFilter } from 'lib/filters';
-import { useMessages, useLocale, useRegionNames } from 'components/hooks';
+import FilterLink from '@/components/common/FilterLink';
+import { emptyFilter } from '@/lib/filters';
+import { useMessages, useLocale, useRegionNames } from '@/components/hooks';
import MetricsTable, { MetricsTableProps } from './MetricsTable';
-import TypeIcon from 'components/common/TypeIcon';
+import TypeIcon from '@/components/common/TypeIcon';
export function RegionsTable(props: MetricsTableProps) {
const { locale } = useLocale();
diff --git a/src/components/metrics/ScreenTable.tsx b/src/components/metrics/ScreenTable.tsx
index 51015fcb..c2a19caa 100644
--- a/src/components/metrics/ScreenTable.tsx
+++ b/src/components/metrics/ScreenTable.tsx
@@ -1,5 +1,5 @@
import MetricsTable, { MetricsTableProps } from './MetricsTable';
-import { useMessages } from 'components/hooks';
+import { useMessages } from '@/components/hooks';
export function ScreenTable(props: MetricsTableProps) {
const { formatMessage, labels } = useMessages();
diff --git a/src/components/metrics/TagsTable.tsx b/src/components/metrics/TagsTable.tsx
index a1130bb4..e915f873 100644
--- a/src/components/metrics/TagsTable.tsx
+++ b/src/components/metrics/TagsTable.tsx
@@ -1,6 +1,6 @@
import MetricsTable, { MetricsTableProps } from './MetricsTable';
-import FilterLink from 'components/common/FilterLink';
-import { useMessages } from 'components/hooks';
+import FilterLink from '@/components/common/FilterLink';
+import { useMessages } from '@/components/hooks';
import { Flexbox } from 'react-basics';
export function TagsTable(props: MetricsTableProps) {
diff --git a/src/components/metrics/WorldMap.tsx b/src/components/metrics/WorldMap.tsx
index 5dfc5f74..a377bfc9 100644
--- a/src/components/metrics/WorldMap.tsx
+++ b/src/components/metrics/WorldMap.tsx
@@ -2,14 +2,14 @@ import { useState, useMemo, HTMLAttributes } from 'react';
import { ComposableMap, Geographies, Geography, ZoomableGroup } from 'react-simple-maps';
import classNames from 'classnames';
import { colord } from 'colord';
-import HoverTooltip from 'components/common/HoverTooltip';
-import { ISO_COUNTRIES, MAP_FILE } from 'lib/constants';
-import { useDateRange, useTheme, useWebsiteMetrics } from 'components/hooks';
-import { useCountryNames } from 'components/hooks';
-import { useLocale } from 'components/hooks';
-import { useMessages } from 'components/hooks';
-import { formatLongNumber } from 'lib/format';
-import { percentFilter } from 'lib/filters';
+import HoverTooltip from '@/components/common/HoverTooltip';
+import { ISO_COUNTRIES, MAP_FILE } from '@/lib/constants';
+import { useDateRange, useTheme, useWebsiteMetrics } from '@/components/hooks';
+import { useCountryNames } from '@/components/hooks';
+import { useLocale } from '@/components/hooks';
+import { useMessages } from '@/components/hooks';
+import { formatLongNumber } from '@/lib/format';
+import { percentFilter } from '@/lib/filters';
import styles from './WorldMap.module.css';
export function WorldMap({
diff --git a/src/index.ts b/src/index.ts
index 553a44b5..e7b0e6c6 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,64 +1,64 @@
-export * from 'components/hooks';
+export * from '@/components/hooks';
-export * from 'app/(main)/teams/[teamId]/settings/members/TeamMemberEditButton';
-export * from 'app/(main)/teams/[teamId]/settings/members/TeamMemberEditForm';
-export * from 'app/(main)/teams/[teamId]/settings/members/TeamMemberRemoveButton';
-export * from 'app/(main)/teams/[teamId]/settings/members/TeamMembersDataTable';
-export * from 'app/(main)/teams/[teamId]/settings/members/TeamMembersTable';
+export * from '@/app/(main)/teams/[teamId]/settings/members/TeamMemberEditButton';
+export * from '@/app/(main)/teams/[teamId]/settings/members/TeamMemberEditForm';
+export * from '@/app/(main)/teams/[teamId]/settings/members/TeamMemberRemoveButton';
+export * from '@/app/(main)/teams/[teamId]/settings/members/TeamMembersDataTable';
+export * from '@/app/(main)/teams/[teamId]/settings/members/TeamMembersTable';
-export * from 'app/(main)/teams/[teamId]/settings/team/TeamDeleteForm';
-export * from 'app/(main)/teams/[teamId]/settings/team/TeamDetails';
-export * from 'app/(main)/teams/[teamId]/settings/team/TeamEditForm';
-export * from 'app/(main)/teams/[teamId]/settings/team/TeamManage';
+export * from '@/app/(main)/teams/[teamId]/settings/team/TeamDeleteForm';
+export * from '@/app/(main)/teams/[teamId]/settings/team/TeamDetails';
+export * from '@/app/(main)/teams/[teamId]/settings/team/TeamEditForm';
+export * from '@/app/(main)/teams/[teamId]/settings/team/TeamManage';
-export * from 'app/(main)/teams/[teamId]/settings/websites/TeamWebsiteRemoveButton';
-export * from 'app/(main)/teams/[teamId]/settings/websites/TeamWebsitesDataTable';
-export * from 'app/(main)/teams/[teamId]/settings/websites/TeamWebsitesTable';
+export * from '@/app/(main)/teams/[teamId]/settings/websites/TeamWebsiteRemoveButton';
+export * from '@/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesDataTable';
+export * from '@/app/(main)/teams/[teamId]/settings/websites/TeamWebsitesTable';
-export * from 'app/(main)/settings/teams/TeamAddForm';
-export * from 'app/(main)/settings/teams/TeamJoinForm';
-export * from 'app/(main)/settings/teams/TeamLeaveButton';
-export * from 'app/(main)/settings/teams/TeamLeaveForm';
-export * from 'app/(main)/settings/teams/TeamsAddButton';
-export * from 'app/(main)/settings/teams/TeamsDataTable';
-export * from 'app/(main)/settings/teams/TeamsHeader';
-export * from 'app/(main)/settings/teams/TeamsJoinButton';
-export * from 'app/(main)/settings/teams/TeamsTable';
-export * from 'app/(main)/settings/teams/WebsiteTags';
+export * from '@/app/(main)/settings/teams/TeamAddForm';
+export * from '@/app/(main)/settings/teams/TeamJoinForm';
+export * from '@/app/(main)/settings/teams/TeamLeaveButton';
+export * from '@/app/(main)/settings/teams/TeamLeaveForm';
+export * from '@/app/(main)/settings/teams/TeamsAddButton';
+export * from '@/app/(main)/settings/teams/TeamsDataTable';
+export * from '@/app/(main)/settings/teams/TeamsHeader';
+export * from '@/app/(main)/settings/teams/TeamsJoinButton';
+export * from '@/app/(main)/settings/teams/TeamsTable';
+export * from '@/app/(main)/settings/teams/WebsiteTags';
-export * from 'app/(main)/settings/websites/[websiteId]/ShareUrl';
-export * from 'app/(main)/settings/websites/[websiteId]/TrackingCode';
-export * from 'app/(main)/settings/websites/[websiteId]/WebsiteData';
-export * from 'app/(main)/settings/websites/[websiteId]/WebsiteDeleteForm';
-export * from 'app/(main)/settings/websites/[websiteId]/WebsiteEditForm';
-export * from 'app/(main)/settings/websites/[websiteId]/WebsiteResetForm';
-export * from 'app/(main)/settings/websites/[websiteId]/WebsiteSettings';
+export * from '@/app/(main)/settings/websites/[websiteId]/ShareUrl';
+export * from '@/app/(main)/settings/websites/[websiteId]/TrackingCode';
+export * from '@/app/(main)/settings/websites/[websiteId]/WebsiteData';
+export * from '@/app/(main)/settings/websites/[websiteId]/WebsiteDeleteForm';
+export * from '@/app/(main)/settings/websites/[websiteId]/WebsiteEditForm';
+export * from '@/app/(main)/settings/websites/[websiteId]/WebsiteResetForm';
+export * from '@/app/(main)/settings/websites/[websiteId]/WebsiteSettings';
-export * from 'app/(main)/settings/websites/WebsiteAddButton';
-export * from 'app/(main)/settings/websites/WebsiteAddForm';
-export * from 'app/(main)/settings/websites/WebsitesDataTable';
-export * from 'app/(main)/settings/websites/WebsitesHeader';
-export * from 'app/(main)/settings/websites/WebsitesTable';
+export * from '@/app/(main)/settings/websites/WebsiteAddButton';
+export * from '@/app/(main)/settings/websites/WebsiteAddForm';
+export * from '@/app/(main)/settings/websites/WebsitesDataTable';
+export * from '@/app/(main)/settings/websites/WebsitesHeader';
+export * from '@/app/(main)/settings/websites/WebsitesTable';
-export * from 'app/(main)/teams/[teamId]/TeamProvider';
-export * from 'app/(main)/websites/[websiteId]/WebsiteProvider';
+export * from '@/app/(main)/teams/[teamId]/TeamProvider';
+export * from '@/app/(main)/websites/[websiteId]/WebsiteProvider';
-export * from 'components/common/ConfirmationForm';
-export * from 'components/common/DataTable';
-export * from 'components/common/Empty';
-export * from 'components/common/ErrorBoundary';
-export * from 'components/common/ErrorMessage';
-export * from 'components/common/Favicon';
-export * from 'components/common/FilterButtons';
-export * from 'components/common/FilterLink';
-export * from 'components/common/HamburgerButton';
-export * from 'components/common/HoverTooltip';
-export * from 'components/common/LinkButton';
-export * from 'components/common/MobileMenu';
-export * from 'components/common/Pager';
-export * from 'components/common/TypeConfirmationForm';
+export * from '@/components/common/ConfirmationForm';
+export * from '@/components/common/DataTable';
+export * from '@/components/common/Empty';
+export * from '@/components/common/ErrorBoundary';
+export * from '@/components/common/ErrorMessage';
+export * from '@/components/common/Favicon';
+export * from '@/components/common/FilterButtons';
+export * from '@/components/common/FilterLink';
+export * from '@/components/common/HamburgerButton';
+export * from '@/components/common/HoverTooltip';
+export * from '@/components/common/LinkButton';
+export * from '@/components/common/MobileMenu';
+export * from '@/components/common/Pager';
+export * from '@/components/common/TypeConfirmationForm';
-export * from 'components/input/TeamsButton';
-export * from 'components/input/ThemeButton';
+export * from '@/components/input/TeamsButton';
+export * from '@/components/input/ThemeButton';
-export { ROLES } from 'lib/constants';
+export { ROLES } from '@/lib/constants';
diff --git a/src/lib/auth.ts b/src/lib/auth.ts
index 9eb57809..4ce90706 100644
--- a/src/lib/auth.ts
+++ b/src/lib/auth.ts
@@ -2,11 +2,11 @@ import bcrypt from 'bcryptjs';
import { Report } from '@prisma/client';
import { getClient, redisEnabled } from '@umami/redis-client';
import debug from 'debug';
-import { PERMISSIONS, ROLE_PERMISSIONS, ROLES, SHARE_TOKEN_HEADER } from 'lib/constants';
-import { secret, getRandomChars } from 'lib/crypto';
-import { createSecureToken, parseSecureToken, parseToken } from 'lib/jwt';
-import { ensureArray } from 'lib/utils';
-import { getTeamUser, getUser, getWebsite } from 'queries';
+import { PERMISSIONS, ROLE_PERMISSIONS, ROLES, SHARE_TOKEN_HEADER } from '@/lib/constants';
+import { secret, getRandomChars } from '@/lib/crypto';
+import { createSecureToken, parseSecureToken, parseToken } from '@/lib/jwt';
+import { ensureArray } from '@/lib/utils';
+import { getTeamUser, getUser, getWebsite } from '@/queries';
import { Auth } from './types';
const log = debug('umami:auth');
diff --git a/src/lib/charts.ts b/src/lib/charts.ts
index 8939b3c1..d805eefe 100644
--- a/src/lib/charts.ts
+++ b/src/lib/charts.ts
@@ -1,5 +1,5 @@
-import { formatDate } from 'lib/date';
-import { formatLongNumber } from 'lib/format';
+import { formatDate } from '@/lib/date';
+import { formatLongNumber } from '@/lib/format';
export function renderNumberLabels(label: string) {
return +label > 1000 ? formatLongNumber(+label) : label;
diff --git a/src/lib/clickhouse.ts b/src/lib/clickhouse.ts
index 5f0248b4..13abde9d 100644
--- a/src/lib/clickhouse.ts
+++ b/src/lib/clickhouse.ts
@@ -1,8 +1,8 @@
import { ClickHouseClient, createClient } from '@clickhouse/client';
import { formatInTimeZone } from 'date-fns-tz';
import debug from 'debug';
-import { CLICKHOUSE } from 'lib/db';
-import { getWebsite } from 'queries/index';
+import { CLICKHOUSE } from '@/lib/db';
+import { getWebsite } from '@/queries/index';
import { DEFAULT_PAGE_SIZE, OPERATORS } from './constants';
import { maxDate } from './date';
import { filtersToArray } from './params';
diff --git a/src/lib/client.ts b/src/lib/client.ts
index b1e74021..795e7780 100644
--- a/src/lib/client.ts
+++ b/src/lib/client.ts
@@ -1,4 +1,4 @@
-import { getItem, setItem, removeItem } from 'lib/storage';
+import { getItem, setItem, removeItem } from '@/lib/storage';
import { AUTH_TOKEN } from './constants';
export function getClientAuthToken() {
diff --git a/src/lib/date.ts b/src/lib/date.ts
index b7755ffc..96135845 100644
--- a/src/lib/date.ts
+++ b/src/lib/date.ts
@@ -35,8 +35,8 @@ import {
endOfMinute,
isSameDay,
} from 'date-fns';
-import { getDateLocale } from 'lib/lang';
-import { DateRange } from 'lib/types';
+import { getDateLocale } from '@/lib/lang';
+import { DateRange } from '@/lib/types';
export const TIME_UNIT = {
minute: 'minute',
diff --git a/src/lib/fetch.ts b/src/lib/fetch.ts
index 9d947a13..e5068b29 100644
--- a/src/lib/fetch.ts
+++ b/src/lib/fetch.ts
@@ -1,4 +1,4 @@
-import { buildUrl } from 'lib/url';
+import { buildUrl } from '@/lib/url';
export async function request(method: string, url: string, body?: string, headers: object = {}) {
const res = await fetch(url, {
diff --git a/src/lib/jwt.ts b/src/lib/jwt.ts
index 8b581be6..470c48ff 100644
--- a/src/lib/jwt.ts
+++ b/src/lib/jwt.ts
@@ -1,5 +1,5 @@
import jwt from 'jsonwebtoken';
-import { decrypt, encrypt } from 'lib/crypto';
+import { decrypt, encrypt } from '@/lib/crypto';
export function createToken(payload: any, secret: any, options?: any) {
return jwt.sign(payload, secret, options);
diff --git a/src/lib/kafka.ts b/src/lib/kafka.ts
index 2e875c59..e7f06910 100644
--- a/src/lib/kafka.ts
+++ b/src/lib/kafka.ts
@@ -1,7 +1,7 @@
import { serializeError } from 'serialize-error';
import debug from 'debug';
import { Kafka, Producer, RecordMetadata, SASLOptions, logLevel } from 'kafkajs';
-import { KAFKA, KAFKA_PRODUCER } from 'lib/db';
+import { KAFKA, KAFKA_PRODUCER } from '@/lib/db';
import * as tls from 'tls';
const log = debug('umami:kafka');
diff --git a/src/lib/load.ts b/src/lib/load.ts
index 0cb09da4..2b7f7de4 100644
--- a/src/lib/load.ts
+++ b/src/lib/load.ts
@@ -1,6 +1,6 @@
import { Website, Session } from '@prisma/client';
import { getClient, redisEnabled } from '@umami/redis-client';
-import { getWebsiteSession, getWebsite } from 'queries';
+import { getWebsiteSession, getWebsite } from '@/queries';
export async function fetchWebsite(websiteId: string): Promise {
let website = null;
diff --git a/src/lib/params.ts b/src/lib/params.ts
index ef4568ba..8e631ed8 100644
--- a/src/lib/params.ts
+++ b/src/lib/params.ts
@@ -1,5 +1,5 @@
-import { FILTER_COLUMNS, OPERATOR_PREFIXES, OPERATORS } from 'lib/constants';
-import { QueryFilters, QueryOptions } from 'lib/types';
+import { FILTER_COLUMNS, OPERATOR_PREFIXES, OPERATORS } from '@/lib/constants';
+import { QueryFilters, QueryOptions } from '@/lib/types';
export function parseParameterValue(param: any) {
if (typeof param === 'string') {
diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts
index deee67f7..6c0237d0 100644
--- a/src/lib/prisma.ts
+++ b/src/lib/prisma.ts
@@ -1,7 +1,7 @@
import debug from 'debug';
import prisma from '@umami/prisma-client';
import { formatInTimeZone } from 'date-fns-tz';
-import { MYSQL, POSTGRESQL, getDatabaseType } from 'lib/db';
+import { MYSQL, POSTGRESQL, getDatabaseType } from '@/lib/db';
import { SESSION_COLUMNS, OPERATORS, DEFAULT_PAGE_SIZE } from './constants';
import { fetchWebsite } from './load';
import { maxDate } from './date';
diff --git a/src/lib/request.ts b/src/lib/request.ts
index 2278d838..9d32f89b 100644
--- a/src/lib/request.ts
+++ b/src/lib/request.ts
@@ -1,9 +1,9 @@
import { ZodObject } from 'zod';
-import { FILTER_COLUMNS } from 'lib/constants';
-import { badRequest, unauthorized } from 'lib/response';
-import { getAllowedUnits, getMinimumUnit } from 'lib/date';
-import { checkAuth } from 'lib/auth';
-import { getWebsiteDateRange } from 'queries';
+import { FILTER_COLUMNS } from '@/lib/constants';
+import { badRequest, unauthorized } from '@/lib/response';
+import { getAllowedUnits, getMinimumUnit } from '@/lib/date';
+import { checkAuth } from '@/lib/auth';
+import { getWebsiteDateRange } from '@/queries';
export async function getJsonBody(request: Request) {
try {
diff --git a/src/lib/schema.ts b/src/lib/schema.ts
index 21da4f42..84662f04 100644
--- a/src/lib/schema.ts
+++ b/src/lib/schema.ts
@@ -1,5 +1,5 @@
import { z } from 'zod';
-import { isValidTimezone } from 'lib/date';
+import { isValidTimezone } from '@/lib/date';
import { UNIT_TYPES } from './constants';
export const filterParams = {
diff --git a/src/queries/analytics/events/getEventDataEvents.ts b/src/queries/analytics/events/getEventDataEvents.ts
index 0b19c5be..432c93a2 100644
--- a/src/queries/analytics/events/getEventDataEvents.ts
+++ b/src/queries/analytics/events/getEventDataEvents.ts
@@ -1,7 +1,7 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import { QueryFilters, WebsiteEventData } from 'lib/types';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import { QueryFilters, WebsiteEventData } from '@/lib/types';
export async function getEventDataEvents(
...args: [websiteId: string, filters: QueryFilters]
diff --git a/src/queries/analytics/events/getEventDataFields.ts b/src/queries/analytics/events/getEventDataFields.ts
index 05fee072..33b4e0f5 100644
--- a/src/queries/analytics/events/getEventDataFields.ts
+++ b/src/queries/analytics/events/getEventDataFields.ts
@@ -1,7 +1,7 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import { QueryFilters, WebsiteEventData } from 'lib/types';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import { QueryFilters, WebsiteEventData } from '@/lib/types';
export async function getEventDataFields(
...args: [websiteId: string, filters: QueryFilters]
diff --git a/src/queries/analytics/events/getEventDataProperties.ts b/src/queries/analytics/events/getEventDataProperties.ts
index e2cf0828..73fb8fec 100644
--- a/src/queries/analytics/events/getEventDataProperties.ts
+++ b/src/queries/analytics/events/getEventDataProperties.ts
@@ -1,7 +1,7 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import { QueryFilters, WebsiteEventData } from 'lib/types';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import { QueryFilters, WebsiteEventData } from '@/lib/types';
export async function getEventDataProperties(
...args: [websiteId: string, filters: QueryFilters & { propertyName?: string }]
diff --git a/src/queries/analytics/events/getEventDataStats.ts b/src/queries/analytics/events/getEventDataStats.ts
index adeeda46..98347960 100644
--- a/src/queries/analytics/events/getEventDataStats.ts
+++ b/src/queries/analytics/events/getEventDataStats.ts
@@ -1,7 +1,7 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import { QueryFilters } from 'lib/types';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import { QueryFilters } from '@/lib/types';
export async function getEventDataStats(
...args: [websiteId: string, filters: QueryFilters]
diff --git a/src/queries/analytics/events/getEventDataUsage.ts b/src/queries/analytics/events/getEventDataUsage.ts
index 1d146c9c..1f2bf833 100644
--- a/src/queries/analytics/events/getEventDataUsage.ts
+++ b/src/queries/analytics/events/getEventDataUsage.ts
@@ -1,5 +1,5 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from 'lib/db';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from '@/lib/db';
export function getEventDataUsage(...args: [websiteIds: string[], startDate: Date, endDate: Date]) {
return runQuery({
diff --git a/src/queries/analytics/events/getEventDataValues.ts b/src/queries/analytics/events/getEventDataValues.ts
index 63101824..c8d63362 100644
--- a/src/queries/analytics/events/getEventDataValues.ts
+++ b/src/queries/analytics/events/getEventDataValues.ts
@@ -1,7 +1,7 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import { QueryFilters, WebsiteEventData } from 'lib/types';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import { QueryFilters, WebsiteEventData } from '@/lib/types';
export async function getEventDataValues(
...args: [
diff --git a/src/queries/analytics/events/getEventMetrics.ts b/src/queries/analytics/events/getEventMetrics.ts
index 504cea11..d06789f4 100644
--- a/src/queries/analytics/events/getEventMetrics.ts
+++ b/src/queries/analytics/events/getEventMetrics.ts
@@ -1,8 +1,8 @@
-import clickhouse from 'lib/clickhouse';
-import { EVENT_TYPE } from 'lib/constants';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
-import { QueryFilters, WebsiteEventMetric } from 'lib/types';
+import clickhouse from '@/lib/clickhouse';
+import { EVENT_TYPE } from '@/lib/constants';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
+import { QueryFilters, WebsiteEventMetric } from '@/lib/types';
export async function getEventMetrics(
...args: [websiteId: string, filters: QueryFilters]
diff --git a/src/queries/analytics/events/getEventUsage.ts b/src/queries/analytics/events/getEventUsage.ts
index 8baefe06..0e1806d6 100644
--- a/src/queries/analytics/events/getEventUsage.ts
+++ b/src/queries/analytics/events/getEventUsage.ts
@@ -1,5 +1,5 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from 'lib/db';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from '@/lib/db';
export function getEventUsage(...args: [websiteIds: string[], startDate: Date, endDate: Date]) {
return runQuery({
diff --git a/src/queries/analytics/events/getWebsiteEvents.ts b/src/queries/analytics/events/getWebsiteEvents.ts
index 21e6270c..5559d5bd 100644
--- a/src/queries/analytics/events/getWebsiteEvents.ts
+++ b/src/queries/analytics/events/getWebsiteEvents.ts
@@ -1,7 +1,7 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, getDatabaseType, POSTGRESQL, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
-import { PageParams, QueryFilters } from 'lib/types';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, getDatabaseType, POSTGRESQL, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
+import { PageParams, QueryFilters } from '@/lib/types';
export function getWebsiteEvents(
...args: [websiteId: string, filters: QueryFilters, pageParams?: PageParams]
diff --git a/src/queries/analytics/events/saveEvent.ts b/src/queries/analytics/events/saveEvent.ts
index 2424186a..65ee1175 100644
--- a/src/queries/analytics/events/saveEvent.ts
+++ b/src/queries/analytics/events/saveEvent.ts
@@ -1,9 +1,9 @@
-import { EVENT_NAME_LENGTH, URL_LENGTH, EVENT_TYPE, PAGE_TITLE_LENGTH } from 'lib/constants';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import clickhouse from 'lib/clickhouse';
-import kafka from 'lib/kafka';
-import prisma from 'lib/prisma';
-import { uuid } from 'lib/crypto';
+import { EVENT_NAME_LENGTH, URL_LENGTH, EVENT_TYPE, PAGE_TITLE_LENGTH } from '@/lib/constants';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import clickhouse from '@/lib/clickhouse';
+import kafka from '@/lib/kafka';
+import prisma from '@/lib/prisma';
+import { uuid } from '@/lib/crypto';
import { saveEventData } from './saveEventData';
export async function saveEvent(args: {
diff --git a/src/queries/analytics/events/saveEventData.ts b/src/queries/analytics/events/saveEventData.ts
index cb75a91b..7c158da4 100644
--- a/src/queries/analytics/events/saveEventData.ts
+++ b/src/queries/analytics/events/saveEventData.ts
@@ -1,12 +1,12 @@
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, getStringValue } from 'lib/data';
-import clickhouse from 'lib/clickhouse';
-import kafka from 'lib/kafka';
-import prisma from 'lib/prisma';
-import { DynamicData } from 'lib/types';
+import { DATA_TYPE } from '@/lib/constants';
+import { uuid } from '@/lib/crypto';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import { flattenJSON, getStringValue } from '@/lib/data';
+import clickhouse from '@/lib/clickhouse';
+import kafka from '@/lib/kafka';
+import prisma from '@/lib/prisma';
+import { DynamicData } from '@/lib/types';
export async function saveEventData(data: {
websiteId: string;
diff --git a/src/queries/analytics/getActiveVisitors.ts b/src/queries/analytics/getActiveVisitors.ts
index d5607e27..e0225f3a 100644
--- a/src/queries/analytics/getActiveVisitors.ts
+++ b/src/queries/analytics/getActiveVisitors.ts
@@ -1,7 +1,7 @@
import { subMinutes } from 'date-fns';
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { runQuery, CLICKHOUSE, PRISMA } from '@/lib/db';
export async function getActiveVisitors(...args: [websiteId: string]) {
return runQuery({
diff --git a/src/queries/analytics/getRealtimeActivity.ts b/src/queries/analytics/getRealtimeActivity.ts
index e30ce78f..10828885 100644
--- a/src/queries/analytics/getRealtimeActivity.ts
+++ b/src/queries/analytics/getRealtimeActivity.ts
@@ -1,7 +1,7 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
-import { QueryFilters } from 'lib/types';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { runQuery, CLICKHOUSE, PRISMA } from '@/lib/db';
+import { QueryFilters } from '@/lib/types';
export async function getRealtimeActivity(...args: [websiteId: string, filters: QueryFilters]) {
return runQuery({
diff --git a/src/queries/analytics/getRealtimeData.ts b/src/queries/analytics/getRealtimeData.ts
index 1af63219..e07dfc31 100644
--- a/src/queries/analytics/getRealtimeData.ts
+++ b/src/queries/analytics/getRealtimeData.ts
@@ -1,4 +1,4 @@
-import { getPageviewStats, getRealtimeActivity, getSessionStats } from 'queries/index';
+import { getPageviewStats, getRealtimeActivity, getSessionStats } from '@/queries/index';
function increment(data: object, key: string) {
if (key) {
diff --git a/src/queries/analytics/getValues.ts b/src/queries/analytics/getValues.ts
index f98cca3a..2d1286f3 100644
--- a/src/queries/analytics/getValues.ts
+++ b/src/queries/analytics/getValues.ts
@@ -1,6 +1,6 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { runQuery, CLICKHOUSE, PRISMA } from '@/lib/db';
export async function getValues(
...args: [websiteId: string, column: string, startDate: Date, endDate: Date, search: string]
diff --git a/src/queries/analytics/getWebsiteDateRange.ts b/src/queries/analytics/getWebsiteDateRange.ts
index ef07712e..953fa5eb 100644
--- a/src/queries/analytics/getWebsiteDateRange.ts
+++ b/src/queries/analytics/getWebsiteDateRange.ts
@@ -1,7 +1,7 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
-import { DEFAULT_RESET_DATE } from 'lib/constants';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { runQuery, CLICKHOUSE, PRISMA } from '@/lib/db';
+import { DEFAULT_RESET_DATE } from '@/lib/constants';
export async function getWebsiteDateRange(...args: [websiteId: string]) {
return runQuery({
diff --git a/src/queries/analytics/getWebsiteStats.ts b/src/queries/analytics/getWebsiteStats.ts
index 061d487e..80f1d578 100644
--- a/src/queries/analytics/getWebsiteStats.ts
+++ b/src/queries/analytics/getWebsiteStats.ts
@@ -1,9 +1,9 @@
-import clickhouse from 'lib/clickhouse';
-import { EVENT_TYPE } from 'lib/constants';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
-import { QueryFilters } from 'lib/types';
-import { EVENT_COLUMNS } from 'lib/constants';
+import clickhouse from '@/lib/clickhouse';
+import { EVENT_TYPE } from '@/lib/constants';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
+import { QueryFilters } from '@/lib/types';
+import { EVENT_COLUMNS } from '@/lib/constants';
export async function getWebsiteStats(
...args: [websiteId: string, filters: QueryFilters]
diff --git a/src/queries/analytics/pageviews/getPageviewMetrics.ts b/src/queries/analytics/pageviews/getPageviewMetrics.ts
index b356708e..f6041929 100644
--- a/src/queries/analytics/pageviews/getPageviewMetrics.ts
+++ b/src/queries/analytics/pageviews/getPageviewMetrics.ts
@@ -1,8 +1,8 @@
-import clickhouse from 'lib/clickhouse';
-import { EVENT_COLUMNS, EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from 'lib/constants';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
-import { QueryFilters } from 'lib/types';
+import clickhouse from '@/lib/clickhouse';
+import { EVENT_COLUMNS, EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
+import { QueryFilters } from '@/lib/types';
export async function getPageviewMetrics(
...args: [
diff --git a/src/queries/analytics/pageviews/getPageviewStats.ts b/src/queries/analytics/pageviews/getPageviewStats.ts
index 48b82000..f5ace52c 100644
--- a/src/queries/analytics/pageviews/getPageviewStats.ts
+++ b/src/queries/analytics/pageviews/getPageviewStats.ts
@@ -1,8 +1,8 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
-import { EVENT_COLUMNS, EVENT_TYPE } from 'lib/constants';
-import { QueryFilters } from 'lib/types';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
+import { EVENT_COLUMNS, EVENT_TYPE } from '@/lib/constants';
+import { QueryFilters } from '@/lib/types';
export async function getPageviewStats(...args: [websiteId: string, filters: QueryFilters]) {
return runQuery({
diff --git a/src/queries/analytics/reports/getFunnel.ts b/src/queries/analytics/reports/getFunnel.ts
index 3a81157f..70b51a9d 100644
--- a/src/queries/analytics/reports/getFunnel.ts
+++ b/src/queries/analytics/reports/getFunnel.ts
@@ -1,6 +1,6 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
const formatResults = (steps: { type: string; value: string }[]) => (results: unknown) => {
return steps.map((step: { type: string; value: string }, i: number) => {
diff --git a/src/queries/analytics/reports/getGoals.ts b/src/queries/analytics/reports/getGoals.ts
index 2bb29d8e..eda76050 100644
--- a/src/queries/analytics/reports/getGoals.ts
+++ b/src/queries/analytics/reports/getGoals.ts
@@ -1,6 +1,6 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
export async function getGoals(
...args: [
diff --git a/src/queries/analytics/reports/getInsights.ts b/src/queries/analytics/reports/getInsights.ts
index 8e6e3289..7178072e 100644
--- a/src/queries/analytics/reports/getInsights.ts
+++ b/src/queries/analytics/reports/getInsights.ts
@@ -1,8 +1,8 @@
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from 'lib/constants';
-import { QueryFilters } from 'lib/types';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants';
+import { QueryFilters } from '@/lib/types';
export async function getInsights(
...args: [websiteId: string, fields: { name: string; type?: string }[], filters: QueryFilters]
diff --git a/src/queries/analytics/reports/getJourney.ts b/src/queries/analytics/reports/getJourney.ts
index eec500aa..4c43cc03 100644
--- a/src/queries/analytics/reports/getJourney.ts
+++ b/src/queries/analytics/reports/getJourney.ts
@@ -1,6 +1,6 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
interface JourneyResult {
e1: string;
diff --git a/src/queries/analytics/reports/getRetention.ts b/src/queries/analytics/reports/getRetention.ts
index d69a77d7..23854b60 100644
--- a/src/queries/analytics/reports/getRetention.ts
+++ b/src/queries/analytics/reports/getRetention.ts
@@ -1,6 +1,6 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
export async function getRetention(
...args: [
diff --git a/src/queries/analytics/reports/getRevenue.ts b/src/queries/analytics/reports/getRevenue.ts
index a2803e85..c9c7b74a 100644
--- a/src/queries/analytics/reports/getRevenue.ts
+++ b/src/queries/analytics/reports/getRevenue.ts
@@ -1,6 +1,6 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, getDatabaseType, POSTGRESQL, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, getDatabaseType, POSTGRESQL, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
export async function getRevenue(
...args: [
diff --git a/src/queries/analytics/reports/getRevenueValues.ts b/src/queries/analytics/reports/getRevenueValues.ts
index 4dcc4a22..a46bf0bf 100644
--- a/src/queries/analytics/reports/getRevenueValues.ts
+++ b/src/queries/analytics/reports/getRevenueValues.ts
@@ -1,6 +1,6 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, CLICKHOUSE, PRISMA, getDatabaseType, POSTGRESQL } from 'lib/db';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { runQuery, CLICKHOUSE, PRISMA, getDatabaseType, POSTGRESQL } from '@/lib/db';
export async function getRevenueValues(
...args: [
diff --git a/src/queries/analytics/reports/getUTM.ts b/src/queries/analytics/reports/getUTM.ts
index 0a7ec5f1..5463815b 100644
--- a/src/queries/analytics/reports/getUTM.ts
+++ b/src/queries/analytics/reports/getUTM.ts
@@ -1,6 +1,6 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
export async function getUTM(
...args: [
diff --git a/src/queries/analytics/sessions/createSession.ts b/src/queries/analytics/sessions/createSession.ts
index 7d614499..7605cffc 100644
--- a/src/queries/analytics/sessions/createSession.ts
+++ b/src/queries/analytics/sessions/createSession.ts
@@ -1,5 +1,5 @@
import { Prisma } from '@prisma/client';
-import prisma from 'lib/prisma';
+import prisma from '@/lib/prisma';
export async function createSession(data: Prisma.SessionCreateInput) {
const {
diff --git a/src/queries/analytics/sessions/getSessionActivity.ts b/src/queries/analytics/sessions/getSessionActivity.ts
index 1fe8bbd3..d7e2a413 100644
--- a/src/queries/analytics/sessions/getSessionActivity.ts
+++ b/src/queries/analytics/sessions/getSessionActivity.ts
@@ -1,6 +1,6 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
export async function getSessionActivity(
...args: [websiteId: string, sessionId: string, startDate: Date, endDate: Date]
diff --git a/src/queries/analytics/sessions/getSessionData.ts b/src/queries/analytics/sessions/getSessionData.ts
index ce80b035..a3f1e113 100644
--- a/src/queries/analytics/sessions/getSessionData.ts
+++ b/src/queries/analytics/sessions/getSessionData.ts
@@ -1,6 +1,6 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, PRISMA, CLICKHOUSE } from 'lib/db';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { runQuery, PRISMA, CLICKHOUSE } from '@/lib/db';
export async function getSessionData(...args: [websiteId: string, sessionId: string]) {
return runQuery({
diff --git a/src/queries/analytics/sessions/getSessionDataProperties.ts b/src/queries/analytics/sessions/getSessionDataProperties.ts
index 1d15ea8d..da02c97e 100644
--- a/src/queries/analytics/sessions/getSessionDataProperties.ts
+++ b/src/queries/analytics/sessions/getSessionDataProperties.ts
@@ -1,7 +1,7 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import { QueryFilters, WebsiteEventData } from 'lib/types';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import { QueryFilters, WebsiteEventData } from '@/lib/types';
export async function getSessionDataProperties(
...args: [websiteId: string, filters: QueryFilters & { propertyName?: string }]
diff --git a/src/queries/analytics/sessions/getSessionDataValues.ts b/src/queries/analytics/sessions/getSessionDataValues.ts
index c02e4adb..3281521a 100644
--- a/src/queries/analytics/sessions/getSessionDataValues.ts
+++ b/src/queries/analytics/sessions/getSessionDataValues.ts
@@ -1,7 +1,7 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import { QueryFilters, WebsiteEventData } from 'lib/types';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import { QueryFilters, WebsiteEventData } from '@/lib/types';
export async function getSessionDataValues(
...args: [websiteId: string, filters: QueryFilters & { propertyName?: string }]
diff --git a/src/queries/analytics/sessions/getSessionMetrics.ts b/src/queries/analytics/sessions/getSessionMetrics.ts
index 0e8ebedf..e3bd1bba 100644
--- a/src/queries/analytics/sessions/getSessionMetrics.ts
+++ b/src/queries/analytics/sessions/getSessionMetrics.ts
@@ -1,8 +1,8 @@
-import clickhouse from 'lib/clickhouse';
-import { EVENT_COLUMNS, EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from 'lib/constants';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
-import { QueryFilters } from 'lib/types';
+import clickhouse from '@/lib/clickhouse';
+import { EVENT_COLUMNS, EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
+import { QueryFilters } from '@/lib/types';
export async function getSessionMetrics(
...args: [
diff --git a/src/queries/analytics/sessions/getSessionStats.ts b/src/queries/analytics/sessions/getSessionStats.ts
index 212f15e9..22cc04a7 100644
--- a/src/queries/analytics/sessions/getSessionStats.ts
+++ b/src/queries/analytics/sessions/getSessionStats.ts
@@ -1,8 +1,8 @@
-import clickhouse from 'lib/clickhouse';
-import { EVENT_COLUMNS, EVENT_TYPE } from 'lib/constants';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
-import { QueryFilters } from 'lib/types';
+import clickhouse from '@/lib/clickhouse';
+import { EVENT_COLUMNS, EVENT_TYPE } from '@/lib/constants';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
+import { QueryFilters } from '@/lib/types';
export async function getSessionStats(...args: [websiteId: string, filters: QueryFilters]) {
return runQuery({
diff --git a/src/queries/analytics/sessions/getWebsiteSession.ts b/src/queries/analytics/sessions/getWebsiteSession.ts
index 2c16741e..45e8640a 100644
--- a/src/queries/analytics/sessions/getWebsiteSession.ts
+++ b/src/queries/analytics/sessions/getWebsiteSession.ts
@@ -1,6 +1,6 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, PRISMA, CLICKHOUSE } from 'lib/db';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { runQuery, PRISMA, CLICKHOUSE } from '@/lib/db';
export async function getWebsiteSession(...args: [websiteId: string, sessionId: string]) {
return runQuery({
diff --git a/src/queries/analytics/sessions/getWebsiteSessionStats.ts b/src/queries/analytics/sessions/getWebsiteSessionStats.ts
index 648be140..2463b7ad 100644
--- a/src/queries/analytics/sessions/getWebsiteSessionStats.ts
+++ b/src/queries/analytics/sessions/getWebsiteSessionStats.ts
@@ -1,7 +1,7 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
-import { QueryFilters } from 'lib/types';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
+import { QueryFilters } from '@/lib/types';
export async function getWebsiteSessionStats(
...args: [websiteId: string, filters: QueryFilters]
diff --git a/src/queries/analytics/sessions/getWebsiteSessions.ts b/src/queries/analytics/sessions/getWebsiteSessions.ts
index d2a827d0..264a084b 100644
--- a/src/queries/analytics/sessions/getWebsiteSessions.ts
+++ b/src/queries/analytics/sessions/getWebsiteSessions.ts
@@ -1,7 +1,7 @@
-import clickhouse from 'lib/clickhouse';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import prisma from 'lib/prisma';
-import { PageParams, QueryFilters } from 'lib/types';
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import prisma from '@/lib/prisma';
+import { PageParams, QueryFilters } from '@/lib/types';
export async function getWebsiteSessions(
...args: [websiteId: string, filters?: QueryFilters, pageParams?: PageParams]
diff --git a/src/queries/analytics/sessions/getWebsiteSessionsWeekly.ts b/src/queries/analytics/sessions/getWebsiteSessionsWeekly.ts
index 48d4f7a9..58f8d692 100644
--- a/src/queries/analytics/sessions/getWebsiteSessionsWeekly.ts
+++ b/src/queries/analytics/sessions/getWebsiteSessionsWeekly.ts
@@ -1,7 +1,7 @@
-import prisma from 'lib/prisma';
-import clickhouse from 'lib/clickhouse';
-import { runQuery, PRISMA, CLICKHOUSE } from 'lib/db';
-import { QueryFilters } from 'lib/types';
+import prisma from '@/lib/prisma';
+import clickhouse from '@/lib/clickhouse';
+import { runQuery, PRISMA, CLICKHOUSE } from '@/lib/db';
+import { QueryFilters } from '@/lib/types';
export async function getWebsiteSessionsWeekly(
...args: [websiteId: string, filters?: QueryFilters]
diff --git a/src/queries/analytics/sessions/saveSessionData.ts b/src/queries/analytics/sessions/saveSessionData.ts
index 64bd1d93..35f0c712 100644
--- a/src/queries/analytics/sessions/saveSessionData.ts
+++ b/src/queries/analytics/sessions/saveSessionData.ts
@@ -1,11 +1,11 @@
-import { DATA_TYPE } from 'lib/constants';
-import { uuid } from 'lib/crypto';
-import { flattenJSON, getStringValue } from 'lib/data';
-import prisma from 'lib/prisma';
-import { DynamicData } from 'lib/types';
-import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
-import kafka from 'lib/kafka';
-import clickhouse from 'lib/clickhouse';
+import { DATA_TYPE } from '@/lib/constants';
+import { uuid } from '@/lib/crypto';
+import { flattenJSON, getStringValue } from '@/lib/data';
+import prisma from '@/lib/prisma';
+import { DynamicData } from '@/lib/types';
+import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
+import kafka from '@/lib/kafka';
+import clickhouse from '@/lib/clickhouse';
export async function saveSessionData(data: {
websiteId: string;
diff --git a/src/queries/index.ts b/src/queries/index.ts
index 63cebb45..da984932 100644
--- a/src/queries/index.ts
+++ b/src/queries/index.ts
@@ -1,8 +1,8 @@
-export * from 'queries/prisma/report';
-export * from 'queries/prisma/team';
-export * from 'queries/prisma/teamUser';
-export * from 'queries/prisma/user';
-export * from 'queries/prisma/website';
+export * from '@/queries/prisma/report';
+export * from '@/queries/prisma/team';
+export * from '@/queries/prisma/teamUser';
+export * from '@/queries/prisma/user';
+export * from '@/queries/prisma/website';
export * from './analytics/events/getEventDataEvents';
export * from './analytics/events/getEventDataFields';
export * from './analytics/events/getEventDataProperties';
diff --git a/src/queries/prisma/report.ts b/src/queries/prisma/report.ts
index 51e7ddc2..4feb9fb8 100644
--- a/src/queries/prisma/report.ts
+++ b/src/queries/prisma/report.ts
@@ -1,6 +1,6 @@
import { Prisma, Report } from '@prisma/client';
-import prisma from 'lib/prisma';
-import { PageResult, PageParams } from 'lib/types';
+import prisma from '@/lib/prisma';
+import { PageResult, PageParams } from '@/lib/types';
import ReportFindManyArgs = Prisma.ReportFindManyArgs;
async function findReport(criteria: Prisma.ReportFindUniqueArgs): Promise {
diff --git a/src/queries/prisma/team.ts b/src/queries/prisma/team.ts
index e516c446..4fddd76a 100644
--- a/src/queries/prisma/team.ts
+++ b/src/queries/prisma/team.ts
@@ -1,8 +1,8 @@
import { Prisma, Team } from '@prisma/client';
-import { ROLES } from 'lib/constants';
-import { uuid } from 'lib/crypto';
-import prisma from 'lib/prisma';
-import { PageResult, PageParams } from 'lib/types';
+import { ROLES } from '@/lib/constants';
+import { uuid } from '@/lib/crypto';
+import prisma from '@/lib/prisma';
+import { PageResult, PageParams } from '@/lib/types';
import TeamFindManyArgs = Prisma.TeamFindManyArgs;
export async function findTeam(criteria: Prisma.TeamFindUniqueArgs): Promise {
diff --git a/src/queries/prisma/teamUser.ts b/src/queries/prisma/teamUser.ts
index d172dd5a..0695f01c 100644
--- a/src/queries/prisma/teamUser.ts
+++ b/src/queries/prisma/teamUser.ts
@@ -1,7 +1,7 @@
import { Prisma, TeamUser } from '@prisma/client';
-import { uuid } from 'lib/crypto';
-import prisma from 'lib/prisma';
-import { PageResult, PageParams } from 'lib/types';
+import { uuid } from '@/lib/crypto';
+import prisma from '@/lib/prisma';
+import { PageResult, PageParams } from '@/lib/types';
import TeamUserFindManyArgs = Prisma.TeamUserFindManyArgs;
export async function findTeamUser(criteria: Prisma.TeamUserFindUniqueArgs): Promise {
diff --git a/src/queries/prisma/user.ts b/src/queries/prisma/user.ts
index 581b5e7a..3edae700 100644
--- a/src/queries/prisma/user.ts
+++ b/src/queries/prisma/user.ts
@@ -1,8 +1,8 @@
import { Prisma } from '@prisma/client';
-import { ROLES } from 'lib/constants';
-import prisma from 'lib/prisma';
-import { PageResult, Role, User, PageParams } from 'lib/types';
-import { getRandomChars } from 'lib/crypto';
+import { ROLES } from '@/lib/constants';
+import prisma from '@/lib/prisma';
+import { PageResult, Role, User, PageParams } from '@/lib/types';
+import { getRandomChars } from '@/lib/crypto';
import UserFindManyArgs = Prisma.UserFindManyArgs;
export interface GetUserOptions {
diff --git a/src/queries/prisma/website.ts b/src/queries/prisma/website.ts
index 1477a835..96463501 100644
--- a/src/queries/prisma/website.ts
+++ b/src/queries/prisma/website.ts
@@ -1,9 +1,9 @@
import { Prisma, Website } from '@prisma/client';
import { getClient } from '@umami/redis-client';
-import prisma from 'lib/prisma';
-import { PageResult, PageParams } from 'lib/types';
+import prisma from '@/lib/prisma';
+import { PageResult, PageParams } from '@/lib/types';
import WebsiteFindManyArgs = Prisma.WebsiteFindManyArgs;
-import { ROLES } from 'lib/constants';
+import { ROLES } from '@/lib/constants';
async function findWebsite(criteria: Prisma.WebsiteFindUniqueArgs): Promise {
return prisma.client.website.findUnique(criteria);
diff --git a/src/store/app.ts b/src/store/app.ts
index 626c2f31..0890b7e9 100644
--- a/src/store/app.ts
+++ b/src/store/app.ts
@@ -7,9 +7,9 @@ import {
LOCALE_CONFIG,
THEME_CONFIG,
TIMEZONE_CONFIG,
-} from 'lib/constants';
-import { getItem } from 'lib/storage';
-import { getTimezone } from 'lib/date';
+} from '@/lib/constants';
+import { getItem } from '@/lib/storage';
+import { getTimezone } from '@/lib/date';
function getDefaultTheme() {
return typeof window !== 'undefined'
diff --git a/src/store/dashboard.ts b/src/store/dashboard.ts
index ecae42f6..a34ec384 100644
--- a/src/store/dashboard.ts
+++ b/src/store/dashboard.ts
@@ -1,6 +1,6 @@
import { create } from 'zustand';
-import { DASHBOARD_CONFIG, DEFAULT_WEBSITE_LIMIT } from 'lib/constants';
-import { getItem, setItem } from 'lib/storage';
+import { DASHBOARD_CONFIG, DEFAULT_WEBSITE_LIMIT } from '@/lib/constants';
+import { getItem, setItem } from '@/lib/storage';
export const initialState = {
showCharts: true,
diff --git a/src/store/version.ts b/src/store/version.ts
index 8cabaf73..9a889636 100644
--- a/src/store/version.ts
+++ b/src/store/version.ts
@@ -1,8 +1,8 @@
import { create } from 'zustand';
import { produce } from 'immer';
import semver from 'semver';
-import { CURRENT_VERSION, VERSION_CHECK, UPDATES_URL } from 'lib/constants';
-import { getItem } from 'lib/storage';
+import { CURRENT_VERSION, VERSION_CHECK, UPDATES_URL } from '@/lib/constants';
+import { getItem } from '@/lib/storage';
const initialState = {
current: CURRENT_VERSION,
diff --git a/src/store/websites.ts b/src/store/websites.ts
index 1c5c21fc..e9271abd 100644
--- a/src/store/websites.ts
+++ b/src/store/websites.ts
@@ -1,6 +1,6 @@
import { create } from 'zustand';
import { produce } from 'immer';
-import { DateRange } from 'lib/types';
+import { DateRange } from '@/lib/types';
const store = create(() => ({}));
diff --git a/tsconfig.json b/tsconfig.json
index 82e7166f..4b8e0e0f 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,6 +1,6 @@
{
"compilerOptions": {
- "target": "es2021",
+ "target": "es2022",
"outDir": "./build",
"module": "esnext",
"moduleResolution": "node",
@@ -21,18 +21,12 @@
"noEmit": true,
"jsx": "preserve",
"incremental": false,
- "baseUrl": "./src",
"types": ["jest"],
"typeRoots": ["node_modules/@types"],
"paths": {
- "react": ["./node_modules/@types/react"],
- "assets/*": ["./assets/*"],
- "components/*": ["./components/*"],
- "lib/*": ["./lib/*"],
- "pages/*": ["./pages/*"],
- "queries/*": ["./queries/*"],
- "store/*": ["./store/*"],
- "styles/*": ["./styles/*"]
+ "@/*": [
+ "./src/*"
+ ]
},
"plugins": [
{