diff --git a/space/lib/mobx/store-init.tsx b/space/lib/mobx/store-init.tsx
index bcefd203b..897c8e3a2 100644
--- a/space/lib/mobx/store-init.tsx
+++ b/space/lib/mobx/store-init.tsx
@@ -2,7 +2,7 @@ import { useEffect } from "react";
// js cookie
import Cookie from "js-cookie";
// mobx store
-import { useMobxStore } from "lib/mobx/store-provider";
+import { useMobxStore } from "@/lib/mobx/store-provider";
const MobxStoreInit = () => {
const { user: userStore } = useMobxStore();
diff --git a/space/lib/mobx/store-provider.tsx b/space/lib/mobx/store-provider.tsx
index e12f2823a..18854c1d5 100644
--- a/space/lib/mobx/store-provider.tsx
+++ b/space/lib/mobx/store-provider.tsx
@@ -2,7 +2,7 @@
import { createContext, useContext } from "react";
// mobx store
-import { RootStore } from "store/root";
+import { RootStore } from "@/store/root";
let rootStore: RootStore = new RootStore();
diff --git a/space/pages/[workspace_slug]/[project_slug]/index.tsx b/space/pages/[workspace_slug]/[project_slug]/index.tsx
index e50c01c18..b0ee7d0cd 100644
--- a/space/pages/[workspace_slug]/[project_slug]/index.tsx
+++ b/space/pages/[workspace_slug]/[project_slug]/index.tsx
@@ -4,11 +4,11 @@ import { useRouter } from "next/router";
import useSWR from "swr";
/// layouts
-import ProjectLayout from "layouts/project-layout";
// components
-import { ProjectDetailsView } from "components/views/project-details";
+import { ProjectDetailsView } from "@/components/views/project-details";
// lib
-import { useMobxStore } from "lib/mobx/store-provider";
+import { useMobxStore } from "@/lib/mobx/store-provider";
+import ProjectLayout from "layouts/project-layout";
const WorkspaceProjectPage = (props: any) => {
const SITE_TITLE = props?.project_settings?.project_details?.name || "Plane | Deploy";
diff --git a/space/pages/_app.tsx b/space/pages/_app.tsx
index da1db272c..9d80d53a3 100644
--- a/space/pages/_app.tsx
+++ b/space/pages/_app.tsx
@@ -1,15 +1,15 @@
-import Head from "next/head";
import type { AppProps } from "next/app";
+import Head from "next/head";
import { ThemeProvider } from "next-themes";
// styles
-import "styles/globals.css";
+import "@/styles/globals.css";
// contexts
-import { ToastContextProvider } from "contexts/toast.context";
+import { SITE_NAME, SITE_DESCRIPTION, SITE_URL, TWITTER_USER_NAME, SITE_KEYWORDS, SITE_TITLE } from "@/constants/seo";
+import { ToastContextProvider } from "@/contexts/toast.context";
// mobx store provider
-import { MobxStoreProvider } from "lib/mobx/store-provider";
-import MobxStoreInit from "lib/mobx/store-init";
+import MobxStoreInit from "@/lib/mobx/store-init";
+import { MobxStoreProvider } from "@/lib/mobx/store-provider";
// constants
-import { SITE_NAME, SITE_DESCRIPTION, SITE_URL, TWITTER_USER_NAME, SITE_KEYWORDS, SITE_TITLE } from "constants/seo";
const prefix = parseInt(process.env.NEXT_PUBLIC_DEPLOY_WITH_NGINX || "0") === 0 ? "/" : "/spaces/";
diff --git a/space/pages/accounts/password.tsx b/space/pages/accounts/password.tsx
index 85da11290..16e805b6f 100644
--- a/space/pages/accounts/password.tsx
+++ b/space/pages/accounts/password.tsx
@@ -3,20 +3,20 @@ import Image from "next/image";
import Link from "next/link";
import { useRouter } from "next/router";
import { useTheme } from "next-themes";
-import { Lightbulb } from "lucide-react";
import { Controller, useForm } from "react-hook-form";
+import { Lightbulb } from "lucide-react";
// services
-import { AuthService } from "services/authentication.service";
-// hooks
-import useToast from "hooks/use-toast";
-import useSignInRedirection from "hooks/use-sign-in-redirection";
-// ui
import { Button, Input } from "@plane/ui";
+import { checkEmailValidity } from "@/helpers/string.helper";
+import { AuthService } from "@/services/authentication.service";
+// hooks
+import useSignInRedirection from "hooks/use-sign-in-redirection";
+import useToast from "hooks/use-toast";
+// ui
// images
-import BluePlaneLogoWithoutText from "public/plane-logos/blue-without-text-new.png";
import latestFeatures from "public/onboarding/onboarding-pages.svg";
+import BluePlaneLogoWithoutText from "public/plane-logos/blue-without-text-new.png";
// helpers
-import { checkEmailValidity } from "helpers/string.helper";
type TResetPasswordFormValues = {
email: string;
diff --git a/space/pages/index.tsx b/space/pages/index.tsx
index e680c257c..b1c2bd97c 100644
--- a/space/pages/index.tsx
+++ b/space/pages/index.tsx
@@ -1,13 +1,13 @@
import { useEffect } from "react";
+import { observer } from "mobx-react-lite";
import { NextPage } from "next";
import { useRouter } from "next/router";
-import { observer } from "mobx-react-lite";
// components
-import { LoginView } from "components/views";
+import { LoginView } from "@/components/views";
// store
-import { RootStore } from "store/root";
-import { useMobxStore } from "lib/mobx/store-provider";
+import { useMobxStore } from "@/lib/mobx/store-provider";
+import { RootStore } from "@/store/root";
const Index: NextPage = observer(() => {
const router = useRouter();
diff --git a/space/pages/onboarding/index.tsx b/space/pages/onboarding/index.tsx
index 423eec2de..95acaef29 100644
--- a/space/pages/onboarding/index.tsx
+++ b/space/pages/onboarding/index.tsx
@@ -1,9 +1,9 @@
import React, { useEffect } from "react";
// mobx
import { observer } from "mobx-react-lite";
-import { useMobxStore } from "lib/mobx/store-provider";
+import { OnBoardingForm } from "@/components/accounts/onboarding-form";
+import { useMobxStore } from "@/lib/mobx/store-provider";
// components
-import { OnBoardingForm } from "components/accounts/onboarding-form";
const imagePrefix = Boolean(parseInt(process.env.NEXT_PUBLIC_DEPLOY_WITH_NGINX || "0")) ? "/spaces" : "";
diff --git a/space/services/app-config.service.ts b/space/services/app-config.service.ts
index af79935cf..a6a1a9cf6 100644
--- a/space/services/app-config.service.ts
+++ b/space/services/app-config.service.ts
@@ -1,7 +1,7 @@
// services
-import APIService from "services/api.service";
+import APIService from "@/services/api.service";
// helper
-import { API_BASE_URL } from "helpers/common.helper";
+import { API_BASE_URL } from "@/helpers/common.helper";
// types
import { IAppConfig } from "types/app";
diff --git a/space/services/authentication.service.ts b/space/services/authentication.service.ts
index 7bf0eccfa..0fbf0c71b 100644
--- a/space/services/authentication.service.ts
+++ b/space/services/authentication.service.ts
@@ -1,6 +1,6 @@
// services
-import APIService from "services/api.service";
-import { API_BASE_URL } from "helpers/common.helper";
+import APIService from "@/services/api.service";
+import { API_BASE_URL } from "@/helpers/common.helper";
import { IEmailCheckData, IEmailCheckResponse, ILoginTokenResponse, IPasswordSignInData } from "types/auth";
export class AuthService extends APIService {
diff --git a/space/services/file.service.ts b/space/services/file.service.ts
index ecebf92b7..52793ec75 100644
--- a/space/services/file.service.ts
+++ b/space/services/file.service.ts
@@ -1,7 +1,7 @@
// services
-import APIService from "services/api.service";
+import APIService from "@/services/api.service";
// helpers
-import { API_BASE_URL } from "helpers/common.helper";
+import { API_BASE_URL } from "@/helpers/common.helper";
import axios from "axios";
interface UnSplashImage {
diff --git a/space/services/issue.service.ts b/space/services/issue.service.ts
index 5feb1b00b..b6f2e3be2 100644
--- a/space/services/issue.service.ts
+++ b/space/services/issue.service.ts
@@ -1,6 +1,6 @@
// services
-import APIService from "services/api.service";
-import { API_BASE_URL } from "helpers/common.helper";
+import APIService from "@/services/api.service";
+import { API_BASE_URL } from "@/helpers/common.helper";
class IssueService extends APIService {
constructor() {
diff --git a/space/services/project.service.ts b/space/services/project.service.ts
index 0d6eca951..2e173d282 100644
--- a/space/services/project.service.ts
+++ b/space/services/project.service.ts
@@ -1,6 +1,6 @@
// services
-import APIService from "services/api.service";
-import { API_BASE_URL } from "helpers/common.helper";
+import APIService from "@/services/api.service";
+import { API_BASE_URL } from "@/helpers/common.helper";
class ProjectService extends APIService {
constructor() {
diff --git a/space/services/user.service.ts b/space/services/user.service.ts
index c8232afa9..e49378d93 100644
--- a/space/services/user.service.ts
+++ b/space/services/user.service.ts
@@ -1,7 +1,7 @@
// services
-import APIService from "services/api.service";
+import APIService from "@/services/api.service";
// helpers
-import { API_BASE_URL } from "helpers/common.helper";
+import { API_BASE_URL } from "@/helpers/common.helper";
// types
import { IUser } from "types/user";
diff --git a/space/store/issue.ts b/space/store/issue.ts
index 02dd3cdd0..8e4876f66 100644
--- a/space/store/issue.ts
+++ b/space/store/issue.ts
@@ -1,6 +1,6 @@
import { observable, action, computed, makeObservable, runInAction } from "mobx";
// services
-import IssueService from "services/issue.service";
+import IssueService from "@/services/issue.service";
// store
import { RootStore } from "./root";
// types
diff --git a/space/store/issue_details.ts b/space/store/issue_details.ts
index 346206e94..766cb979d 100644
--- a/space/store/issue_details.ts
+++ b/space/store/issue_details.ts
@@ -3,7 +3,7 @@ import { v4 as uuidv4 } from "uuid";
// store
import { RootStore } from "./root";
// services
-import IssueService from "services/issue.service";
+import IssueService from "@/services/issue.service";
import { IIssue, IVote } from "types/issue";
export type IPeekMode = "side" | "modal" | "full";
diff --git a/space/store/issues/base-issue-filter.store.ts b/space/store/issues/base-issue-filter.store.ts
index 2cd2e3bc9..3859d94c6 100644
--- a/space/store/issues/base-issue-filter.store.ts
+++ b/space/store/issues/base-issue-filter.store.ts
@@ -1,5 +1,5 @@
// types
-import { RootStore } from "store/root";
+import { RootStore } from "@/store/root";
export interface IIssueFilterBaseStore {
// helper methods
diff --git a/space/store/issues/issue-filters.store.ts b/space/store/issues/issue-filters.store.ts
index f2408e290..fffa42e03 100644
--- a/space/store/issues/issue-filters.store.ts
+++ b/space/store/issues/issue-filters.store.ts
@@ -1,6 +1,6 @@
import { action, makeObservable, observable, runInAction, computed } from "mobx";
// types
-import { RootStore } from "store/root";
+import { RootStore } from "@/store/root";
import { IIssueFilterOptions, TIssueParams } from "./types";
import { handleIssueQueryParamsByLayout } from "./helpers";
import { IssueFilterBaseStore } from "./base-issue-filter.store";
diff --git a/space/store/project.ts b/space/store/project.ts
index 76b4d06cb..b12cf18db 100644
--- a/space/store/project.ts
+++ b/space/store/project.ts
@@ -1,7 +1,7 @@
// mobx
import { observable, action, makeObservable, runInAction } from "mobx";
// service
-import ProjectService from "services/project.service";
+import ProjectService from "@/services/project.service";
import { TIssueBoardKeys } from "types/issue";
// types
import { IWorkspace, IProject, IProjectSettings } from "types/project";
diff --git a/space/store/user.ts b/space/store/user.ts
index e97f655f7..0e9b90106 100644
--- a/space/store/user.ts
+++ b/space/store/user.ts
@@ -1,7 +1,7 @@
// mobx
import { observable, action, computed, makeObservable, runInAction } from "mobx";
// service
-import { UserService } from "services/user.service";
+import { UserService } from "@/services/user.service";
// types
import { IUser } from "types/user";
diff --git a/space/tsconfig.json b/space/tsconfig.json
index 3047edb7c..9d3e164be 100644
--- a/space/tsconfig.json
+++ b/space/tsconfig.json
@@ -4,6 +4,9 @@
"exclude": ["node_modules"],
"compilerOptions": {
"baseUrl": ".",
- "jsx": "preserve"
+ "jsx": "preserve",
+ "paths": {
+ "@/*": ["*"]
+ }
}
}
diff --git a/web/.eslintrc.js b/web/.eslintrc.js
index eb05b2af8..57d39bcfa 100644
--- a/web/.eslintrc.js
+++ b/web/.eslintrc.js
@@ -11,93 +11,42 @@ module.exports = {
},
},
rules: {
- // "import/order": [
- // "error",
- // {
- // groups: ["builtin", "external", "internal", "parent", "sibling"],
- // pathGroups: [
- // {
- // pattern: "react",
- // group: "external",
- // position: "before",
- // },
- // {
- // pattern: "@headlessui/**",
- // group: "external",
- // position: "after",
- // },
- // {
- // pattern: "lucide-react",
- // group: "external",
- // position: "after",
- // },
- // {
- // pattern: "@plane/ui",
- // group: "external",
- // position: "after",
- // },
- // {
- // pattern: "components/**",
- // group: "internal",
- // position: "before",
- // },
- // {
- // pattern: "constants/**",
- // group: "internal",
- // position: "before",
- // },
- // {
- // pattern: "contexts/**",
- // group: "internal",
- // position: "before",
- // },
- // {
- // pattern: "helpers/**",
- // group: "internal",
- // position: "before",
- // },
- // {
- // pattern: "hooks/**",
- // group: "internal",
- // position: "before",
- // },
- // {
- // pattern: "layouts/**",
- // group: "internal",
- // position: "before",
- // },
- // {
- // pattern: "lib/**",
- // group: "internal",
- // position: "before",
- // },
- // {
- // pattern: "services/**",
- // group: "internal",
- // position: "before",
- // },
- // {
- // pattern: "store/**",
- // group: "internal",
- // position: "before",
- // },
- // {
- // pattern: "@plane/types",
- // group: "internal",
- // position: "after",
- // },
- // {
- // pattern: "lib/types",
- // group: "internal",
- // position: "after",
- // },
- // ],
- // pathGroupsExcludedImportTypes: ["builtin", "internal", "react"],
- // alphabetize: {
- // order: "asc",
- // caseInsensitive: true,
- // },
- // },
- // ],
+ "import/order": [
+ "error",
+ {
+ groups: ["builtin", "external", "internal", "parent", "sibling",],
+ pathGroups: [
+ {
+ pattern: "react",
+ group: "external",
+ position: "before",
+ },
+ {
+ pattern: "lucide-react",
+ group: "external",
+ position: "after",
+ },
+ {
+ pattern: "@headlessui/**",
+ group: "external",
+ position: "after",
+ },
+ {
+ pattern: "@plane/**",
+ group: "external",
+ position: "after",
+ },
+ {
+ pattern: "@/**",
+ group: "internal",
+ }
+ ],
+ pathGroupsExcludedImportTypes: ["builtin", "internal", "react"],
+ alphabetize: {
+ order: "asc",
+ caseInsensitive: true,
+ },
+ },
+ ],
},
};
diff --git a/web/components/account/deactivate-account-modal.tsx b/web/components/account/deactivate-account-modal.tsx
index 34129cebe..41508ad67 100644
--- a/web/components/account/deactivate-account-modal.tsx
+++ b/web/components/account/deactivate-account-modal.tsx
@@ -2,12 +2,12 @@ import React, { useState } from "react";
import { useRouter } from "next/router";
import { useTheme } from "next-themes";
import { mutate } from "swr";
-import { Dialog, Transition } from "@headlessui/react";
import { Trash2 } from "lucide-react";
+import { Dialog, Transition } from "@headlessui/react";
// hooks
// ui
import { Button, TOAST_TYPE, setToast } from "@plane/ui";
-import { useUser } from "hooks/store";
+import { useUser } from "@/hooks/store";
type Props = {
isOpen: boolean;
diff --git a/web/components/account/o-auth/o-auth-options.tsx b/web/components/account/o-auth/o-auth-options.tsx
index 39123328e..1dd970fd6 100644
--- a/web/components/account/o-auth/o-auth-options.tsx
+++ b/web/components/account/o-auth/o-auth-options.tsx
@@ -2,11 +2,11 @@ import { observer } from "mobx-react-lite";
// ui
import { TOAST_TYPE, setToast } from "@plane/ui";
// components
-import { GitHubSignInButton, GoogleSignInButton } from "components/account";
+import { GitHubSignInButton, GoogleSignInButton } from "@/components/account";
// hooks
-import { useApplication } from "hooks/store";
+import { useApplication } from "@/hooks/store";
// services
-import { AuthService } from "services/auth.service";
+import { AuthService } from "@/services/auth.service";
type Props = {
handleSignInRedirection: () => Promise
;
diff --git a/web/components/account/sign-in-forms/email.tsx b/web/components/account/sign-in-forms/email.tsx
index 881c75f83..76051e94d 100644
--- a/web/components/account/sign-in-forms/email.tsx
+++ b/web/components/account/sign-in-forms/email.tsx
@@ -1,15 +1,15 @@
import React from "react";
+import { observer } from "mobx-react-lite";
import { Controller, useForm } from "react-hook-form";
import { XCircle } from "lucide-react";
-import { observer } from "mobx-react-lite";
-// services
-import { AuthService } from "services/auth.service";
-// ui
-import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui";
-// helpers
-import { checkEmailValidity } from "helpers/string.helper";
-// types
import { IEmailCheckData } from "@plane/types";
+// services
+import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui";
+import { checkEmailValidity } from "@/helpers/string.helper";
+import { AuthService } from "@/services/auth.service";
+// ui
+// helpers
+// types
type Props = {
onSubmit: (isPasswordAutoset: boolean) => void;
diff --git a/web/components/account/sign-in-forms/forgot-password-popover.tsx b/web/components/account/sign-in-forms/forgot-password-popover.tsx
index d652e51f1..31bafce26 100644
--- a/web/components/account/sign-in-forms/forgot-password-popover.tsx
+++ b/web/components/account/sign-in-forms/forgot-password-popover.tsx
@@ -1,7 +1,7 @@
import { Fragment, useState } from "react";
import { usePopper } from "react-popper";
-import { Popover } from "@headlessui/react";
import { X } from "lucide-react";
+import { Popover } from "@headlessui/react";
export const ForgotPasswordPopover = () => {
// popper-js refs
diff --git a/web/components/account/sign-in-forms/optional-set-password.tsx b/web/components/account/sign-in-forms/optional-set-password.tsx
index 5555d0016..26ec05aa5 100644
--- a/web/components/account/sign-in-forms/optional-set-password.tsx
+++ b/web/components/account/sign-in-forms/optional-set-password.tsx
@@ -1,16 +1,16 @@
import React, { useState } from "react";
import { Controller, useForm } from "react-hook-form";
// services
-import { AuthService } from "services/auth.service";
// hooks
-import { useEventTracker } from "hooks/store";
// ui
+import { Eye, EyeOff } from "lucide-react";
import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui";
// helpers
-import { checkEmailValidity } from "helpers/string.helper";
+import { PASSWORD_CREATE_SELECTED, PASSWORD_CREATE_SKIPPED } from "@/constants/event-tracker";
+import { checkEmailValidity } from "@/helpers/string.helper";
// icons
-import { Eye, EyeOff } from "lucide-react";
-import { PASSWORD_CREATE_SELECTED, PASSWORD_CREATE_SKIPPED } from "constants/event-tracker";
+import { useEventTracker } from "@/hooks/store";
+import { AuthService } from "@/services/auth.service";
type Props = {
email: string;
diff --git a/web/components/account/sign-in-forms/password.tsx b/web/components/account/sign-in-forms/password.tsx
index f42398850..8d7c9f891 100644
--- a/web/components/account/sign-in-forms/password.tsx
+++ b/web/components/account/sign-in-forms/password.tsx
@@ -3,19 +3,19 @@ import { observer } from "mobx-react-lite";
import Link from "next/link";
import { Controller, useForm } from "react-hook-form";
import { Eye, EyeOff, XCircle } from "lucide-react";
+import { IPasswordSignInData } from "@plane/types";
// services
import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui";
-import { ESignInSteps, ForgotPasswordPopover } from "components/account";
-import { FORGOT_PASSWORD, SIGN_IN_WITH_PASSWORD } from "constants/event-tracker";
-import { checkEmailValidity } from "helpers/string.helper";
-import { useApplication, useEventTracker } from "hooks/store";
-import { AuthService } from "services/auth.service";
+import { ESignInSteps, ForgotPasswordPopover } from "@/components/account";
+import { FORGOT_PASSWORD, SIGN_IN_WITH_PASSWORD } from "@/constants/event-tracker";
+import { checkEmailValidity } from "@/helpers/string.helper";
+import { useApplication, useEventTracker } from "@/hooks/store";
+import { AuthService } from "@/services/auth.service";
// hooks
// components
// ui
// helpers
// types
-import { IPasswordSignInData } from "@plane/types";
// constants
type Props = {
diff --git a/web/components/account/sign-in-forms/root.tsx b/web/components/account/sign-in-forms/root.tsx
index 835e018dc..fad37efaf 100644
--- a/web/components/account/sign-in-forms/root.tsx
+++ b/web/components/account/sign-in-forms/root.tsx
@@ -8,11 +8,11 @@ import {
SignInPasswordForm,
OAuthOptions,
SignInOptionalSetPasswordForm,
-} from "components/account";
-import { LatestFeatureBlock } from "components/common";
-import { NAVIGATE_TO_SIGNUP } from "constants/event-tracker";
-import { useApplication, useEventTracker } from "hooks/store";
-import useSignInRedirection from "hooks/use-sign-in-redirection";
+} from "@/components/account";
+import { LatestFeatureBlock } from "@/components/common";
+import { NAVIGATE_TO_SIGNUP } from "@/constants/event-tracker";
+import { useApplication, useEventTracker } from "@/hooks/store";
+import useSignInRedirection from "@/hooks/use-sign-in-redirection";
// components
// constants
diff --git a/web/components/account/sign-in-forms/unique-code.tsx b/web/components/account/sign-in-forms/unique-code.tsx
index fbfa04fcb..2a9144469 100644
--- a/web/components/account/sign-in-forms/unique-code.tsx
+++ b/web/components/account/sign-in-forms/unique-code.tsx
@@ -1,21 +1,21 @@
import React, { useState } from "react";
import { Controller, useForm } from "react-hook-form";
import { XCircle } from "lucide-react";
+import { IEmailCheckData, IMagicSignInData } from "@plane/types";
// services
import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui";
-import { CODE_VERIFIED } from "constants/event-tracker";
-import { checkEmailValidity } from "helpers/string.helper";
-import { useEventTracker } from "hooks/store";
+import { CODE_VERIFIED } from "@/constants/event-tracker";
+import { checkEmailValidity } from "@/helpers/string.helper";
+import { useEventTracker } from "@/hooks/store";
-import useTimer from "hooks/use-timer";
-import { AuthService } from "services/auth.service";
-import { UserService } from "services/user.service";
+import useTimer from "@/hooks/use-timer";
+import { AuthService } from "@/services/auth.service";
+import { UserService } from "@/services/user.service";
// hooks
// ui
// helpers
// types
-import { IEmailCheckData, IMagicSignInData } from "@plane/types";
// constants
type Props = {
diff --git a/web/components/account/sign-up-forms/email.tsx b/web/components/account/sign-up-forms/email.tsx
index 22dba892f..bc4fb1d86 100644
--- a/web/components/account/sign-up-forms/email.tsx
+++ b/web/components/account/sign-up-forms/email.tsx
@@ -2,14 +2,14 @@ import React from "react";
import { observer } from "mobx-react-lite";
import { Controller, useForm } from "react-hook-form";
import { XCircle } from "lucide-react";
+import { IEmailCheckData } from "@plane/types";
// services
import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui";
-import { checkEmailValidity } from "helpers/string.helper";
-import { AuthService } from "services/auth.service";
+import { checkEmailValidity } from "@/helpers/string.helper";
+import { AuthService } from "@/services/auth.service";
// ui
// helpers
// types
-import { IEmailCheckData } from "@plane/types";
type Props = {
onSubmit: () => void;
diff --git a/web/components/account/sign-up-forms/optional-set-password.tsx b/web/components/account/sign-up-forms/optional-set-password.tsx
index 93f774248..c269c389a 100644
--- a/web/components/account/sign-up-forms/optional-set-password.tsx
+++ b/web/components/account/sign-up-forms/optional-set-password.tsx
@@ -3,11 +3,11 @@ import { Controller, useForm } from "react-hook-form";
// services
import { Eye, EyeOff } from "lucide-react";
import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui";
-import { ESignUpSteps } from "components/account";
-import { PASSWORD_CREATE_SKIPPED, SETUP_PASSWORD } from "constants/event-tracker";
-import { checkEmailValidity } from "helpers/string.helper";
-import { useEventTracker } from "hooks/store";
-import { AuthService } from "services/auth.service";
+import { ESignUpSteps } from "@/components/account";
+import { PASSWORD_CREATE_SKIPPED, SETUP_PASSWORD } from "@/constants/event-tracker";
+import { checkEmailValidity } from "@/helpers/string.helper";
+import { useEventTracker } from "@/hooks/store";
+import { AuthService } from "@/services/auth.service";
// hooks
// ui
// helpers
diff --git a/web/components/account/sign-up-forms/password.tsx b/web/components/account/sign-up-forms/password.tsx
index 7fab81fbe..9cafabe81 100644
--- a/web/components/account/sign-up-forms/password.tsx
+++ b/web/components/account/sign-up-forms/password.tsx
@@ -3,14 +3,14 @@ import { observer } from "mobx-react-lite";
import Link from "next/link";
import { Controller, useForm } from "react-hook-form";
import { Eye, EyeOff, XCircle } from "lucide-react";
+import { IPasswordSignInData } from "@plane/types";
// services
// ui
import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui";
// helpers
-import { checkEmailValidity } from "helpers/string.helper";
-import { AuthService } from "services/auth.service";
+import { checkEmailValidity } from "@/helpers/string.helper";
+import { AuthService } from "@/services/auth.service";
// types
-import { IPasswordSignInData } from "@plane/types";
type Props = {
onSubmit: () => Promise;
diff --git a/web/components/account/sign-up-forms/root.tsx b/web/components/account/sign-up-forms/root.tsx
index 455112e9e..4fab3abcd 100644
--- a/web/components/account/sign-up-forms/root.tsx
+++ b/web/components/account/sign-up-forms/root.tsx
@@ -8,10 +8,10 @@ import {
SignUpOptionalSetPasswordForm,
SignUpPasswordForm,
SignUpUniqueCodeForm,
-} from "components/account";
-import { NAVIGATE_TO_SIGNIN } from "constants/event-tracker";
-import { useApplication, useEventTracker } from "hooks/store";
-import useSignInRedirection from "hooks/use-sign-in-redirection";
+} from "@/components/account";
+import { NAVIGATE_TO_SIGNIN } from "@/constants/event-tracker";
+import { useApplication, useEventTracker } from "@/hooks/store";
+import useSignInRedirection from "@/hooks/use-sign-in-redirection";
// components
// constants
diff --git a/web/components/account/sign-up-forms/unique-code.tsx b/web/components/account/sign-up-forms/unique-code.tsx
index 82f9685b1..bc6e1ee4c 100644
--- a/web/components/account/sign-up-forms/unique-code.tsx
+++ b/web/components/account/sign-up-forms/unique-code.tsx
@@ -2,20 +2,20 @@ import React, { useState } from "react";
import Link from "next/link";
import { Controller, useForm } from "react-hook-form";
import { XCircle } from "lucide-react";
+import { IEmailCheckData, IMagicSignInData } from "@plane/types";
// services
import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui";
-import { CODE_VERIFIED } from "constants/event-tracker";
-import { checkEmailValidity } from "helpers/string.helper";
-import { useEventTracker } from "hooks/store";
-import useTimer from "hooks/use-timer";
-import { AuthService } from "services/auth.service";
-import { UserService } from "services/user.service";
+import { CODE_VERIFIED } from "@/constants/event-tracker";
+import { checkEmailValidity } from "@/helpers/string.helper";
+import { useEventTracker } from "@/hooks/store";
+import useTimer from "@/hooks/use-timer";
+import { AuthService } from "@/services/auth.service";
+import { UserService } from "@/services/user.service";
// hooks
// ui
// helpers
// types
-import { IEmailCheckData, IMagicSignInData } from "@plane/types";
// constants
type Props = {
diff --git a/web/components/analytics/custom-analytics/custom-analytics.tsx b/web/components/analytics/custom-analytics/custom-analytics.tsx
index 1159689c6..9f075a8bb 100644
--- a/web/components/analytics/custom-analytics/custom-analytics.tsx
+++ b/web/components/analytics/custom-analytics/custom-analytics.tsx
@@ -2,16 +2,16 @@ import { observer } from "mobx-react-lite";
import { useRouter } from "next/router";
import { useForm } from "react-hook-form";
import useSWR from "swr";
+import { IAnalyticsParams } from "@plane/types";
// services
// components
-import { CustomAnalyticsSelectBar, CustomAnalyticsMainContent, CustomAnalyticsSidebar } from "components/analytics";
+import { CustomAnalyticsSelectBar, CustomAnalyticsMainContent, CustomAnalyticsSidebar } from "@/components/analytics";
// types
// fetch-keys
-import { ANALYTICS } from "constants/fetch-keys";
-import { cn } from "helpers/common.helper";
-import { useApplication } from "hooks/store";
-import { AnalyticsService } from "services/analytics.service";
-import { IAnalyticsParams } from "@plane/types";
+import { ANALYTICS } from "@/constants/fetch-keys";
+import { cn } from "@/helpers/common.helper";
+import { useApplication } from "@/hooks/store";
+import { AnalyticsService } from "@/services/analytics.service";
type Props = {
additionalParams?: Partial;
diff --git a/web/components/analytics/custom-analytics/graph/custom-tooltip.tsx b/web/components/analytics/custom-analytics/graph/custom-tooltip.tsx
index b90e9994f..9101f1cf2 100644
--- a/web/components/analytics/custom-analytics/graph/custom-tooltip.tsx
+++ b/web/components/analytics/custom-analytics/graph/custom-tooltip.tsx
@@ -1,9 +1,9 @@
// nivo
import { BarTooltipProps } from "@nivo/bar";
-import { DATE_KEYS } from "constants/analytics";
-import { renderMonthAndYear } from "helpers/analytics.helper";
-// types
import { IAnalyticsParams, IAnalyticsResponse } from "@plane/types";
+import { DATE_KEYS } from "@/constants/analytics";
+import { renderMonthAndYear } from "@/helpers/analytics.helper";
+// types
type Props = {
datum: BarTooltipProps;
diff --git a/web/components/analytics/custom-analytics/graph/index.tsx b/web/components/analytics/custom-analytics/graph/index.tsx
index 0e70fd898..742424c79 100644
--- a/web/components/analytics/custom-analytics/graph/index.tsx
+++ b/web/components/analytics/custom-analytics/graph/index.tsx
@@ -1,14 +1,14 @@
// nivo
import { BarDatum } from "@nivo/bar";
// components
+import { IAnalyticsParams, IAnalyticsResponse } from "@plane/types";
import { Tooltip } from "@plane/ui";
// ui
-import { BarGraph } from "components/ui";
+import { BarGraph } from "@/components/ui";
// helpers
-import { generateBarColor, generateDisplayName } from "helpers/analytics.helper";
-import { findStringWithMostCharacters } from "helpers/array.helper";
+import { generateBarColor, generateDisplayName } from "@/helpers/analytics.helper";
+import { findStringWithMostCharacters } from "@/helpers/array.helper";
// types
-import { IAnalyticsParams, IAnalyticsResponse } from "@plane/types";
import { CustomTooltip } from "./custom-tooltip";
type Props = {
diff --git a/web/components/analytics/custom-analytics/main-content.tsx b/web/components/analytics/custom-analytics/main-content.tsx
index e13b9cdd1..f57edbefd 100644
--- a/web/components/analytics/custom-analytics/main-content.tsx
+++ b/web/components/analytics/custom-analytics/main-content.tsx
@@ -1,15 +1,15 @@
import { useRouter } from "next/router";
import { mutate } from "swr";
+import { IAnalyticsParams, IAnalyticsResponse } from "@plane/types";
// components
import { Button, Loader } from "@plane/ui";
-import { AnalyticsGraph, AnalyticsTable } from "components/analytics";
+import { AnalyticsGraph, AnalyticsTable } from "@/components/analytics";
// ui
// helpers
-import { ANALYTICS } from "constants/fetch-keys";
-import { convertResponseToBarGraphData } from "helpers/analytics.helper";
+import { ANALYTICS } from "@/constants/fetch-keys";
+import { convertResponseToBarGraphData } from "@/helpers/analytics.helper";
// types
-import { IAnalyticsParams, IAnalyticsResponse } from "@plane/types";
// fetch-keys
type Props = {
diff --git a/web/components/analytics/custom-analytics/select-bar.tsx b/web/components/analytics/custom-analytics/select-bar.tsx
index 7ce2f31ef..dc241d1ee 100644
--- a/web/components/analytics/custom-analytics/select-bar.tsx
+++ b/web/components/analytics/custom-analytics/select-bar.tsx
@@ -1,11 +1,11 @@
import { observer } from "mobx-react-lite";
import { Control, Controller, UseFormSetValue } from "react-hook-form";
+import { IAnalyticsParams } from "@plane/types";
// hooks
-import { SelectProject, SelectSegment, SelectXAxis, SelectYAxis } from "components/analytics";
-import { useProject } from "hooks/store";
+import { SelectProject, SelectSegment, SelectXAxis, SelectYAxis } from "@/components/analytics";
+import { useProject } from "@/hooks/store";
// components
// types
-import { IAnalyticsParams } from "@plane/types";
type Props = {
control: Control;
diff --git a/web/components/analytics/custom-analytics/select/project.tsx b/web/components/analytics/custom-analytics/select/project.tsx
index 61c3acb09..325683904 100644
--- a/web/components/analytics/custom-analytics/select/project.tsx
+++ b/web/components/analytics/custom-analytics/select/project.tsx
@@ -1,7 +1,7 @@
import { observer } from "mobx-react-lite";
// hooks
import { CustomSearchSelect } from "@plane/ui";
-import { useProject } from "hooks/store";
+import { useProject } from "@/hooks/store";
// ui
type Props = {
diff --git a/web/components/analytics/custom-analytics/select/segment.tsx b/web/components/analytics/custom-analytics/select/segment.tsx
index de94eac62..07bbb0e37 100644
--- a/web/components/analytics/custom-analytics/select/segment.tsx
+++ b/web/components/analytics/custom-analytics/select/segment.tsx
@@ -1,10 +1,10 @@
import { useRouter } from "next/router";
+import { IAnalyticsParams, TXAxisValues } from "@plane/types";
// ui
import { CustomSelect } from "@plane/ui";
// types
-import { ANALYTICS_X_AXIS_VALUES } from "constants/analytics";
-import { IAnalyticsParams, TXAxisValues } from "@plane/types";
+import { ANALYTICS_X_AXIS_VALUES } from "@/constants/analytics";
// constants
type Props = {
diff --git a/web/components/analytics/custom-analytics/select/x-axis.tsx b/web/components/analytics/custom-analytics/select/x-axis.tsx
index 9daecaaa0..a0c21b1b6 100644
--- a/web/components/analytics/custom-analytics/select/x-axis.tsx
+++ b/web/components/analytics/custom-analytics/select/x-axis.tsx
@@ -1,10 +1,10 @@
import { useRouter } from "next/router";
+import { IAnalyticsParams, TXAxisValues } from "@plane/types";
// ui
import { CustomSelect } from "@plane/ui";
// types
-import { ANALYTICS_X_AXIS_VALUES } from "constants/analytics";
-import { IAnalyticsParams, TXAxisValues } from "@plane/types";
+import { ANALYTICS_X_AXIS_VALUES } from "@/constants/analytics";
// constants
type Props = {
diff --git a/web/components/analytics/custom-analytics/select/y-axis.tsx b/web/components/analytics/custom-analytics/select/y-axis.tsx
index 92e4fd2e5..a33feb967 100644
--- a/web/components/analytics/custom-analytics/select/y-axis.tsx
+++ b/web/components/analytics/custom-analytics/select/y-axis.tsx
@@ -1,8 +1,8 @@
// ui
+import { TYAxisValues } from "@plane/types";
import { CustomSelect } from "@plane/ui";
// types
-import { ANALYTICS_Y_AXIS_VALUES } from "constants/analytics";
-import { TYAxisValues } from "@plane/types";
+import { ANALYTICS_Y_AXIS_VALUES } from "@/constants/analytics";
// constants
type Props = {
diff --git a/web/components/analytics/custom-analytics/sidebar/projects-list.tsx b/web/components/analytics/custom-analytics/sidebar/projects-list.tsx
index 31812cb00..7b665e5d8 100644
--- a/web/components/analytics/custom-analytics/sidebar/projects-list.tsx
+++ b/web/components/analytics/custom-analytics/sidebar/projects-list.tsx
@@ -3,9 +3,9 @@ import { observer } from "mobx-react-lite";
// icons
import { Contrast, LayoutGrid, Users } from "lucide-react";
// helpers
-import { truncateText } from "helpers/string.helper";
-import { useProject } from "hooks/store";
-import { ProjectLogo } from "components/project";
+import { ProjectLogo } from "@/components/project";
+import { truncateText } from "@/helpers/string.helper";
+import { useProject } from "@/hooks/store";
type Props = {
projectIds: string[];
diff --git a/web/components/analytics/custom-analytics/sidebar/sidebar-header.tsx b/web/components/analytics/custom-analytics/sidebar/sidebar-header.tsx
index 26f97e8f9..0dad084af 100644
--- a/web/components/analytics/custom-analytics/sidebar/sidebar-header.tsx
+++ b/web/components/analytics/custom-analytics/sidebar/sidebar-header.tsx
@@ -1,11 +1,11 @@
import { observer } from "mobx-react-lite";
import { useRouter } from "next/router";
// hooks
-import { NETWORK_CHOICES } from "constants/project";
-import { renderFormattedDate } from "helpers/date-time.helper";
-import { useCycle, useMember, useModule, useProject } from "hooks/store";
+import { ProjectLogo } from "@/components/project";
+import { NETWORK_CHOICES } from "@/constants/project";
+import { renderFormattedDate } from "@/helpers/date-time.helper";
+import { useCycle, useMember, useModule, useProject } from "@/hooks/store";
// components
-import { ProjectLogo } from "components/project";
// helpers
// constants
diff --git a/web/components/analytics/custom-analytics/sidebar/sidebar.tsx b/web/components/analytics/custom-analytics/sidebar/sidebar.tsx
index a48ea3c03..26bb039b0 100644
--- a/web/components/analytics/custom-analytics/sidebar/sidebar.tsx
+++ b/web/components/analytics/custom-analytics/sidebar/sidebar.tsx
@@ -7,18 +7,18 @@ import { mutate } from "swr";
// components
// ui
import { CalendarDays, Download, RefreshCw } from "lucide-react";
+import { IAnalyticsParams, IAnalyticsResponse, IExportAnalyticsFormData, IWorkspace } from "@plane/types";
import { Button, LayersIcon, TOAST_TYPE, setToast } from "@plane/ui";
// icons
-import { CustomAnalyticsSidebarHeader, CustomAnalyticsSidebarProjectsList } from "components/analytics";
+import { CustomAnalyticsSidebarHeader, CustomAnalyticsSidebarProjectsList } from "@/components/analytics";
// helpers
// types
// fetch-keys
-import { ANALYTICS } from "constants/fetch-keys";
-import { cn } from "helpers/common.helper";
-import { renderFormattedDate } from "helpers/date-time.helper";
-import { useCycle, useModule, useProject, useUser, useWorkspace } from "hooks/store";
-import { AnalyticsService } from "services/analytics.service";
-import { IAnalyticsParams, IAnalyticsResponse, IExportAnalyticsFormData, IWorkspace } from "@plane/types";
+import { ANALYTICS } from "@/constants/fetch-keys";
+import { cn } from "@/helpers/common.helper";
+import { renderFormattedDate } from "@/helpers/date-time.helper";
+import { useCycle, useModule, useProject, useUser, useWorkspace } from "@/hooks/store";
+import { AnalyticsService } from "@/services/analytics.service";
type Props = {
analytics: IAnalyticsResponse | undefined;
diff --git a/web/components/analytics/custom-analytics/table.tsx b/web/components/analytics/custom-analytics/table.tsx
index 74b0f2254..efb8293fb 100644
--- a/web/components/analytics/custom-analytics/table.tsx
+++ b/web/components/analytics/custom-analytics/table.tsx
@@ -1,12 +1,12 @@
import { BarDatum } from "@nivo/bar";
// icons
+import { IAnalyticsParams, IAnalyticsResponse, TIssuePriorities } from "@plane/types";
import { PriorityIcon } from "@plane/ui";
// helpers
-import { ANALYTICS_X_AXIS_VALUES, ANALYTICS_Y_AXIS_VALUES } from "constants/analytics";
-import { generateBarColor, generateDisplayName } from "helpers/analytics.helper";
+import { ANALYTICS_X_AXIS_VALUES, ANALYTICS_Y_AXIS_VALUES } from "@/constants/analytics";
+import { generateBarColor, generateDisplayName } from "@/helpers/analytics.helper";
// types
-import { IAnalyticsParams, IAnalyticsResponse, TIssuePriorities } from "@plane/types";
// constants
type Props = {
diff --git a/web/components/analytics/project-modal/main-content.tsx b/web/components/analytics/project-modal/main-content.tsx
index a02ab9f11..096b90d67 100644
--- a/web/components/analytics/project-modal/main-content.tsx
+++ b/web/components/analytics/project-modal/main-content.tsx
@@ -1,11 +1,11 @@
import React from "react";
import { observer } from "mobx-react-lite";
import { Tab } from "@headlessui/react";
-// components
-import { CustomAnalytics, ScopeAndDemand } from "components/analytics";
-// types
-import { ANALYTICS_TABS } from "constants/analytics";
import { ICycle, IModule, IProject } from "@plane/types";
+// components
+import { CustomAnalytics, ScopeAndDemand } from "@/components/analytics";
+// types
+import { ANALYTICS_TABS } from "@/constants/analytics";
// constants
type Props = {
diff --git a/web/components/analytics/project-modal/modal.tsx b/web/components/analytics/project-modal/modal.tsx
index 197b4d809..53d54602f 100644
--- a/web/components/analytics/project-modal/modal.tsx
+++ b/web/components/analytics/project-modal/modal.tsx
@@ -1,11 +1,11 @@
import React, { useState } from "react";
import { observer } from "mobx-react-lite";
import { Dialog, Transition } from "@headlessui/react";
+import { ICycle, IModule, IProject } from "@plane/types";
// components
-import { ProjectAnalyticsModalHeader, ProjectAnalyticsModalMainContent } from "components/analytics";
+import { ProjectAnalyticsModalHeader, ProjectAnalyticsModalMainContent } from "@/components/analytics";
// types
-import { ICycle, IModule, IProject } from "@plane/types";
type Props = {
isOpen: boolean;
@@ -36,32 +36,34 @@ export const ProjectAnalyticsModal: React.FC = observer((props) => {
leaveFrom="translate-x-0"
leaveTo="translate-x-full"
>
-
-
diff --git a/web/components/analytics/scope-and-demand/demand.tsx b/web/components/analytics/scope-and-demand/demand.tsx
index 712b17bd3..e1c3dbae7 100644
--- a/web/components/analytics/scope-and-demand/demand.tsx
+++ b/web/components/analytics/scope-and-demand/demand.tsx
@@ -1,8 +1,8 @@
// icons
import { Triangle } from "lucide-react";
-// types
-import { STATE_GROUPS } from "constants/state";
import { IDefaultAnalyticsResponse, TStateGroups } from "@plane/types";
+// types
+import { STATE_GROUPS } from "@/constants/state";
// constants
type Props = {
diff --git a/web/components/analytics/scope-and-demand/leaderboard.tsx b/web/components/analytics/scope-and-demand/leaderboard.tsx
index ae7447b0f..e6473b874 100644
--- a/web/components/analytics/scope-and-demand/leaderboard.tsx
+++ b/web/components/analytics/scope-and-demand/leaderboard.tsx
@@ -1,5 +1,5 @@
// ui
-import { ProfileEmptyState } from "components/ui";
+import { ProfileEmptyState } from "@/components/ui";
// image
import emptyUsers from "public/empty-state/empty_users.svg";
diff --git a/web/components/analytics/scope-and-demand/scope-and-demand.tsx b/web/components/analytics/scope-and-demand/scope-and-demand.tsx
index 15ba0c772..3c5e3f48e 100644
--- a/web/components/analytics/scope-and-demand/scope-and-demand.tsx
+++ b/web/components/analytics/scope-and-demand/scope-and-demand.tsx
@@ -5,11 +5,11 @@ import useSWR from "swr";
// services
// components
import { Button, Loader } from "@plane/ui";
-import { AnalyticsDemand, AnalyticsLeaderBoard, AnalyticsScope, AnalyticsYearWiseIssues } from "components/analytics";
+import { AnalyticsDemand, AnalyticsLeaderBoard, AnalyticsScope, AnalyticsYearWiseIssues } from "@/components/analytics";
// ui
// fetch-keys
-import { DEFAULT_ANALYTICS } from "constants/fetch-keys";
-import { AnalyticsService } from "services/analytics.service";
+import { DEFAULT_ANALYTICS } from "@/constants/fetch-keys";
+import { AnalyticsService } from "@/services/analytics.service";
type Props = {
fullScreen?: boolean;
diff --git a/web/components/analytics/scope-and-demand/scope.tsx b/web/components/analytics/scope-and-demand/scope.tsx
index ea1a51937..527761e96 100644
--- a/web/components/analytics/scope-and-demand/scope.tsx
+++ b/web/components/analytics/scope-and-demand/scope.tsx
@@ -1,9 +1,9 @@
// ui
-import { BarGraph, ProfileEmptyState } from "components/ui";
+import { IDefaultAnalyticsResponse } from "@plane/types";
+import { BarGraph, ProfileEmptyState } from "@/components/ui";
// image
import emptyBarGraph from "public/empty-state/empty_bar_graph.svg";
// types
-import { IDefaultAnalyticsResponse } from "@plane/types";
type Props = {
defaultAnalytics: IDefaultAnalyticsResponse;
diff --git a/web/components/analytics/scope-and-demand/year-wise-issues.tsx b/web/components/analytics/scope-and-demand/year-wise-issues.tsx
index 86fd28490..cbd0e155c 100644
--- a/web/components/analytics/scope-and-demand/year-wise-issues.tsx
+++ b/web/components/analytics/scope-and-demand/year-wise-issues.tsx
@@ -1,10 +1,10 @@
// ui
-import { LineGraph, ProfileEmptyState } from "components/ui";
+import { IDefaultAnalyticsResponse } from "@plane/types";
+import { LineGraph, ProfileEmptyState } from "@/components/ui";
// image
-import { MONTHS_LIST } from "constants/calendar";
+import { MONTHS_LIST } from "@/constants/calendar";
import emptyGraph from "public/empty-state/empty_graph.svg";
// types
-import { IDefaultAnalyticsResponse } from "@plane/types";
// constants
type Props = {
diff --git a/web/components/api-token/delete-token-modal.tsx b/web/components/api-token/delete-token-modal.tsx
index 941889796..4c511de4a 100644
--- a/web/components/api-token/delete-token-modal.tsx
+++ b/web/components/api-token/delete-token-modal.tsx
@@ -2,13 +2,13 @@ import { useState, Fragment, FC } from "react";
import { useRouter } from "next/router";
import { mutate } from "swr";
import { Dialog, Transition } from "@headlessui/react";
+import { IApiToken } from "@plane/types";
// services
import { Button, TOAST_TYPE, setToast } from "@plane/ui";
-import { API_TOKENS_LIST } from "constants/fetch-keys";
-import { APITokenService } from "services/api_token.service";
+import { API_TOKENS_LIST } from "@/constants/fetch-keys";
+import { APITokenService } from "@/services/api_token.service";
// ui
// types
-import { IApiToken } from "@plane/types";
// fetch-keys
type Props = {
diff --git a/web/components/api-token/modal/create-token-modal.tsx b/web/components/api-token/modal/create-token-modal.tsx
index 2e782de0c..32305ba5b 100644
--- a/web/components/api-token/modal/create-token-modal.tsx
+++ b/web/components/api-token/modal/create-token-modal.tsx
@@ -2,19 +2,19 @@ import React, { useState } from "react";
import { useRouter } from "next/router";
import { mutate } from "swr";
import { Dialog, Transition } from "@headlessui/react";
+import { IApiToken } from "@plane/types";
// services
import { TOAST_TYPE, setToast } from "@plane/ui";
-import { CreateApiTokenForm, GeneratedTokenDetails } from "components/api-token";
-import { API_TOKENS_LIST } from "constants/fetch-keys";
-import { renderFormattedDate } from "helpers/date-time.helper";
-import { csvDownload } from "helpers/download.helper";
-import { APITokenService } from "services/api_token.service";
+import { CreateApiTokenForm, GeneratedTokenDetails } from "@/components/api-token";
+import { API_TOKENS_LIST } from "@/constants/fetch-keys";
+import { renderFormattedDate } from "@/helpers/date-time.helper";
+import { csvDownload } from "@/helpers/download.helper";
+import { APITokenService } from "@/services/api_token.service";
// ui
// components
// helpers
// types
-import { IApiToken } from "@plane/types";
// fetch-keys
type Props = {
diff --git a/web/components/api-token/modal/form.tsx b/web/components/api-token/modal/form.tsx
index 2bea1da0c..b2b3f64dc 100644
--- a/web/components/api-token/modal/form.tsx
+++ b/web/components/api-token/modal/form.tsx
@@ -1,14 +1,14 @@
import { useState } from "react";
import { add } from "date-fns";
import { Controller, useForm } from "react-hook-form";
-import { DateDropdown } from "components/dropdowns";
import { Calendar } from "lucide-react";
+import { IApiToken } from "@plane/types";
// ui
import { Button, CustomSelect, Input, TextArea, ToggleSwitch, TOAST_TYPE, setToast } from "@plane/ui";
+import { DateDropdown } from "@/components/dropdowns";
// helpers
-import { renderFormattedDate, renderFormattedPayloadDate } from "helpers/date-time.helper";
+import { renderFormattedDate, renderFormattedPayloadDate } from "@/helpers/date-time.helper";
// types
-import { IApiToken } from "@plane/types";
type Props = {
handleClose: () => void;
@@ -90,7 +90,7 @@ export const CreateApiTokenForm: React.FC = (props) => {
// if never expires is toggled on, set expired_at to null
if (neverExpires) payload.expired_at = null;
// if never expires is toggled off, and the user has selected a custom date, set expired_at to the custom date
- else if (data.expired_at === "custom") payload.expired_at = renderFormattedPayloadDate(customDate ?? new Date());
+ else if (data.expired_at === "custom") payload.expired_at = renderFormattedPayloadDate(customDate);
// if never expires is toggled off, and the user has selected a predefined date, set expired_at to the predefined date
else {
const expiryDate = getExpiryDate(data.expired_at ?? "");
diff --git a/web/components/api-token/modal/generated-token-details.tsx b/web/components/api-token/modal/generated-token-details.tsx
index fcae6b249..d2bbfd7a1 100644
--- a/web/components/api-token/modal/generated-token-details.tsx
+++ b/web/components/api-token/modal/generated-token-details.tsx
@@ -1,11 +1,13 @@
import { Copy } from "lucide-react";
+import { IApiToken } from "@plane/types";
// ui
import { Button, Tooltip, TOAST_TYPE, setToast } from "@plane/ui";
// helpers
-import { renderFormattedDate } from "helpers/date-time.helper";
-import { copyTextToClipboard } from "helpers/string.helper";
+import { renderFormattedDate } from "@/helpers/date-time.helper";
+import { copyTextToClipboard } from "@/helpers/string.helper";
// types
-import { IApiToken } from "@plane/types";
+import { usePlatformOS } from "@/hooks/use-platform-os";
+// hooks
type Props = {
handleClose: () => void;
@@ -14,7 +16,7 @@ type Props = {
export const GeneratedTokenDetails: React.FC = (props) => {
const { handleClose, tokenDetails } = props;
-
+ const { isMobile } = usePlatformOS();
const copyApiToken = (token: string) => {
copyTextToClipboard(token).then(() =>
setToast({
@@ -40,7 +42,7 @@ export const GeneratedTokenDetails: React.FC = (props) => {
className="mt-4 flex w-full items-center justify-between rounded-md border-[0.5px] border-custom-border-200 px-3 py-2 text-sm font-medium outline-none"
>
{tokenDetails.token}
-
+
diff --git a/web/components/api-token/token-list-item.tsx b/web/components/api-token/token-list-item.tsx
index 88af9a0a2..5ac7ec681 100644
--- a/web/components/api-token/token-list-item.tsx
+++ b/web/components/api-token/token-list-item.tsx
@@ -1,13 +1,14 @@
import { useState } from "react";
import { XCircle } from "lucide-react";
+import { IApiToken } from "@plane/types";
// components
import { Tooltip } from "@plane/ui";
-import { DeleteApiTokenModal } from "components/api-token";
+import { DeleteApiTokenModal } from "@/components/api-token";
+import { renderFormattedDate, calculateTimeAgo } from "@/helpers/date-time.helper";
+import { usePlatformOS } from "@/hooks/use-platform-os";
// ui
// helpers
-import { renderFormattedDate, calculateTimeAgo } from "helpers/date-time.helper";
// types
-import { IApiToken } from "@plane/types";
type Props = {
token: IApiToken;
@@ -17,12 +18,14 @@ export const ApiTokenListItem: React.FC = (props) => {
const { token } = props;
// states
const [deleteModalOpen, setDeleteModalOpen] = useState(false);
+ // hooks
+ const { isMobile } = usePlatformOS();
return (
<>
setDeleteModalOpen(false)} tokenId={token.id} />
-
+
@@ -130,6 +132,8 @@ export const SelectMonthModal: React.FC = ({ type, initialValues, isOpen,
hasError={Boolean(errors.archive_in)}
placeholder="Enter Months"
className="w-full border-custom-border-200"
+ min={1}
+ max={12}
/>
Months
diff --git a/web/components/command-palette/actions/help-actions.tsx b/web/components/command-palette/actions/help-actions.tsx
index 34317846a..10c7675d3 100644
--- a/web/components/command-palette/actions/help-actions.tsx
+++ b/web/components/command-palette/actions/help-actions.tsx
@@ -2,7 +2,7 @@ import { Command } from "cmdk";
import { FileText, GithubIcon, MessageSquare, Rocket } from "lucide-react";
// hooks
import { DiscordIcon } from "@plane/ui";
-import { useApplication } from "hooks/store";
+import { useApplication } from "@/hooks/store";
// ui
type Props = {
diff --git a/web/components/command-palette/actions/issue-actions/actions-list.tsx b/web/components/command-palette/actions/issue-actions/actions-list.tsx
index 98059af39..04bcc9899 100644
--- a/web/components/command-palette/actions/issue-actions/actions-list.tsx
+++ b/web/components/command-palette/actions/issue-actions/actions-list.tsx
@@ -2,15 +2,15 @@ import { Command } from "cmdk";
import { observer } from "mobx-react-lite";
import { useRouter } from "next/router";
import { LinkIcon, Signal, Trash2, UserMinus2, UserPlus2 } from "lucide-react";
+import { TIssue } from "@plane/types";
// hooks
import { DoubleCircleIcon, UserGroupIcon, TOAST_TYPE, setToast } from "@plane/ui";
-import { EIssuesStoreType } from "constants/issue";
-import { copyTextToClipboard } from "helpers/string.helper";
-import { useApplication, useUser, useIssues } from "hooks/store";
+import { EIssuesStoreType } from "@/constants/issue";
+import { copyTextToClipboard } from "@/helpers/string.helper";
+import { useApplication, useUser, useIssues } from "@/hooks/store";
// ui
// helpers
// types
-import { TIssue } from "@plane/types";
type Props = {
closePalette: () => void;
diff --git a/web/components/command-palette/actions/issue-actions/change-assignee.tsx b/web/components/command-palette/actions/issue-actions/change-assignee.tsx
index 18b11e129..4797bb45f 100644
--- a/web/components/command-palette/actions/issue-actions/change-assignee.tsx
+++ b/web/components/command-palette/actions/issue-actions/change-assignee.tsx
@@ -2,13 +2,13 @@ import { Command } from "cmdk";
import { observer } from "mobx-react-lite";
import { useRouter } from "next/router";
import { Check } from "lucide-react";
+import { TIssue } from "@plane/types";
// mobx store
import { Avatar } from "@plane/ui";
-import { EIssuesStoreType } from "constants/issue";
-import { useIssues, useMember } from "hooks/store";
+import { EIssuesStoreType } from "@/constants/issue";
+import { useIssues, useMember } from "@/hooks/store";
// ui
// types
-import { TIssue } from "@plane/types";
type Props = {
closePalette: () => void;
diff --git a/web/components/command-palette/actions/issue-actions/change-priority.tsx b/web/components/command-palette/actions/issue-actions/change-priority.tsx
index d07866833..6d2724859 100644
--- a/web/components/command-palette/actions/issue-actions/change-priority.tsx
+++ b/web/components/command-palette/actions/issue-actions/change-priority.tsx
@@ -2,13 +2,13 @@ import { Command } from "cmdk";
import { observer } from "mobx-react-lite";
import { useRouter } from "next/router";
import { Check } from "lucide-react";
+import { TIssue, TIssuePriorities } from "@plane/types";
// mobx store
import { PriorityIcon } from "@plane/ui";
-import { EIssuesStoreType, ISSUE_PRIORITIES } from "constants/issue";
-import { useIssues } from "hooks/store";
+import { EIssuesStoreType, ISSUE_PRIORITIES } from "@/constants/issue";
+import { useIssues } from "@/hooks/store";
// ui
// types
-import { TIssue, TIssuePriorities } from "@plane/types";
// constants
type Props = {
diff --git a/web/components/command-palette/actions/issue-actions/change-state.tsx b/web/components/command-palette/actions/issue-actions/change-state.tsx
index d208facc9..32c6a0de5 100644
--- a/web/components/command-palette/actions/issue-actions/change-state.tsx
+++ b/web/components/command-palette/actions/issue-actions/change-state.tsx
@@ -3,13 +3,13 @@ import { observer } from "mobx-react-lite";
import { useRouter } from "next/router";
// hooks
import { Check } from "lucide-react";
+import { TIssue } from "@plane/types";
import { Spinner, StateGroupIcon } from "@plane/ui";
-import { EIssuesStoreType } from "constants/issue";
-import { useProjectState, useIssues } from "hooks/store";
+import { EIssuesStoreType } from "@/constants/issue";
+import { useProjectState, useIssues } from "@/hooks/store";
// ui
// icons
// types
-import { TIssue } from "@plane/types";
type Props = {
closePalette: () => void;
diff --git a/web/components/command-palette/actions/project-actions.tsx b/web/components/command-palette/actions/project-actions.tsx
index d1589cb92..297d1ba36 100644
--- a/web/components/command-palette/actions/project-actions.tsx
+++ b/web/components/command-palette/actions/project-actions.tsx
@@ -2,7 +2,7 @@ import { Command } from "cmdk";
import { ContrastIcon, FileText } from "lucide-react";
// hooks
import { DiceIcon, PhotoFilterIcon } from "@plane/ui";
-import { useApplication, useEventTracker } from "hooks/store";
+import { useApplication, useEventTracker } from "@/hooks/store";
// ui
type Props = {
diff --git a/web/components/command-palette/actions/search-results.tsx b/web/components/command-palette/actions/search-results.tsx
index 5398d889d..489794295 100644
--- a/web/components/command-palette/actions/search-results.tsx
+++ b/web/components/command-palette/actions/search-results.tsx
@@ -1,9 +1,9 @@
import { Command } from "cmdk";
import { useRouter } from "next/router";
-// helpers
-import { commandGroups } from "components/command-palette";
-// types
import { IWorkspaceSearchResults } from "@plane/types";
+// helpers
+import { commandGroups } from "@/components/command-palette";
+// types
type Props = {
closePalette: () => void;
diff --git a/web/components/command-palette/actions/theme-actions.tsx b/web/components/command-palette/actions/theme-actions.tsx
index fe4a9fa20..b635881b5 100644
--- a/web/components/command-palette/actions/theme-actions.tsx
+++ b/web/components/command-palette/actions/theme-actions.tsx
@@ -5,8 +5,8 @@ import { useTheme } from "next-themes";
import { Settings } from "lucide-react";
// hooks
import { TOAST_TYPE, setToast } from "@plane/ui";
-import { THEME_OPTIONS } from "constants/themes";
-import { useUser } from "hooks/store";
+import { THEME_OPTIONS } from "@/constants/themes";
+import { useUser } from "@/hooks/store";
// ui
// constants
diff --git a/web/components/command-palette/actions/workspace-settings-actions.tsx b/web/components/command-palette/actions/workspace-settings-actions.tsx
index 5a2b2cd69..56c118a51 100644
--- a/web/components/command-palette/actions/workspace-settings-actions.tsx
+++ b/web/components/command-palette/actions/workspace-settings-actions.tsx
@@ -3,8 +3,8 @@ import { Command } from "cmdk";
import Link from "next/link";
import { useRouter } from "next/router";
// constants
-import { EUserWorkspaceRoles, WORKSPACE_SETTINGS_LINKS } from "constants/workspace";
-import { useUser } from "hooks/store";
+import { EUserWorkspaceRoles, WORKSPACE_SETTINGS_LINKS } from "@/constants/workspace";
+import { useUser } from "@/hooks/store";
type Props = {
closePalette: () => void;
diff --git a/web/components/command-palette/command-modal.tsx b/web/components/command-palette/command-modal.tsx
index 747075181..ddbf45dc8 100644
--- a/web/components/command-palette/command-modal.tsx
+++ b/web/components/command-palette/command-modal.tsx
@@ -3,8 +3,10 @@ import { Command } from "cmdk";
import { observer } from "mobx-react-lite";
import { useRouter } from "next/router";
import useSWR from "swr";
-import { Dialog, Transition } from "@headlessui/react";
import { FolderPlus, Search, Settings } from "lucide-react";
+import { Dialog, Transition } from "@headlessui/react";
+// icons
+import { IWorkspaceSearchResults } from "@plane/types";
// hooks
import { LayersIcon, Loader, ToggleSwitch, Tooltip } from "@plane/ui";
import {
@@ -17,26 +19,29 @@ import {
CommandPaletteProjectActions,
CommandPaletteWorkspaceSettingsActions,
CommandPaletteSearchResults,
-} from "components/command-palette";
-import { ISSUE_DETAILS } from "constants/fetch-keys";
-import { useApplication, useEventTracker, useProject } from "hooks/store";
+} from "@/components/command-palette";
+import { EmptyState } from "@/components/empty-state";
+import { EmptyStateType } from "@/constants/empty-state";
+import { ISSUE_DETAILS } from "@/constants/fetch-keys";
+import { useApplication, useEventTracker, useProject } from "@/hooks/store";
+import useDebounce from "@/hooks/use-debounce";
+import { usePlatformOS } from "@/hooks/use-platform-os";
// services
-import useDebounce from "hooks/use-debounce";
-import { IssueService } from "services/issue";
-import { WorkspaceService } from "services/workspace.service";
-// hooks
+import { IssueService } from "@/services/issue";
+import { WorkspaceService } from "@/services/workspace.service";
+// ui
// components
// types
-import { IWorkspaceSearchResults } from "@plane/types";
// fetch-keys
+// constants
-// services
const workspaceService = new WorkspaceService();
const issueService = new IssueService();
export const CommandModal: React.FC = observer(() => {
// hooks
const { getProjectById } = useProject();
+ const { isMobile } = usePlatformOS();
// states
const [placeholder, setPlaceholder] = useState("Type a command or search...");
const [resultsCount, setResultsCount] = useState(0);
@@ -197,7 +202,7 @@ export const CommandModal: React.FC = observer(() => {