From abe8df4ecacc3e6a90d6532e8f65819e0844abf8 Mon Sep 17 00:00:00 2001
From: "M. Palanikannan" <73993394+Palanikannan1437@users.noreply.github.com>
Date: Sat, 2 Sep 2023 00:45:34 +0530
Subject: [PATCH 01/14] added table-icons for left,right columns and top,bottom
rows (#2061)
---
.../table-menu/InsertBottomTableIcon.tsx | 15 +++++++++++
.../tiptap/table-menu/InsertLeftTableIcon.tsx | 14 +++++++++++
.../table-menu/InsertRightTableIcon.tsx | 15 +++++++++++
.../tiptap/table-menu/InsertTopTableIcon.tsx | 14 +++++++++++
.../components/tiptap/table-menu/index.tsx | 25 +++++++++++++++----
5 files changed, 78 insertions(+), 5 deletions(-)
create mode 100644 apps/app/components/tiptap/table-menu/InsertBottomTableIcon.tsx
create mode 100644 apps/app/components/tiptap/table-menu/InsertLeftTableIcon.tsx
create mode 100644 apps/app/components/tiptap/table-menu/InsertRightTableIcon.tsx
create mode 100644 apps/app/components/tiptap/table-menu/InsertTopTableIcon.tsx
diff --git a/apps/app/components/tiptap/table-menu/InsertBottomTableIcon.tsx b/apps/app/components/tiptap/table-menu/InsertBottomTableIcon.tsx
new file mode 100644
index 000000000..b3f99855e
--- /dev/null
+++ b/apps/app/components/tiptap/table-menu/InsertBottomTableIcon.tsx
@@ -0,0 +1,15 @@
+const InsertBottomTableIcon = (props: any) => (
+
+)
+
+export default InsertBottomTableIcon;
diff --git a/apps/app/components/tiptap/table-menu/InsertLeftTableIcon.tsx b/apps/app/components/tiptap/table-menu/InsertLeftTableIcon.tsx
new file mode 100644
index 000000000..8a92705d8
--- /dev/null
+++ b/apps/app/components/tiptap/table-menu/InsertLeftTableIcon.tsx
@@ -0,0 +1,14 @@
+const InsertLeftTableIcon = (props: any) => (
+
+)
+export default InsertLeftTableIcon
diff --git a/apps/app/components/tiptap/table-menu/InsertRightTableIcon.tsx b/apps/app/components/tiptap/table-menu/InsertRightTableIcon.tsx
new file mode 100644
index 000000000..04348ece1
--- /dev/null
+++ b/apps/app/components/tiptap/table-menu/InsertRightTableIcon.tsx
@@ -0,0 +1,15 @@
+const InsertRightTableIcon = (props: any) => (
+
+)
+
+export default InsertRightTableIcon
diff --git a/apps/app/components/tiptap/table-menu/InsertTopTableIcon.tsx b/apps/app/components/tiptap/table-menu/InsertTopTableIcon.tsx
new file mode 100644
index 000000000..14036f998
--- /dev/null
+++ b/apps/app/components/tiptap/table-menu/InsertTopTableIcon.tsx
@@ -0,0 +1,14 @@
+const InsertTopTableIcon = (props: any) => (
+
+)
+export default InsertTopTableIcon;
diff --git a/apps/app/components/tiptap/table-menu/index.tsx b/apps/app/components/tiptap/table-menu/index.tsx
index 0da68410e..e6513fc43 100644
--- a/apps/app/components/tiptap/table-menu/index.tsx
+++ b/apps/app/components/tiptap/table-menu/index.tsx
@@ -2,6 +2,10 @@ import { useState, useEffect } from "react";
import { Rows, Columns, ToggleRight } from "lucide-react";
import { cn } from "../utils";
import { Tooltip } from "components/ui";
+import InsertLeftTableIcon from "./InsertLeftTableIcon";
+import InsertRightTableIcon from "./InsertRightTableIcon";
+import InsertTopTableIcon from "./InsertTopTableIcon";
+import InsertBottomTableIcon from "./InsertBottomTableIcon";
interface TableMenuItem {
command: () => void;
@@ -24,13 +28,25 @@ export const TableMenu = ({ editor }: { editor: any }) => {
const items: TableMenuItem[] = [
{
command: () => editor.chain().focus().addColumnBefore().run(),
- icon: Columns,
+ icon: InsertLeftTableIcon,
+ key: "insert-column-left",
+ name: "Insert 1 column left",
+ },
+ {
+ command: () => editor.chain().focus().addColumnAfter().run(),
+ icon: InsertRightTableIcon,
key: "insert-column-right",
name: "Insert 1 column right",
},
+ {
+ command: () => editor.chain().focus().addRowBefore().run(),
+ icon: InsertTopTableIcon,
+ key: "insert-row-above",
+ name: "Insert 1 row above",
+ },
{
command: () => editor.chain().focus().addRowAfter().run(),
- icon: Rows,
+ icon: InsertBottomTableIcon,
key: "insert-row-below",
name: "Insert 1 row below",
},
@@ -99,9 +115,8 @@ export const TableMenu = ({ editor }: { editor: any }) => {
return (
Date: Sat, 2 Sep 2023 13:47:21 +0530
Subject: [PATCH 02/14] [chore] Added Husky for Automating Building and Linting
Projects Before Push (#2032)
* chore: Added Husky as Root Dependency
* chore: Added Husky Prepush Script
* chore: Modified Husky Pre-Push Script to Conditionally Build Projects
* chore: added husky as dev dependency
---
.husky/pre-push | 23 +++++++++++++++++++++++
package.json | 5 ++++-
yarn.lock | 5 +++++
3 files changed, 32 insertions(+), 1 deletion(-)
create mode 100755 .husky/pre-push
diff --git a/.husky/pre-push b/.husky/pre-push
new file mode 100755
index 000000000..1feec0de6
--- /dev/null
+++ b/.husky/pre-push
@@ -0,0 +1,23 @@
+#!/bin/sh
+. "$(dirname -- "$0")/_/husky.sh"
+
+changed_files=$(git diff --name-only HEAD~1)
+
+app_changed=$(echo "$changed_files" | grep -E '^apps/app/' || true)
+space_changed=$(echo "$changed_files" | grep -E '^apps/space/' || true)
+echo $app_changed
+echo $space_changed
+
+if [ -n "$app_changed" ] && [ -n "$space_changed" ]; then
+ echo "Changes detected in both apps/app and apps/space. Building..."
+ yarn run lint
+ yarn run build
+elif [ -n "$app_changed" ]; then
+ echo "Changes detected in apps/app. Building..."
+ yarn run lint --filter=app
+ yarn run build --filter=app
+elif [ -n "$space_changed" ]; then
+ echo "Changes detected in apps/space. Building..."
+ yarn run lint --filter=space
+ yarn run build --filter=space
+fi
diff --git a/package.json b/package.json
index 804fb7b64..b99978f20 100644
--- a/package.json
+++ b/package.json
@@ -7,16 +7,19 @@
"packages/*"
],
"scripts": {
+ "prepare": "husky install",
"build": "turbo run build",
"dev": "turbo run dev",
"start": "turbo run start",
"lint": "turbo run lint",
"clean": "turbo run clean"
},
+
"devDependencies": {
"eslint-config-custom": "*",
"prettier": "latest",
- "turbo": "latest"
+ "turbo": "latest",
+ "husky": "^8.0.3"
},
"packageManager": "yarn@1.22.19"
}
diff --git a/yarn.lock b/yarn.lock
index a48c94e92..60cba9408 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4891,6 +4891,11 @@ https-proxy-agent@^5.0.0:
agent-base "6"
debug "4"
+husky@^8.0.3:
+ version "8.0.3"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184"
+ integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==
+
idb@^7.0.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b"
From 874d6e951b4746edf9e334d1705a6e8609c16a7b Mon Sep 17 00:00:00 2001
From: Nikhil <118773738+pablohashescobar@users.noreply.github.com>
Date: Sat, 2 Sep 2023 19:43:17 +0530
Subject: [PATCH 03/14] dev: updated error handling for project deploy board
attributes (#2062)
* dev: updated error handling for project deploy board attributes
* dev: reaction integrity handling
---
apiserver/plane/api/views/issue.py | 139 +++++++++++++++++------------
1 file changed, 80 insertions(+), 59 deletions(-)
diff --git a/apiserver/plane/api/views/issue.py b/apiserver/plane/api/views/issue.py
index 74b574423..3d6b59c7f 100644
--- a/apiserver/plane/api/views/issue.py
+++ b/apiserver/plane/api/views/issue.py
@@ -21,7 +21,7 @@ from django.db.models import (
from django.core.serializers.json import DjangoJSONEncoder
from django.utils.decorators import method_decorator
from django.views.decorators.gzip import gzip_page
-from django.db.models.functions import Coalesce
+from django.db import IntegrityError
from django.conf import settings
# Third Party imports
@@ -1545,32 +1545,35 @@ class IssueCommentPublicViewSet(BaseViewSet):
return super(IssueCommentPublicViewSet, self).get_permissions()
def get_queryset(self):
- project_deploy_board = ProjectDeployBoard.objects.get(
- workspace__slug=self.kwargs.get("slug"),
- project_id=self.kwargs.get("project_id"),
- )
- if project_deploy_board.comments:
- return self.filter_queryset(
- super()
- .get_queryset()
- .filter(workspace__slug=self.kwargs.get("slug"))
- .filter(issue_id=self.kwargs.get("issue_id"))
- .filter(access="EXTERNAL")
- .select_related("project")
- .select_related("workspace")
- .select_related("issue")
- .annotate(
- is_member=Exists(
- ProjectMember.objects.filter(
- workspace__slug=self.kwargs.get("slug"),
- project_id=self.kwargs.get("project_id"),
- member_id=self.request.user.id,
+ try:
+ project_deploy_board = ProjectDeployBoard.objects.get(
+ workspace__slug=self.kwargs.get("slug"),
+ project_id=self.kwargs.get("project_id"),
+ )
+ if project_deploy_board.comments:
+ return self.filter_queryset(
+ super()
+ .get_queryset()
+ .filter(workspace__slug=self.kwargs.get("slug"))
+ .filter(issue_id=self.kwargs.get("issue_id"))
+ .filter(access="EXTERNAL")
+ .select_related("project")
+ .select_related("workspace")
+ .select_related("issue")
+ .annotate(
+ is_member=Exists(
+ ProjectMember.objects.filter(
+ workspace__slug=self.kwargs.get("slug"),
+ project_id=self.kwargs.get("project_id"),
+ member_id=self.request.user.id,
+ )
)
)
+ .distinct()
)
- .distinct()
- )
- else:
+ else:
+ return IssueComment.objects.none()
+ except ProjectDeployBoard.DoesNotExist:
return IssueComment.objects.none()
def create(self, request, slug, project_id, issue_id):
@@ -1703,21 +1706,24 @@ class IssueReactionPublicViewSet(BaseViewSet):
model = IssueReaction
def get_queryset(self):
- project_deploy_board = ProjectDeployBoard.objects.get(
- workspace__slug=self.kwargs.get("slug"),
- project_id=self.kwargs.get("project_id"),
- )
- if project_deploy_board.reactions:
- return (
- super()
- .get_queryset()
- .filter(workspace__slug=self.kwargs.get("slug"))
- .filter(project_id=self.kwargs.get("project_id"))
- .filter(issue_id=self.kwargs.get("issue_id"))
- .order_by("-created_at")
- .distinct()
+ try:
+ project_deploy_board = ProjectDeployBoard.objects.get(
+ workspace__slug=self.kwargs.get("slug"),
+ project_id=self.kwargs.get("project_id"),
)
- else:
+ if project_deploy_board.reactions:
+ return (
+ super()
+ .get_queryset()
+ .filter(workspace__slug=self.kwargs.get("slug"))
+ .filter(project_id=self.kwargs.get("project_id"))
+ .filter(issue_id=self.kwargs.get("issue_id"))
+ .order_by("-created_at")
+ .distinct()
+ )
+ else:
+ return IssueReaction.objects.none()
+ except ProjectDeployBoard.DoesNotExist:
return IssueReaction.objects.none()
def create(self, request, slug, project_id, issue_id):
@@ -1818,21 +1824,24 @@ class CommentReactionPublicViewSet(BaseViewSet):
model = CommentReaction
def get_queryset(self):
- project_deploy_board = ProjectDeployBoard.objects.get(
- workspace__slug=self.kwargs.get("slug"),
- project_id=self.kwargs.get("project_id"),
- )
- if project_deploy_board.reactions:
- return (
- super()
- .get_queryset()
- .filter(workspace__slug=self.kwargs.get("slug"))
- .filter(project_id=self.kwargs.get("project_id"))
- .filter(comment_id=self.kwargs.get("comment_id"))
- .order_by("-created_at")
- .distinct()
+ try:
+ project_deploy_board = ProjectDeployBoard.objects.get(
+ workspace__slug=self.kwargs.get("slug"),
+ project_id=self.kwargs.get("project_id"),
)
- else:
+ if project_deploy_board.reactions:
+ return (
+ super()
+ .get_queryset()
+ .filter(workspace__slug=self.kwargs.get("slug"))
+ .filter(project_id=self.kwargs.get("project_id"))
+ .filter(comment_id=self.kwargs.get("comment_id"))
+ .order_by("-created_at")
+ .distinct()
+ )
+ else:
+ return CommentReaction.objects.none()
+ except ProjectDeployBoard.DoesNotExist:
return CommentReaction.objects.none()
def create(self, request, slug, project_id, comment_id):
@@ -1939,13 +1948,23 @@ class IssueVotePublicViewSet(BaseViewSet):
serializer_class = IssueVoteSerializer
def get_queryset(self):
- return (
- super()
- .get_queryset()
- .filter(issue_id=self.kwargs.get("issue_id"))
- .filter(workspace__slug=self.kwargs.get("slug"))
- .filter(project_id=self.kwargs.get("project_id"))
- )
+ try:
+ project_deploy_board = ProjectDeployBoard.objects.get(
+ workspace__slug=self.kwargs.get("slug"),
+ project_id=self.kwargs.get("project_id"),
+ )
+ if project_deploy_board.votes:
+ return (
+ super()
+ .get_queryset()
+ .filter(issue_id=self.kwargs.get("issue_id"))
+ .filter(workspace__slug=self.kwargs.get("slug"))
+ .filter(project_id=self.kwargs.get("project_id"))
+ )
+ else:
+ return IssueVote.objects.none()
+ except ProjectDeployBoard.DoesNotExist:
+ return IssueVote.objects.none()
def create(self, request, slug, project_id, issue_id):
try:
@@ -1974,6 +1993,8 @@ class IssueVotePublicViewSet(BaseViewSet):
)
serializer = IssueVoteSerializer(issue_vote)
return Response(serializer.data, status=status.HTTP_201_CREATED)
+ except IntegrityError:
+ return Response({"error": "Reaction already exists"}, status=status.HTTP_400_BAD_REQUEST)
except Exception as e:
capture_exception(e)
return Response(
From 20e36194b4182437e821c8ca9ffadfdbd923affd Mon Sep 17 00:00:00 2001
From: Aaryan Khandelwal <65252264+aaryan610@users.noreply.github.com>
Date: Sun, 3 Sep 2023 11:25:37 +0530
Subject: [PATCH 04/14] fix: peek overview layout switch (#2064)
---
.../issues/peek-overview/layout.tsx | 60 ++++++++++---------
.../issues/peek-overview/layout.tsx | 24 ++++----
2 files changed, 44 insertions(+), 40 deletions(-)
diff --git a/apps/app/components/issues/peek-overview/layout.tsx b/apps/app/components/issues/peek-overview/layout.tsx
index 40737b6e8..57bcb904c 100644
--- a/apps/app/components/issues/peek-overview/layout.tsx
+++ b/apps/app/components/issues/peek-overview/layout.tsx
@@ -151,35 +151,37 @@ export const IssuePeekOverview: React.FC = observer(
leaveFrom="opacity-100"
leaveTo="opacity-0"
>
-
- {peekOverviewMode === "modal" && (
- setDeleteIssueModal(true)}
- handleUpdateIssue={handleUpdateIssue}
- issue={issue}
- mode={peekOverviewMode}
- readOnly={readOnly}
- setMode={(mode) => setPeekOverviewMode(mode)}
- workspaceSlug={workspaceSlug}
- />
- )}
- {peekOverviewMode === "full" && (
- setDeleteIssueModal(true)}
- handleUpdateIssue={handleUpdateIssue}
- issue={issue}
- mode={peekOverviewMode}
- readOnly={readOnly}
- setMode={(mode) => setPeekOverviewMode(mode)}
- workspaceSlug={workspaceSlug}
- />
- )}
+
+
+ {peekOverviewMode === "modal" && (
+ setDeleteIssueModal(true)}
+ handleUpdateIssue={handleUpdateIssue}
+ issue={issue}
+ mode={peekOverviewMode}
+ readOnly={readOnly}
+ setMode={(mode) => setPeekOverviewMode(mode)}
+ workspaceSlug={workspaceSlug}
+ />
+ )}
+ {peekOverviewMode === "full" && (
+ setDeleteIssueModal(true)}
+ handleUpdateIssue={handleUpdateIssue}
+ issue={issue}
+ mode={peekOverviewMode}
+ readOnly={readOnly}
+ setMode={(mode) => setPeekOverviewMode(mode)}
+ workspaceSlug={workspaceSlug}
+ />
+ )}
+
diff --git a/apps/space/components/issues/peek-overview/layout.tsx b/apps/space/components/issues/peek-overview/layout.tsx
index abb76db48..09cfa5b78 100644
--- a/apps/space/components/issues/peek-overview/layout.tsx
+++ b/apps/space/components/issues/peek-overview/layout.tsx
@@ -106,17 +106,19 @@ export const IssuePeekOverview: React.FC = observer((props) => {
leaveFrom="opacity-100"
leaveTo="opacity-0"
>
-
- {issueDetailStore.peekMode === "modal" && (
-
- )}
- {issueDetailStore.peekMode === "full" && (
-
- )}
+
+
+ {issueDetailStore.peekMode === "modal" && (
+
+ )}
+ {issueDetailStore.peekMode === "full" && (
+
+ )}
+
From 1e152c666cb2e1258df27268a77920e3b11f571f Mon Sep 17 00:00:00 2001
From: sriram veeraghanta
Date: Sun, 3 Sep 2023 18:50:30 +0530
Subject: [PATCH 05/14] New Directory Setup (#2065)
* chore: moved app & space from apps to root
* chore: modified workspace configuration
* chore: modified dockerfiles for space and web
* chore: modified icons for space
* feat: updated files for new svg icons supported by next-images
* chore: added /spaces base path for next
* chore: added compose config for space
* chore: updated husky configuration
* chore: updated workflows for new configuration
* chore: changed app name to web
* fix: resolved build errors with web
* chore: reset file tracing root for both projects
* chore: added nginx config for deploy
* fix: eslint and tsconfig settings for space app
* husky setup fixes based on new dir
* eslint fixes
* prettier formatting
---------
Co-authored-by: Henit Chobisa
---
.eslintrc.js | 2 +-
.github/workflows/Build_Test_Pull_Request.yml | 10 +-
.github/workflows/Update_Docker_Images.yml | 4 +-
.gitpod.yml | 11 +
.husky/pre-push | 20 +-
CODE_OF_CONDUCT.md | 24 +-
README.md | 28 +-
apps/app/components/icons/blocked-icon.tsx | 25 --
apps/app/components/icons/blocker-icon.tsx | 25 --
apps/app/components/icons/bolt-icon.tsx | 16 -
apps/app/components/icons/cancel-icon.tsx | 16 -
apps/app/components/icons/clipboard-icon.tsx | 19 -
apps/app/components/icons/comment-icon.tsx | 16 -
.../components/icons/completed-cycle-icon.tsx | 17 -
.../components/icons/current-cycle-icon.tsx | 17 -
apps/app/components/icons/edit-icon.tsx | 19 -
.../icons/ellipsis-horizontal-icon.tsx | 19 -
apps/app/components/icons/lock-icon.tsx | 16 -
apps/app/components/icons/menu-icon.tsx | 19 -
apps/app/components/icons/plus-icon.tsx | 19 -
.../icons/question-mark-circle-icon.tsx | 20 -
.../components/icons/signal-cellular-icon.tsx | 19 -
apps/app/components/icons/tag-icon.tsx | 24 --
apps/app/components/icons/transfer-icon.tsx | 16 -
apps/app/components/icons/tune-icon.tsx | 19 -
.../components/icons/upcoming-cycle-icon.tsx | 17 -
.../app/components/icons/user-icon-circle.tsx | 16 -
apps/app/components/icons/user-icon.tsx | 19 -
.../app/components/integration/slack/index.ts | 1 -
.../table-menu/InsertBottomTableIcon.tsx | 15 -
.../tiptap/table-menu/InsertLeftTableIcon.tsx | 14 -
.../table-menu/InsertRightTableIcon.tsx | 15 -
.../tiptap/table-menu/InsertTopTableIcon.tsx | 14 -
apps/space/public/logos/github-black.png | Bin 14032 -> 0 bytes
apps/space/public/logos/github-square.png | Bin 2352 -> 0 bytes
apps/space/public/logos/github-white.png | Bin 16559 -> 0 bytes
apps/space/public/plane-logo.webp | Bin 566 -> 0 bytes
.../public/plane-logos/blue-without-text.png | Bin 2460 -> 0 bytes
apps/space/tsconfig.json | 23 --
docker-compose.yml | 342 +++++++++---------
nginx/nginx.conf.template | 4 +
package.json | 7 +-
packages/eslint-config-custom/index.js | 2 +-
{apps/space => space}/.env.example | 0
{apps/app => space}/.eslintrc.js | 0
{apps/space => space}/.gitignore | 0
{apps/space => space}/.prettierignore | 0
{apps/space => space}/.prettierrc.json | 0
{apps/space => space}/Dockerfile.space | 11 +-
{apps/space => space}/README.md | 0
.../components/accounts/email-code-form.tsx | 0
.../accounts/email-password-form.tsx | 0
.../accounts/email-reset-password-form.tsx | 0
.../accounts/github-login-button.tsx | 4 +-
.../components/accounts/google-login.tsx | 0
.../components/accounts/index.ts | 0
.../components/accounts/onboarding-form.tsx | 0
.../space => space}/components/icons/index.ts | 0
.../icons/issue-group/backlog-state-icon.tsx | 0
.../issue-group/cancelled-state-icon.tsx | 0
.../issue-group/completed-state-icon.tsx | 0
.../icons/issue-group/started-state-icon.tsx | 0
.../issue-group/unstarted-state-icon.tsx | 0
.../components/icons/types.d.ts | 0
.../issues/board-views/block-downvotes.tsx | 0
.../issues/board-views/block-due-date.tsx | 0
.../issues/board-views/block-labels.tsx | 0
.../issues/board-views/block-priority.tsx | 0
.../issues/board-views/block-state.tsx | 0
.../issues/board-views/block-upvotes.tsx | 0
.../issues/board-views/calendar/index.tsx | 0
.../issues/board-views/gantt/index.tsx | 0
.../issues/board-views/kanban/block.tsx | 2 +-
.../issues/board-views/kanban/header.tsx | 0
.../issues/board-views/kanban/index.tsx | 0
.../issues/board-views/list/block.tsx | 2 +-
.../issues/board-views/list/header.tsx | 0
.../issues/board-views/list/index.tsx | 0
.../issues/board-views/spreadsheet/index.tsx | 0
.../issues/filters-render/index.tsx | 0
.../label/filter-label-block.tsx | 0
.../issues/filters-render/label/index.tsx | 0
.../priority/filter-priority-block.tsx | 0
.../issues/filters-render/priority/index.tsx | 0
.../state/filter-state-block.tsx | 0
.../issues/filters-render/state/index.tsx | 0
.../components/issues/navbar/index.tsx | 0
.../issues/navbar/issue-board-view.tsx | 0
.../components/issues/navbar/issue-filter.tsx | 0
.../components/issues/navbar/issue-view.tsx | 0
.../components/issues/navbar/search.tsx | 0
.../components/issues/navbar/theme.tsx | 0
.../issues/peek-overview/add-comment.tsx | 0
.../peek-overview/comment-detail-card.tsx | 0
.../peek-overview/full-screen-peek-view.tsx | 0
.../issues/peek-overview/header.tsx | 0
.../components/issues/peek-overview/index.ts | 0
.../issues/peek-overview/issue-activity.tsx | 0
.../issues/peek-overview/issue-details.tsx | 0
.../peek-overview/issue-emoji-reactions.tsx | 0
.../issues/peek-overview/issue-properties.tsx | 0
.../issues/peek-overview/issue-reaction.tsx | 0
.../peek-overview/issue-vote-reactions.tsx | 0
.../issues/peek-overview/layout.tsx | 0
.../issues/peek-overview/side-peek-view.tsx | 0
.../components/tiptap/bubble-menu/index.tsx | 0
.../tiptap/bubble-menu/link-selector.tsx | 7 +-
.../tiptap/bubble-menu/node-selector.tsx | 10 +-
.../bubble-menu/utils/link-validator.tsx | 1 -
.../tiptap/extensions/image-resize.tsx | 19 +-
.../components/tiptap/extensions/index.tsx | 8 +-
.../tiptap/extensions/updated-image.tsx | 2 +-
.../components/tiptap/index.tsx | 4 +-
.../tiptap/plugins/delete-image.tsx | 6 +-
.../tiptap/plugins/upload-image.tsx | 29 +-
.../components/tiptap/props.tsx | 18 +-
.../components/tiptap/slash-command/index.tsx | 248 ++++++-------
.../app => space}/components/tiptap/utils.ts | 0
.../components/ui/dropdown.tsx | 0
{apps/space => space}/components/ui/icon.tsx | 0
{apps/space => space}/components/ui/index.ts | 0
{apps/space => space}/components/ui/input.tsx | 0
{apps/app => space}/components/ui/loader.tsx | 0
.../components/ui/primary-button.tsx | 0
.../components/ui/reaction-selector.tsx | 0
.../components/ui/secondary-button.tsx | 0
.../components/ui/toast-alert.tsx | 0
.../space => space}/components/ui/tooltip.tsx | 0
.../components/views/project-details.tsx | 0
{apps/space => space}/constants/data.ts | 0
{apps/space => space}/constants/helpers.ts | 0
{apps/space => space}/constants/seo.ts | 0
{apps/space => space}/constants/workspace.ts | 0
.../contexts/toast.context.tsx | 0
.../helpers/date-time.helper.ts | 0
.../space => space}/helpers/emoji.helper.tsx | 0
.../space => space}/helpers/string.helper.ts | 0
.../hooks/use-outside-click.tsx | 0
{apps/app => space}/hooks/use-timer.tsx | 0
{apps/app => space}/hooks/use-toast.tsx | 0
.../layouts/project-layout.tsx | 5 +-
{apps/space => space}/lib/index.ts | 0
{apps/space => space}/lib/mobx/store-init.tsx | 0
.../app => space}/lib/mobx/store-provider.tsx | 0
{apps/space => space}/next.config.js | 8 +-
{apps/space => space}/package.json | 3 +
{apps/space => space}/pages/404.tsx | 3 +-
.../[workspace_slug]/[project_slug]/index.tsx | 0
.../pages/[workspace_slug]/index.tsx | 2 -
{apps/space => space}/pages/_app.tsx | 10 +-
{apps/space => space}/pages/_document.tsx | 0
{apps/space => space}/pages/index.tsx | 2 +-
.../pages/onboarding/index.tsx | 3 +-
.../pages/project-not-published/index.tsx | 3 +-
{apps/app => space}/postcss.config.js | 0
{apps/app => space}/public/404.svg | 0
.../public/favicon/android-chrome-192x192.png | Bin
.../public/favicon/android-chrome-512x512.png | Bin
.../public/favicon/apple-touch-icon.png | Bin
.../public/favicon/favicon-16x16.png | Bin
.../public/favicon/favicon-32x32.png | Bin
.../app => space}/public/favicon/favicon.ico | Bin
.../public/favicon/site.webmanifest | 0
space/public/logos/github-black.svg | 29 ++
space/public/logos/github-square.svg | 21 ++
space/public/logos/github-white.svg | 11 +
space/public/plane-logo.svg | 94 +++++
.../black-horizontal-with-blue-logo.svg | 0
.../public/plane-logos/blue-without-text.svg | 15 +
.../white-horizontal-with-blue-logo.svg | 0
.../public/plane-logos/white-horizontal.svg | 0
.../public/project-not-published.svg | 0
{apps/space => space}/services/api.service.ts | 0
.../services/authentication.service.ts | 0
.../space => space}/services/file.service.ts | 0
.../space => space}/services/issue.service.ts | 0
.../services/project.service.ts | 0
.../space => space}/services/user.service.ts | 0
{apps/space => space}/store/issue.ts | 0
{apps/space => space}/store/issue_details.ts | 0
{apps/space => space}/store/project.ts | 0
{apps/space => space}/store/root.ts | 0
{apps/space => space}/store/user.ts | 0
{apps/app => space}/styles/editor.css | 0
{apps/space => space}/styles/globals.css | 0
{apps/space => space}/tailwind.config.js | 0
{apps/app => space}/tsconfig.json | 0
{apps/space => space}/types/issue.ts | 0
{apps/space => space}/types/project.ts | 0
{apps/space => space}/types/theme.ts | 0
{apps/space => space}/types/user.ts | 0
web/.eslintrc.js | 7 +
{apps/app => web}/.prettierrc | 0
{apps/app => web}/Dockerfile.dev | 0
{apps/app => web}/Dockerfile.web | 14 +-
.../components/account/email-code-form.tsx | 0
.../account/email-password-form.tsx | 0
.../account/email-reset-password-form.tsx | 0
.../account/github-login-button.tsx | 0
.../components/account/google-login.tsx | 0
{apps/app => web}/components/account/index.ts | 0
.../create-update-analytics-modal.tsx | 0
.../custom-analytics/custom-analytics.tsx | 0
.../custom-analytics/graph/custom-tooltip.tsx | 0
.../custom-analytics/graph/index.tsx | 0
.../analytics/custom-analytics/index.ts | 0
.../analytics/custom-analytics/select-bar.tsx | 0
.../analytics/custom-analytics/sidebar.tsx | 0
.../analytics/custom-analytics/table.tsx | 0
.../app => web}/components/analytics/index.ts | 0
.../components/analytics/project-modal.tsx | 0
.../analytics/scope-and-demand/demand.tsx | 0
.../analytics/scope-and-demand/index.ts | 0
.../scope-and-demand/leaderboard.tsx | 0
.../scope-and-demand/scope-and-demand.tsx | 0
.../analytics/scope-and-demand/scope.tsx | 0
.../scope-and-demand/year-wise-issues.tsx | 0
.../components/analytics/select/index.ts | 0
.../components/analytics/select/project.tsx | 0
.../components/analytics/select/segment.tsx | 0
.../components/analytics/select/x-axis.tsx | 0
.../components/analytics/select/y-axis.tsx | 0
.../components/auth-screens/index.ts | 0
.../auth-screens/not-authorized-view.tsx | 0
.../components/auth-screens/project/index.ts | 0
.../auth-screens/project/join-project.tsx | 0
.../auth-screens/workspace/index.ts | 0
.../auth-screens/workspace/not-a-member.tsx | 0
.../automation/auto-archive-automation.tsx | 0
.../automation/auto-close-automation.tsx | 0
.../components/automation/index.ts | 0
.../automation/select-month-modal.tsx | 0
.../components/breadcrumbs/index.tsx | 0
.../change-interface-theme.tsx | 0
.../components/command-palette/command-k.tsx | 0
.../command-palette/command-pallette.tsx | 64 ++--
.../components/command-palette/helpers.tsx | 0
.../components/command-palette/index.ts | 0
.../issue/change-issue-assignee.tsx | 0
.../issue/change-issue-priority.tsx | 0
.../issue/change-issue-state.tsx | 0
.../components/command-palette/issue/index.ts | 0
.../command-palette/shortcuts-modal.tsx | 0
.../app => web}/components/core/activity.tsx | 0
.../core/filters/date-filter-modal.tsx | 0
.../core/filters/date-filter-select.tsx | 0
.../components/core/filters/filters-list.tsx | 0
.../components/core/filters/index.ts | 0
.../core/filters/issues-view-filter.tsx | 0
.../components/core/image-picker-popover.tsx | 0
{apps/app => web}/components/core/index.ts | 0
.../core/modals/bulk-delete-issues-modal.tsx | 0
.../modals/existing-issues-list-modal.tsx | 0
.../core/modals/gpt-assistant-modal.tsx | 0
.../core/modals/image-upload-modal.tsx | 0
.../components/core/modals/index.ts | 0
.../components/core/modals/link-modal.tsx | 0
.../components/core/reaction-selector.tsx | 0
.../components/core/sidebar/index.ts | 0
.../components/core/sidebar/links-list.tsx | 0
.../core/sidebar/progress-chart.tsx | 0
.../core/sidebar/sidebar-progress-stats.tsx | 0
.../core/sidebar/single-progress-stats.tsx | 0
.../core/theme/color-picker-input.tsx | 0
.../core/theme/custom-theme-selector.tsx | 0
.../components/core/theme/index.ts | 0
.../components/core/theme/theme-switch.tsx | 0
.../components/core/views/all-views.tsx | 0
.../core/views/board-view/all-boards.tsx | 0
.../core/views/board-view/board-header.tsx | 0
.../components/core/views/board-view/index.ts | 0
.../core/views/board-view/single-board.tsx | 0
.../core/views/board-view/single-issue.tsx | 0
.../views/calendar-view/calendar-header.tsx | 0
.../core/views/calendar-view/calendar.tsx | 0
.../core/views/calendar-view/index.ts | 0
.../core/views/calendar-view/single-date.tsx | 0
.../core/views/calendar-view/single-issue.tsx | 0
.../core/views/gantt-chart-view/index.tsx | 0
.../components/core/views/index.ts | 0
.../components/core/views/issues-view.tsx | 0
.../core/views/list-view/all-lists.tsx | 0
.../components/core/views/list-view/index.ts | 0
.../core/views/list-view/single-issue.tsx | 0
.../core/views/list-view/single-list.tsx | 0
.../core/views/spreadsheet-view/index.ts | 0
.../views/spreadsheet-view/single-issue.tsx | 0
.../spreadsheet-view/spreadsheet-columns.tsx | 0
.../spreadsheet-view/spreadsheet-issues.tsx | 0
.../spreadsheet-view/spreadsheet-view.tsx | 0
.../cycles/active-cycle-details.tsx | 0
.../components/cycles/active-cycle-stats.tsx | 0
.../cycles/cycles-list/all-cycles-list.tsx | 0
.../cycles-list/completed-cycles-list.tsx | 0
.../cycles/cycles-list/draft-cycles-list.tsx | 0
.../components/cycles/cycles-list/index.ts | 0
.../cycles-list/upcoming-cycles-list.tsx | 0
.../components/cycles/cycles-view.tsx | 0
.../components/cycles/delete-cycle-modal.tsx | 0
{apps/app => web}/components/cycles/form.tsx | 0
.../components/cycles/gantt-chart/blocks.tsx | 0
.../gantt-chart/cycle-issues-layout.tsx | 0
.../cycles/gantt-chart/cycles-list-layout.tsx | 0
.../components/cycles/gantt-chart/index.ts | 0
{apps/app => web}/components/cycles/index.ts | 0
{apps/app => web}/components/cycles/modal.tsx | 0
.../app => web}/components/cycles/select.tsx | 0
.../app => web}/components/cycles/sidebar.tsx | 0
.../components/cycles/single-cycle-card.tsx | 0
.../components/cycles/single-cycle-list.tsx | 0
.../cycles/transfer-issues-modal.tsx | 0
.../components/cycles/transfer-issues.tsx | 0
.../components/dnd/StrictModeDroppable.tsx | 0
.../components/emoji-icon-picker/emojis.json | 0
.../components/emoji-icon-picker/helpers.ts | 0
.../components/emoji-icon-picker/icons.json | 0
.../components/emoji-icon-picker/index.tsx | 0
.../components/emoji-icon-picker/types.d.ts | 0
.../create-update-estimate-modal.tsx | 0
.../estimates/delete-estimate-modal.tsx | 0
.../components/estimates/index.tsx | 0
.../components/estimates/single-estimate.tsx | 0
.../components/exporter/export-modal.tsx | 0
.../app => web}/components/exporter/guide.tsx | 0
.../app => web}/components/exporter/index.tsx | 0
.../components/exporter/single-export.tsx | 0
.../gantt-chart/blocks/blocks-display.tsx | 0
.../components/gantt-chart/blocks/index.ts | 0
.../components/gantt-chart/chart/bi-week.tsx | 0
.../components/gantt-chart/chart/day.tsx | 0
.../components/gantt-chart/chart/hours.tsx | 0
.../components/gantt-chart/chart/index.tsx | 0
.../components/gantt-chart/chart/month.tsx | 0
.../components/gantt-chart/chart/quarter.tsx | 0
.../components/gantt-chart/chart/week.tsx | 0
.../components/gantt-chart/chart/year.tsx | 0
.../components/gantt-chart/contexts/index.tsx | 0
.../components/gantt-chart/data/index.ts | 0
.../gantt-chart/helpers/block-structure.tsx | 0
.../gantt-chart/helpers/draggable.tsx | 0
.../components/gantt-chart/helpers/index.ts | 0
.../gantt-chart/hooks/block-update.tsx | 0
.../components/gantt-chart/hooks/index.tsx | 0
.../components/gantt-chart/index.ts | 0
.../components/gantt-chart/root.tsx | 0
.../components/gantt-chart/sidebar.tsx | 0
.../components/gantt-chart/types/index.ts | 0
.../gantt-chart/views/bi-week-view.ts | 0
.../components/gantt-chart/views/day-view.ts | 14 +-
.../components/gantt-chart/views/helpers.ts | 0
.../gantt-chart/views/hours-view.ts | 14 +-
.../components/gantt-chart/views/index.ts | 0
.../gantt-chart/views/month-view.ts | 0
.../gantt-chart/views/quater-view.ts | 0
.../components/gantt-chart/views/week-view.ts | 0
.../components/gantt-chart/views/year-view.ts | 0
.../components/icons/alarm-clock-icon.tsx | 0
.../components/icons/archive-icon.tsx | 0
.../components/icons/arrow-right.tsx | 0
.../icons/assignment-clipboard-icon.tsx | 0
.../components/icons/attachment-icon.tsx | 0
.../components/icons/audio-file-icon.tsx | 2 +-
.../components/icons/backlog-state-icon.tsx | 0
.../components/icons/bell-icon.tsx | 0
web/components/icons/blocked-icon.tsx | 25 ++
web/components/icons/blocker-icon.tsx | 25 ++
web/components/icons/bolt-icon.tsx | 16 +
.../components/icons/calendar-after-icon.tsx | 0
.../components/icons/calendar-before-icon.tsx | 0
.../components/icons/calendar-month-icon.tsx | 0
web/components/icons/cancel-icon.tsx | 16 +
.../components/icons/cancelled-state-icon.tsx | 0
{apps/app => web}/components/icons/check.tsx | 0
web/components/icons/clipboard-icon.tsx | 19 +
.../components/icons/clock-icon.tsx | 0
.../components/icons/cloud-upload.tsx | 0
.../app => web}/components/icons/cmd-icon.tsx | 0
{apps/app => web}/components/icons/cog.tsx | 0
.../components/icons/color-pallette-icon.tsx | 0
.../components/icons/color-picker-icon.tsx | 0
.../components/icons/command-icon.tsx | 0
web/components/icons/comment-icon.tsx | 16 +
web/components/icons/completed-cycle-icon.tsx | 17 +
.../components/icons/completed-state-icon.tsx | 0
.../components/icons/contrast-icon.tsx | 0
.../components/icons/css-file-icon.tsx | 2 +-
.../components/icons/csv-file-icon.tsx | 2 +-
web/components/icons/current-cycle-icon.tsx | 17 +
.../components/icons/cycle-icon.tsx | 0
.../components/icons/default-file-icon.tsx | 2 +-
.../components/icons/discord-icon.tsx | 0
.../components/icons/doc-file-icon.tsx | 2 +-
.../components/icons/document-icon.tsx | 30 +-
web/components/icons/edit-icon.tsx | 19 +
.../icons/ellipsis-horizontal-icon.tsx | 19 +
.../components/icons/exclamation-icon.tsx | 0
.../components/icons/external-link-icon.tsx | 0
.../components/icons/figma-file-icon.tsx | 2 +-
.../components/icons/github-icon.tsx | 0
.../components/icons/grid-view-icons.tsx | 0
.../components/icons/heartbeat-icon.tsx | 0
.../components/icons/html-file-icon.tsx | 2 +-
.../components/icons/img-file-icon.tsx | 2 +-
.../components/icons/import-layers.tsx | 0
.../components/icons/inbox-icon.tsx | 0
{apps/app => web}/components/icons/index.ts | 0
.../components/icons/jpg-file-icon.tsx | 2 +-
.../components/icons/js-file-icon.tsx | 2 +-
.../components/icons/layer-diagonal-icon.tsx | 0
web/components/icons/lock-icon.tsx | 16 +
web/components/icons/menu-icon.tsx | 19 +
.../components/icons/module/backlog.tsx | 0
.../components/icons/module/cancelled.tsx | 0
.../components/icons/module/completed.tsx | 0
.../components/icons/module/in-progress.tsx | 0
.../components/icons/module/index.ts | 0
.../icons/module/module-status-icon.tsx | 0
.../components/icons/module/paused.tsx | 0
.../components/icons/module/planned.tsx | 0
.../components/icons/pdf-file-icon.tsx | 2 +-
.../components/icons/pencil-scribble-icon.tsx | 0
.../components/icons/people-group-icon.tsx | 0
.../components/icons/person-running-icon.tsx | 0
web/components/icons/plus-icon.tsx | 19 +
.../components/icons/png-file-icon.tsx | 2 +-
.../components/icons/priority-icon.tsx | 0
.../icons/question-mark-circle-icon.tsx | 20 +
.../components/icons/setting-icon.tsx | 0
.../components/icons/sheet-file-icon.tsx | 2 +-
web/components/icons/signal-cellular-icon.tsx | 19 +
.../components/icons/single-comment-icon.tsx | 0
.../components/icons/sort-icon.tsx | 0
.../icons/stacked-layers-horizontal-icon.tsx | 0
.../components/icons/stacked-layers-icon.tsx | 0
.../components/icons/started-state-icon.tsx | 0
.../components/icons/state-group-icon.tsx | 0
.../components/icons/svg-file-icon.tsx | 2 +-
web/components/icons/tag-icon.tsx | 24 ++
.../components/icons/target-icon.tsx | 0
.../components/icons/tick-mark-icon.tsx | 0
web/components/icons/transfer-icon.tsx | 19 +
.../icons/triangle-exclamation-icon.tsx | 0
web/components/icons/tune-icon.tsx | 19 +
.../components/icons/txt-file-icon.tsx | 2 +-
{apps/app => web}/components/icons/types.d.ts | 0
.../components/icons/unstarted-state-icon.tsx | 0
web/components/icons/upcoming-cycle-icon.tsx | 17 +
.../components/icons/user-group-icon.tsx | 0
web/components/icons/user-icon-circle.tsx | 16 +
web/components/icons/user-icon.tsx | 19 +
{apps/app => web}/components/icons/users.tsx | 0
.../components/icons/video-file-icon.tsx | 2 +-
.../components/icons/view-list-icon.tsx | 0
.../components/icons/water-drop-icon.tsx | 0
.../components/icons/x-mark-icon.tsx | 0
.../components/inbox/accept-issue-modal.tsx | 0
.../components/inbox/decline-issue-modal.tsx | 0
.../components/inbox/delete-issue-modal.tsx | 0
.../components/inbox/filters-dropdown.tsx | 0
.../components/inbox/filters-list.tsx | 0
.../components/inbox/inbox-action-headers.tsx | 0
.../components/inbox/inbox-issue-activity.tsx | 0
.../components/inbox/inbox-issue-card.tsx | 0
.../components/inbox/inbox-main-content.tsx | 0
{apps/app => web}/components/inbox/index.ts | 0
.../components/inbox/issues-list-sidebar.tsx | 0
.../components/inbox/select-duplicate.tsx | 0
.../integration/delete-import-modal.tsx | 0
.../components/integration/github/auth.tsx | 0
.../integration/github/import-configure.tsx | 0
.../integration/github/import-confirm.tsx | 0
.../integration/github/import-data.tsx | 0
.../integration/github/import-users.tsx | 0
.../components/integration/github/index.ts | 0
.../integration/github/repo-details.tsx | 0
.../components/integration/github/root.tsx | 0
.../integration/github/select-repository.tsx | 0
.../integration/github/single-user-select.tsx | 0
.../components/integration/guide.tsx | 0
.../components/integration/index.ts | 0
.../integration/jira/confirm-import.tsx | 0
.../integration/jira/give-details.tsx | 0
.../integration/jira/import-users.tsx | 0
.../components/integration/jira/index.ts | 0
.../integration/jira/jira-project-detail.tsx | 2 +-
.../components/integration/jira/root.tsx | 2 +-
.../components/integration/single-import.tsx | 0
.../integration/single-integration-card.tsx | 0
web/components/integration/slack/index.ts | 1 +
.../integration/slack/select-channel.tsx | 0
.../components/issues/activity.tsx | 0
.../issues/attachment/attachment-upload.tsx | 0
.../issues/attachment/attachments.tsx | 0
.../attachment/delete-attachment-modal.tsx | 0
.../components/issues/attachment/index.ts | 0
.../components/issues/comment/add-comment.tsx | 0
.../issues/comment/comment-card.tsx | 0
.../issues/comment/comment-reaction.tsx | 0
.../components/issues/comment/index.ts | 0
.../components/issues/delete-issue-modal.tsx | 0
.../components/issues/description-form.tsx | 0
{apps/app => web}/components/issues/form.tsx | 0
.../components/issues/gantt-chart/blocks.tsx | 0
.../components/issues/gantt-chart/index.ts | 0
.../components/issues/gantt-chart/layout.tsx | 0
{apps/app => web}/components/issues/index.ts | 0
.../components/issues/issue-reaction.tsx | 0
{apps/app => web}/components/issues/label.tsx | 0
.../components/issues/main-content.tsx | 0
{apps/app => web}/components/issues/modal.tsx | 0
.../components/issues/my-issues/index.ts | 0
.../my-issues/my-issues-select-filters.tsx | 0
.../my-issues/my-issues-view-options.tsx | 0
.../issues/my-issues/my-issues-view.tsx | 0
.../issues/parent-issues-list-modal.tsx | 0
.../peek-overview/full-screen-peek-view.tsx | 0
.../issues/peek-overview/header.tsx | 0
.../components/issues/peek-overview/index.ts | 0
.../issues/peek-overview/issue-activity.tsx | 0
.../issues/peek-overview/issue-details.tsx | 0
.../issues/peek-overview/issue-properties.tsx | 0
.../issues/peek-overview/layout.tsx | 0
.../issues/peek-overview/side-peek-view.tsx | 0
.../components/issues/select/assignee.tsx | 0
.../components/issues/select/date.tsx | 0
.../components/issues/select/estimate.tsx | 0
.../components/issues/select/index.ts | 0
.../components/issues/select/label.tsx | 0
.../components/issues/select/priority.tsx | 0
.../components/issues/select/project.tsx | 0
.../components/issues/select/state.tsx | 0
.../issues/sidebar-select/assignee.tsx | 0
.../issues/sidebar-select/blocked.tsx | 0
.../issues/sidebar-select/blocker.tsx | 0
.../issues/sidebar-select/cycle.tsx | 0
.../issues/sidebar-select/estimate.tsx | 0
.../components/issues/sidebar-select/index.ts | 0
.../issues/sidebar-select/label.tsx | 0
.../issues/sidebar-select/module.tsx | 0
.../issues/sidebar-select/parent.tsx | 0
.../issues/sidebar-select/priority.tsx | 0
.../issues/sidebar-select/state.tsx | 0
.../app => web}/components/issues/sidebar.tsx | 0
.../components/issues/sub-issues-list.tsx | 0
.../issues/view-select/assignee.tsx | 0
.../issues/view-select/due-date.tsx | 0
.../issues/view-select/estimate.tsx | 0
.../components/issues/view-select/index.ts | 0
.../components/issues/view-select/label.tsx | 0
.../issues/view-select/priority.tsx | 0
.../issues/view-select/start-date.tsx | 0
.../components/issues/view-select/state.tsx | 0
.../components/labels/create-label-modal.tsx | 0
.../labels/create-update-label-inline.tsx | 0
.../components/labels/delete-label-modal.tsx | 0
{apps/app => web}/components/labels/index.ts | 0
.../components/labels/labels-list-modal.tsx | 0
.../components/labels/single-label-group.tsx | 0
.../components/labels/single-label.tsx | 0
.../modules/delete-module-modal.tsx | 0
{apps/app => web}/components/modules/form.tsx | 0
.../components/modules/gantt-chart/blocks.tsx | 0
.../components/modules/gantt-chart/index.ts | 0
.../gantt-chart/module-issues-layout.tsx | 0
.../gantt-chart/modules-list-layout.tsx | 0
{apps/app => web}/components/modules/index.ts | 0
.../app => web}/components/modules/modal.tsx | 0
.../components/modules/select/index.ts | 0
.../components/modules/select/lead.tsx | 0
.../components/modules/select/members.tsx | 0
.../components/modules/select/status.tsx | 0
.../modules/sidebar-select/index.ts | 0
.../modules/sidebar-select/select-lead.tsx | 0
.../modules/sidebar-select/select-members.tsx | 0
.../modules/sidebar-select/select-status.tsx | 0
.../components/modules/sidebar.tsx | 0
.../components/modules/single-module-card.tsx | 0
.../components/notifications/index.ts | 0
.../notifications/notification-card.tsx | 2 +-
.../notifications/notification-header.tsx | 0
.../notifications/notification-popover.tsx | 0
.../select-snooze-till-modal.tsx | 0
.../components/onboarding/index.ts | 0
.../components/onboarding/invite-members.tsx | 0
.../components/onboarding/join-workspaces.tsx | 0
.../components/onboarding/tour/index.ts | 0
.../components/onboarding/tour/root.tsx | 0
.../components/onboarding/tour/sidebar.tsx | 0
.../components/onboarding/user-details.tsx | 0
.../components/onboarding/workspace.tsx | 0
.../components/pages/create-block.tsx | 0
.../pages/create-update-block-inline.tsx | 0
.../pages/create-update-page-modal.tsx | 0
.../components/pages/delete-page-modal.tsx | 0
{apps/app => web}/components/pages/index.ts | 0
.../components/pages/page-form.tsx | 0
.../pages/pages-list/all-pages-list.tsx | 0
.../pages/pages-list/favorite-pages-list.tsx | 0
.../components/pages/pages-list/index.ts | 0
.../pages/pages-list/my-pages-list.tsx | 0
.../pages/pages-list/other-pages-list.tsx | 0
.../pages/pages-list/recent-pages-list.tsx | 0
.../components/pages/pages-list/types.ts | 0
.../components/pages/pages-view.tsx | 0
.../components/pages/single-page-block.tsx | 0
.../pages/single-page-detailed-item.tsx | 0
.../pages/single-page-list-item.tsx | 0
{apps/app => web}/components/profile/index.ts | 0
.../app => web}/components/profile/navbar.tsx | 0
.../components/profile/overview/activity.tsx | 0
.../components/profile/overview/index.ts | 0
.../overview/priority-distribution.tsx | 0
.../profile/overview/state-distribution.tsx | 0
.../components/profile/overview/stats.tsx | 0
.../components/profile/overview/workload.tsx | 0
.../profile/profile-issues-view-options.tsx | 0
.../profile/profile-issues-view.tsx | 0
.../components/profile/sidebar.tsx | 0
.../project/confirm-project-member-remove.tsx | 0
.../project/create-project-modal.tsx | 0
.../project/delete-project-modal.tsx | 0
{apps/app => web}/components/project/index.ts | 2 +-
.../components/project/join-project-modal.tsx | 0
.../project/publish-project/modal.tsx | 0
.../project/publish-project/popover.tsx | 0
.../project/send-project-invitation-modal.tsx | 0
.../components/project/settings-header.tsx | 0
.../project/settings/single-label.tsx | 0
.../components/project/sidebar-list.tsx | 0
.../project/single-integration-card.tsx | 0
.../project/single-project-card.tsx | 0
.../project/single-sidebar-project.tsx | 0
.../components/search-listbox/index.tsx | 0
.../components/search-listbox/types.d.ts | 0
.../components/states/create-state-modal.tsx | 0
.../states/create-update-state-inline.tsx | 0
.../components/states/delete-state-modal.tsx | 0
{apps/app => web}/components/states/index.ts | 0
.../components/states/single-state.tsx | 0
.../components/tiptap/bubble-menu/index.tsx | 18 +-
.../tiptap/bubble-menu/link-selector.tsx | 8 +-
.../tiptap/bubble-menu/node-selector.tsx | 2 +-
.../bubble-menu/utils/link-validator.tsx | 1 -
.../tiptap/extensions/image-resize.tsx | 19 +-
.../components/tiptap/extensions/index.tsx | 11 +-
.../tiptap/extensions/table/table-cell.ts | 13 +-
.../tiptap/extensions/table/table-header.ts | 2 +-
.../tiptap/extensions/table/table.ts | 2 +-
.../tiptap/extensions/updated-image.tsx | 2 +-
{apps/app => web}/components/tiptap/index.tsx | 4 +-
.../tiptap/plugins/delete-image.tsx | 6 +-
.../tiptap/plugins/upload-image.tsx | 15 +-
{apps/app => web}/components/tiptap/props.tsx | 18 +-
.../components/tiptap/slash-command/index.tsx | 269 +++++++-------
.../table-menu/InsertBottomTableIcon.tsx | 16 +
.../tiptap/table-menu/InsertLeftTableIcon.tsx | 15 +
.../table-menu/InsertRightTableIcon.tsx | 16 +
.../tiptap/table-menu/InsertTopTableIcon.tsx | 15 +
.../components/tiptap/table-menu/index.tsx | 5 +-
.../space => web}/components/tiptap/utils.ts | 0
.../components/toast-alert/index.tsx | 0
{apps/app => web}/components/ui/avatar.tsx | 0
.../components/ui/buttons/danger-button.tsx | 0
.../components/ui/buttons/index.ts | 0
.../components/ui/buttons/primary-button.tsx | 0
.../ui/buttons/secondary-button.tsx | 0
.../components/ui/buttons/type.d.ts | 0
.../components/ui/circular-progress.tsx | 0
{apps/app => web}/components/ui/date.tsx | 0
.../app => web}/components/ui/datepicker.tsx | 0
.../components/ui/dropdowns/context-menu.tsx | 0
.../components/ui/dropdowns/custom-menu.tsx | 0
.../ui/dropdowns/custom-search-select.tsx | 0
.../components/ui/dropdowns/custom-select.tsx | 0
.../components/ui/dropdowns/index.ts | 0
.../components/ui/dropdowns/types.d.ts | 0
.../app => web}/components/ui/empty-space.tsx | 0
.../app => web}/components/ui/empty-state.tsx | 0
.../components/ui/graphs/bar-graph.tsx | 0
.../components/ui/graphs/calendar-graph.tsx | 0
.../app => web}/components/ui/graphs/index.ts | 0
.../components/ui/graphs/line-graph.tsx | 0
.../components/ui/graphs/pie-graph.tsx | 0
.../ui/graphs/scatter-plot-graph.tsx | 0
.../components/ui/graphs/types.d.ts | 0
.../components/ui/icon-name-type.d.ts | 0
{apps/app => web}/components/ui/icon.tsx | 0
{apps/app => web}/components/ui/index.ts | 2 +-
.../app => web}/components/ui/input/index.tsx | 0
.../components/ui/input/types.d.ts | 0
.../integration-and-import-export-banner.tsx | 0
.../app => web}/components/ui/labels-list.tsx | 0
.../ui/linear-progress-indicator.tsx | 17 +-
{apps/space => web}/components/ui/loader.tsx | 0
.../components/ui/markdown-to-component.tsx | 0
.../components/ui/multi-level-dropdown.tsx | 0
.../components/ui/multi-level-select.tsx | 0
.../components/ui/product-updates-modal.tsx | 0
.../components/ui/profile-empty-state.tsx | 0
.../components/ui/progress-bar.tsx | 0
.../components/ui/range-datepicker.tsx | 0
{apps/app => web}/components/ui/spinner.tsx | 0
.../components/ui/text-area/index.tsx | 0
.../components/ui/text-area/types.d.ts | 0
.../components/ui/toggle-switch.tsx | 0
{apps/app => web}/components/ui/tooltip.tsx | 0
.../components/views/delete-view-modal.tsx | 5 +-
{apps/app => web}/components/views/form.tsx | 0
.../components/views/gantt-chart.tsx | 0
{apps/app => web}/components/views/index.ts | 0
{apps/app => web}/components/views/modal.tsx | 0
.../components/views/select-filters.tsx | 0
.../components/views/single-view-item.tsx | 0
.../components/workspace/activity-graph.tsx | 0
.../workspace/completed-issues-graph.tsx | 0
.../confirm-workspace-member-remove.tsx | 0
.../workspace/create-workspace-form.tsx | 0
.../workspace/delete-workspace-modal.tsx | 5 +-
.../components/workspace/help-section.tsx | 0
.../app => web}/components/workspace/index.ts | 0
.../components/workspace/issues-list.tsx | 0
.../components/workspace/issues-pie-chart.tsx | 0
.../components/workspace/issues-stats.tsx | 0
.../send-workspace-invitation-modal.tsx | 0
.../components/workspace/settings-header.tsx | 0
.../components/workspace/sidebar-dropdown.tsx | 0
.../components/workspace/sidebar-menu.tsx | 0
.../workspace/sidebar-quick-action.tsx | 0
.../workspace/single-invitation.tsx | 0
{apps/app => web}/constants/analytics.ts | 0
{apps/app => web}/constants/calendar.ts | 0
{apps/app => web}/constants/crisp.tsx | 0
{apps/app => web}/constants/fetch-keys.ts | 4 +-
{apps/app => web}/constants/filters.ts | 0
{apps/app => web}/constants/graph.ts | 0
{apps/app => web}/constants/inbox.ts | 0
{apps/app => web}/constants/issue.ts | 0
{apps/app => web}/constants/label.ts | 0
{apps/app => web}/constants/module.ts | 0
{apps/app => web}/constants/notification.ts | 0
{apps/app => web}/constants/project.ts | 0
{apps/app => web}/constants/seo-variables.ts | 0
{apps/app => web}/constants/spreadsheet.ts | 0
{apps/app => web}/constants/state.ts | 0
{apps/app => web}/constants/themes.ts | 0
{apps/app => web}/constants/timezones.ts | 0
{apps/app => web}/constants/workspace.ts | 0
.../contexts/inbox-view-context.tsx | 0
.../contexts/issue-view.context.tsx | 0
.../contexts/profile-issues-context.tsx | 0
.../contexts/project-member.context.tsx | 0
{apps/app => web}/contexts/theme.context.tsx | 0
{apps/app => web}/contexts/toast.context.tsx | 0
.../contexts/user-notification-context.tsx | 0
{apps/app => web}/contexts/user.context.tsx | 0
.../contexts/workspace-member.context.tsx | 0
.../contexts/workspace.context.tsx | 0
{apps/app => web}/google.d.ts | 0
{apps/app => web}/helpers/analytics.helper.ts | 0
{apps/app => web}/helpers/array.helper.ts | 0
.../app => web}/helpers/attachment.helper.ts | 0
{apps/app => web}/helpers/calendar.helper.ts | 0
{apps/app => web}/helpers/color.helper.ts | 0
{apps/app => web}/helpers/common.helper.ts | 0
{apps/app => web}/helpers/date-time.helper.ts | 0
{apps/app => web}/helpers/emoji.helper.tsx | 17 +-
{apps/app => web}/helpers/graph.helper.ts | 0
{apps/app => web}/helpers/state.helper.ts | 0
{apps/app => web}/helpers/string.helper.ts | 0
{apps/app => web}/helpers/theme.helper.ts | 0
.../hooks/gantt-chart/cycle-issues-view.tsx | 0
.../hooks/gantt-chart/issue-view.tsx | 0
.../hooks/gantt-chart/module-issues-view.tsx | 0
.../hooks/gantt-chart/view-issues-view.tsx | 0
.../hooks/my-issues/use-my-issues-filter.tsx | 0
.../hooks/my-issues/use-my-issues.tsx | 0
.../hooks/use-calendar-issues-view.tsx | 0
.../hooks/use-comment-reaction.tsx | 0
{apps/app => web}/hooks/use-debounce.tsx | 0
.../app => web}/hooks/use-estimate-option.tsx | 0
{apps/app => web}/hooks/use-inbox-view.tsx | 0
.../hooks/use-integration-popup.tsx | 0
.../use-issue-notification-subscription.tsx | 0
.../hooks/use-issue-properties.tsx | 2 +-
.../app => web}/hooks/use-issue-reaction.tsx | 0
{apps/app => web}/hooks/use-issues-view.tsx | 0
{apps/app => web}/hooks/use-local-storage.tsx | 0
.../hooks/use-outside-click-detector.tsx | 0
.../app => web}/hooks/use-profile-issues.tsx | 0
.../app => web}/hooks/use-project-details.tsx | 0
.../app => web}/hooks/use-project-members.tsx | 0
{apps/app => web}/hooks/use-projects.tsx | 0
.../hooks/use-reload-confirmation.tsx | 0
.../hooks/use-spreadsheet-issues-view.tsx | 0
{apps/app => web}/hooks/use-sub-issue.tsx | 0
{apps/app => web}/hooks/use-theme.tsx | 0
{apps/space => web}/hooks/use-timer.tsx | 0
{apps/space => web}/hooks/use-toast.tsx | 0
{apps/app => web}/hooks/use-user-auth.tsx | 0
.../hooks/use-user-notifications.tsx | 0
{apps/app => web}/hooks/use-user.tsx | 0
.../hooks/use-workspace-details.tsx | 0
.../hooks/use-workspace-members.tsx | 0
{apps/app => web}/hooks/use-workspaces.tsx | 0
.../layouts/app-layout/app-header.tsx | 0
.../layouts/app-layout/app-sidebar.tsx | 0
.../app => web}/layouts/auth-layout/index.ts | 0
.../project-authorization-wrapper.tsx | 0
.../user-authorization-wrapper.tsx | 0
.../workspace-authorization-wrapper.tsx | 0
.../layouts/default-layout/index.tsx | 0
{apps/app => web}/layouts/profile-layout.tsx | 0
{apps/app => web}/layouts/settings-navbar.tsx | 0
{apps/app => web}/lib/auth.ts | 0
{apps/app => web}/lib/cookie.ts | 0
{apps/app => web}/lib/mobx/store-init.tsx | 0
.../space => web}/lib/mobx/store-provider.tsx | 0
{apps/app => web}/lib/redirect.ts | 0
{apps/app => web}/manifest.json | 0
{apps/app => web}/next-env.d.ts | 0
{apps/app => web}/next.config.js | 2 +-
{apps/app => web}/package.json | 2 +-
{apps/app => web}/pages/404.tsx | 0
.../pages/[workspaceSlug]/analytics.tsx | 0
.../pages/[workspaceSlug]/editor.tsx | 0
.../pages/[workspaceSlug]/index.tsx | 0
.../pages/[workspaceSlug]/me/my-issues.tsx | 0
.../[workspaceSlug]/me/profile/activity.tsx | 0
.../[workspaceSlug]/me/profile/index.tsx | 0
.../me/profile/preferences.tsx | 0
.../profile/[userId]/assigned.tsx | 0
.../profile/[userId]/created.tsx | 0
.../profile/[userId]/index.tsx | 0
.../profile/[userId]/subscribed.tsx | 0
.../archived-issues/[archivedIssueId].tsx | 0
.../[projectId]/archived-issues/index.tsx | 0
.../projects/[projectId]/cycles/[cycleId].tsx | 0
.../projects/[projectId]/cycles/index.tsx | 0
.../projects/[projectId]/inbox/[inboxId].tsx | 0
.../projects/[projectId]/issues/[issueId].tsx | 0
.../projects/[projectId]/issues/index.tsx | 0
.../[projectId]/modules/[moduleId].tsx | 0
.../projects/[projectId]/modules/index.tsx | 0
.../projects/[projectId]/pages/[pageId].tsx | 0
.../projects/[projectId]/pages/index.tsx | 0
.../[projectId]/settings/automations.tsx | 0
.../projects/[projectId]/settings/control.tsx | 0
.../[projectId]/settings/estimates.tsx | 0
.../[projectId]/settings/features.tsx | 0
.../projects/[projectId]/settings/index.tsx | 0
.../[projectId]/settings/integrations.tsx | 0
.../projects/[projectId]/settings/labels.tsx | 0
.../projects/[projectId]/settings/members.tsx | 0
.../projects/[projectId]/settings/states.tsx | 0
.../projects/[projectId]/views/[viewId].tsx | 0
.../projects/[projectId]/views/index.tsx | 0
.../pages/[workspaceSlug]/projects/index.tsx | 0
.../[workspaceSlug]/settings/billing.tsx | 0
.../[workspaceSlug]/settings/exports.tsx | 0
.../[workspaceSlug]/settings/imports.tsx | 0
.../pages/[workspaceSlug]/settings/index.tsx | 10 +-
.../[workspaceSlug]/settings/integrations.tsx | 0
.../[workspaceSlug]/settings/members.tsx | 0
{apps/app => web}/pages/_app.tsx | 0
{apps/app => web}/pages/_document.tsx | 0
{apps/app => web}/pages/_error.tsx | 0
{apps/app => web}/pages/api/slack-redirect.ts | 2 +-
{apps/app => web}/pages/api/track-event.ts | 0
{apps/app => web}/pages/api/unsplash.ts | 0
{apps/app => web}/pages/create-workspace.tsx | 0
{apps/app => web}/pages/error.tsx | 0
{apps/app => web}/pages/index.tsx | 0
.../pages/installations/[provider]/index.tsx | 0
{apps/app => web}/pages/invitations.tsx | 0
{apps/app => web}/pages/magic-sign-in.tsx | 0
{apps/app => web}/pages/onboarding.tsx | 0
{apps/app => web}/pages/reset-password.tsx | 0
{apps/app => web}/pages/sign-up.tsx | 0
.../pages/workspace-member-invitation.tsx | 0
{apps/space => web}/postcss.config.js | 0
{apps/space => web}/public/404.svg | 0
.../public/animated-icons/uploading.json | 0
.../public/attachment/audio-icon.png | Bin
.../public/attachment/css-icon.png | Bin
.../public/attachment/csv-icon.png | Bin
.../public/attachment/default-icon.png | Bin
.../public/attachment/doc-icon.png | Bin
.../public/attachment/excel-icon.png | Bin
.../public/attachment/figma-icon.png | Bin
.../public/attachment/html-icon.png | Bin
.../public/attachment/img-icon.png | Bin
.../public/attachment/jpg-icon.png | Bin
.../app => web}/public/attachment/js-icon.png | Bin
.../public/attachment/pdf-icon.png | Bin
.../public/attachment/png-icon.png | Bin
.../public/attachment/svg-icon.png | Bin
.../public/attachment/txt-icon.png | Bin
.../public/attachment/video-icon.png | Bin
.../public/auth/project-not-authorized.svg | 0
.../public/auth/workspace-not-authorized.svg | 0
.../public/empty-state/analytics.svg | 0
.../app => web}/public/empty-state/cycle.svg | 0
.../public/empty-state/dashboard.svg | 0
.../public/empty-state/empty_bar_graph.svg | 0
.../public/empty-state/empty_graph.svg | 0
.../public/empty-state/empty_users.svg | 0
.../public/empty-state/estimate.svg | 0
.../public/empty-state/integration.svg | 0
.../public/empty-state/invitation.svg | 0
.../public/empty-state/issue-archive.svg | 0
.../app => web}/public/empty-state/issue.svg | 0
.../app => web}/public/empty-state/label.svg | 0
.../app => web}/public/empty-state/module.svg | 0
.../public/empty-state/my-issues.svg | 0
.../public/empty-state/notification.svg | 0
{apps/app => web}/public/empty-state/page.svg | 0
.../public/empty-state/project.svg | 0
.../public/empty-state/recent_activity.svg | 0
.../public/empty-state/state_graph.svg | 0
{apps/app => web}/public/empty-state/view.svg | 0
.../public/favicon/android-chrome-192x192.png | Bin
.../public/favicon/android-chrome-512x512.png | Bin
.../public/favicon/apple-touch-icon.png | Bin
.../public/favicon/favicon-16x16.png | Bin
.../public/favicon/favicon-32x32.png | Bin
.../space => web}/public/favicon/favicon.ico | Bin
.../public/favicon/site.webmanifest | 0
.../app => web}/public/logos/github-black.png | Bin
.../public/logos/github-square.png | Bin
.../app => web}/public/logos/github-white.png | Bin
{apps/app => web}/public/mac-command.svg | 0
.../app => web}/public/onboarding/cycles.svg | 0
.../app => web}/public/onboarding/cycles.webp | Bin
.../app => web}/public/onboarding/issues.svg | 0
.../app => web}/public/onboarding/issues.webp | Bin
.../app => web}/public/onboarding/modules.svg | 0
.../public/onboarding/modules.webp | Bin
{apps/app => web}/public/onboarding/pages.svg | 0
.../app => web}/public/onboarding/pages.webp | Bin
{apps/app => web}/public/onboarding/views.svg | 0
.../app => web}/public/onboarding/views.webp | Bin
.../black-horizontal-with-blue-logo.svg | 0
.../public/plane-logos/blue-without-text.png | Bin
.../white-horizontal-with-blue-logo.svg | 0
.../public/plane-logos/white-horizontal.svg | 0
{apps/app => web}/public/services/csv.svg | 0
{apps/app => web}/public/services/excel.svg | 0
{apps/app => web}/public/services/github.png | Bin
{apps/app => web}/public/services/jira.png | Bin
{apps/app => web}/public/services/json.svg | 0
{apps/app => web}/public/services/slack.png | Bin
.../app => web}/public/site.webmanifest.json | 0
{apps/app => web}/public/sw.js | 0
{apps/app => web}/public/sw.js.map | 0
{apps/app => web}/public/user.png | Bin
{apps/app => web}/public/workbox-7805bd61.js | 0
.../public/workbox-7805bd61.js.map | 0
{apps/app => web}/sentry.client.config.js | 0
{apps/app => web}/sentry.edge.config.js | 0
{apps/app => web}/sentry.properties | 0
{apps/app => web}/sentry.server.config.js | 0
{apps/app => web}/services/ai.service.ts | 0
.../app => web}/services/analytics.service.ts | 0
{apps/app => web}/services/api.service.ts | 0
.../services/app-installations.service.ts | 20 +-
.../services/authentication.service.ts | 0
{apps/app => web}/services/cycles.service.ts | 0
.../app => web}/services/estimates.service.ts | 0
{apps/app => web}/services/file.service.ts | 0
{apps/app => web}/services/inbox.service.ts | 0
.../services/integration/csv.services.ts | 0
.../services/integration/github.service.ts | 0
.../app => web}/services/integration/index.ts | 0
.../services/integration/jira.service.ts | 0
{apps/app => web}/services/issues.service.ts | 0
{apps/app => web}/services/modules.service.ts | 11 +-
.../services/notifications.service.ts | 0
{apps/app => web}/services/pages.service.ts | 0
.../services/project-publish.service.ts | 0
{apps/app => web}/services/project.service.ts | 0
.../app => web}/services/reaction.service.ts | 0
{apps/app => web}/services/state.service.ts | 0
.../services/track-event.service.ts | 0
{apps/app => web}/services/user.service.ts | 0
{apps/app => web}/services/views.service.ts | 0
.../services/web-waitlist.service.ts | 0
.../app => web}/services/workspace.service.ts | 0
{apps/app => web}/store/issues.ts | 0
{apps/app => web}/store/project-publish.tsx | 0
{apps/app => web}/store/root.ts | 0
{apps/app => web}/store/theme.ts | 0
{apps/app => web}/store/user.ts | 0
{apps/app => web}/styles/command-pallette.css | 0
{apps/space => web}/styles/editor.css | 0
{apps/app => web}/styles/globals.css | 0
{apps/app => web}/styles/nprogress.css | 0
{apps/app => web}/styles/react-datepicker.css | 0
{apps/app => web}/tailwind.config.js | 0
web/tsconfig.json | 9 +
{apps/app => web}/types/ai.d.ts | 0
{apps/app => web}/types/analytics.d.ts | 0
{apps/app => web}/types/calendar.ts | 0
{apps/app => web}/types/cycles.d.ts | 0
{apps/app => web}/types/estimate.d.ts | 0
.../types/importer/github-importer.d.ts | 0
{apps/app => web}/types/importer/index.ts | 0
.../types/importer/jira-importer.d.ts | 0
{apps/app => web}/types/inbox.d.ts | 0
{apps/app => web}/types/index.d.ts | 1 -
{apps/app => web}/types/integration.d.ts | 0
{apps/app => web}/types/issues.d.ts | 0
{apps/app => web}/types/modules.d.ts | 0
{apps/app => web}/types/notifications.d.ts | 0
{apps/app => web}/types/pages.d.ts | 0
{apps/app => web}/types/projects.d.ts | 2 +-
{apps/app => web}/types/reaction.d.ts | 0
{apps/app => web}/types/state.d.ts | 0
{apps/app => web}/types/users.d.ts | 2 +-
{apps/app => web}/types/views.d.ts | 0
{apps/app => web}/types/waitlist.d.ts | 0
{apps/app => web}/types/workspace.d.ts | 0
yarn.lock | 56 ++-
1022 files changed, 1475 insertions(+), 1240 deletions(-)
create mode 100644 .gitpod.yml
delete mode 100644 apps/app/components/icons/blocked-icon.tsx
delete mode 100644 apps/app/components/icons/blocker-icon.tsx
delete mode 100644 apps/app/components/icons/bolt-icon.tsx
delete mode 100644 apps/app/components/icons/cancel-icon.tsx
delete mode 100644 apps/app/components/icons/clipboard-icon.tsx
delete mode 100644 apps/app/components/icons/comment-icon.tsx
delete mode 100644 apps/app/components/icons/completed-cycle-icon.tsx
delete mode 100644 apps/app/components/icons/current-cycle-icon.tsx
delete mode 100644 apps/app/components/icons/edit-icon.tsx
delete mode 100644 apps/app/components/icons/ellipsis-horizontal-icon.tsx
delete mode 100644 apps/app/components/icons/lock-icon.tsx
delete mode 100644 apps/app/components/icons/menu-icon.tsx
delete mode 100644 apps/app/components/icons/plus-icon.tsx
delete mode 100644 apps/app/components/icons/question-mark-circle-icon.tsx
delete mode 100644 apps/app/components/icons/signal-cellular-icon.tsx
delete mode 100644 apps/app/components/icons/tag-icon.tsx
delete mode 100644 apps/app/components/icons/transfer-icon.tsx
delete mode 100644 apps/app/components/icons/tune-icon.tsx
delete mode 100644 apps/app/components/icons/upcoming-cycle-icon.tsx
delete mode 100644 apps/app/components/icons/user-icon-circle.tsx
delete mode 100644 apps/app/components/icons/user-icon.tsx
delete mode 100644 apps/app/components/integration/slack/index.ts
delete mode 100644 apps/app/components/tiptap/table-menu/InsertBottomTableIcon.tsx
delete mode 100644 apps/app/components/tiptap/table-menu/InsertLeftTableIcon.tsx
delete mode 100644 apps/app/components/tiptap/table-menu/InsertRightTableIcon.tsx
delete mode 100644 apps/app/components/tiptap/table-menu/InsertTopTableIcon.tsx
delete mode 100644 apps/space/public/logos/github-black.png
delete mode 100644 apps/space/public/logos/github-square.png
delete mode 100644 apps/space/public/logos/github-white.png
delete mode 100644 apps/space/public/plane-logo.webp
delete mode 100644 apps/space/public/plane-logos/blue-without-text.png
delete mode 100644 apps/space/tsconfig.json
rename {apps/space => space}/.env.example (100%)
rename {apps/app => space}/.eslintrc.js (100%)
rename {apps/space => space}/.gitignore (100%)
rename {apps/space => space}/.prettierignore (100%)
rename {apps/space => space}/.prettierrc.json (100%)
rename {apps/space => space}/Dockerfile.space (81%)
rename {apps/space => space}/README.md (100%)
rename {apps/space => space}/components/accounts/email-code-form.tsx (100%)
rename {apps/space => space}/components/accounts/email-password-form.tsx (100%)
rename {apps/space => space}/components/accounts/email-reset-password-form.tsx (100%)
rename {apps/space => space}/components/accounts/github-login-button.tsx (93%)
rename {apps/space => space}/components/accounts/google-login.tsx (100%)
rename {apps/space => space}/components/accounts/index.ts (100%)
rename {apps/space => space}/components/accounts/onboarding-form.tsx (100%)
rename {apps/space => space}/components/icons/index.ts (100%)
rename {apps/space => space}/components/icons/issue-group/backlog-state-icon.tsx (100%)
rename {apps/space => space}/components/icons/issue-group/cancelled-state-icon.tsx (100%)
rename {apps/space => space}/components/icons/issue-group/completed-state-icon.tsx (100%)
rename {apps/space => space}/components/icons/issue-group/started-state-icon.tsx (100%)
rename {apps/space => space}/components/icons/issue-group/unstarted-state-icon.tsx (100%)
rename {apps/space => space}/components/icons/types.d.ts (100%)
rename {apps/space => space}/components/issues/board-views/block-downvotes.tsx (100%)
rename {apps/space => space}/components/issues/board-views/block-due-date.tsx (100%)
rename {apps/space => space}/components/issues/board-views/block-labels.tsx (100%)
rename {apps/space => space}/components/issues/board-views/block-priority.tsx (100%)
rename {apps/space => space}/components/issues/board-views/block-state.tsx (100%)
rename {apps/space => space}/components/issues/board-views/block-upvotes.tsx (100%)
rename {apps/space => space}/components/issues/board-views/calendar/index.tsx (100%)
rename {apps/space => space}/components/issues/board-views/gantt/index.tsx (100%)
rename {apps/space => space}/components/issues/board-views/kanban/block.tsx (98%)
rename {apps/space => space}/components/issues/board-views/kanban/header.tsx (100%)
rename {apps/space => space}/components/issues/board-views/kanban/index.tsx (100%)
rename {apps/space => space}/components/issues/board-views/list/block.tsx (98%)
rename {apps/space => space}/components/issues/board-views/list/header.tsx (100%)
rename {apps/space => space}/components/issues/board-views/list/index.tsx (100%)
rename {apps/space => space}/components/issues/board-views/spreadsheet/index.tsx (100%)
rename {apps/space => space}/components/issues/filters-render/index.tsx (100%)
rename {apps/space => space}/components/issues/filters-render/label/filter-label-block.tsx (100%)
rename {apps/space => space}/components/issues/filters-render/label/index.tsx (100%)
rename {apps/space => space}/components/issues/filters-render/priority/filter-priority-block.tsx (100%)
rename {apps/space => space}/components/issues/filters-render/priority/index.tsx (100%)
rename {apps/space => space}/components/issues/filters-render/state/filter-state-block.tsx (100%)
rename {apps/space => space}/components/issues/filters-render/state/index.tsx (100%)
rename {apps/space => space}/components/issues/navbar/index.tsx (100%)
rename {apps/space => space}/components/issues/navbar/issue-board-view.tsx (100%)
rename {apps/space => space}/components/issues/navbar/issue-filter.tsx (100%)
rename {apps/space => space}/components/issues/navbar/issue-view.tsx (100%)
rename {apps/space => space}/components/issues/navbar/search.tsx (100%)
rename {apps/space => space}/components/issues/navbar/theme.tsx (100%)
rename {apps/space => space}/components/issues/peek-overview/add-comment.tsx (100%)
rename {apps/space => space}/components/issues/peek-overview/comment-detail-card.tsx (100%)
rename {apps/space => space}/components/issues/peek-overview/full-screen-peek-view.tsx (100%)
rename {apps/space => space}/components/issues/peek-overview/header.tsx (100%)
rename {apps/space => space}/components/issues/peek-overview/index.ts (100%)
rename {apps/space => space}/components/issues/peek-overview/issue-activity.tsx (100%)
rename {apps/space => space}/components/issues/peek-overview/issue-details.tsx (100%)
rename {apps/space => space}/components/issues/peek-overview/issue-emoji-reactions.tsx (100%)
rename {apps/space => space}/components/issues/peek-overview/issue-properties.tsx (100%)
rename {apps/space => space}/components/issues/peek-overview/issue-reaction.tsx (100%)
rename {apps/space => space}/components/issues/peek-overview/issue-vote-reactions.tsx (100%)
rename {apps/space => space}/components/issues/peek-overview/layout.tsx (100%)
rename {apps/space => space}/components/issues/peek-overview/side-peek-view.tsx (100%)
rename {apps/space => space}/components/tiptap/bubble-menu/index.tsx (100%)
rename {apps/app => space}/components/tiptap/bubble-menu/link-selector.tsx (92%)
rename {apps/app => space}/components/tiptap/bubble-menu/node-selector.tsx (92%)
rename {apps/app => space}/components/tiptap/bubble-menu/utils/link-validator.tsx (99%)
rename {apps/app => space}/components/tiptap/extensions/image-resize.tsx (78%)
rename {apps/space => space}/components/tiptap/extensions/index.tsx (93%)
rename {apps/app => space}/components/tiptap/extensions/updated-image.tsx (95%)
rename {apps/space => space}/components/tiptap/index.tsx (96%)
rename {apps/space => space}/components/tiptap/plugins/delete-image.tsx (90%)
rename {apps/space => space}/components/tiptap/plugins/upload-image.tsx (80%)
rename {apps/space => space}/components/tiptap/props.tsx (77%)
rename {apps/space => space}/components/tiptap/slash-command/index.tsx (53%)
rename {apps/app => space}/components/tiptap/utils.ts (100%)
rename {apps/space => space}/components/ui/dropdown.tsx (100%)
rename {apps/space => space}/components/ui/icon.tsx (100%)
rename {apps/space => space}/components/ui/index.ts (100%)
rename {apps/space => space}/components/ui/input.tsx (100%)
rename {apps/app => space}/components/ui/loader.tsx (100%)
rename {apps/space => space}/components/ui/primary-button.tsx (100%)
rename {apps/space => space}/components/ui/reaction-selector.tsx (100%)
rename {apps/space => space}/components/ui/secondary-button.tsx (100%)
rename {apps/space => space}/components/ui/toast-alert.tsx (100%)
rename {apps/space => space}/components/ui/tooltip.tsx (100%)
rename {apps/space => space}/components/views/project-details.tsx (100%)
rename {apps/space => space}/constants/data.ts (100%)
rename {apps/space => space}/constants/helpers.ts (100%)
rename {apps/space => space}/constants/seo.ts (100%)
rename {apps/space => space}/constants/workspace.ts (100%)
rename {apps/space => space}/contexts/toast.context.tsx (100%)
rename {apps/space => space}/helpers/date-time.helper.ts (100%)
rename {apps/space => space}/helpers/emoji.helper.tsx (100%)
rename {apps/space => space}/helpers/string.helper.ts (100%)
rename {apps/space => space}/hooks/use-outside-click.tsx (100%)
rename {apps/app => space}/hooks/use-timer.tsx (100%)
rename {apps/app => space}/hooks/use-toast.tsx (100%)
rename {apps/space => space}/layouts/project-layout.tsx (84%)
rename {apps/space => space}/lib/index.ts (100%)
rename {apps/space => space}/lib/mobx/store-init.tsx (100%)
rename {apps/app => space}/lib/mobx/store-provider.tsx (100%)
rename {apps/space => space}/next.config.js (55%)
rename {apps/space => space}/package.json (95%)
rename {apps/space => space}/pages/404.tsx (90%)
rename {apps/space => space}/pages/[workspace_slug]/[project_slug]/index.tsx (100%)
rename {apps/space => space}/pages/[workspace_slug]/index.tsx (92%)
rename {apps/space => space}/pages/_app.tsx (75%)
rename {apps/space => space}/pages/_document.tsx (100%)
rename {apps/space => space}/pages/index.tsx (99%)
rename {apps/space => space}/pages/onboarding/index.tsx (95%)
rename {apps/space => space}/pages/project-not-published/index.tsx (87%)
rename {apps/app => space}/postcss.config.js (100%)
rename {apps/app => space}/public/404.svg (100%)
rename {apps/app => space}/public/favicon/android-chrome-192x192.png (100%)
rename {apps/app => space}/public/favicon/android-chrome-512x512.png (100%)
rename {apps/app => space}/public/favicon/apple-touch-icon.png (100%)
rename {apps/app => space}/public/favicon/favicon-16x16.png (100%)
rename {apps/app => space}/public/favicon/favicon-32x32.png (100%)
rename {apps/app => space}/public/favicon/favicon.ico (100%)
rename {apps/app => space}/public/favicon/site.webmanifest (100%)
create mode 100644 space/public/logos/github-black.svg
create mode 100644 space/public/logos/github-square.svg
create mode 100644 space/public/logos/github-white.svg
create mode 100644 space/public/plane-logo.svg
rename {apps/app => space}/public/plane-logos/black-horizontal-with-blue-logo.svg (100%)
create mode 100644 space/public/plane-logos/blue-without-text.svg
rename {apps/app => space}/public/plane-logos/white-horizontal-with-blue-logo.svg (100%)
rename {apps/app => space}/public/plane-logos/white-horizontal.svg (100%)
rename {apps/space => space}/public/project-not-published.svg (100%)
rename {apps/space => space}/services/api.service.ts (100%)
rename {apps/space => space}/services/authentication.service.ts (100%)
rename {apps/space => space}/services/file.service.ts (100%)
rename {apps/space => space}/services/issue.service.ts (100%)
rename {apps/space => space}/services/project.service.ts (100%)
rename {apps/space => space}/services/user.service.ts (100%)
rename {apps/space => space}/store/issue.ts (100%)
rename {apps/space => space}/store/issue_details.ts (100%)
rename {apps/space => space}/store/project.ts (100%)
rename {apps/space => space}/store/root.ts (100%)
rename {apps/space => space}/store/user.ts (100%)
rename {apps/app => space}/styles/editor.css (100%)
rename {apps/space => space}/styles/globals.css (100%)
rename {apps/space => space}/tailwind.config.js (100%)
rename {apps/app => space}/tsconfig.json (100%)
rename {apps/space => space}/types/issue.ts (100%)
rename {apps/space => space}/types/project.ts (100%)
rename {apps/space => space}/types/theme.ts (100%)
rename {apps/space => space}/types/user.ts (100%)
create mode 100644 web/.eslintrc.js
rename {apps/app => web}/.prettierrc (100%)
rename {apps/app => web}/Dockerfile.dev (100%)
rename {apps/app => web}/Dockerfile.web (81%)
rename {apps/app => web}/components/account/email-code-form.tsx (100%)
rename {apps/app => web}/components/account/email-password-form.tsx (100%)
rename {apps/app => web}/components/account/email-reset-password-form.tsx (100%)
rename {apps/app => web}/components/account/github-login-button.tsx (100%)
rename {apps/app => web}/components/account/google-login.tsx (100%)
rename {apps/app => web}/components/account/index.ts (100%)
rename {apps/app => web}/components/analytics/custom-analytics/create-update-analytics-modal.tsx (100%)
rename {apps/app => web}/components/analytics/custom-analytics/custom-analytics.tsx (100%)
rename {apps/app => web}/components/analytics/custom-analytics/graph/custom-tooltip.tsx (100%)
rename {apps/app => web}/components/analytics/custom-analytics/graph/index.tsx (100%)
rename {apps/app => web}/components/analytics/custom-analytics/index.ts (100%)
rename {apps/app => web}/components/analytics/custom-analytics/select-bar.tsx (100%)
rename {apps/app => web}/components/analytics/custom-analytics/sidebar.tsx (100%)
rename {apps/app => web}/components/analytics/custom-analytics/table.tsx (100%)
rename {apps/app => web}/components/analytics/index.ts (100%)
rename {apps/app => web}/components/analytics/project-modal.tsx (100%)
rename {apps/app => web}/components/analytics/scope-and-demand/demand.tsx (100%)
rename {apps/app => web}/components/analytics/scope-and-demand/index.ts (100%)
rename {apps/app => web}/components/analytics/scope-and-demand/leaderboard.tsx (100%)
rename {apps/app => web}/components/analytics/scope-and-demand/scope-and-demand.tsx (100%)
rename {apps/app => web}/components/analytics/scope-and-demand/scope.tsx (100%)
rename {apps/app => web}/components/analytics/scope-and-demand/year-wise-issues.tsx (100%)
rename {apps/app => web}/components/analytics/select/index.ts (100%)
rename {apps/app => web}/components/analytics/select/project.tsx (100%)
rename {apps/app => web}/components/analytics/select/segment.tsx (100%)
rename {apps/app => web}/components/analytics/select/x-axis.tsx (100%)
rename {apps/app => web}/components/analytics/select/y-axis.tsx (100%)
rename {apps/app => web}/components/auth-screens/index.ts (100%)
rename {apps/app => web}/components/auth-screens/not-authorized-view.tsx (100%)
rename {apps/app => web}/components/auth-screens/project/index.ts (100%)
rename {apps/app => web}/components/auth-screens/project/join-project.tsx (100%)
rename {apps/app => web}/components/auth-screens/workspace/index.ts (100%)
rename {apps/app => web}/components/auth-screens/workspace/not-a-member.tsx (100%)
rename {apps/app => web}/components/automation/auto-archive-automation.tsx (100%)
rename {apps/app => web}/components/automation/auto-close-automation.tsx (100%)
rename {apps/app => web}/components/automation/index.ts (100%)
rename {apps/app => web}/components/automation/select-month-modal.tsx (100%)
rename {apps/app => web}/components/breadcrumbs/index.tsx (100%)
rename {apps/app => web}/components/command-palette/change-interface-theme.tsx (100%)
rename {apps/app => web}/components/command-palette/command-k.tsx (100%)
rename {apps/app => web}/components/command-palette/command-pallette.tsx (80%)
rename {apps/app => web}/components/command-palette/helpers.tsx (100%)
rename {apps/app => web}/components/command-palette/index.ts (100%)
rename {apps/app => web}/components/command-palette/issue/change-issue-assignee.tsx (100%)
rename {apps/app => web}/components/command-palette/issue/change-issue-priority.tsx (100%)
rename {apps/app => web}/components/command-palette/issue/change-issue-state.tsx (100%)
rename {apps/app => web}/components/command-palette/issue/index.ts (100%)
rename {apps/app => web}/components/command-palette/shortcuts-modal.tsx (100%)
rename {apps/app => web}/components/core/activity.tsx (100%)
rename {apps/app => web}/components/core/filters/date-filter-modal.tsx (100%)
rename {apps/app => web}/components/core/filters/date-filter-select.tsx (100%)
rename {apps/app => web}/components/core/filters/filters-list.tsx (100%)
rename {apps/app => web}/components/core/filters/index.ts (100%)
rename {apps/app => web}/components/core/filters/issues-view-filter.tsx (100%)
rename {apps/app => web}/components/core/image-picker-popover.tsx (100%)
rename {apps/app => web}/components/core/index.ts (100%)
rename {apps/app => web}/components/core/modals/bulk-delete-issues-modal.tsx (100%)
rename {apps/app => web}/components/core/modals/existing-issues-list-modal.tsx (100%)
rename {apps/app => web}/components/core/modals/gpt-assistant-modal.tsx (100%)
rename {apps/app => web}/components/core/modals/image-upload-modal.tsx (100%)
rename {apps/app => web}/components/core/modals/index.ts (100%)
rename {apps/app => web}/components/core/modals/link-modal.tsx (100%)
rename {apps/app => web}/components/core/reaction-selector.tsx (100%)
rename {apps/app => web}/components/core/sidebar/index.ts (100%)
rename {apps/app => web}/components/core/sidebar/links-list.tsx (100%)
rename {apps/app => web}/components/core/sidebar/progress-chart.tsx (100%)
rename {apps/app => web}/components/core/sidebar/sidebar-progress-stats.tsx (100%)
rename {apps/app => web}/components/core/sidebar/single-progress-stats.tsx (100%)
rename {apps/app => web}/components/core/theme/color-picker-input.tsx (100%)
rename {apps/app => web}/components/core/theme/custom-theme-selector.tsx (100%)
rename {apps/app => web}/components/core/theme/index.ts (100%)
rename {apps/app => web}/components/core/theme/theme-switch.tsx (100%)
rename {apps/app => web}/components/core/views/all-views.tsx (100%)
rename {apps/app => web}/components/core/views/board-view/all-boards.tsx (100%)
rename {apps/app => web}/components/core/views/board-view/board-header.tsx (100%)
rename {apps/app => web}/components/core/views/board-view/index.ts (100%)
rename {apps/app => web}/components/core/views/board-view/single-board.tsx (100%)
rename {apps/app => web}/components/core/views/board-view/single-issue.tsx (100%)
rename {apps/app => web}/components/core/views/calendar-view/calendar-header.tsx (100%)
rename {apps/app => web}/components/core/views/calendar-view/calendar.tsx (100%)
rename {apps/app => web}/components/core/views/calendar-view/index.ts (100%)
rename {apps/app => web}/components/core/views/calendar-view/single-date.tsx (100%)
rename {apps/app => web}/components/core/views/calendar-view/single-issue.tsx (100%)
rename {apps/app => web}/components/core/views/gantt-chart-view/index.tsx (100%)
rename {apps/app => web}/components/core/views/index.ts (100%)
rename {apps/app => web}/components/core/views/issues-view.tsx (100%)
rename {apps/app => web}/components/core/views/list-view/all-lists.tsx (100%)
rename {apps/app => web}/components/core/views/list-view/index.ts (100%)
rename {apps/app => web}/components/core/views/list-view/single-issue.tsx (100%)
rename {apps/app => web}/components/core/views/list-view/single-list.tsx (100%)
rename {apps/app => web}/components/core/views/spreadsheet-view/index.ts (100%)
rename {apps/app => web}/components/core/views/spreadsheet-view/single-issue.tsx (100%)
rename {apps/app => web}/components/core/views/spreadsheet-view/spreadsheet-columns.tsx (100%)
rename {apps/app => web}/components/core/views/spreadsheet-view/spreadsheet-issues.tsx (100%)
rename {apps/app => web}/components/core/views/spreadsheet-view/spreadsheet-view.tsx (100%)
rename {apps/app => web}/components/cycles/active-cycle-details.tsx (100%)
rename {apps/app => web}/components/cycles/active-cycle-stats.tsx (100%)
rename {apps/app => web}/components/cycles/cycles-list/all-cycles-list.tsx (100%)
rename {apps/app => web}/components/cycles/cycles-list/completed-cycles-list.tsx (100%)
rename {apps/app => web}/components/cycles/cycles-list/draft-cycles-list.tsx (100%)
rename {apps/app => web}/components/cycles/cycles-list/index.ts (100%)
rename {apps/app => web}/components/cycles/cycles-list/upcoming-cycles-list.tsx (100%)
rename {apps/app => web}/components/cycles/cycles-view.tsx (100%)
rename {apps/app => web}/components/cycles/delete-cycle-modal.tsx (100%)
rename {apps/app => web}/components/cycles/form.tsx (100%)
rename {apps/app => web}/components/cycles/gantt-chart/blocks.tsx (100%)
rename {apps/app => web}/components/cycles/gantt-chart/cycle-issues-layout.tsx (100%)
rename {apps/app => web}/components/cycles/gantt-chart/cycles-list-layout.tsx (100%)
rename {apps/app => web}/components/cycles/gantt-chart/index.ts (100%)
rename {apps/app => web}/components/cycles/index.ts (100%)
rename {apps/app => web}/components/cycles/modal.tsx (100%)
rename {apps/app => web}/components/cycles/select.tsx (100%)
rename {apps/app => web}/components/cycles/sidebar.tsx (100%)
rename {apps/app => web}/components/cycles/single-cycle-card.tsx (100%)
rename {apps/app => web}/components/cycles/single-cycle-list.tsx (100%)
rename {apps/app => web}/components/cycles/transfer-issues-modal.tsx (100%)
rename {apps/app => web}/components/cycles/transfer-issues.tsx (100%)
rename {apps/app => web}/components/dnd/StrictModeDroppable.tsx (100%)
rename {apps/app => web}/components/emoji-icon-picker/emojis.json (100%)
rename {apps/app => web}/components/emoji-icon-picker/helpers.ts (100%)
rename {apps/app => web}/components/emoji-icon-picker/icons.json (100%)
rename {apps/app => web}/components/emoji-icon-picker/index.tsx (100%)
rename {apps/app => web}/components/emoji-icon-picker/types.d.ts (100%)
rename {apps/app => web}/components/estimates/create-update-estimate-modal.tsx (100%)
rename {apps/app => web}/components/estimates/delete-estimate-modal.tsx (100%)
rename {apps/app => web}/components/estimates/index.tsx (100%)
rename {apps/app => web}/components/estimates/single-estimate.tsx (100%)
rename {apps/app => web}/components/exporter/export-modal.tsx (100%)
rename {apps/app => web}/components/exporter/guide.tsx (100%)
rename {apps/app => web}/components/exporter/index.tsx (100%)
rename {apps/app => web}/components/exporter/single-export.tsx (100%)
rename {apps/app => web}/components/gantt-chart/blocks/blocks-display.tsx (100%)
rename {apps/app => web}/components/gantt-chart/blocks/index.ts (100%)
rename {apps/app => web}/components/gantt-chart/chart/bi-week.tsx (100%)
rename {apps/app => web}/components/gantt-chart/chart/day.tsx (100%)
rename {apps/app => web}/components/gantt-chart/chart/hours.tsx (100%)
rename {apps/app => web}/components/gantt-chart/chart/index.tsx (100%)
rename {apps/app => web}/components/gantt-chart/chart/month.tsx (100%)
rename {apps/app => web}/components/gantt-chart/chart/quarter.tsx (100%)
rename {apps/app => web}/components/gantt-chart/chart/week.tsx (100%)
rename {apps/app => web}/components/gantt-chart/chart/year.tsx (100%)
rename {apps/app => web}/components/gantt-chart/contexts/index.tsx (100%)
rename {apps/app => web}/components/gantt-chart/data/index.ts (100%)
rename {apps/app => web}/components/gantt-chart/helpers/block-structure.tsx (100%)
rename {apps/app => web}/components/gantt-chart/helpers/draggable.tsx (100%)
rename {apps/app => web}/components/gantt-chart/helpers/index.ts (100%)
rename {apps/app => web}/components/gantt-chart/hooks/block-update.tsx (100%)
rename {apps/app => web}/components/gantt-chart/hooks/index.tsx (100%)
rename {apps/app => web}/components/gantt-chart/index.ts (100%)
rename {apps/app => web}/components/gantt-chart/root.tsx (100%)
rename {apps/app => web}/components/gantt-chart/sidebar.tsx (100%)
rename {apps/app => web}/components/gantt-chart/types/index.ts (100%)
rename {apps/app => web}/components/gantt-chart/views/bi-week-view.ts (100%)
rename {apps/app => web}/components/gantt-chart/views/day-view.ts (93%)
rename {apps/app => web}/components/gantt-chart/views/helpers.ts (100%)
rename {apps/app => web}/components/gantt-chart/views/hours-view.ts (93%)
rename {apps/app => web}/components/gantt-chart/views/index.ts (100%)
rename {apps/app => web}/components/gantt-chart/views/month-view.ts (100%)
rename {apps/app => web}/components/gantt-chart/views/quater-view.ts (100%)
rename {apps/app => web}/components/gantt-chart/views/week-view.ts (100%)
rename {apps/app => web}/components/gantt-chart/views/year-view.ts (100%)
rename {apps/app => web}/components/icons/alarm-clock-icon.tsx (100%)
rename {apps/app => web}/components/icons/archive-icon.tsx (100%)
rename {apps/app => web}/components/icons/arrow-right.tsx (100%)
rename {apps/app => web}/components/icons/assignment-clipboard-icon.tsx (100%)
rename {apps/app => web}/components/icons/attachment-icon.tsx (100%)
rename {apps/app => web}/components/icons/audio-file-icon.tsx (78%)
rename {apps/app => web}/components/icons/backlog-state-icon.tsx (100%)
rename {apps/app => web}/components/icons/bell-icon.tsx (100%)
create mode 100644 web/components/icons/blocked-icon.tsx
create mode 100644 web/components/icons/blocker-icon.tsx
create mode 100644 web/components/icons/bolt-icon.tsx
rename {apps/app => web}/components/icons/calendar-after-icon.tsx (100%)
rename {apps/app => web}/components/icons/calendar-before-icon.tsx (100%)
rename {apps/app => web}/components/icons/calendar-month-icon.tsx (100%)
create mode 100644 web/components/icons/cancel-icon.tsx
rename {apps/app => web}/components/icons/cancelled-state-icon.tsx (100%)
rename {apps/app => web}/components/icons/check.tsx (100%)
create mode 100644 web/components/icons/clipboard-icon.tsx
rename {apps/app => web}/components/icons/clock-icon.tsx (100%)
rename {apps/app => web}/components/icons/cloud-upload.tsx (100%)
rename {apps/app => web}/components/icons/cmd-icon.tsx (100%)
rename {apps/app => web}/components/icons/cog.tsx (100%)
rename {apps/app => web}/components/icons/color-pallette-icon.tsx (100%)
rename {apps/app => web}/components/icons/color-picker-icon.tsx (100%)
rename {apps/app => web}/components/icons/command-icon.tsx (100%)
create mode 100644 web/components/icons/comment-icon.tsx
create mode 100644 web/components/icons/completed-cycle-icon.tsx
rename {apps/app => web}/components/icons/completed-state-icon.tsx (100%)
rename {apps/app => web}/components/icons/contrast-icon.tsx (100%)
rename {apps/app => web}/components/icons/css-file-icon.tsx (78%)
rename {apps/app => web}/components/icons/csv-file-icon.tsx (78%)
create mode 100644 web/components/icons/current-cycle-icon.tsx
rename {apps/app => web}/components/icons/cycle-icon.tsx (100%)
rename {apps/app => web}/components/icons/default-file-icon.tsx (78%)
rename {apps/app => web}/components/icons/discord-icon.tsx (100%)
rename {apps/app => web}/components/icons/doc-file-icon.tsx (78%)
rename {apps/app => web}/components/icons/document-icon.tsx (82%)
create mode 100644 web/components/icons/edit-icon.tsx
create mode 100644 web/components/icons/ellipsis-horizontal-icon.tsx
rename {apps/app => web}/components/icons/exclamation-icon.tsx (100%)
rename {apps/app => web}/components/icons/external-link-icon.tsx (100%)
rename {apps/app => web}/components/icons/figma-file-icon.tsx (78%)
rename {apps/app => web}/components/icons/github-icon.tsx (100%)
rename {apps/app => web}/components/icons/grid-view-icons.tsx (100%)
rename {apps/app => web}/components/icons/heartbeat-icon.tsx (100%)
rename {apps/app => web}/components/icons/html-file-icon.tsx (78%)
rename {apps/app => web}/components/icons/img-file-icon.tsx (78%)
rename {apps/app => web}/components/icons/import-layers.tsx (100%)
rename {apps/app => web}/components/icons/inbox-icon.tsx (100%)
rename {apps/app => web}/components/icons/index.ts (100%)
rename {apps/app => web}/components/icons/jpg-file-icon.tsx (78%)
rename {apps/app => web}/components/icons/js-file-icon.tsx (97%)
rename {apps/app => web}/components/icons/layer-diagonal-icon.tsx (100%)
create mode 100644 web/components/icons/lock-icon.tsx
create mode 100644 web/components/icons/menu-icon.tsx
rename {apps/app => web}/components/icons/module/backlog.tsx (100%)
rename {apps/app => web}/components/icons/module/cancelled.tsx (100%)
rename {apps/app => web}/components/icons/module/completed.tsx (100%)
rename {apps/app => web}/components/icons/module/in-progress.tsx (100%)
rename {apps/app => web}/components/icons/module/index.ts (100%)
rename {apps/app => web}/components/icons/module/module-status-icon.tsx (100%)
rename {apps/app => web}/components/icons/module/paused.tsx (100%)
rename {apps/app => web}/components/icons/module/planned.tsx (100%)
rename {apps/app => web}/components/icons/pdf-file-icon.tsx (78%)
rename {apps/app => web}/components/icons/pencil-scribble-icon.tsx (100%)
rename {apps/app => web}/components/icons/people-group-icon.tsx (100%)
rename {apps/app => web}/components/icons/person-running-icon.tsx (100%)
create mode 100644 web/components/icons/plus-icon.tsx
rename {apps/app => web}/components/icons/png-file-icon.tsx (78%)
rename {apps/app => web}/components/icons/priority-icon.tsx (100%)
create mode 100644 web/components/icons/question-mark-circle-icon.tsx
rename {apps/app => web}/components/icons/setting-icon.tsx (100%)
rename {apps/app => web}/components/icons/sheet-file-icon.tsx (78%)
create mode 100644 web/components/icons/signal-cellular-icon.tsx
rename {apps/app => web}/components/icons/single-comment-icon.tsx (100%)
rename {apps/app => web}/components/icons/sort-icon.tsx (100%)
rename {apps/app => web}/components/icons/stacked-layers-horizontal-icon.tsx (100%)
rename {apps/app => web}/components/icons/stacked-layers-icon.tsx (100%)
rename {apps/app => web}/components/icons/started-state-icon.tsx (100%)
rename {apps/app => web}/components/icons/state-group-icon.tsx (100%)
rename {apps/app => web}/components/icons/svg-file-icon.tsx (78%)
create mode 100644 web/components/icons/tag-icon.tsx
rename {apps/app => web}/components/icons/target-icon.tsx (100%)
rename {apps/app => web}/components/icons/tick-mark-icon.tsx (100%)
create mode 100644 web/components/icons/transfer-icon.tsx
rename {apps/app => web}/components/icons/triangle-exclamation-icon.tsx (100%)
create mode 100644 web/components/icons/tune-icon.tsx
rename {apps/app => web}/components/icons/txt-file-icon.tsx (78%)
rename {apps/app => web}/components/icons/types.d.ts (100%)
rename {apps/app => web}/components/icons/unstarted-state-icon.tsx (100%)
create mode 100644 web/components/icons/upcoming-cycle-icon.tsx
rename {apps/app => web}/components/icons/user-group-icon.tsx (100%)
create mode 100644 web/components/icons/user-icon-circle.tsx
create mode 100644 web/components/icons/user-icon.tsx
rename {apps/app => web}/components/icons/users.tsx (100%)
rename {apps/app => web}/components/icons/video-file-icon.tsx (78%)
rename {apps/app => web}/components/icons/view-list-icon.tsx (100%)
rename {apps/app => web}/components/icons/water-drop-icon.tsx (100%)
rename {apps/app => web}/components/icons/x-mark-icon.tsx (100%)
rename {apps/app => web}/components/inbox/accept-issue-modal.tsx (100%)
rename {apps/app => web}/components/inbox/decline-issue-modal.tsx (100%)
rename {apps/app => web}/components/inbox/delete-issue-modal.tsx (100%)
rename {apps/app => web}/components/inbox/filters-dropdown.tsx (100%)
rename {apps/app => web}/components/inbox/filters-list.tsx (100%)
rename {apps/app => web}/components/inbox/inbox-action-headers.tsx (100%)
rename {apps/app => web}/components/inbox/inbox-issue-activity.tsx (100%)
rename {apps/app => web}/components/inbox/inbox-issue-card.tsx (100%)
rename {apps/app => web}/components/inbox/inbox-main-content.tsx (100%)
rename {apps/app => web}/components/inbox/index.ts (100%)
rename {apps/app => web}/components/inbox/issues-list-sidebar.tsx (100%)
rename {apps/app => web}/components/inbox/select-duplicate.tsx (100%)
rename {apps/app => web}/components/integration/delete-import-modal.tsx (100%)
rename {apps/app => web}/components/integration/github/auth.tsx (100%)
rename {apps/app => web}/components/integration/github/import-configure.tsx (100%)
rename {apps/app => web}/components/integration/github/import-confirm.tsx (100%)
rename {apps/app => web}/components/integration/github/import-data.tsx (100%)
rename {apps/app => web}/components/integration/github/import-users.tsx (100%)
rename {apps/app => web}/components/integration/github/index.ts (100%)
rename {apps/app => web}/components/integration/github/repo-details.tsx (100%)
rename {apps/app => web}/components/integration/github/root.tsx (100%)
rename {apps/app => web}/components/integration/github/select-repository.tsx (100%)
rename {apps/app => web}/components/integration/github/single-user-select.tsx (100%)
rename {apps/app => web}/components/integration/guide.tsx (100%)
rename {apps/app => web}/components/integration/index.ts (100%)
rename {apps/app => web}/components/integration/jira/confirm-import.tsx (100%)
rename {apps/app => web}/components/integration/jira/give-details.tsx (100%)
rename {apps/app => web}/components/integration/jira/import-users.tsx (100%)
rename {apps/app => web}/components/integration/jira/index.ts (100%)
rename {apps/app => web}/components/integration/jira/jira-project-detail.tsx (99%)
rename {apps/app => web}/components/integration/jira/root.tsx (99%)
rename {apps/app => web}/components/integration/single-import.tsx (100%)
rename {apps/app => web}/components/integration/single-integration-card.tsx (100%)
create mode 100644 web/components/integration/slack/index.ts
rename {apps/app => web}/components/integration/slack/select-channel.tsx (100%)
rename {apps/app => web}/components/issues/activity.tsx (100%)
rename {apps/app => web}/components/issues/attachment/attachment-upload.tsx (100%)
rename {apps/app => web}/components/issues/attachment/attachments.tsx (100%)
rename {apps/app => web}/components/issues/attachment/delete-attachment-modal.tsx (100%)
rename {apps/app => web}/components/issues/attachment/index.ts (100%)
rename {apps/app => web}/components/issues/comment/add-comment.tsx (100%)
rename {apps/app => web}/components/issues/comment/comment-card.tsx (100%)
rename {apps/app => web}/components/issues/comment/comment-reaction.tsx (100%)
rename {apps/app => web}/components/issues/comment/index.ts (100%)
rename {apps/app => web}/components/issues/delete-issue-modal.tsx (100%)
rename {apps/app => web}/components/issues/description-form.tsx (100%)
rename {apps/app => web}/components/issues/form.tsx (100%)
rename {apps/app => web}/components/issues/gantt-chart/blocks.tsx (100%)
rename {apps/app => web}/components/issues/gantt-chart/index.ts (100%)
rename {apps/app => web}/components/issues/gantt-chart/layout.tsx (100%)
rename {apps/app => web}/components/issues/index.ts (100%)
rename {apps/app => web}/components/issues/issue-reaction.tsx (100%)
rename {apps/app => web}/components/issues/label.tsx (100%)
rename {apps/app => web}/components/issues/main-content.tsx (100%)
rename {apps/app => web}/components/issues/modal.tsx (100%)
rename {apps/app => web}/components/issues/my-issues/index.ts (100%)
rename {apps/app => web}/components/issues/my-issues/my-issues-select-filters.tsx (100%)
rename {apps/app => web}/components/issues/my-issues/my-issues-view-options.tsx (100%)
rename {apps/app => web}/components/issues/my-issues/my-issues-view.tsx (100%)
rename {apps/app => web}/components/issues/parent-issues-list-modal.tsx (100%)
rename {apps/app => web}/components/issues/peek-overview/full-screen-peek-view.tsx (100%)
rename {apps/app => web}/components/issues/peek-overview/header.tsx (100%)
rename {apps/app => web}/components/issues/peek-overview/index.ts (100%)
rename {apps/app => web}/components/issues/peek-overview/issue-activity.tsx (100%)
rename {apps/app => web}/components/issues/peek-overview/issue-details.tsx (100%)
rename {apps/app => web}/components/issues/peek-overview/issue-properties.tsx (100%)
rename {apps/app => web}/components/issues/peek-overview/layout.tsx (100%)
rename {apps/app => web}/components/issues/peek-overview/side-peek-view.tsx (100%)
rename {apps/app => web}/components/issues/select/assignee.tsx (100%)
rename {apps/app => web}/components/issues/select/date.tsx (100%)
rename {apps/app => web}/components/issues/select/estimate.tsx (100%)
rename {apps/app => web}/components/issues/select/index.ts (100%)
rename {apps/app => web}/components/issues/select/label.tsx (100%)
rename {apps/app => web}/components/issues/select/priority.tsx (100%)
rename {apps/app => web}/components/issues/select/project.tsx (100%)
rename {apps/app => web}/components/issues/select/state.tsx (100%)
rename {apps/app => web}/components/issues/sidebar-select/assignee.tsx (100%)
rename {apps/app => web}/components/issues/sidebar-select/blocked.tsx (100%)
rename {apps/app => web}/components/issues/sidebar-select/blocker.tsx (100%)
rename {apps/app => web}/components/issues/sidebar-select/cycle.tsx (100%)
rename {apps/app => web}/components/issues/sidebar-select/estimate.tsx (100%)
rename {apps/app => web}/components/issues/sidebar-select/index.ts (100%)
rename {apps/app => web}/components/issues/sidebar-select/label.tsx (100%)
rename {apps/app => web}/components/issues/sidebar-select/module.tsx (100%)
rename {apps/app => web}/components/issues/sidebar-select/parent.tsx (100%)
rename {apps/app => web}/components/issues/sidebar-select/priority.tsx (100%)
rename {apps/app => web}/components/issues/sidebar-select/state.tsx (100%)
rename {apps/app => web}/components/issues/sidebar.tsx (100%)
rename {apps/app => web}/components/issues/sub-issues-list.tsx (100%)
rename {apps/app => web}/components/issues/view-select/assignee.tsx (100%)
rename {apps/app => web}/components/issues/view-select/due-date.tsx (100%)
rename {apps/app => web}/components/issues/view-select/estimate.tsx (100%)
rename {apps/app => web}/components/issues/view-select/index.ts (100%)
rename {apps/app => web}/components/issues/view-select/label.tsx (100%)
rename {apps/app => web}/components/issues/view-select/priority.tsx (100%)
rename {apps/app => web}/components/issues/view-select/start-date.tsx (100%)
rename {apps/app => web}/components/issues/view-select/state.tsx (100%)
rename {apps/app => web}/components/labels/create-label-modal.tsx (100%)
rename {apps/app => web}/components/labels/create-update-label-inline.tsx (100%)
rename {apps/app => web}/components/labels/delete-label-modal.tsx (100%)
rename {apps/app => web}/components/labels/index.ts (100%)
rename {apps/app => web}/components/labels/labels-list-modal.tsx (100%)
rename {apps/app => web}/components/labels/single-label-group.tsx (100%)
rename {apps/app => web}/components/labels/single-label.tsx (100%)
rename {apps/app => web}/components/modules/delete-module-modal.tsx (100%)
rename {apps/app => web}/components/modules/form.tsx (100%)
rename {apps/app => web}/components/modules/gantt-chart/blocks.tsx (100%)
rename {apps/app => web}/components/modules/gantt-chart/index.ts (100%)
rename {apps/app => web}/components/modules/gantt-chart/module-issues-layout.tsx (100%)
rename {apps/app => web}/components/modules/gantt-chart/modules-list-layout.tsx (100%)
rename {apps/app => web}/components/modules/index.ts (100%)
rename {apps/app => web}/components/modules/modal.tsx (100%)
rename {apps/app => web}/components/modules/select/index.ts (100%)
rename {apps/app => web}/components/modules/select/lead.tsx (100%)
rename {apps/app => web}/components/modules/select/members.tsx (100%)
rename {apps/app => web}/components/modules/select/status.tsx (100%)
rename {apps/app => web}/components/modules/sidebar-select/index.ts (100%)
rename {apps/app => web}/components/modules/sidebar-select/select-lead.tsx (100%)
rename {apps/app => web}/components/modules/sidebar-select/select-members.tsx (100%)
rename {apps/app => web}/components/modules/sidebar-select/select-status.tsx (100%)
rename {apps/app => web}/components/modules/sidebar.tsx (100%)
rename {apps/app => web}/components/modules/single-module-card.tsx (100%)
rename {apps/app => web}/components/notifications/index.ts (100%)
rename {apps/app => web}/components/notifications/notification-card.tsx (99%)
rename {apps/app => web}/components/notifications/notification-header.tsx (100%)
rename {apps/app => web}/components/notifications/notification-popover.tsx (100%)
rename {apps/app => web}/components/notifications/select-snooze-till-modal.tsx (100%)
rename {apps/app => web}/components/onboarding/index.ts (100%)
rename {apps/app => web}/components/onboarding/invite-members.tsx (100%)
rename {apps/app => web}/components/onboarding/join-workspaces.tsx (100%)
rename {apps/app => web}/components/onboarding/tour/index.ts (100%)
rename {apps/app => web}/components/onboarding/tour/root.tsx (100%)
rename {apps/app => web}/components/onboarding/tour/sidebar.tsx (100%)
rename {apps/app => web}/components/onboarding/user-details.tsx (100%)
rename {apps/app => web}/components/onboarding/workspace.tsx (100%)
rename {apps/app => web}/components/pages/create-block.tsx (100%)
rename {apps/app => web}/components/pages/create-update-block-inline.tsx (100%)
rename {apps/app => web}/components/pages/create-update-page-modal.tsx (100%)
rename {apps/app => web}/components/pages/delete-page-modal.tsx (100%)
rename {apps/app => web}/components/pages/index.ts (100%)
rename {apps/app => web}/components/pages/page-form.tsx (100%)
rename {apps/app => web}/components/pages/pages-list/all-pages-list.tsx (100%)
rename {apps/app => web}/components/pages/pages-list/favorite-pages-list.tsx (100%)
rename {apps/app => web}/components/pages/pages-list/index.ts (100%)
rename {apps/app => web}/components/pages/pages-list/my-pages-list.tsx (100%)
rename {apps/app => web}/components/pages/pages-list/other-pages-list.tsx (100%)
rename {apps/app => web}/components/pages/pages-list/recent-pages-list.tsx (100%)
rename {apps/app => web}/components/pages/pages-list/types.ts (100%)
rename {apps/app => web}/components/pages/pages-view.tsx (100%)
rename {apps/app => web}/components/pages/single-page-block.tsx (100%)
rename {apps/app => web}/components/pages/single-page-detailed-item.tsx (100%)
rename {apps/app => web}/components/pages/single-page-list-item.tsx (100%)
rename {apps/app => web}/components/profile/index.ts (100%)
rename {apps/app => web}/components/profile/navbar.tsx (100%)
rename {apps/app => web}/components/profile/overview/activity.tsx (100%)
rename {apps/app => web}/components/profile/overview/index.ts (100%)
rename {apps/app => web}/components/profile/overview/priority-distribution.tsx (100%)
rename {apps/app => web}/components/profile/overview/state-distribution.tsx (100%)
rename {apps/app => web}/components/profile/overview/stats.tsx (100%)
rename {apps/app => web}/components/profile/overview/workload.tsx (100%)
rename {apps/app => web}/components/profile/profile-issues-view-options.tsx (100%)
rename {apps/app => web}/components/profile/profile-issues-view.tsx (100%)
rename {apps/app => web}/components/profile/sidebar.tsx (100%)
rename {apps/app => web}/components/project/confirm-project-member-remove.tsx (100%)
rename {apps/app => web}/components/project/create-project-modal.tsx (100%)
rename {apps/app => web}/components/project/delete-project-modal.tsx (100%)
rename {apps/app => web}/components/project/index.ts (87%)
rename {apps/app => web}/components/project/join-project-modal.tsx (100%)
rename {apps/app => web}/components/project/publish-project/modal.tsx (100%)
rename {apps/app => web}/components/project/publish-project/popover.tsx (100%)
rename {apps/app => web}/components/project/send-project-invitation-modal.tsx (100%)
rename {apps/app => web}/components/project/settings-header.tsx (100%)
rename {apps/app => web}/components/project/settings/single-label.tsx (100%)
rename {apps/app => web}/components/project/sidebar-list.tsx (100%)
rename {apps/app => web}/components/project/single-integration-card.tsx (100%)
rename {apps/app => web}/components/project/single-project-card.tsx (100%)
rename {apps/app => web}/components/project/single-sidebar-project.tsx (100%)
rename {apps/app => web}/components/search-listbox/index.tsx (100%)
rename {apps/app => web}/components/search-listbox/types.d.ts (100%)
rename {apps/app => web}/components/states/create-state-modal.tsx (100%)
rename {apps/app => web}/components/states/create-update-state-inline.tsx (100%)
rename {apps/app => web}/components/states/delete-state-modal.tsx (100%)
rename {apps/app => web}/components/states/index.ts (100%)
rename {apps/app => web}/components/states/single-state.tsx (100%)
rename {apps/app => web}/components/tiptap/bubble-menu/index.tsx (91%)
rename {apps/space => web}/components/tiptap/bubble-menu/link-selector.tsx (92%)
rename {apps/space => web}/components/tiptap/bubble-menu/node-selector.tsx (98%)
rename {apps/space => web}/components/tiptap/bubble-menu/utils/link-validator.tsx (99%)
rename {apps/space => web}/components/tiptap/extensions/image-resize.tsx (78%)
rename {apps/app => web}/components/tiptap/extensions/index.tsx (94%)
rename {apps/app => web}/components/tiptap/extensions/table/table-cell.ts (67%)
rename {apps/app => web}/components/tiptap/extensions/table/table-header.ts (86%)
rename {apps/app => web}/components/tiptap/extensions/table/table.ts (83%)
rename {apps/space => web}/components/tiptap/extensions/updated-image.tsx (95%)
rename {apps/app => web}/components/tiptap/index.tsx (96%)
rename {apps/app => web}/components/tiptap/plugins/delete-image.tsx (90%)
rename {apps/app => web}/components/tiptap/plugins/upload-image.tsx (90%)
rename {apps/app => web}/components/tiptap/props.tsx (83%)
rename {apps/app => web}/components/tiptap/slash-command/index.tsx (52%)
create mode 100644 web/components/tiptap/table-menu/InsertBottomTableIcon.tsx
create mode 100644 web/components/tiptap/table-menu/InsertLeftTableIcon.tsx
create mode 100644 web/components/tiptap/table-menu/InsertRightTableIcon.tsx
create mode 100644 web/components/tiptap/table-menu/InsertTopTableIcon.tsx
rename {apps/app => web}/components/tiptap/table-menu/index.tsx (97%)
rename {apps/space => web}/components/tiptap/utils.ts (100%)
rename {apps/app => web}/components/toast-alert/index.tsx (100%)
rename {apps/app => web}/components/ui/avatar.tsx (100%)
rename {apps/app => web}/components/ui/buttons/danger-button.tsx (100%)
rename {apps/app => web}/components/ui/buttons/index.ts (100%)
rename {apps/app => web}/components/ui/buttons/primary-button.tsx (100%)
rename {apps/app => web}/components/ui/buttons/secondary-button.tsx (100%)
rename {apps/app => web}/components/ui/buttons/type.d.ts (100%)
rename {apps/app => web}/components/ui/circular-progress.tsx (100%)
rename {apps/app => web}/components/ui/date.tsx (100%)
rename {apps/app => web}/components/ui/datepicker.tsx (100%)
rename {apps/app => web}/components/ui/dropdowns/context-menu.tsx (100%)
rename {apps/app => web}/components/ui/dropdowns/custom-menu.tsx (100%)
rename {apps/app => web}/components/ui/dropdowns/custom-search-select.tsx (100%)
rename {apps/app => web}/components/ui/dropdowns/custom-select.tsx (100%)
rename {apps/app => web}/components/ui/dropdowns/index.ts (100%)
rename {apps/app => web}/components/ui/dropdowns/types.d.ts (100%)
rename {apps/app => web}/components/ui/empty-space.tsx (100%)
rename {apps/app => web}/components/ui/empty-state.tsx (100%)
rename {apps/app => web}/components/ui/graphs/bar-graph.tsx (100%)
rename {apps/app => web}/components/ui/graphs/calendar-graph.tsx (100%)
rename {apps/app => web}/components/ui/graphs/index.ts (100%)
rename {apps/app => web}/components/ui/graphs/line-graph.tsx (100%)
rename {apps/app => web}/components/ui/graphs/pie-graph.tsx (100%)
rename {apps/app => web}/components/ui/graphs/scatter-plot-graph.tsx (100%)
rename {apps/app => web}/components/ui/graphs/types.d.ts (100%)
rename {apps/app => web}/components/ui/icon-name-type.d.ts (100%)
rename {apps/app => web}/components/ui/icon.tsx (100%)
rename {apps/app => web}/components/ui/index.ts (95%)
rename {apps/app => web}/components/ui/input/index.tsx (100%)
rename {apps/app => web}/components/ui/input/types.d.ts (100%)
rename {apps/app => web}/components/ui/integration-and-import-export-banner.tsx (100%)
rename {apps/app => web}/components/ui/labels-list.tsx (100%)
rename {apps/app => web}/components/ui/linear-progress-indicator.tsx (73%)
rename {apps/space => web}/components/ui/loader.tsx (100%)
rename {apps/app => web}/components/ui/markdown-to-component.tsx (100%)
rename {apps/app => web}/components/ui/multi-level-dropdown.tsx (100%)
rename {apps/app => web}/components/ui/multi-level-select.tsx (100%)
rename {apps/app => web}/components/ui/product-updates-modal.tsx (100%)
rename {apps/app => web}/components/ui/profile-empty-state.tsx (100%)
rename {apps/app => web}/components/ui/progress-bar.tsx (100%)
rename {apps/app => web}/components/ui/range-datepicker.tsx (100%)
rename {apps/app => web}/components/ui/spinner.tsx (100%)
rename {apps/app => web}/components/ui/text-area/index.tsx (100%)
rename {apps/app => web}/components/ui/text-area/types.d.ts (100%)
rename {apps/app => web}/components/ui/toggle-switch.tsx (100%)
rename {apps/app => web}/components/ui/tooltip.tsx (100%)
rename {apps/app => web}/components/views/delete-view-modal.tsx (97%)
rename {apps/app => web}/components/views/form.tsx (100%)
rename {apps/app => web}/components/views/gantt-chart.tsx (100%)
rename {apps/app => web}/components/views/index.ts (100%)
rename {apps/app => web}/components/views/modal.tsx (100%)
rename {apps/app => web}/components/views/select-filters.tsx (100%)
rename {apps/app => web}/components/views/single-view-item.tsx (100%)
rename {apps/app => web}/components/workspace/activity-graph.tsx (100%)
rename {apps/app => web}/components/workspace/completed-issues-graph.tsx (100%)
rename {apps/app => web}/components/workspace/confirm-workspace-member-remove.tsx (100%)
rename {apps/app => web}/components/workspace/create-workspace-form.tsx (100%)
rename {apps/app => web}/components/workspace/delete-workspace-modal.tsx (97%)
rename {apps/app => web}/components/workspace/help-section.tsx (100%)
rename {apps/app => web}/components/workspace/index.ts (100%)
rename {apps/app => web}/components/workspace/issues-list.tsx (100%)
rename {apps/app => web}/components/workspace/issues-pie-chart.tsx (100%)
rename {apps/app => web}/components/workspace/issues-stats.tsx (100%)
rename {apps/app => web}/components/workspace/send-workspace-invitation-modal.tsx (100%)
rename {apps/app => web}/components/workspace/settings-header.tsx (100%)
rename {apps/app => web}/components/workspace/sidebar-dropdown.tsx (100%)
rename {apps/app => web}/components/workspace/sidebar-menu.tsx (100%)
rename {apps/app => web}/components/workspace/sidebar-quick-action.tsx (100%)
rename {apps/app => web}/components/workspace/single-invitation.tsx (100%)
rename {apps/app => web}/constants/analytics.ts (100%)
rename {apps/app => web}/constants/calendar.ts (100%)
rename {apps/app => web}/constants/crisp.tsx (100%)
rename {apps/app => web}/constants/fetch-keys.ts (99%)
rename {apps/app => web}/constants/filters.ts (100%)
rename {apps/app => web}/constants/graph.ts (100%)
rename {apps/app => web}/constants/inbox.ts (100%)
rename {apps/app => web}/constants/issue.ts (100%)
rename {apps/app => web}/constants/label.ts (100%)
rename {apps/app => web}/constants/module.ts (100%)
rename {apps/app => web}/constants/notification.ts (100%)
rename {apps/app => web}/constants/project.ts (100%)
rename {apps/app => web}/constants/seo-variables.ts (100%)
rename {apps/app => web}/constants/spreadsheet.ts (100%)
rename {apps/app => web}/constants/state.ts (100%)
rename {apps/app => web}/constants/themes.ts (100%)
rename {apps/app => web}/constants/timezones.ts (100%)
rename {apps/app => web}/constants/workspace.ts (100%)
rename {apps/app => web}/contexts/inbox-view-context.tsx (100%)
rename {apps/app => web}/contexts/issue-view.context.tsx (100%)
rename {apps/app => web}/contexts/profile-issues-context.tsx (100%)
rename {apps/app => web}/contexts/project-member.context.tsx (100%)
rename {apps/app => web}/contexts/theme.context.tsx (100%)
rename {apps/app => web}/contexts/toast.context.tsx (100%)
rename {apps/app => web}/contexts/user-notification-context.tsx (100%)
rename {apps/app => web}/contexts/user.context.tsx (100%)
rename {apps/app => web}/contexts/workspace-member.context.tsx (100%)
rename {apps/app => web}/contexts/workspace.context.tsx (100%)
rename {apps/app => web}/google.d.ts (100%)
rename {apps/app => web}/helpers/analytics.helper.ts (100%)
rename {apps/app => web}/helpers/array.helper.ts (100%)
rename {apps/app => web}/helpers/attachment.helper.ts (100%)
rename {apps/app => web}/helpers/calendar.helper.ts (100%)
rename {apps/app => web}/helpers/color.helper.ts (100%)
rename {apps/app => web}/helpers/common.helper.ts (100%)
rename {apps/app => web}/helpers/date-time.helper.ts (100%)
rename {apps/app => web}/helpers/emoji.helper.tsx (77%)
rename {apps/app => web}/helpers/graph.helper.ts (100%)
rename {apps/app => web}/helpers/state.helper.ts (100%)
rename {apps/app => web}/helpers/string.helper.ts (100%)
rename {apps/app => web}/helpers/theme.helper.ts (100%)
rename {apps/app => web}/hooks/gantt-chart/cycle-issues-view.tsx (100%)
rename {apps/app => web}/hooks/gantt-chart/issue-view.tsx (100%)
rename {apps/app => web}/hooks/gantt-chart/module-issues-view.tsx (100%)
rename {apps/app => web}/hooks/gantt-chart/view-issues-view.tsx (100%)
rename {apps/app => web}/hooks/my-issues/use-my-issues-filter.tsx (100%)
rename {apps/app => web}/hooks/my-issues/use-my-issues.tsx (100%)
rename {apps/app => web}/hooks/use-calendar-issues-view.tsx (100%)
rename {apps/app => web}/hooks/use-comment-reaction.tsx (100%)
rename {apps/app => web}/hooks/use-debounce.tsx (100%)
rename {apps/app => web}/hooks/use-estimate-option.tsx (100%)
rename {apps/app => web}/hooks/use-inbox-view.tsx (100%)
rename {apps/app => web}/hooks/use-integration-popup.tsx (100%)
rename {apps/app => web}/hooks/use-issue-notification-subscription.tsx (100%)
rename {apps/app => web}/hooks/use-issue-properties.tsx (98%)
rename {apps/app => web}/hooks/use-issue-reaction.tsx (100%)
rename {apps/app => web}/hooks/use-issues-view.tsx (100%)
rename {apps/app => web}/hooks/use-local-storage.tsx (100%)
rename {apps/app => web}/hooks/use-outside-click-detector.tsx (100%)
rename {apps/app => web}/hooks/use-profile-issues.tsx (100%)
rename {apps/app => web}/hooks/use-project-details.tsx (100%)
rename {apps/app => web}/hooks/use-project-members.tsx (100%)
rename {apps/app => web}/hooks/use-projects.tsx (100%)
rename {apps/app => web}/hooks/use-reload-confirmation.tsx (100%)
rename {apps/app => web}/hooks/use-spreadsheet-issues-view.tsx (100%)
rename {apps/app => web}/hooks/use-sub-issue.tsx (100%)
rename {apps/app => web}/hooks/use-theme.tsx (100%)
rename {apps/space => web}/hooks/use-timer.tsx (100%)
rename {apps/space => web}/hooks/use-toast.tsx (100%)
rename {apps/app => web}/hooks/use-user-auth.tsx (100%)
rename {apps/app => web}/hooks/use-user-notifications.tsx (100%)
rename {apps/app => web}/hooks/use-user.tsx (100%)
rename {apps/app => web}/hooks/use-workspace-details.tsx (100%)
rename {apps/app => web}/hooks/use-workspace-members.tsx (100%)
rename {apps/app => web}/hooks/use-workspaces.tsx (100%)
rename {apps/app => web}/layouts/app-layout/app-header.tsx (100%)
rename {apps/app => web}/layouts/app-layout/app-sidebar.tsx (100%)
rename {apps/app => web}/layouts/auth-layout/index.ts (100%)
rename {apps/app => web}/layouts/auth-layout/project-authorization-wrapper.tsx (100%)
rename {apps/app => web}/layouts/auth-layout/user-authorization-wrapper.tsx (100%)
rename {apps/app => web}/layouts/auth-layout/workspace-authorization-wrapper.tsx (100%)
rename {apps/app => web}/layouts/default-layout/index.tsx (100%)
rename {apps/app => web}/layouts/profile-layout.tsx (100%)
rename {apps/app => web}/layouts/settings-navbar.tsx (100%)
rename {apps/app => web}/lib/auth.ts (100%)
rename {apps/app => web}/lib/cookie.ts (100%)
rename {apps/app => web}/lib/mobx/store-init.tsx (100%)
rename {apps/space => web}/lib/mobx/store-provider.tsx (100%)
rename {apps/app => web}/lib/redirect.ts (100%)
rename {apps/app => web}/manifest.json (100%)
rename {apps/app => web}/next-env.d.ts (100%)
rename {apps/app => web}/next.config.js (94%)
rename {apps/app => web}/package.json (99%)
rename {apps/app => web}/pages/404.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/analytics.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/editor.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/index.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/me/my-issues.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/me/profile/activity.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/me/profile/index.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/me/profile/preferences.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/profile/[userId]/assigned.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/profile/[userId]/created.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/profile/[userId]/index.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/profile/[userId]/subscribed.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/archived-issues/[archivedIssueId].tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/archived-issues/index.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/cycles/index.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/inbox/[inboxId].tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/issues/index.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/settings/automations.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/settings/control.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/settings/integrations.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/settings/states.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/projects/index.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/settings/billing.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/settings/exports.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/settings/imports.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/settings/index.tsx (97%)
rename {apps/app => web}/pages/[workspaceSlug]/settings/integrations.tsx (100%)
rename {apps/app => web}/pages/[workspaceSlug]/settings/members.tsx (100%)
rename {apps/app => web}/pages/_app.tsx (100%)
rename {apps/app => web}/pages/_document.tsx (100%)
rename {apps/app => web}/pages/_error.tsx (100%)
rename {apps/app => web}/pages/api/slack-redirect.ts (94%)
rename {apps/app => web}/pages/api/track-event.ts (100%)
rename {apps/app => web}/pages/api/unsplash.ts (100%)
rename {apps/app => web}/pages/create-workspace.tsx (100%)
rename {apps/app => web}/pages/error.tsx (100%)
rename {apps/app => web}/pages/index.tsx (100%)
rename {apps/app => web}/pages/installations/[provider]/index.tsx (100%)
rename {apps/app => web}/pages/invitations.tsx (100%)
rename {apps/app => web}/pages/magic-sign-in.tsx (100%)
rename {apps/app => web}/pages/onboarding.tsx (100%)
rename {apps/app => web}/pages/reset-password.tsx (100%)
rename {apps/app => web}/pages/sign-up.tsx (100%)
rename {apps/app => web}/pages/workspace-member-invitation.tsx (100%)
rename {apps/space => web}/postcss.config.js (100%)
rename {apps/space => web}/public/404.svg (100%)
rename {apps/app => web}/public/animated-icons/uploading.json (100%)
rename {apps/app => web}/public/attachment/audio-icon.png (100%)
rename {apps/app => web}/public/attachment/css-icon.png (100%)
rename {apps/app => web}/public/attachment/csv-icon.png (100%)
rename {apps/app => web}/public/attachment/default-icon.png (100%)
rename {apps/app => web}/public/attachment/doc-icon.png (100%)
rename {apps/app => web}/public/attachment/excel-icon.png (100%)
rename {apps/app => web}/public/attachment/figma-icon.png (100%)
rename {apps/app => web}/public/attachment/html-icon.png (100%)
rename {apps/app => web}/public/attachment/img-icon.png (100%)
rename {apps/app => web}/public/attachment/jpg-icon.png (100%)
rename {apps/app => web}/public/attachment/js-icon.png (100%)
rename {apps/app => web}/public/attachment/pdf-icon.png (100%)
rename {apps/app => web}/public/attachment/png-icon.png (100%)
rename {apps/app => web}/public/attachment/svg-icon.png (100%)
rename {apps/app => web}/public/attachment/txt-icon.png (100%)
rename {apps/app => web}/public/attachment/video-icon.png (100%)
rename {apps/app => web}/public/auth/project-not-authorized.svg (100%)
rename {apps/app => web}/public/auth/workspace-not-authorized.svg (100%)
rename {apps/app => web}/public/empty-state/analytics.svg (100%)
rename {apps/app => web}/public/empty-state/cycle.svg (100%)
rename {apps/app => web}/public/empty-state/dashboard.svg (100%)
rename {apps/app => web}/public/empty-state/empty_bar_graph.svg (100%)
rename {apps/app => web}/public/empty-state/empty_graph.svg (100%)
rename {apps/app => web}/public/empty-state/empty_users.svg (100%)
rename {apps/app => web}/public/empty-state/estimate.svg (100%)
rename {apps/app => web}/public/empty-state/integration.svg (100%)
rename {apps/app => web}/public/empty-state/invitation.svg (100%)
rename {apps/app => web}/public/empty-state/issue-archive.svg (100%)
rename {apps/app => web}/public/empty-state/issue.svg (100%)
rename {apps/app => web}/public/empty-state/label.svg (100%)
rename {apps/app => web}/public/empty-state/module.svg (100%)
rename {apps/app => web}/public/empty-state/my-issues.svg (100%)
rename {apps/app => web}/public/empty-state/notification.svg (100%)
rename {apps/app => web}/public/empty-state/page.svg (100%)
rename {apps/app => web}/public/empty-state/project.svg (100%)
rename {apps/app => web}/public/empty-state/recent_activity.svg (100%)
rename {apps/app => web}/public/empty-state/state_graph.svg (100%)
rename {apps/app => web}/public/empty-state/view.svg (100%)
rename {apps/space => web}/public/favicon/android-chrome-192x192.png (100%)
rename {apps/space => web}/public/favicon/android-chrome-512x512.png (100%)
rename {apps/space => web}/public/favicon/apple-touch-icon.png (100%)
rename {apps/space => web}/public/favicon/favicon-16x16.png (100%)
rename {apps/space => web}/public/favicon/favicon-32x32.png (100%)
rename {apps/space => web}/public/favicon/favicon.ico (100%)
rename {apps/space => web}/public/favicon/site.webmanifest (100%)
rename {apps/app => web}/public/logos/github-black.png (100%)
rename {apps/app => web}/public/logos/github-square.png (100%)
rename {apps/app => web}/public/logos/github-white.png (100%)
rename {apps/app => web}/public/mac-command.svg (100%)
rename {apps/app => web}/public/onboarding/cycles.svg (100%)
rename {apps/app => web}/public/onboarding/cycles.webp (100%)
rename {apps/app => web}/public/onboarding/issues.svg (100%)
rename {apps/app => web}/public/onboarding/issues.webp (100%)
rename {apps/app => web}/public/onboarding/modules.svg (100%)
rename {apps/app => web}/public/onboarding/modules.webp (100%)
rename {apps/app => web}/public/onboarding/pages.svg (100%)
rename {apps/app => web}/public/onboarding/pages.webp (100%)
rename {apps/app => web}/public/onboarding/views.svg (100%)
rename {apps/app => web}/public/onboarding/views.webp (100%)
rename {apps/space => web}/public/plane-logos/black-horizontal-with-blue-logo.svg (100%)
rename {apps/app => web}/public/plane-logos/blue-without-text.png (100%)
rename {apps/space => web}/public/plane-logos/white-horizontal-with-blue-logo.svg (100%)
rename {apps/space => web}/public/plane-logos/white-horizontal.svg (100%)
rename {apps/app => web}/public/services/csv.svg (100%)
rename {apps/app => web}/public/services/excel.svg (100%)
rename {apps/app => web}/public/services/github.png (100%)
rename {apps/app => web}/public/services/jira.png (100%)
rename {apps/app => web}/public/services/json.svg (100%)
rename {apps/app => web}/public/services/slack.png (100%)
rename {apps/app => web}/public/site.webmanifest.json (100%)
rename {apps/app => web}/public/sw.js (100%)
rename {apps/app => web}/public/sw.js.map (100%)
rename {apps/app => web}/public/user.png (100%)
rename {apps/app => web}/public/workbox-7805bd61.js (100%)
rename {apps/app => web}/public/workbox-7805bd61.js.map (100%)
rename {apps/app => web}/sentry.client.config.js (100%)
rename {apps/app => web}/sentry.edge.config.js (100%)
rename {apps/app => web}/sentry.properties (100%)
rename {apps/app => web}/sentry.server.config.js (100%)
rename {apps/app => web}/services/ai.service.ts (100%)
rename {apps/app => web}/services/analytics.service.ts (100%)
rename {apps/app => web}/services/api.service.ts (100%)
rename {apps/app => web}/services/app-installations.service.ts (77%)
rename {apps/app => web}/services/authentication.service.ts (100%)
rename {apps/app => web}/services/cycles.service.ts (100%)
rename {apps/app => web}/services/estimates.service.ts (100%)
rename {apps/app => web}/services/file.service.ts (100%)
rename {apps/app => web}/services/inbox.service.ts (100%)
rename {apps/app => web}/services/integration/csv.services.ts (100%)
rename {apps/app => web}/services/integration/github.service.ts (100%)
rename {apps/app => web}/services/integration/index.ts (100%)
rename {apps/app => web}/services/integration/jira.service.ts (100%)
rename {apps/app => web}/services/issues.service.ts (100%)
rename {apps/app => web}/services/modules.service.ts (98%)
rename {apps/app => web}/services/notifications.service.ts (100%)
rename {apps/app => web}/services/pages.service.ts (100%)
rename {apps/app => web}/services/project-publish.service.ts (100%)
rename {apps/app => web}/services/project.service.ts (100%)
rename {apps/app => web}/services/reaction.service.ts (100%)
rename {apps/app => web}/services/state.service.ts (100%)
rename {apps/app => web}/services/track-event.service.ts (100%)
rename {apps/app => web}/services/user.service.ts (100%)
rename {apps/app => web}/services/views.service.ts (100%)
rename {apps/app => web}/services/web-waitlist.service.ts (100%)
rename {apps/app => web}/services/workspace.service.ts (100%)
rename {apps/app => web}/store/issues.ts (100%)
rename {apps/app => web}/store/project-publish.tsx (100%)
rename {apps/app => web}/store/root.ts (100%)
rename {apps/app => web}/store/theme.ts (100%)
rename {apps/app => web}/store/user.ts (100%)
rename {apps/app => web}/styles/command-pallette.css (100%)
rename {apps/space => web}/styles/editor.css (100%)
rename {apps/app => web}/styles/globals.css (100%)
rename {apps/app => web}/styles/nprogress.css (100%)
rename {apps/app => web}/styles/react-datepicker.css (100%)
rename {apps/app => web}/tailwind.config.js (100%)
create mode 100644 web/tsconfig.json
rename {apps/app => web}/types/ai.d.ts (100%)
rename {apps/app => web}/types/analytics.d.ts (100%)
rename {apps/app => web}/types/calendar.ts (100%)
rename {apps/app => web}/types/cycles.d.ts (100%)
rename {apps/app => web}/types/estimate.d.ts (100%)
rename {apps/app => web}/types/importer/github-importer.d.ts (100%)
rename {apps/app => web}/types/importer/index.ts (100%)
rename {apps/app => web}/types/importer/jira-importer.d.ts (100%)
rename {apps/app => web}/types/inbox.d.ts (100%)
rename {apps/app => web}/types/index.d.ts (99%)
rename {apps/app => web}/types/integration.d.ts (100%)
rename {apps/app => web}/types/issues.d.ts (100%)
rename {apps/app => web}/types/modules.d.ts (100%)
rename {apps/app => web}/types/notifications.d.ts (100%)
rename {apps/app => web}/types/pages.d.ts (100%)
rename {apps/app => web}/types/projects.d.ts (99%)
rename {apps/app => web}/types/reaction.d.ts (100%)
rename {apps/app => web}/types/state.d.ts (100%)
rename {apps/app => web}/types/users.d.ts (99%)
rename {apps/app => web}/types/views.d.ts (100%)
rename {apps/app => web}/types/waitlist.d.ts (100%)
rename {apps/app => web}/types/workspace.d.ts (100%)
diff --git a/.eslintrc.js b/.eslintrc.js
index 463c86901..c229c0952 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -4,7 +4,7 @@ module.exports = {
extends: ["custom"],
settings: {
next: {
- rootDir: ["apps/*"],
+ rootDir: ["web/", "space/"],
},
},
};
diff --git a/.github/workflows/Build_Test_Pull_Request.yml b/.github/workflows/Build_Test_Pull_Request.yml
index 0dbca646a..438bdbef3 100644
--- a/.github/workflows/Build_Test_Pull_Request.yml
+++ b/.github/workflows/Build_Test_Pull_Request.yml
@@ -29,9 +29,9 @@ jobs:
apiserver:
- apiserver/**
web:
- - apps/app/**
+ - web/**
deploy:
- - apps/space/**
+ - space/**
- name: Setup .npmrc for repository
run: |
@@ -40,15 +40,15 @@ jobs:
- name: Build Plane's Main App
if: steps.changed-files.outputs.web_any_changed == 'true'
run: |
- mv ./.npmrc ./apps/app
- cd apps/app
+ mv ./.npmrc ./web
+ cd web
yarn
yarn build
- name: Build Plane's Deploy App
if: steps.changed-files.outputs.deploy_any_changed == 'true'
run: |
- cd apps/space
+ cd space
yarn
yarn build
diff --git a/.github/workflows/Update_Docker_Images.yml b/.github/workflows/Update_Docker_Images.yml
index 8e27e098f..57dbb4a67 100644
--- a/.github/workflows/Update_Docker_Images.yml
+++ b/.github/workflows/Update_Docker_Images.yml
@@ -62,7 +62,7 @@ jobs:
uses: docker/build-push-action@v4.0.0
with:
context: .
- file: ./apps/app/Dockerfile.web
+ file: ./web/Dockerfile.web
platforms: linux/amd64
tags: ${{ steps.metaFrontend.outputs.tags }}
push: true
@@ -88,7 +88,7 @@ jobs:
uses: docker/build-push-action@v4.0.0
with:
context: .
- file: ./apps/space/Dockerfile.space
+ file: ./space/Dockerfile.space
platforms: linux/amd64
push: true
tags: ${{ steps.metaDeploy.outputs.tags }}
diff --git a/.gitpod.yml b/.gitpod.yml
new file mode 100644
index 000000000..f2bf4259f
--- /dev/null
+++ b/.gitpod.yml
@@ -0,0 +1,11 @@
+# This configuration file was automatically generated by Gitpod.
+# Please adjust to your needs (see https://www.gitpod.io/docs/introduction/learn-gitpod/gitpod-yaml)
+# and commit this file to your remote git repository to share the goodness with others.
+
+# Learn more from ready-to-use templates: https://www.gitpod.io/docs/introduction/getting-started/quickstart
+
+tasks:
+ - init: yarn install && yarn run build
+ command: yarn run start
+
+
diff --git a/.husky/pre-push b/.husky/pre-push
index 1feec0de6..0e7d3240b 100755
--- a/.husky/pre-push
+++ b/.husky/pre-push
@@ -3,21 +3,21 @@
changed_files=$(git diff --name-only HEAD~1)
-app_changed=$(echo "$changed_files" | grep -E '^apps/app/' || true)
-space_changed=$(echo "$changed_files" | grep -E '^apps/space/' || true)
-echo $app_changed
+web_changed=$(echo "$changed_files" | grep -E '^web/' || true)
+space_changed=$(echo "$changed_files" | grep -E '^space/' || true)
+echo $web_changed
echo $space_changed
-if [ -n "$app_changed" ] && [ -n "$space_changed" ]; then
- echo "Changes detected in both apps/app and apps/space. Building..."
+if [ -n "$web_changed" ] && [ -n "$space_changed" ]; then
+ echo "Changes detected in both web and space. Building..."
yarn run lint
yarn run build
-elif [ -n "$app_changed" ]; then
- echo "Changes detected in apps/app. Building..."
- yarn run lint --filter=app
- yarn run build --filter=app
+elif [ -n "$web_changed" ]; then
+ echo "Changes detected in web app. Building..."
+ yarn run lint --filter=web
+ yarn run build --filter=web
elif [ -n "$space_changed" ]; then
- echo "Changes detected in apps/space. Building..."
+ echo "Changes detected in space app. Building..."
yarn run lint --filter=space
yarn run build --filter=space
fi
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 294dc1c0e..cd74b6121 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -17,23 +17,23 @@ diverse, inclusive, and healthy community.
Examples of behavior that contributes to a positive environment for our
community include:
-* Demonstrating empathy and kindness toward other people
-* Being respectful of differing opinions, viewpoints, and experiences
-* Giving and gracefully accepting constructive feedback
-* Accepting responsibility and apologizing to those affected by our mistakes,
+- Demonstrating empathy and kindness toward other people
+- Being respectful of differing opinions, viewpoints, and experiences
+- Giving and gracefully accepting constructive feedback
+- Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
-* Focusing on what is best not just for us as individuals, but for the
+- Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
-* The use of sexualized language or imagery, and sexual attention or
+- The use of sexualized language or imagery, and sexual attention or
advances of any kind
-* Trolling, insulting or derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or email
+- Trolling, insulting or derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others' private information, such as a physical or email
address, without their explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
+- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
@@ -106,7 +106,7 @@ Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior, harassment of an
+standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
@@ -125,4 +125,4 @@ enforcement ladder](https://github.com/mozilla/diversity).
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
-https://www.contributor-covenant.org/translations.
\ No newline at end of file
+https://www.contributor-covenant.org/translations.
diff --git a/README.md b/README.md
index 2bc2764f3..a5a7ddd87 100644
--- a/README.md
+++ b/README.md
@@ -35,12 +35,10 @@
Meet [Plane](https://plane.so). An open-source software development tool to manage issues, sprints, and product roadmaps with peace of mind 🧘♀️.
-
> Plane is still in its early days, not everything will be perfect yet, and hiccups may happen. Please let us know of any suggestions, ideas, or bugs that you encounter on our [Discord](https://discord.com/invite/A92xrEGCge) or GitHub issues, and we will use your feedback to improve on our upcoming releases.
The easiest way to get started with Plane is by creating a [Plane Cloud](https://app.plane.so) account. Plane Cloud offers a hosted solution for Plane. If you prefer to self-host Plane, please refer to our [deployment documentation](https://docs.plane.so/self-hosting).
-
## ⚡️ Quick start with Docker Compose
### Docker Compose Setup
@@ -56,7 +54,7 @@ chmod +x setup.sh
- Run setup.sh
```bash
-./setup.sh http://localhost
+./setup.sh http://localhost
```
> If running in a cloud env replace localhost with public facing IP address of the VM
@@ -65,31 +63,32 @@ chmod +x setup.sh
Visit [Tiptap Pro](https://collab.tiptap.dev/pro-extensions) and signup (it is free).
- Create a **`.npmrc`** file, copy the following and replace your registry token generated from Tiptap Pro.
+ Create a **`.npmrc`** file, copy the following and replace your registry token generated from Tiptap Pro.
```
@tiptap-pro:registry=https://registry.tiptap.dev/
//registry.tiptap.dev/:_authToken=YOUR_REGISTRY_TOKEN
```
+
- Run Docker compose up
```bash
docker compose up -d
```
-You can use the default email and password for your first login `captain@plane.so` and `password123`.
+You can use the default email and password for your first login `captain@plane.so` and `password123`.
## 🚀 Features
-* **Issue Planning and Tracking**: Quickly create issues and add details using a powerful rich text editor that supports file uploads. Add sub-properties and references to issues for better organization and tracking.
-* **Issue Attachments**: Collaborate effectively by attaching files to issues, making it easy for your team to find and share important project-related documents.
-* **Layouts**: Customize your project view with your preferred layout - choose from List, Kanban, or Calendar to visualize your project in a way that makes sense to you.
-* **Cycles**: Plan sprints with Cycles to keep your team on track and productive. Gain insights into your project's progress with burn-down charts and other useful features.
-* **Modules**: Break down your large projects into smaller, more manageable modules. Assign modules between teams to easily track and plan your project's progress.
-* **Views**: Create custom filters to display only the issues that matter to you. Save and share your filters in just a few clicks.
-* **Pages**: Plane pages function as an AI-powered notepad, allowing you to easily document issues, cycle plans, and module details, and then synchronize them with your issues.
-* **Command K**: Enjoy a better user experience with the new Command + K menu. Easily manage and navigate through your projects from one convenient location.
-* **GitHub Sync**: Streamline your planning process by syncing your GitHub issues with Plane. Keep all your issues in one place for better tracking and collaboration.
+- **Issue Planning and Tracking**: Quickly create issues and add details using a powerful rich text editor that supports file uploads. Add sub-properties and references to issues for better organization and tracking.
+- **Issue Attachments**: Collaborate effectively by attaching files to issues, making it easy for your team to find and share important project-related documents.
+- **Layouts**: Customize your project view with your preferred layout - choose from List, Kanban, or Calendar to visualize your project in a way that makes sense to you.
+- **Cycles**: Plan sprints with Cycles to keep your team on track and productive. Gain insights into your project's progress with burn-down charts and other useful features.
+- **Modules**: Break down your large projects into smaller, more manageable modules. Assign modules between teams to easily track and plan your project's progress.
+- **Views**: Create custom filters to display only the issues that matter to you. Save and share your filters in just a few clicks.
+- **Pages**: Plane pages function as an AI-powered notepad, allowing you to easily document issues, cycle plans, and module details, and then synchronize them with your issues.
+- **Command K**: Enjoy a better user experience with the new Command + K menu. Easily manage and navigate through your projects from one convenient location.
+- **GitHub Sync**: Streamline your planning process by syncing your GitHub issues with Plane. Keep all your issues in one place for better tracking and collaboration.
## 📸 Screenshots
@@ -150,7 +149,6 @@ docker compose up -d
-
## 📚Documentation
For full documentation, visit [docs.plane.so](https://docs.plane.so/)
diff --git a/apps/app/components/icons/blocked-icon.tsx b/apps/app/components/icons/blocked-icon.tsx
deleted file mode 100644
index ee0024fa0..000000000
--- a/apps/app/components/icons/blocked-icon.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const BlockedIcon: React.FC = ({ width = "24", height = "24", className }) => (
-
- );
diff --git a/apps/app/components/icons/blocker-icon.tsx b/apps/app/components/icons/blocker-icon.tsx
deleted file mode 100644
index 093728cd8..000000000
--- a/apps/app/components/icons/blocker-icon.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const BlockerIcon: React.FC = ({ width = "24", height = "24", className }) => (
-
- );
diff --git a/apps/app/components/icons/bolt-icon.tsx b/apps/app/components/icons/bolt-icon.tsx
deleted file mode 100644
index 569767aa5..000000000
--- a/apps/app/components/icons/bolt-icon.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const BoltIcon: React.FC = ({ width = "24", height = "24", className }) => (
-
- );
diff --git a/apps/app/components/icons/cancel-icon.tsx b/apps/app/components/icons/cancel-icon.tsx
deleted file mode 100644
index c3170ca32..000000000
--- a/apps/app/components/icons/cancel-icon.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const CancelIcon: React.FC = ({ width, height, className }) => (
-
- );
diff --git a/apps/app/components/icons/clipboard-icon.tsx b/apps/app/components/icons/clipboard-icon.tsx
deleted file mode 100644
index c96aa3fde..000000000
--- a/apps/app/components/icons/clipboard-icon.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const ClipboardIcon: React.FC = ({ width = "24", height = "24", className }) => (
-
- );
diff --git a/apps/app/components/icons/comment-icon.tsx b/apps/app/components/icons/comment-icon.tsx
deleted file mode 100644
index c60cca4a6..000000000
--- a/apps/app/components/icons/comment-icon.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const CommentIcon: React.FC = ({ width = "24", height = "24", className }) => (
-
- );
diff --git a/apps/app/components/icons/completed-cycle-icon.tsx b/apps/app/components/icons/completed-cycle-icon.tsx
deleted file mode 100644
index 615fbcb9a..000000000
--- a/apps/app/components/icons/completed-cycle-icon.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const CompletedCycleIcon: React.FC = ({
- width = "24",
- height = "24",
- className,
- color = "black",
-}) => (
-
- );
diff --git a/apps/app/components/icons/current-cycle-icon.tsx b/apps/app/components/icons/current-cycle-icon.tsx
deleted file mode 100644
index 2b07edf2e..000000000
--- a/apps/app/components/icons/current-cycle-icon.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const CurrentCycleIcon: React.FC = ({
- width = "24",
- height = "24",
- className,
- color = "black",
-}) => (
-
- );
diff --git a/apps/app/components/icons/edit-icon.tsx b/apps/app/components/icons/edit-icon.tsx
deleted file mode 100644
index c4e012e4d..000000000
--- a/apps/app/components/icons/edit-icon.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const EditIcon: React.FC = ({ width, height, className }) => (
-
- );
diff --git a/apps/app/components/icons/ellipsis-horizontal-icon.tsx b/apps/app/components/icons/ellipsis-horizontal-icon.tsx
deleted file mode 100644
index cfdd66751..000000000
--- a/apps/app/components/icons/ellipsis-horizontal-icon.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const EllipsisHorizontalIcon: React.FC = ({ width, height, className }) => (
-
- );
diff --git a/apps/app/components/icons/lock-icon.tsx b/apps/app/components/icons/lock-icon.tsx
deleted file mode 100644
index d0c9cffb7..000000000
--- a/apps/app/components/icons/lock-icon.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const LockIcon: React.FC = ({ width = "24", height = "24", className }) => (
-
- );
diff --git a/apps/app/components/icons/menu-icon.tsx b/apps/app/components/icons/menu-icon.tsx
deleted file mode 100644
index 0a8816b75..000000000
--- a/apps/app/components/icons/menu-icon.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const MenuIcon: React.FC = ({ width = "24", height = "24", className }) => (
-
- );
diff --git a/apps/app/components/icons/plus-icon.tsx b/apps/app/components/icons/plus-icon.tsx
deleted file mode 100644
index 0b958a21d..000000000
--- a/apps/app/components/icons/plus-icon.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const PlusIcon: React.FC = ({ width = "24", height = "24", className }) => (
-
- );
diff --git a/apps/app/components/icons/question-mark-circle-icon.tsx b/apps/app/components/icons/question-mark-circle-icon.tsx
deleted file mode 100644
index 2cdf9d8e5..000000000
--- a/apps/app/components/icons/question-mark-circle-icon.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const QuestionMarkCircleIcon: React.FC = ({
- width = "24",
- height = "24",
- className,
-}) => (
-
- );
diff --git a/apps/app/components/icons/signal-cellular-icon.tsx b/apps/app/components/icons/signal-cellular-icon.tsx
deleted file mode 100644
index 0e785d958..000000000
--- a/apps/app/components/icons/signal-cellular-icon.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const SignalCellularIcon: React.FC = ({ width = "24", height = "24", className }) => (
-
- );
diff --git a/apps/app/components/icons/tag-icon.tsx b/apps/app/components/icons/tag-icon.tsx
deleted file mode 100644
index a17d4c1e4..000000000
--- a/apps/app/components/icons/tag-icon.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const TagIcon: React.FC = ({
- width = "24",
- height = "24",
- className,
- color = "black",
-}) => (
-
- );
diff --git a/apps/app/components/icons/transfer-icon.tsx b/apps/app/components/icons/transfer-icon.tsx
deleted file mode 100644
index 176c38b29..000000000
--- a/apps/app/components/icons/transfer-icon.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const TransferIcon: React.FC = ({ width, height, className, color }) => (
-
- );
diff --git a/apps/app/components/icons/tune-icon.tsx b/apps/app/components/icons/tune-icon.tsx
deleted file mode 100644
index 1221b2976..000000000
--- a/apps/app/components/icons/tune-icon.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const TuneIcon: React.FC = ({ width = "24", height = "24", className }) => (
-
- );
diff --git a/apps/app/components/icons/upcoming-cycle-icon.tsx b/apps/app/components/icons/upcoming-cycle-icon.tsx
deleted file mode 100644
index 52961e15e..000000000
--- a/apps/app/components/icons/upcoming-cycle-icon.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const UpcomingCycleIcon: React.FC = ({
- width = "24",
- height = "24",
- className,
- color = "black",
-}) => (
-
- );
diff --git a/apps/app/components/icons/user-icon-circle.tsx b/apps/app/components/icons/user-icon-circle.tsx
deleted file mode 100644
index 8bae34133..000000000
--- a/apps/app/components/icons/user-icon-circle.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const UserCircleIcon: React.FC = ({ width = "24", height = "24", className }) => (
-
- );
diff --git a/apps/app/components/icons/user-icon.tsx b/apps/app/components/icons/user-icon.tsx
deleted file mode 100644
index c0408dad3..000000000
--- a/apps/app/components/icons/user-icon.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from "react";
-
-import type { Props } from "./types";
-
-export const UserIcon: React.FC = ({ width = "24", height = "24", className }) => (
-
- );
diff --git a/apps/app/components/integration/slack/index.ts b/apps/app/components/integration/slack/index.ts
deleted file mode 100644
index 3bd1c965c..000000000
--- a/apps/app/components/integration/slack/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./select-channel";
\ No newline at end of file
diff --git a/apps/app/components/tiptap/table-menu/InsertBottomTableIcon.tsx b/apps/app/components/tiptap/table-menu/InsertBottomTableIcon.tsx
deleted file mode 100644
index b3f99855e..000000000
--- a/apps/app/components/tiptap/table-menu/InsertBottomTableIcon.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-const InsertBottomTableIcon = (props: any) => (
-
-)
-
-export default InsertBottomTableIcon;
diff --git a/apps/app/components/tiptap/table-menu/InsertLeftTableIcon.tsx b/apps/app/components/tiptap/table-menu/InsertLeftTableIcon.tsx
deleted file mode 100644
index 8a92705d8..000000000
--- a/apps/app/components/tiptap/table-menu/InsertLeftTableIcon.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-const InsertLeftTableIcon = (props: any) => (
-
-)
-export default InsertLeftTableIcon
diff --git a/apps/app/components/tiptap/table-menu/InsertRightTableIcon.tsx b/apps/app/components/tiptap/table-menu/InsertRightTableIcon.tsx
deleted file mode 100644
index 04348ece1..000000000
--- a/apps/app/components/tiptap/table-menu/InsertRightTableIcon.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-const InsertRightTableIcon = (props: any) => (
-
-)
-
-export default InsertRightTableIcon
diff --git a/apps/app/components/tiptap/table-menu/InsertTopTableIcon.tsx b/apps/app/components/tiptap/table-menu/InsertTopTableIcon.tsx
deleted file mode 100644
index 14036f998..000000000
--- a/apps/app/components/tiptap/table-menu/InsertTopTableIcon.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-const InsertTopTableIcon = (props: any) => (
-
-)
-export default InsertTopTableIcon;
diff --git a/apps/space/public/logos/github-black.png b/apps/space/public/logos/github-black.png
deleted file mode 100644
index 7a7a82474ff108faf2c883c5616c83160c889c3c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 14032
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
F|34@0LH+;$
diff --git a/apps/space/public/logos/github-square.png b/apps/space/public/logos/github-square.png
deleted file mode 100644
index 527ba79f25878c988d6abb3af215b1f5f4d98ea6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 2352
zcmV-03D5S4P))l_nNYDAs-fRE%x7N4T`qti2WQ=H$X(9tf
z{vi@WKNtQZk}L8rk>7QHG*YBMg#S+@he{@aB~pB#Xrv_BjFe;_DjRM|2_$8jPZf=X
zz?D$cAH?L)&*xy>qEO_Q3RE&%VkiQrSg|5iuU=jKU!g(;_1X9D-|5SjFH}@iM8(C$
z>hCZ^t;o=31ceE;YSp41J$g{@-o2?ymoC(%O&h9Pw=UJJS(7SPu1rx;QS|leS9<^c
zJ-vDJhVt_ADEoFcWnIal^z?Lk^ypEzh)TdeFr$#!Z2kK6dHVF}eDvs1{_x=gyM++K
zw{G3ywQJXMpFVw9hzzBl$)QjjSj>Vub?U?$H*Vy|j~}zw`26`ZXJ%${VqzlKs8J(S
z}MQ5ew^#os~0|Eh7TXk@7}%RzXITtt5m5H
zdSV6)7{ISzzvjOZcI?>UCf?B>+@whpzJ2?)sRD>A;B!8G`o!UaCk?OPS}Sz*zl
zMWG=EA^4#~hb&KifAZuBr>3Uzuwld0IVVq^Y&kwZ
zKcD;d?dv@;Q>RX~y~yRumzVh+QiB5r4tO?;9z1x!vu4d=$;!*zxPpQL%imtTdQ}CY
zI@cRj%8nJpgy{6?($1LsS+Vh;rr1k@zOswrv~95=svrKBTOyEE2OMxlnrb
z>XpiLtp#*#Svo^XAPRU9i`Zl9IwYK9
zmE~A#EEWU18*WL=h!G=H9aaZeS){5)k%EL0Byp4W_TN2>pW%36z8i_w{G23Z9@n5?%ngE{^5y?8#hj+COSafhMcZS9XfQ-
z_VT}N`Hdu3AwK}-l$)EYHCBpjB$>D2cc#Q(-$w@$zfju0)5tHte$=sJ$F#;`b;7=u
z5iDnn4kVeQJ9qAopK$TwMXhnQYu7f7XH1E)^Vp?8uHzRoD#iW#_qE1h#Wjn)Oo
zPdbpI75NR4WowU>(x>6)ro`x^0f26t<5wVSH-afKhz@n2OJF$RM5prQ%Nu@fdiA<~
zL&^x`H`K3JUwbTCPK;nm43<3|fEbCA$xn!DAE!Om>^e<}F{_dV0&xK10Y5>acI~k*
zUc4~;+>{uUA9VodHE`fS@(ZAkE-@&jK7IPs@HU1v+HpL1@L;Ihzig#{|NdND
zT&%4#YQ*HU>>zQB+K15vQvLb!=ZB)RNlPT};q2^eb^_V%aZU_m<;sBSztM1*q^Mwl+*eUky+h=!d^Dogp
zk$F1P@W80rp^Ru&<%6Zh^wtxSA!)^n7cK!NwUbAM6vS<7TL^<_CD4U`IsB`DeJagtuWj2Kc?mM|~(==|F
zwNf|$X2+j_?bsuSkErHmj6q*7is5#x80a{FL&uh{E-A8Cq?LrTZVMi%G4
z$~RTcCU!8DjEoEp7Vw1*{F|O)Fcq_Q5H##aQTfN%X3d)M&Ye5??%lhpi4oslyLL^*
zMbXjGu87&Xbt?x0EEt;YAI^w@pc@H}&As2q~2nD^{>uAeci-
zn!|HCQxF%5B{&eWcdg7Qn2Wa(ta@$$Q(w4np__9$R}%4rYLgE@US1w2PD*s!R~r&y
zmM&fD_MGk%ZQs7V;j>7HaV}rJto+HCF=IGBKAsa25>%kLV8H_2rLv4THKn4WB3`|E
zbucFE{w|^;)5xsM03y-47HVRU-+9n|5!8=WjDg4cbRcEKAJMW?!QIyZ9?cm&dUUX)
z1WybE<^fx_dlCg5lWvJww{D%~v5_vEIdewkZeBgFl;Z_C5Ga+No^Glrhy039DTlSj*ACR1A*Xi)22uoN0M-=ei}DGS0-BWv88(U>{*hel0t-BkzY#xz>6OEZz-8AflQ_PRMBwCuVjK>
zeWqwQC6#P2jY9ms2cHSruhctZ{){Lag7Bu07%F*z*UyApDtUnyTG@Z6l6S`Z5B>`<
WHdDYlN8q0000Vy*j
diff --git a/apps/space/public/logos/github-white.png b/apps/space/public/logos/github-white.png
deleted file mode 100644
index dbb2b578cb6bc41059e08eea448a9a88d78d6b9a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 16559
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
diff --git a/apps/space/tsconfig.json b/apps/space/tsconfig.json
deleted file mode 100644
index 5404bd9fb..000000000
--- a/apps/space/tsconfig.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "compilerOptions": {
- "target": "es5",
- "lib": ["dom", "dom.iterable", "esnext"],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": true,
- "forceConsistentCasingInFileNames": true,
- "noEmit": true,
- "esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "node",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve",
- "incremental": true,
- "baseUrl": ".",
- "paths": {},
- "plugins": [{ "name": "next" }]
- },
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "server.js", ".next/types/**/*.ts"],
- "exclude": ["node_modules"]
-}
diff --git a/docker-compose.yml b/docker-compose.yml
index f69f5be1d..4fe7f4ab7 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,176 +1,194 @@
version: "3.8"
-x-api-and-worker-env:
- &api-and-worker-env
- DEBUG: ${DEBUG}
- SENTRY_DSN: ${SENTRY_DSN}
- DJANGO_SETTINGS_MODULE: plane.settings.production
- DATABASE_URL: postgres://${PGUSER}:${PGPASSWORD}@${PGHOST}:5432/${PGDATABASE}
- REDIS_URL: redis://plane-redis:6379/
- EMAIL_HOST: ${EMAIL_HOST}
- EMAIL_HOST_USER: ${EMAIL_HOST_USER}
- EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD}
- EMAIL_PORT: ${EMAIL_PORT}
- EMAIL_FROM: ${EMAIL_FROM}
- EMAIL_USE_TLS: ${EMAIL_USE_TLS}
- EMAIL_USE_SSL: ${EMAIL_USE_SSL}
- AWS_REGION: ${AWS_REGION}
- AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
- AWS_S3_BUCKET_NAME: ${AWS_S3_BUCKET_NAME}
- AWS_S3_ENDPOINT_URL: ${AWS_S3_ENDPOINT_URL}
- FILE_SIZE_LIMIT: ${FILE_SIZE_LIMIT}
- WEB_URL: ${WEB_URL}
- GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET}
- DISABLE_COLLECTSTATIC: 1
- DOCKERIZED: 1
- OPENAI_API_BASE: ${OPENAI_API_BASE}
- OPENAI_API_KEY: ${OPENAI_API_KEY}
- GPT_ENGINE: ${GPT_ENGINE}
- SECRET_KEY: ${SECRET_KEY}
- DEFAULT_EMAIL: ${DEFAULT_EMAIL}
- DEFAULT_PASSWORD: ${DEFAULT_PASSWORD}
- USE_MINIO: ${USE_MINIO}
- ENABLE_SIGNUP: ${ENABLE_SIGNUP}
+x-api-and-worker-env: &api-and-worker-env
+ DEBUG: ${DEBUG}
+ SENTRY_DSN: ${SENTRY_DSN}
+ DJANGO_SETTINGS_MODULE: plane.settings.production
+ DATABASE_URL: postgres://${PGUSER}:${PGPASSWORD}@${PGHOST}:5432/${PGDATABASE}
+ REDIS_URL: redis://plane-redis:6379/
+ EMAIL_HOST: ${EMAIL_HOST}
+ EMAIL_HOST_USER: ${EMAIL_HOST_USER}
+ EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD}
+ EMAIL_PORT: ${EMAIL_PORT}
+ EMAIL_FROM: ${EMAIL_FROM}
+ EMAIL_USE_TLS: ${EMAIL_USE_TLS}
+ EMAIL_USE_SSL: ${EMAIL_USE_SSL}
+ AWS_REGION: ${AWS_REGION}
+ AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
+ AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
+ AWS_S3_BUCKET_NAME: ${AWS_S3_BUCKET_NAME}
+ AWS_S3_ENDPOINT_URL: ${AWS_S3_ENDPOINT_URL}
+ FILE_SIZE_LIMIT: ${FILE_SIZE_LIMIT}
+ WEB_URL: ${WEB_URL}
+ GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET}
+ DISABLE_COLLECTSTATIC: 1
+ DOCKERIZED: 1
+ OPENAI_API_BASE: ${OPENAI_API_BASE}
+ OPENAI_API_KEY: ${OPENAI_API_KEY}
+ GPT_ENGINE: ${GPT_ENGINE}
+ SECRET_KEY: ${SECRET_KEY}
+ DEFAULT_EMAIL: ${DEFAULT_EMAIL}
+ DEFAULT_PASSWORD: ${DEFAULT_PASSWORD}
+ USE_MINIO: ${USE_MINIO}
+ ENABLE_SIGNUP: ${ENABLE_SIGNUP}
services:
- plane-web:
- container_name: planefrontend
- build:
- context: .
- dockerfile: ./apps/app/Dockerfile.web
- args:
- NEXT_PUBLIC_API_BASE_URL: http://localhost:8000
- NEXT_PUBLIC_DEPLOY_URL: http://localhost/spaces
- restart: always
- command: /usr/local/bin/start.sh apps/app/server.js app
- env_file:
- - .env
- environment:
- NEXT_PUBLIC_API_BASE_URL: ${NEXT_PUBLIC_API_BASE_URL}
- NEXT_PUBLIC_DEPLOY_URL: ${NEXT_PUBLIC_DEPLOY_URL}
- NEXT_PUBLIC_GOOGLE_CLIENTID: "0"
- NEXT_PUBLIC_GITHUB_APP_NAME: "0"
- NEXT_PUBLIC_GITHUB_ID: "0"
- NEXT_PUBLIC_SENTRY_DSN: "0"
- NEXT_PUBLIC_ENABLE_OAUTH: "0"
- NEXT_PUBLIC_ENABLE_SENTRY: "0"
- NEXT_PUBLIC_ENABLE_SESSION_RECORDER: "0"
- NEXT_PUBLIC_TRACK_EVENTS: "0"
- depends_on:
- - plane-api
- - plane-worker
+ plane-web:
+ container_name: planefrontend
+ build:
+ context: .
+ dockerfile: ./web/Dockerfile.web
+ args:
+ NEXT_PUBLIC_API_BASE_URL: http://localhost:8000
+ NEXT_PUBLIC_DEPLOY_URL: http://localhost/spaces
+ restart: always
+ command: /usr/local/bin/start.sh web/server.js web
+ env_file:
+ - .env
+ environment:
+ NEXT_PUBLIC_API_BASE_URL: ${NEXT_PUBLIC_API_BASE_URL}
+ NEXT_PUBLIC_DEPLOY_URL: ${NEXT_PUBLIC_DEPLOY_URL}
+ NEXT_PUBLIC_GOOGLE_CLIENTID: "0"
+ NEXT_PUBLIC_GITHUB_APP_NAME: "0"
+ NEXT_PUBLIC_GITHUB_ID: "0"
+ NEXT_PUBLIC_SENTRY_DSN: "0"
+ NEXT_PUBLIC_ENABLE_OAUTH: "0"
+ NEXT_PUBLIC_ENABLE_SENTRY: "0"
+ NEXT_PUBLIC_ENABLE_SESSION_RECORDER: "0"
+ NEXT_PUBLIC_TRACK_EVENTS: "0"
+ depends_on:
+ - plane-api
+ - plane-worker
- plane-api:
- container_name: planebackend
- build:
- context: ./apiserver
- dockerfile: Dockerfile.api
- restart: always
- command: ./bin/takeoff
- env_file:
- - .env
- environment:
- <<: *api-and-worker-env
- depends_on:
- - plane-db
- - plane-redis
+ plane-deploy:
+ container_name: planedeploy
+ build:
+ context: .
+ dockerfile: ./space/Dockerfile.space
+ args:
+ DOCKER_BUILDKIT: 1
+ NEXT_PUBLIC_API_BASE_URL: http://localhost:8000
+ restart: always
+ command: /usr/local/bin/start.sh space/server.js space
+ env_file:
+ - .env
+ environment:
+ - NEXT_PUBLIC_API_BASE_URL=${NEXT_PUBLIC_API_BASE_URL}
+ depends_on:
+ - plane-api
+ - plane-worker
+ - plane-web
- plane-worker:
- container_name: planebgworker
- build:
- context: ./apiserver
- dockerfile: Dockerfile.api
- restart: always
- command: ./bin/worker
- env_file:
- - .env
- environment:
- <<: *api-and-worker-env
- depends_on:
- - plane-api
- - plane-db
- - plane-redis
+ plane-api:
+ container_name: planebackend
+ build:
+ context: ./apiserver
+ dockerfile: Dockerfile.api
+ restart: always
+ command: ./bin/takeoff
+ env_file:
+ - .env
+ environment:
+ <<: *api-and-worker-env
+ depends_on:
+ - plane-db
+ - plane-redis
- plane-beat-worker:
- container_name: planebeatworker
- build:
- context: ./apiserver
- dockerfile: Dockerfile.api
- restart: always
- command: ./bin/beat
- env_file:
- - .env
- environment:
- <<: *api-and-worker-env
- depends_on:
- - plane-api
- - plane-db
- - plane-redis
+ plane-worker:
+ container_name: planebgworker
+ build:
+ context: ./apiserver
+ dockerfile: Dockerfile.api
+ restart: always
+ command: ./bin/worker
+ env_file:
+ - .env
+ environment:
+ <<: *api-and-worker-env
+ depends_on:
+ - plane-api
+ - plane-db
+ - plane-redis
- plane-db:
- container_name: plane-db
- image: postgres:15.2-alpine
- restart: always
- command: postgres -c 'max_connections=1000'
- volumes:
- - pgdata:/var/lib/postgresql/data
- env_file:
- - .env
- environment:
- POSTGRES_USER: ${PGUSER}
- POSTGRES_DB: ${PGDATABASE}
- POSTGRES_PASSWORD: ${PGPASSWORD}
- PGDATA: /var/lib/postgresql/data
+ plane-beat-worker:
+ container_name: planebeatworker
+ build:
+ context: ./apiserver
+ dockerfile: Dockerfile.api
+ restart: always
+ command: ./bin/beat
+ env_file:
+ - .env
+ environment:
+ <<: *api-and-worker-env
+ depends_on:
+ - plane-api
+ - plane-db
+ - plane-redis
- plane-redis:
- container_name: plane-redis
- image: redis:6.2.7-alpine
- restart: always
- volumes:
- - redisdata:/data
+ plane-db:
+ container_name: plane-db
+ image: postgres:15.2-alpine
+ restart: always
+ command: postgres -c 'max_connections=1000'
+ volumes:
+ - pgdata:/var/lib/postgresql/data
+ env_file:
+ - .env
+ environment:
+ POSTGRES_USER: ${PGUSER}
+ POSTGRES_DB: ${PGDATABASE}
+ POSTGRES_PASSWORD: ${PGPASSWORD}
+ PGDATA: /var/lib/postgresql/data
- plane-minio:
- container_name: plane-minio
- image: minio/minio
- restart: always
- command: server /export --console-address ":9090"
- volumes:
- - uploads:/export
- env_file:
- - .env
- environment:
- MINIO_ROOT_USER: ${AWS_ACCESS_KEY_ID}
- MINIO_ROOT_PASSWORD: ${AWS_SECRET_ACCESS_KEY}
+ plane-redis:
+ container_name: plane-redis
+ image: redis:6.2.7-alpine
+ restart: always
+ volumes:
+ - redisdata:/data
- createbuckets:
- image: minio/mc
- entrypoint: >
- /bin/sh -c " /usr/bin/mc config host add plane-minio http://plane-minio:9000 \$AWS_ACCESS_KEY_ID \$AWS_SECRET_ACCESS_KEY; /usr/bin/mc mb plane-minio/\$AWS_S3_BUCKET_NAME; /usr/bin/mc anonymous set download plane-minio/\$AWS_S3_BUCKET_NAME; exit 0; "
- env_file:
- - .env
- depends_on:
- - plane-minio
+ plane-minio:
+ container_name: plane-minio
+ image: minio/minio
+ restart: always
+ command: server /export --console-address ":9090"
+ volumes:
+ - uploads:/export
+ env_file:
+ - .env
+ environment:
+ MINIO_ROOT_USER: ${AWS_ACCESS_KEY_ID}
+ MINIO_ROOT_PASSWORD: ${AWS_SECRET_ACCESS_KEY}
- # Comment this if you already have a reverse proxy running
- plane-proxy:
- container_name: planeproxy
- build:
- context: ./nginx
- dockerfile: Dockerfile
- restart: always
- ports:
- - ${NGINX_PORT}:80
- env_file:
- - .env
- environment:
- FILE_SIZE_LIMIT: ${FILE_SIZE_LIMIT:-5242880}
- BUCKET_NAME: ${AWS_S3_BUCKET_NAME:-uploads}
- depends_on:
- - plane-web
- - plane-api
+ createbuckets:
+ image: minio/mc
+ entrypoint: >
+ /bin/sh -c " /usr/bin/mc config host add plane-minio http://plane-minio:9000 \$AWS_ACCESS_KEY_ID \$AWS_SECRET_ACCESS_KEY; /usr/bin/mc mb plane-minio/\$AWS_S3_BUCKET_NAME; /usr/bin/mc anonymous set download plane-minio/\$AWS_S3_BUCKET_NAME; exit 0; "
+ env_file:
+ - .env
+ depends_on:
+ - plane-minio
+
+ # Comment this if you already have a reverse proxy running
+ plane-proxy:
+ container_name: planeproxy
+ build:
+ context: ./nginx
+ dockerfile: Dockerfile
+ restart: always
+ ports:
+ - ${NGINX_PORT}:80
+ env_file:
+ - .env
+ environment:
+ FILE_SIZE_LIMIT: ${FILE_SIZE_LIMIT:-5242880}
+ BUCKET_NAME: ${AWS_S3_BUCKET_NAME:-uploads}
+ depends_on:
+ - plane-web
+ - plane-api
volumes:
- pgdata:
- redisdata:
- uploads:
+ pgdata:
+ redisdata:
+ uploads:
diff --git a/nginx/nginx.conf.template b/nginx/nginx.conf.template
index 206c94b51..974f4907d 100644
--- a/nginx/nginx.conf.template
+++ b/nginx/nginx.conf.template
@@ -19,6 +19,10 @@ server {
proxy_pass http://planebackend:8000/api/;
}
+ location /spaces/ {
+ proxy_pass http://planedeploy:3000/spaces/;
+ }
+
location /${BUCKET_NAME}/ {
proxy_pass http://plane-minio:9000/uploads/;
}
diff --git a/package.json b/package.json
index b99978f20..397952b3b 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,8 @@
"license": "AGPL-3.0",
"private": true,
"workspaces": [
- "apps/*",
+ "web",
+ "space",
"packages/*"
],
"scripts": {
@@ -12,9 +13,9 @@
"dev": "turbo run dev",
"start": "turbo run start",
"lint": "turbo run lint",
- "clean": "turbo run clean"
+ "clean": "turbo run clean",
+ "format": "prettier --write \"**/*.{ts,tsx,md}\""
},
-
"devDependencies": {
"eslint-config-custom": "*",
"prettier": "latest",
diff --git a/packages/eslint-config-custom/index.js b/packages/eslint-config-custom/index.js
index 4d8295125..d31a76406 100644
--- a/packages/eslint-config-custom/index.js
+++ b/packages/eslint-config-custom/index.js
@@ -4,7 +4,7 @@ module.exports = {
plugins: ["react", "@typescript-eslint"],
settings: {
next: {
- rootDir: ["app/", "docs/", "packages/*/"],
+ rootDir: ["web/", "space/", "packages/*/"],
},
},
rules: {
diff --git a/apps/space/.env.example b/space/.env.example
similarity index 100%
rename from apps/space/.env.example
rename to space/.env.example
diff --git a/apps/app/.eslintrc.js b/space/.eslintrc.js
similarity index 100%
rename from apps/app/.eslintrc.js
rename to space/.eslintrc.js
diff --git a/apps/space/.gitignore b/space/.gitignore
similarity index 100%
rename from apps/space/.gitignore
rename to space/.gitignore
diff --git a/apps/space/.prettierignore b/space/.prettierignore
similarity index 100%
rename from apps/space/.prettierignore
rename to space/.prettierignore
diff --git a/apps/space/.prettierrc.json b/space/.prettierrc.json
similarity index 100%
rename from apps/space/.prettierrc.json
rename to space/.prettierrc.json
diff --git a/apps/space/Dockerfile.space b/space/Dockerfile.space
similarity index 81%
rename from apps/space/Dockerfile.space
rename to space/Dockerfile.space
index 0240ddbf7..34fe42a13 100644
--- a/apps/space/Dockerfile.space
+++ b/space/Dockerfile.space
@@ -44,14 +44,15 @@ RUN addgroup --system --gid 1001 plane
RUN adduser --system --uid 1001 captain
USER captain
-COPY --from=installer /app/apps/space/next.config.js .
-COPY --from=installer /app/apps/space/package.json .
+COPY --from=installer /app/space/next.config.js .
+COPY --from=installer /app/space/package.json .
-# Automatically leverage output traces to reduce image size
+# Automatically leverage output traces to reduce image sizß
# https://nextjs.org/docs/advanced-features/output-file-tracing
-COPY --from=installer --chown=captain:plane /app/apps/space/.next/standalone ./
+COPY --from=installer --chown=captain:plane /app/space/.next/standalone ./
-COPY --from=installer --chown=captain:plane /app/apps/space/.next ./apps/space/.next
+COPY --from=installer --chown=captain:plane /app/space/.next ./space/.next
+COPY --from=installer --chown=captain:plane /app/space/public ./space/public
ARG NEXT_PUBLIC_API_BASE_URL=http://localhost:8000
ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL \
diff --git a/apps/space/README.md b/space/README.md
similarity index 100%
rename from apps/space/README.md
rename to space/README.md
diff --git a/apps/space/components/accounts/email-code-form.tsx b/space/components/accounts/email-code-form.tsx
similarity index 100%
rename from apps/space/components/accounts/email-code-form.tsx
rename to space/components/accounts/email-code-form.tsx
diff --git a/apps/space/components/accounts/email-password-form.tsx b/space/components/accounts/email-password-form.tsx
similarity index 100%
rename from apps/space/components/accounts/email-password-form.tsx
rename to space/components/accounts/email-password-form.tsx
diff --git a/apps/space/components/accounts/email-reset-password-form.tsx b/space/components/accounts/email-reset-password-form.tsx
similarity index 100%
rename from apps/space/components/accounts/email-reset-password-form.tsx
rename to space/components/accounts/email-reset-password-form.tsx
diff --git a/apps/space/components/accounts/github-login-button.tsx b/space/components/accounts/github-login-button.tsx
similarity index 93%
rename from apps/space/components/accounts/github-login-button.tsx
rename to space/components/accounts/github-login-button.tsx
index 4ba47b421..e9b30ab73 100644
--- a/apps/space/components/accounts/github-login-button.tsx
+++ b/space/components/accounts/github-login-button.tsx
@@ -5,8 +5,8 @@ import { useRouter } from "next/router";
// next-themes
import { useTheme } from "next-themes";
// images
-import githubBlackImage from "/public/logos/github-black.png";
-import githubWhiteImage from "/public/logos/github-white.png";
+import githubBlackImage from "public/logos/github-black.svg";
+import githubWhiteImage from "public/logos/github-white.svg";
export interface GithubLoginButtonProps {
handleSignIn: React.Dispatch;
diff --git a/apps/space/components/accounts/google-login.tsx b/space/components/accounts/google-login.tsx
similarity index 100%
rename from apps/space/components/accounts/google-login.tsx
rename to space/components/accounts/google-login.tsx
diff --git a/apps/space/components/accounts/index.ts b/space/components/accounts/index.ts
similarity index 100%
rename from apps/space/components/accounts/index.ts
rename to space/components/accounts/index.ts
diff --git a/apps/space/components/accounts/onboarding-form.tsx b/space/components/accounts/onboarding-form.tsx
similarity index 100%
rename from apps/space/components/accounts/onboarding-form.tsx
rename to space/components/accounts/onboarding-form.tsx
diff --git a/apps/space/components/icons/index.ts b/space/components/icons/index.ts
similarity index 100%
rename from apps/space/components/icons/index.ts
rename to space/components/icons/index.ts
diff --git a/apps/space/components/icons/issue-group/backlog-state-icon.tsx b/space/components/icons/issue-group/backlog-state-icon.tsx
similarity index 100%
rename from apps/space/components/icons/issue-group/backlog-state-icon.tsx
rename to space/components/icons/issue-group/backlog-state-icon.tsx
diff --git a/apps/space/components/icons/issue-group/cancelled-state-icon.tsx b/space/components/icons/issue-group/cancelled-state-icon.tsx
similarity index 100%
rename from apps/space/components/icons/issue-group/cancelled-state-icon.tsx
rename to space/components/icons/issue-group/cancelled-state-icon.tsx
diff --git a/apps/space/components/icons/issue-group/completed-state-icon.tsx b/space/components/icons/issue-group/completed-state-icon.tsx
similarity index 100%
rename from apps/space/components/icons/issue-group/completed-state-icon.tsx
rename to space/components/icons/issue-group/completed-state-icon.tsx
diff --git a/apps/space/components/icons/issue-group/started-state-icon.tsx b/space/components/icons/issue-group/started-state-icon.tsx
similarity index 100%
rename from apps/space/components/icons/issue-group/started-state-icon.tsx
rename to space/components/icons/issue-group/started-state-icon.tsx
diff --git a/apps/space/components/icons/issue-group/unstarted-state-icon.tsx b/space/components/icons/issue-group/unstarted-state-icon.tsx
similarity index 100%
rename from apps/space/components/icons/issue-group/unstarted-state-icon.tsx
rename to space/components/icons/issue-group/unstarted-state-icon.tsx
diff --git a/apps/space/components/icons/types.d.ts b/space/components/icons/types.d.ts
similarity index 100%
rename from apps/space/components/icons/types.d.ts
rename to space/components/icons/types.d.ts
diff --git a/apps/space/components/issues/board-views/block-downvotes.tsx b/space/components/issues/board-views/block-downvotes.tsx
similarity index 100%
rename from apps/space/components/issues/board-views/block-downvotes.tsx
rename to space/components/issues/board-views/block-downvotes.tsx
diff --git a/apps/space/components/issues/board-views/block-due-date.tsx b/space/components/issues/board-views/block-due-date.tsx
similarity index 100%
rename from apps/space/components/issues/board-views/block-due-date.tsx
rename to space/components/issues/board-views/block-due-date.tsx
diff --git a/apps/space/components/issues/board-views/block-labels.tsx b/space/components/issues/board-views/block-labels.tsx
similarity index 100%
rename from apps/space/components/issues/board-views/block-labels.tsx
rename to space/components/issues/board-views/block-labels.tsx
diff --git a/apps/space/components/issues/board-views/block-priority.tsx b/space/components/issues/board-views/block-priority.tsx
similarity index 100%
rename from apps/space/components/issues/board-views/block-priority.tsx
rename to space/components/issues/board-views/block-priority.tsx
diff --git a/apps/space/components/issues/board-views/block-state.tsx b/space/components/issues/board-views/block-state.tsx
similarity index 100%
rename from apps/space/components/issues/board-views/block-state.tsx
rename to space/components/issues/board-views/block-state.tsx
diff --git a/apps/space/components/issues/board-views/block-upvotes.tsx b/space/components/issues/board-views/block-upvotes.tsx
similarity index 100%
rename from apps/space/components/issues/board-views/block-upvotes.tsx
rename to space/components/issues/board-views/block-upvotes.tsx
diff --git a/apps/space/components/issues/board-views/calendar/index.tsx b/space/components/issues/board-views/calendar/index.tsx
similarity index 100%
rename from apps/space/components/issues/board-views/calendar/index.tsx
rename to space/components/issues/board-views/calendar/index.tsx
diff --git a/apps/space/components/issues/board-views/gantt/index.tsx b/space/components/issues/board-views/gantt/index.tsx
similarity index 100%
rename from apps/space/components/issues/board-views/gantt/index.tsx
rename to space/components/issues/board-views/gantt/index.tsx
diff --git a/apps/space/components/issues/board-views/kanban/block.tsx b/space/components/issues/board-views/kanban/block.tsx
similarity index 98%
rename from apps/space/components/issues/board-views/kanban/block.tsx
rename to space/components/issues/board-views/kanban/block.tsx
index 07375fe36..40f6576be 100644
--- a/apps/space/components/issues/board-views/kanban/block.tsx
+++ b/space/components/issues/board-views/kanban/block.tsx
@@ -24,6 +24,7 @@ export const IssueListBlock = observer(({ issue }: { issue: IIssue }) => {
const handleBlockClick = () => {
issueDetailStore.setPeekId(issue.id);
router.replace(
+ `/[workspace_slug]/[project_slug]`,
{
pathname: `/${workspace_slug?.toString()}/${project_slug}`,
query: {
@@ -31,7 +32,6 @@ export const IssueListBlock = observer(({ issue }: { issue: IIssue }) => {
peekId: issue.id,
},
},
- undefined,
{ shallow: true }
);
// router.push(`/${workspace_slug?.toString()}/${project_slug}?board=${board?.toString()}&peekId=${issue.id}`);
diff --git a/apps/space/components/issues/board-views/kanban/header.tsx b/space/components/issues/board-views/kanban/header.tsx
similarity index 100%
rename from apps/space/components/issues/board-views/kanban/header.tsx
rename to space/components/issues/board-views/kanban/header.tsx
diff --git a/apps/space/components/issues/board-views/kanban/index.tsx b/space/components/issues/board-views/kanban/index.tsx
similarity index 100%
rename from apps/space/components/issues/board-views/kanban/index.tsx
rename to space/components/issues/board-views/kanban/index.tsx
diff --git a/apps/space/components/issues/board-views/list/block.tsx b/space/components/issues/board-views/list/block.tsx
similarity index 98%
rename from apps/space/components/issues/board-views/list/block.tsx
rename to space/components/issues/board-views/list/block.tsx
index 7e6175ebb..067d4693a 100644
--- a/apps/space/components/issues/board-views/list/block.tsx
+++ b/space/components/issues/board-views/list/block.tsx
@@ -27,6 +27,7 @@ export const IssueListBlock: FC<{ issue: IIssue }> = observer((props) => {
const handleBlockClick = () => {
issueDetailStore.setPeekId(issue.id);
router.replace(
+ `/[workspace_slug]/[project_slug]`,
{
pathname: `/${workspace_slug?.toString()}/${project_slug}`,
query: {
@@ -34,7 +35,6 @@ export const IssueListBlock: FC<{ issue: IIssue }> = observer((props) => {
peekId: issue.id,
},
},
- undefined,
{ shallow: true }
);
// router.push(`/${workspace_slug?.toString()}/${project_slug}?board=${board?.toString()}&peekId=${issue.id}`);
diff --git a/apps/space/components/issues/board-views/list/header.tsx b/space/components/issues/board-views/list/header.tsx
similarity index 100%
rename from apps/space/components/issues/board-views/list/header.tsx
rename to space/components/issues/board-views/list/header.tsx
diff --git a/apps/space/components/issues/board-views/list/index.tsx b/space/components/issues/board-views/list/index.tsx
similarity index 100%
rename from apps/space/components/issues/board-views/list/index.tsx
rename to space/components/issues/board-views/list/index.tsx
diff --git a/apps/space/components/issues/board-views/spreadsheet/index.tsx b/space/components/issues/board-views/spreadsheet/index.tsx
similarity index 100%
rename from apps/space/components/issues/board-views/spreadsheet/index.tsx
rename to space/components/issues/board-views/spreadsheet/index.tsx
diff --git a/apps/space/components/issues/filters-render/index.tsx b/space/components/issues/filters-render/index.tsx
similarity index 100%
rename from apps/space/components/issues/filters-render/index.tsx
rename to space/components/issues/filters-render/index.tsx
diff --git a/apps/space/components/issues/filters-render/label/filter-label-block.tsx b/space/components/issues/filters-render/label/filter-label-block.tsx
similarity index 100%
rename from apps/space/components/issues/filters-render/label/filter-label-block.tsx
rename to space/components/issues/filters-render/label/filter-label-block.tsx
diff --git a/apps/space/components/issues/filters-render/label/index.tsx b/space/components/issues/filters-render/label/index.tsx
similarity index 100%
rename from apps/space/components/issues/filters-render/label/index.tsx
rename to space/components/issues/filters-render/label/index.tsx
diff --git a/apps/space/components/issues/filters-render/priority/filter-priority-block.tsx b/space/components/issues/filters-render/priority/filter-priority-block.tsx
similarity index 100%
rename from apps/space/components/issues/filters-render/priority/filter-priority-block.tsx
rename to space/components/issues/filters-render/priority/filter-priority-block.tsx
diff --git a/apps/space/components/issues/filters-render/priority/index.tsx b/space/components/issues/filters-render/priority/index.tsx
similarity index 100%
rename from apps/space/components/issues/filters-render/priority/index.tsx
rename to space/components/issues/filters-render/priority/index.tsx
diff --git a/apps/space/components/issues/filters-render/state/filter-state-block.tsx b/space/components/issues/filters-render/state/filter-state-block.tsx
similarity index 100%
rename from apps/space/components/issues/filters-render/state/filter-state-block.tsx
rename to space/components/issues/filters-render/state/filter-state-block.tsx
diff --git a/apps/space/components/issues/filters-render/state/index.tsx b/space/components/issues/filters-render/state/index.tsx
similarity index 100%
rename from apps/space/components/issues/filters-render/state/index.tsx
rename to space/components/issues/filters-render/state/index.tsx
diff --git a/apps/space/components/issues/navbar/index.tsx b/space/components/issues/navbar/index.tsx
similarity index 100%
rename from apps/space/components/issues/navbar/index.tsx
rename to space/components/issues/navbar/index.tsx
diff --git a/apps/space/components/issues/navbar/issue-board-view.tsx b/space/components/issues/navbar/issue-board-view.tsx
similarity index 100%
rename from apps/space/components/issues/navbar/issue-board-view.tsx
rename to space/components/issues/navbar/issue-board-view.tsx
diff --git a/apps/space/components/issues/navbar/issue-filter.tsx b/space/components/issues/navbar/issue-filter.tsx
similarity index 100%
rename from apps/space/components/issues/navbar/issue-filter.tsx
rename to space/components/issues/navbar/issue-filter.tsx
diff --git a/apps/space/components/issues/navbar/issue-view.tsx b/space/components/issues/navbar/issue-view.tsx
similarity index 100%
rename from apps/space/components/issues/navbar/issue-view.tsx
rename to space/components/issues/navbar/issue-view.tsx
diff --git a/apps/space/components/issues/navbar/search.tsx b/space/components/issues/navbar/search.tsx
similarity index 100%
rename from apps/space/components/issues/navbar/search.tsx
rename to space/components/issues/navbar/search.tsx
diff --git a/apps/space/components/issues/navbar/theme.tsx b/space/components/issues/navbar/theme.tsx
similarity index 100%
rename from apps/space/components/issues/navbar/theme.tsx
rename to space/components/issues/navbar/theme.tsx
diff --git a/apps/space/components/issues/peek-overview/add-comment.tsx b/space/components/issues/peek-overview/add-comment.tsx
similarity index 100%
rename from apps/space/components/issues/peek-overview/add-comment.tsx
rename to space/components/issues/peek-overview/add-comment.tsx
diff --git a/apps/space/components/issues/peek-overview/comment-detail-card.tsx b/space/components/issues/peek-overview/comment-detail-card.tsx
similarity index 100%
rename from apps/space/components/issues/peek-overview/comment-detail-card.tsx
rename to space/components/issues/peek-overview/comment-detail-card.tsx
diff --git a/apps/space/components/issues/peek-overview/full-screen-peek-view.tsx b/space/components/issues/peek-overview/full-screen-peek-view.tsx
similarity index 100%
rename from apps/space/components/issues/peek-overview/full-screen-peek-view.tsx
rename to space/components/issues/peek-overview/full-screen-peek-view.tsx
diff --git a/apps/space/components/issues/peek-overview/header.tsx b/space/components/issues/peek-overview/header.tsx
similarity index 100%
rename from apps/space/components/issues/peek-overview/header.tsx
rename to space/components/issues/peek-overview/header.tsx
diff --git a/apps/space/components/issues/peek-overview/index.ts b/space/components/issues/peek-overview/index.ts
similarity index 100%
rename from apps/space/components/issues/peek-overview/index.ts
rename to space/components/issues/peek-overview/index.ts
diff --git a/apps/space/components/issues/peek-overview/issue-activity.tsx b/space/components/issues/peek-overview/issue-activity.tsx
similarity index 100%
rename from apps/space/components/issues/peek-overview/issue-activity.tsx
rename to space/components/issues/peek-overview/issue-activity.tsx
diff --git a/apps/space/components/issues/peek-overview/issue-details.tsx b/space/components/issues/peek-overview/issue-details.tsx
similarity index 100%
rename from apps/space/components/issues/peek-overview/issue-details.tsx
rename to space/components/issues/peek-overview/issue-details.tsx
diff --git a/apps/space/components/issues/peek-overview/issue-emoji-reactions.tsx b/space/components/issues/peek-overview/issue-emoji-reactions.tsx
similarity index 100%
rename from apps/space/components/issues/peek-overview/issue-emoji-reactions.tsx
rename to space/components/issues/peek-overview/issue-emoji-reactions.tsx
diff --git a/apps/space/components/issues/peek-overview/issue-properties.tsx b/space/components/issues/peek-overview/issue-properties.tsx
similarity index 100%
rename from apps/space/components/issues/peek-overview/issue-properties.tsx
rename to space/components/issues/peek-overview/issue-properties.tsx
diff --git a/apps/space/components/issues/peek-overview/issue-reaction.tsx b/space/components/issues/peek-overview/issue-reaction.tsx
similarity index 100%
rename from apps/space/components/issues/peek-overview/issue-reaction.tsx
rename to space/components/issues/peek-overview/issue-reaction.tsx
diff --git a/apps/space/components/issues/peek-overview/issue-vote-reactions.tsx b/space/components/issues/peek-overview/issue-vote-reactions.tsx
similarity index 100%
rename from apps/space/components/issues/peek-overview/issue-vote-reactions.tsx
rename to space/components/issues/peek-overview/issue-vote-reactions.tsx
diff --git a/apps/space/components/issues/peek-overview/layout.tsx b/space/components/issues/peek-overview/layout.tsx
similarity index 100%
rename from apps/space/components/issues/peek-overview/layout.tsx
rename to space/components/issues/peek-overview/layout.tsx
diff --git a/apps/space/components/issues/peek-overview/side-peek-view.tsx b/space/components/issues/peek-overview/side-peek-view.tsx
similarity index 100%
rename from apps/space/components/issues/peek-overview/side-peek-view.tsx
rename to space/components/issues/peek-overview/side-peek-view.tsx
diff --git a/apps/space/components/tiptap/bubble-menu/index.tsx b/space/components/tiptap/bubble-menu/index.tsx
similarity index 100%
rename from apps/space/components/tiptap/bubble-menu/index.tsx
rename to space/components/tiptap/bubble-menu/index.tsx
diff --git a/apps/app/components/tiptap/bubble-menu/link-selector.tsx b/space/components/tiptap/bubble-menu/link-selector.tsx
similarity index 92%
rename from apps/app/components/tiptap/bubble-menu/link-selector.tsx
rename to space/components/tiptap/bubble-menu/link-selector.tsx
index 16072f4be..559521db6 100644
--- a/apps/app/components/tiptap/bubble-menu/link-selector.tsx
+++ b/space/components/tiptap/bubble-menu/link-selector.tsx
@@ -6,10 +6,9 @@ import isValidHttpUrl from "./utils/link-validator";
interface LinkSelectorProps {
editor: Editor;
isOpen: boolean;
- setIsOpen: Dispatch>
+ setIsOpen: Dispatch>;
}
-
export const LinkSelector: FC = ({ editor, isOpen, setIsOpen }) => {
const inputRef = useRef(null);
@@ -76,7 +75,9 @@ export const LinkSelector: FC = ({ editor, isOpen, setIsOpen
) : (
-