From 1538b99a282bbc85a72496204cf4a8e1b0377cab Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Fri, 21 Apr 2023 19:30:36 -0400 Subject: [PATCH] removing trubo --- app/.env.example | 11 + app/.eslintrc.js | 15 + app/.prettierrc | 5 + app/Dockerfile.dev | 13 + app/Dockerfile.web | 30 + app/components/account/email-code-form.tsx | 199 + .../account/email-password-form.tsx | 113 + app/components/account/email-signin-form.tsx | 24 + .../account/github-login-button.tsx | 47 + app/components/account/google-login.tsx | 53 + app/components/account/index.ts | 5 + app/components/auth-screens/index.ts | 3 + .../auth-screens/not-authorized-view.tsx | 67 + app/components/auth-screens/project/index.ts | 1 + .../auth-screens/project/join-project.tsx | 68 + .../auth-screens/workspace/index.ts | 1 + .../auth-screens/workspace/not-a-member.tsx | 44 + app/components/breadcrumbs/index.tsx | 60 + .../change-interface-theme.tsx | 45 + .../command-palette/change-issue-assignee.tsx | 108 + .../command-palette/change-issue-priority.tsx | 74 + .../command-palette/change-issue-state.tsx | 95 + .../command-palette/command-pallette.tsx | 879 ++ app/components/command-palette/index.ts | 6 + .../command-palette/shortcuts-modal.tsx | 198 + app/components/core/board-view/all-boards.tsx | 106 + .../core/board-view/board-header.tsx | 181 + app/components/core/board-view/index.ts | 4 + .../core/board-view/single-board.tsx | 190 + .../core/board-view/single-issue.tsx | 416 + .../core/bulk-delete-issues-modal.tsx | 221 + .../core/calendar-view/calendar.tsx | 511 ++ app/components/core/calendar-view/index.ts | 1 + app/components/core/custom-theme-form.tsx | 267 + app/components/core/custom-theme-modal.tsx | 65 + .../core/existing-issues-list-modal.tsx | 224 + app/components/core/feeds.tsx | 316 + app/components/core/filter-list.tsx | 350 + app/components/core/gpt-assistant-modal.tsx | 204 + app/components/core/image-picker-popover.tsx | 156 + app/components/core/image-upload-modal.tsx | 190 + app/components/core/index.ts | 14 + app/components/core/issues-view-filter.tsx | 282 + app/components/core/issues-view.tsx | 546 ++ app/components/core/link-modal.tsx | 128 + app/components/core/list-view/all-lists.tsx | 69 + app/components/core/list-view/index.ts | 3 + .../core/list-view/single-issue.tsx | 365 + app/components/core/list-view/single-list.tsx | 227 + app/components/core/sidebar/index.ts | 3 + app/components/core/sidebar/links-list.tsx | 72 + .../core/sidebar/progress-chart.tsx | 94 + .../core/sidebar/sidebar-progress-stats.tsx | 251 + .../core/sidebar/single-progress-stats.tsx | 38 + app/components/core/theme-switch.tsx | 60 + .../cycles/completed-cycles-list.tsx | 101 + app/components/cycles/cycles-list.tsx | 88 + app/components/cycles/delete-cycle-modal.tsx | 192 + app/components/cycles/empty-cycle.tsx | 78 + app/components/cycles/form.tsx | 223 + app/components/cycles/index.ts | 11 + app/components/cycles/modal.tsx | 181 + app/components/cycles/select.tsx | 127 + app/components/cycles/sidebar.tsx | 495 + app/components/cycles/single-cycle-card.tsx | 417 + .../cycles/transfer-issues-modal.tsx | 170 + app/components/cycles/transfer-issues.tsx | 56 + app/components/dnd/StrictModeDroppable.tsx | 23 + app/components/emoji-icon-picker/emojis.json | 1090 +++ app/components/emoji-icon-picker/helpers.ts | 26 + app/components/emoji-icon-picker/icons.json | 607 ++ app/components/emoji-icon-picker/index.tsx | 214 + app/components/emoji-icon-picker/types.d.ts | 7 + .../create-update-estimate-modal.tsx | 407 + .../estimates/delete-estimate-modal.tsx | 104 + app/components/estimates/index.tsx | 3 + app/components/estimates/single-estimate.tsx | 145 + app/components/icons/arrow-right.tsx | 24 + .../icons/assignment-clipboard-icon.tsx | 21 + app/components/icons/attachment-icon.tsx | 59 + app/components/icons/audio-file-icon.tsx | 9 + app/components/icons/backlog-state-icon.tsx | 21 + app/components/icons/blocked-icon.tsx | 25 + app/components/icons/blocker-icon.tsx | 25 + app/components/icons/bolt-icon.tsx | 16 + app/components/icons/calendar-month-icon.tsx | 19 + app/components/icons/cancel-icon.tsx | 16 + app/components/icons/cancelled-state-icon.tsx | 78 + app/components/icons/check.tsx | 24 + app/components/icons/clipboard-icon.tsx | 19 + app/components/icons/cloud-upload.tsx | 24 + app/components/icons/cmd-icon.tsx | 11 + app/components/icons/cog.tsx | 24 + app/components/icons/color-pallette-icon.tsx | 24 + app/components/icons/comment-icon.tsx | 16 + app/components/icons/completed-cycle-icon.tsx | 17 + app/components/icons/completed-state-icon.tsx | 69 + app/components/icons/contrast-icon.tsx | 25 + app/components/icons/css-file-icon.tsx | 9 + app/components/icons/csv-file-icon.tsx | 9 + app/components/icons/current-cycle-icon.tsx | 17 + app/components/icons/cycle-icon.tsx | 34 + app/components/icons/default-file-icon.tsx | 9 + app/components/icons/discord-icon.tsx | 26 + app/components/icons/doc-file-icon.tsx | 9 + app/components/icons/document-icon.tsx | 18 + app/components/icons/edit-icon.tsx | 19 + .../icons/ellipsis-horizontal-icon.tsx | 19 + app/components/icons/exclamation-icon.tsx | 16 + app/components/icons/external-link-icon.tsx | 38 + app/components/icons/figma-file-icon.tsx | 9 + app/components/icons/github-icon.tsx | 28 + app/components/icons/grid-view-icons.tsx | 24 + app/components/icons/heartbeat-icon.tsx | 27 + app/components/icons/html-file-icon.tsx | 9 + app/components/icons/img-file-icon.tsx | 9 + app/components/icons/import-layers.tsx | 26 + app/components/icons/index.ts | 75 + app/components/icons/jpg-file-icon.tsx | 9 + app/components/icons/js-file-icon.tsx | 9 + app/components/icons/layer-diagonal-icon.tsx | 26 + app/components/icons/lock-icon.tsx | 16 + app/components/icons/menu-icon.tsx | 19 + app/components/icons/pdf-file-icon.tsx | 9 + app/components/icons/pencil-scribble-icon.tsx | 23 + app/components/icons/people-group-icon.tsx | 24 + app/components/icons/plus-icon.tsx | 19 + app/components/icons/png-file-icon.tsx | 9 + app/components/icons/priority-icon.tsx | 20 + .../icons/question-mark-circle-icon.tsx | 20 + app/components/icons/setting-icon.tsx | 24 + app/components/icons/sheet-file-icon.tsx | 9 + app/components/icons/signal-cellular-icon.tsx | 19 + app/components/icons/stacked-layers-icon.tsx | 24 + app/components/icons/started-state-icon.tsx | 77 + app/components/icons/state-group-icon.tsx | 29 + app/components/icons/svg-file-icon.tsx | 9 + app/components/icons/tag-icon.tsx | 24 + app/components/icons/target-icon.tsx | 20 + app/components/icons/tick-mark-icon.tsx | 24 + app/components/icons/transfer-icon.tsx | 16 + app/components/icons/tune-icon.tsx | 19 + app/components/icons/txt-file-icon.tsx | 9 + app/components/icons/types.d.ts | 6 + app/components/icons/unstarted-state-icon.tsx | 59 + app/components/icons/upcoming-cycle-icon.tsx | 17 + app/components/icons/user-group-icon.tsx | 24 + app/components/icons/user-icon-circle.tsx | 16 + app/components/icons/user-icon.tsx | 19 + app/components/icons/users.tsx | 24 + app/components/icons/video-file-icon.tsx | 9 + app/components/icons/view-list-icon.tsx | 24 + app/components/icons/water-drop-icon.tsx | 24 + .../integration/delete-import-modal.tsx | 144 + app/components/integration/github/auth.tsx | 27 + .../integration/github/import-configure.tsx | 56 + .../integration/github/import-confirm.tsx | 27 + .../integration/github/import-data.tsx | 127 + .../integration/github/import-users.tsx | 55 + app/components/integration/github/index.ts | 9 + .../integration/github/repo-details.tsx | 105 + app/components/integration/github/root.tsx | 271 + .../integration/github/select-repository.tsx | 95 + .../integration/github/single-user-select.tsx | 133 + app/components/integration/guide.tsx | 157 + app/components/integration/index.ts | 10 + .../integration/jira/confirm-import.tsx | 49 + .../integration/jira/give-details.tsx | 178 + .../integration/jira/import-users.tsx | 145 + app/components/integration/jira/index.ts | 39 + .../integration/jira/jira-project-detail.tsx | 168 + app/components/integration/jira/root.tsx | 224 + app/components/integration/single-import.tsx | 61 + .../integration/single-integration-card.tsx | 153 + app/components/issues/activity.tsx | 372 + app/components/issues/attachment-upload.tsx | 106 + app/components/issues/attachments.tsx | 111 + app/components/issues/comment/add-comment.tsx | 98 + .../issues/comment/comment-card.tsx | 139 + app/components/issues/comment/index.ts | 2 + .../issues/delete-attachment-modal.tsx | 138 + app/components/issues/delete-issue-modal.tsx | 142 + app/components/issues/description-form.tsx | 169 + app/components/issues/form.tsx | 486 + app/components/issues/index.ts | 15 + app/components/issues/modal.tsx | 255 + app/components/issues/my-issues-list-item.tsx | 205 + .../issues/parent-issues-list-modal.tsx | 225 + app/components/issues/select/assignee.tsx | 74 + app/components/issues/select/date.tsx | 70 + app/components/issues/select/estimate.tsx | 57 + app/components/issues/select/index.ts | 8 + app/components/issues/select/label.tsx | 217 + app/components/issues/select/parent.tsx | 28 + app/components/issues/select/priority.tsx | 42 + app/components/issues/select/project.tsx | 66 + app/components/issues/select/state.tsx | 83 + .../issues/sidebar-select/assignee.tsx | 87 + .../issues/sidebar-select/blocked.tsx | 301 + .../issues/sidebar-select/blocker.tsx | 298 + .../issues/sidebar-select/cycle.tsx | 114 + .../issues/sidebar-select/estimate.tsx | 74 + app/components/issues/sidebar-select/index.ts | 9 + .../issues/sidebar-select/module.tsx | 120 + .../issues/sidebar-select/parent.tsx | 95 + .../issues/sidebar-select/priority.tsx | 58 + .../issues/sidebar-select/state.tsx | 89 + app/components/issues/sidebar.tsx | 654 ++ app/components/issues/sub-issues-list.tsx | 270 + .../issues/view-select/assignee.tsx | 128 + .../issues/view-select/due-date.tsx | 60 + .../issues/view-select/estimate.tsx | 92 + app/components/issues/view-select/index.ts | 5 + .../issues/view-select/priority.tsx | 94 + app/components/issues/view-select/state.tsx | 112 + app/components/labels/create-label-modal.tsx | 189 + .../labels/create-update-label-inline.tsx | 190 + app/components/labels/index.ts | 5 + app/components/labels/labels-list-modal.tsx | 177 + app/components/labels/single-label-group.tsx | 166 + app/components/labels/single-label.tsx | 56 + .../modules/delete-module-modal.tsx | 130 + app/components/modules/form.tsx | 187 + app/components/modules/index.ts | 7 + app/components/modules/modal.tsx | 156 + app/components/modules/select/index.ts | 3 + app/components/modules/select/select-lead.tsx | 78 + .../modules/select/select-members.tsx | 75 + .../modules/select/select-status.tsx | 64 + .../modules/sidebar-select/index.ts | 3 + .../modules/sidebar-select/select-lead.tsx | 94 + .../modules/sidebar-select/select-members.tsx | 81 + .../modules/sidebar-select/select-status.tsx | 69 + app/components/modules/sidebar.tsx | 562 ++ app/components/modules/single-module-card.tsx | 219 + app/components/onboarding/index.ts | 4 + app/components/onboarding/invite-members.tsx | 86 + app/components/onboarding/onboarding-card.tsx | 29 + app/components/onboarding/user-details.tsx | 139 + app/components/onboarding/workspace.tsx | 189 + .../pages/create-update-block-inline.tsx | 316 + .../pages/create-update-page-modal.tsx | 182 + app/components/pages/delete-page-modal.tsx | 155 + app/components/pages/index.ts | 9 + app/components/pages/page-form.tsx | 117 + .../pages/pages-list/all-pages-list.tsx | 30 + .../pages/pages-list/favorite-pages-list.tsx | 30 + app/components/pages/pages-list/index.ts | 6 + .../pages/pages-list/my-pages-list.tsx | 30 + .../pages/pages-list/other-pages-list.tsx | 30 + .../pages/pages-list/recent-pages-list.tsx | 78 + app/components/pages/pages-list/types.ts | 5 + app/components/pages/pages-view.tsx | 278 + app/components/pages/single-page-block.tsx | 454 + .../pages/single-page-detailed-item.tsx | 217 + .../pages/single-page-list-item.tsx | 214 + .../project/confirm-project-member-remove.tsx | 95 + .../project/create-project-modal.tsx | 326 + .../project/delete-project-modal.tsx | 182 + app/components/project/index.ts | 6 + app/components/project/join-project-modal.tsx | 86 + .../project/send-project-invitation-modal.tsx | 236 + .../project/settings/single-label.tsx | 148 + app/components/project/sidebar-list.tsx | 218 + .../project/single-integration-card.tsx | 113 + .../project/single-project-card.tsx | 262 + .../project/single-sidebar-project.tsx | 201 + app/components/rich-text-editor/index.tsx | 242 + .../rich-text-editor/mention-autocomplete.tsx | 64 + app/components/rich-text-editor/sample.tsx | 145 + .../toolbar/float-tool-tip.tsx | 68 + .../toolbar/heading-controls.tsx | 57 + .../rich-text-editor/toolbar/index.tsx | 35 + .../rich-text-editor/toolbar/link.tsx | 212 + .../toolbar/table-controls.tsx | 55 + app/components/search-listbox/index.tsx | 168 + app/components/search-listbox/types.d.ts | 15 + app/components/states/create-state-modal.tsx | 241 + .../states/create-update-state-inline.tsx | 240 + app/components/states/delete-state-modal.tsx | 158 + app/components/states/index.ts | 4 + app/components/states/single-state.tsx | 205 + app/components/toast-alert/index.tsx | 67 + app/components/ui/avatar.tsx | 128 + app/components/ui/buttons/danger-button.tsx | 36 + app/components/ui/buttons/index.ts | 3 + app/components/ui/buttons/primary-button.tsx | 36 + .../ui/buttons/secondary-button.tsx | 36 + app/components/ui/buttons/type.d.ts | 10 + app/components/ui/context-menu.tsx | 103 + app/components/ui/custom-menu.tsx | 175 + app/components/ui/custom-search-select.tsx | 174 + app/components/ui/custom-select.tsx | 129 + app/components/ui/date.tsx | 71 + app/components/ui/datepicker.tsx | 52 + app/components/ui/empty-space.tsx | 79 + app/components/ui/empty-state.tsx | 77 + app/components/ui/index.ts | 23 + app/components/ui/input/index.tsx | 52 + app/components/ui/input/types.d.ts | 15 + app/components/ui/labels-list.tsx | 32 + .../ui/linear-progress-indicator.tsx | 32 + app/components/ui/loader.tsx | 25 + app/components/ui/multi-input.tsx | 74 + app/components/ui/multi-level-dropdown.tsx | 146 + app/components/ui/multi-level-select.tsx | 155 + app/components/ui/outline-button.tsx | 60 + app/components/ui/progress-bar.tsx | 69 + app/components/ui/spinner.tsx | 23 + app/components/ui/text-area/index.tsx | 82 + app/components/ui/text-area/types.d.ts | 12 + app/components/ui/toggle-switch.tsx | 32 + app/components/ui/tooltip.tsx | 56 + app/components/views/delete-view-modal.tsx | 135 + app/components/views/form.tsx | 152 + app/components/views/index.ts | 5 + app/components/views/modal.tsx | 146 + app/components/views/select-filters.tsx | 182 + app/components/views/single-view-item.tsx | 178 + app/components/workspace/activity-graph.tsx | 141 + .../workspace/completed-issues-graph.tsx | 81 + .../confirm-workspace-member-remove.tsx | 95 + .../workspace/create-workspace-form.tsx | 201 + .../workspace/delete-workspace-modal.tsx | 179 + app/components/workspace/help-section.tsx | 158 + app/components/workspace/index.ts | 10 + app/components/workspace/issues-list.tsx | 105 + app/components/workspace/issues-pie-chart.tsx | 123 + app/components/workspace/issues-stats.tsx | 74 + .../send-workspace-invitation-modal.tsx | 170 + app/components/workspace/sidebar-dropdown.tsx | 235 + app/components/workspace/sidebar-menu.tsx | 68 + .../workspace/single-invitation.tsx | 77 + app/constants/calendar.ts | 22 + app/constants/crisp.tsx | 44 + app/constants/fetch-keys.ts | 165 + app/constants/issue.ts | 115 + app/constants/module.ts | 8 + app/constants/project.ts | 28 + app/constants/seo-variables.ts | 8 + app/constants/state.ts | 9 + app/constants/themes.ts | 35 + app/constants/workspace.ts | 85 + app/contexts/issue-view.context.tsx | 593 ++ app/contexts/project-member.context.tsx | 73 + app/contexts/theme.context.tsx | 99 + app/contexts/toast.context.tsx | 101 + app/contexts/user.context.tsx | 41 + app/contexts/workspace.context.tsx | 51 + app/google.d.ts | 91 + app/helpers/array.helper.ts | 35 + app/helpers/attachment.helper.ts | 22 + app/helpers/calendar.helper.ts | 161 + app/helpers/common.helper.ts | 38 + app/helpers/date-time.helper.ts | 212 + app/helpers/state.helper.ts | 18 + app/helpers/string.helper.ts | 89 + app/helpers/theme.helper.ts | 35 + app/hooks/use-debounce.tsx | 19 + app/hooks/use-estimate-option.tsx | 44 + app/hooks/use-integration-popup.tsx | 52 + app/hooks/use-issue-properties.tsx | 104 + app/hooks/use-issues-view.tsx | 161 + app/hooks/use-issues.tsx | 22 + app/hooks/use-local-storage.tsx | 49 + app/hooks/use-my-issues-filter.tsx | 127 + app/hooks/use-outside-click-detector.tsx | 19 + app/hooks/use-project-details.tsx | 32 + app/hooks/use-project-members.tsx | 37 + app/hooks/use-projects.tsx | 29 + app/hooks/use-theme.tsx | 9 + app/hooks/use-timer.tsx | 19 + app/hooks/use-toast.tsx | 9 + app/hooks/use-user.tsx | 13 + app/hooks/use-workspace-details.tsx | 37 + app/hooks/use-workspace-members.tsx | 43 + app/hooks/use-workspaces.tsx | 31 + app/layouts/app-layout/app-header.tsx | 30 + app/layouts/app-layout/app-sidebar.tsx | 40 + app/layouts/app-layout/index.tsx | 166 + app/layouts/auth-layout/index.ts | 2 + .../project-authorization-wrapper.tsx | 148 + .../user-authorization-wrapper.tsx | 40 + .../workspace-authorization-wrapper.tsx | 163 + app/layouts/container.tsx | 69 + app/layouts/default-layout/index.tsx | 30 + app/layouts/settings-navbar.tsx | 111 + app/lib/auth.ts | 203 + app/lib/cookie.ts | 16 + app/lib/redirect.ts | 16 + app/manifest.json | 32 + app/next-env.d.ts | 5 + app/next.config.js | 27 + app/package.json | 66 + app/pages/404.tsx | 44 + app/pages/[workspaceSlug]/index.tsx | 82 + app/pages/[workspaceSlug]/me/my-issues.tsx | 206 + .../[workspaceSlug]/me/profile/activity.tsx | 46 + .../[workspaceSlug]/me/profile/index.tsx | 295 + .../projects/[projectId]/cycles/[cycleId].tsx | 181 + .../projects/[projectId]/cycles/index.tsx | 230 + .../projects/[projectId]/issues/[issueId].tsx | 238 + .../projects/[projectId]/issues/index.tsx | 66 + .../[projectId]/modules/[moduleId].tsx | 219 + .../projects/[projectId]/modules/index.tsx | 129 + .../projects/[projectId]/pages/[pageId].tsx | 552 ++ .../projects/[projectId]/pages/index.tsx | 311 + .../projects/[projectId]/settings/control.tsx | 239 + .../[projectId]/settings/estimates.tsx | 166 + .../[projectId]/settings/features.tsx | 272 + .../projects/[projectId]/settings/index.tsx | 369 + .../[projectId]/settings/integrations.tsx | 98 + .../projects/[projectId]/settings/labels.tsx | 181 + .../projects/[projectId]/settings/members.tsx | 277 + .../projects/[projectId]/settings/states.tsx | 150 + .../projects/[projectId]/views/[viewId].tsx | 110 + .../projects/[projectId]/views/index.tsx | 132 + app/pages/[workspaceSlug]/projects/index.tsx | 121 + .../[workspaceSlug]/settings/billing.tsx | 70 + .../settings/import-export.tsx | 30 + app/pages/[workspaceSlug]/settings/index.tsx | 343 + .../[workspaceSlug]/settings/integrations.tsx | 66 + .../[workspaceSlug]/settings/members.tsx | 257 + app/pages/_app.tsx | 50 + app/pages/_document.tsx | 38 + app/pages/_error.js | 106 + app/pages/api/track-event.ts | 53 + app/pages/api/unsplash.ts | 23 + app/pages/create-workspace.tsx | 44 + app/pages/error.tsx | 21 + app/pages/index.tsx | 66 + app/pages/installations/[provider]/index.tsx | 51 + app/pages/invitations.tsx | 174 + app/pages/magic-sign-in.tsx | 105 + app/pages/onboarding.tsx | 115 + app/pages/signin.tsx | 146 + .../[invitationId].tsx | 148 + app/postcss.config.js | 6 + app/public/404.svg | 17 + app/public/animated-icons/uploading.json | 1 + app/public/attachment/audio-icon.png | Bin 0 -> 10369 bytes app/public/attachment/css-icon.png | Bin 0 -> 12703 bytes app/public/attachment/csv-icon.png | Bin 0 -> 9681 bytes app/public/attachment/default-icon.png | Bin 0 -> 6134 bytes app/public/attachment/doc-icon.png | Bin 0 -> 15175 bytes app/public/attachment/excel-icon.png | Bin 0 -> 6708 bytes app/public/attachment/figma-icon.png | Bin 0 -> 15614 bytes app/public/attachment/html-icon.png | Bin 0 -> 6665 bytes app/public/attachment/img-icon.png | Bin 0 -> 10447 bytes app/public/attachment/jpg-icon.png | Bin 0 -> 12088 bytes app/public/attachment/js-icon.png | Bin 0 -> 10992 bytes app/public/attachment/pdf-icon.png | Bin 0 -> 13038 bytes app/public/attachment/png-icon.png | Bin 0 -> 12486 bytes app/public/attachment/svg-icon.png | Bin 0 -> 12899 bytes app/public/attachment/txt-icon.png | Bin 0 -> 11142 bytes app/public/attachment/video-icon.png | Bin 0 -> 11673 bytes app/public/auth/join-project.svg | 52 + app/public/auth/project-not-authorized.svg | 44 + app/public/auth/workspace-not-authorized.svg | 44 + app/public/empty-state/empty-cycle.svg | 50 + app/public/empty-state/empty-issue.svg | 62 + app/public/empty-state/empty-module.svg | 50 + app/public/empty-state/empty-page.svg | 40 + app/public/empty-state/empty-project.svg | 56 + app/public/empty-state/empty-view.svg | 147 + app/public/favicon/android-chrome-192x192.png | Bin 0 -> 2222 bytes app/public/favicon/android-chrome-512x512.png | Bin 0 -> 3832 bytes app/public/favicon/apple-touch-icon.png | Bin 0 -> 2176 bytes app/public/favicon/favicon-16x16.png | Bin 0 -> 1625 bytes app/public/favicon/favicon-32x32.png | Bin 0 -> 1617 bytes app/public/favicon/favicon.ico | Bin 0 -> 919 bytes app/public/favicon/site.webmanifest | 1 + app/public/logo-with-text.png | Bin 0 -> 46527 bytes app/public/logo.png | Bin 0 -> 2460 bytes app/public/logos/github-black.png | Bin 0 -> 14032 bytes app/public/logos/github-square.png | Bin 0 -> 2352 bytes app/public/logos/github.png | Bin 0 -> 16559 bytes app/public/mac-command.svg | 2 + app/public/onboarding/command-menu.svg | 7 + app/public/onboarding/cycle.svg | 43 + app/public/onboarding/issue.svg | 43 + app/public/onboarding/logo.svg | 6 + app/public/onboarding/module.svg | 48 + app/public/onboarding/welcome.svg | 5 + app/public/services/github.png | Bin 0 -> 2352 bytes app/public/services/jira.png | Bin 0 -> 231268 bytes app/public/services/slack.png | Bin 0 -> 19970 bytes app/public/sign-in-bg.png | Bin 0 -> 201792 bytes app/public/sign-up-sideimg.svg | 57 + app/public/site-image.png | Bin 0 -> 8682 bytes app/public/site.webmanifest.json | 13 + app/public/sw.js | 101 + app/public/sw.js.map | 1 + app/public/user.png | Bin 0 -> 99267 bytes app/public/vercel.svg | 4 + app/public/workbox-7805bd61.js | 2458 +++++ app/public/workbox-7805bd61.js.map | 1 + app/sentry.client.config.js | 18 + app/sentry.edge.config.js | 18 + app/sentry.properties | 3 + app/sentry.server.config.js | 18 + app/services/ai.service.ts | 34 + app/services/api.service.ts | 117 + app/services/app-installations.service.ts | 20 + app/services/authentication.service.ts | 67 + app/services/cycles.service.ts | 246 + app/services/estimates.service.ts | 74 + app/services/file.service.ts | 86 + app/services/integration/github.service.ts | 51 + app/services/integration/index.ts | 59 + app/services/integration/jira.service.ts | 34 + app/services/issues.service.ts | 490 + app/services/modules.service.ts | 248 + app/services/pages.service.ts | 242 + app/services/project.service.ts | 312 + app/services/state.service.ts | 104 + app/services/track-event.service.ts | 556 ++ app/services/user.service.ts | 94 + app/services/views.service.ts | 133 + app/services/workspace.service.ts | 211 + app/styles/command-pallette.css | 39 + app/styles/editor.css | 446 + app/styles/globals.css | 214 + app/styles/nprogress.css | 39 + app/tailwind.config.js | 60 + app/tsconfig.json | 30 + app/types/ai.d.ts | 9 + app/types/cycles.d.ts | 70 + app/types/estimate.d.ts | 37 + app/types/importer/github-importer.d.ts | 33 + app/types/importer/index.ts | 34 + app/types/importer/jira-importer.d.ts | 58 + app/types/index.d.ts | 22 + app/types/integration.d.ts | 35 + app/types/issues.d.ts | 280 + app/types/modules.d.ts | 80 + app/types/pages.d.ts | 54 + app/types/projects.d.ts | 106 + app/types/state.d.ts | 24 + app/types/users.d.ts | 109 + app/types/views.d.ts | 40 + app/types/workspace.d.ts | 84 + app/yarn.lock | 8029 +++++++++++++++++ 543 files changed, 63022 insertions(+) create mode 100644 app/.env.example create mode 100644 app/.eslintrc.js create mode 100644 app/.prettierrc create mode 100644 app/Dockerfile.dev create mode 100644 app/Dockerfile.web create mode 100644 app/components/account/email-code-form.tsx create mode 100644 app/components/account/email-password-form.tsx create mode 100644 app/components/account/email-signin-form.tsx create mode 100644 app/components/account/github-login-button.tsx create mode 100644 app/components/account/google-login.tsx create mode 100644 app/components/account/index.ts create mode 100644 app/components/auth-screens/index.ts create mode 100644 app/components/auth-screens/not-authorized-view.tsx create mode 100644 app/components/auth-screens/project/index.ts create mode 100644 app/components/auth-screens/project/join-project.tsx create mode 100644 app/components/auth-screens/workspace/index.ts create mode 100644 app/components/auth-screens/workspace/not-a-member.tsx create mode 100644 app/components/breadcrumbs/index.tsx create mode 100644 app/components/command-palette/change-interface-theme.tsx create mode 100644 app/components/command-palette/change-issue-assignee.tsx create mode 100644 app/components/command-palette/change-issue-priority.tsx create mode 100644 app/components/command-palette/change-issue-state.tsx create mode 100644 app/components/command-palette/command-pallette.tsx create mode 100644 app/components/command-palette/index.ts create mode 100644 app/components/command-palette/shortcuts-modal.tsx create mode 100644 app/components/core/board-view/all-boards.tsx create mode 100644 app/components/core/board-view/board-header.tsx create mode 100644 app/components/core/board-view/index.ts create mode 100644 app/components/core/board-view/single-board.tsx create mode 100644 app/components/core/board-view/single-issue.tsx create mode 100644 app/components/core/bulk-delete-issues-modal.tsx create mode 100644 app/components/core/calendar-view/calendar.tsx create mode 100644 app/components/core/calendar-view/index.ts create mode 100644 app/components/core/custom-theme-form.tsx create mode 100644 app/components/core/custom-theme-modal.tsx create mode 100644 app/components/core/existing-issues-list-modal.tsx create mode 100644 app/components/core/feeds.tsx create mode 100644 app/components/core/filter-list.tsx create mode 100644 app/components/core/gpt-assistant-modal.tsx create mode 100644 app/components/core/image-picker-popover.tsx create mode 100644 app/components/core/image-upload-modal.tsx create mode 100644 app/components/core/index.ts create mode 100644 app/components/core/issues-view-filter.tsx create mode 100644 app/components/core/issues-view.tsx create mode 100644 app/components/core/link-modal.tsx create mode 100644 app/components/core/list-view/all-lists.tsx create mode 100644 app/components/core/list-view/index.ts create mode 100644 app/components/core/list-view/single-issue.tsx create mode 100644 app/components/core/list-view/single-list.tsx create mode 100644 app/components/core/sidebar/index.ts create mode 100644 app/components/core/sidebar/links-list.tsx create mode 100644 app/components/core/sidebar/progress-chart.tsx create mode 100644 app/components/core/sidebar/sidebar-progress-stats.tsx create mode 100644 app/components/core/sidebar/single-progress-stats.tsx create mode 100644 app/components/core/theme-switch.tsx create mode 100644 app/components/cycles/completed-cycles-list.tsx create mode 100644 app/components/cycles/cycles-list.tsx create mode 100644 app/components/cycles/delete-cycle-modal.tsx create mode 100644 app/components/cycles/empty-cycle.tsx create mode 100644 app/components/cycles/form.tsx create mode 100644 app/components/cycles/index.ts create mode 100644 app/components/cycles/modal.tsx create mode 100644 app/components/cycles/select.tsx create mode 100644 app/components/cycles/sidebar.tsx create mode 100644 app/components/cycles/single-cycle-card.tsx create mode 100644 app/components/cycles/transfer-issues-modal.tsx create mode 100644 app/components/cycles/transfer-issues.tsx create mode 100644 app/components/dnd/StrictModeDroppable.tsx create mode 100644 app/components/emoji-icon-picker/emojis.json create mode 100644 app/components/emoji-icon-picker/helpers.ts create mode 100644 app/components/emoji-icon-picker/icons.json create mode 100644 app/components/emoji-icon-picker/index.tsx create mode 100644 app/components/emoji-icon-picker/types.d.ts create mode 100644 app/components/estimates/create-update-estimate-modal.tsx create mode 100644 app/components/estimates/delete-estimate-modal.tsx create mode 100644 app/components/estimates/index.tsx create mode 100644 app/components/estimates/single-estimate.tsx create mode 100644 app/components/icons/arrow-right.tsx create mode 100644 app/components/icons/assignment-clipboard-icon.tsx create mode 100644 app/components/icons/attachment-icon.tsx create mode 100644 app/components/icons/audio-file-icon.tsx create mode 100644 app/components/icons/backlog-state-icon.tsx create mode 100644 app/components/icons/blocked-icon.tsx create mode 100644 app/components/icons/blocker-icon.tsx create mode 100644 app/components/icons/bolt-icon.tsx create mode 100644 app/components/icons/calendar-month-icon.tsx create mode 100644 app/components/icons/cancel-icon.tsx create mode 100644 app/components/icons/cancelled-state-icon.tsx create mode 100644 app/components/icons/check.tsx create mode 100644 app/components/icons/clipboard-icon.tsx create mode 100644 app/components/icons/cloud-upload.tsx create mode 100644 app/components/icons/cmd-icon.tsx create mode 100644 app/components/icons/cog.tsx create mode 100644 app/components/icons/color-pallette-icon.tsx create mode 100644 app/components/icons/comment-icon.tsx create mode 100644 app/components/icons/completed-cycle-icon.tsx create mode 100644 app/components/icons/completed-state-icon.tsx create mode 100644 app/components/icons/contrast-icon.tsx create mode 100644 app/components/icons/css-file-icon.tsx create mode 100644 app/components/icons/csv-file-icon.tsx create mode 100644 app/components/icons/current-cycle-icon.tsx create mode 100644 app/components/icons/cycle-icon.tsx create mode 100644 app/components/icons/default-file-icon.tsx create mode 100644 app/components/icons/discord-icon.tsx create mode 100644 app/components/icons/doc-file-icon.tsx create mode 100644 app/components/icons/document-icon.tsx create mode 100644 app/components/icons/edit-icon.tsx create mode 100644 app/components/icons/ellipsis-horizontal-icon.tsx create mode 100644 app/components/icons/exclamation-icon.tsx create mode 100644 app/components/icons/external-link-icon.tsx create mode 100644 app/components/icons/figma-file-icon.tsx create mode 100644 app/components/icons/github-icon.tsx create mode 100644 app/components/icons/grid-view-icons.tsx create mode 100644 app/components/icons/heartbeat-icon.tsx create mode 100644 app/components/icons/html-file-icon.tsx create mode 100644 app/components/icons/img-file-icon.tsx create mode 100644 app/components/icons/import-layers.tsx create mode 100644 app/components/icons/index.ts create mode 100644 app/components/icons/jpg-file-icon.tsx create mode 100644 app/components/icons/js-file-icon.tsx create mode 100644 app/components/icons/layer-diagonal-icon.tsx create mode 100644 app/components/icons/lock-icon.tsx create mode 100644 app/components/icons/menu-icon.tsx create mode 100644 app/components/icons/pdf-file-icon.tsx create mode 100644 app/components/icons/pencil-scribble-icon.tsx create mode 100644 app/components/icons/people-group-icon.tsx create mode 100644 app/components/icons/plus-icon.tsx create mode 100644 app/components/icons/png-file-icon.tsx create mode 100644 app/components/icons/priority-icon.tsx create mode 100644 app/components/icons/question-mark-circle-icon.tsx create mode 100644 app/components/icons/setting-icon.tsx create mode 100644 app/components/icons/sheet-file-icon.tsx create mode 100644 app/components/icons/signal-cellular-icon.tsx create mode 100644 app/components/icons/stacked-layers-icon.tsx create mode 100644 app/components/icons/started-state-icon.tsx create mode 100644 app/components/icons/state-group-icon.tsx create mode 100644 app/components/icons/svg-file-icon.tsx create mode 100644 app/components/icons/tag-icon.tsx create mode 100644 app/components/icons/target-icon.tsx create mode 100644 app/components/icons/tick-mark-icon.tsx create mode 100644 app/components/icons/transfer-icon.tsx create mode 100644 app/components/icons/tune-icon.tsx create mode 100644 app/components/icons/txt-file-icon.tsx create mode 100644 app/components/icons/types.d.ts create mode 100644 app/components/icons/unstarted-state-icon.tsx create mode 100644 app/components/icons/upcoming-cycle-icon.tsx create mode 100644 app/components/icons/user-group-icon.tsx create mode 100644 app/components/icons/user-icon-circle.tsx create mode 100644 app/components/icons/user-icon.tsx create mode 100644 app/components/icons/users.tsx create mode 100644 app/components/icons/video-file-icon.tsx create mode 100644 app/components/icons/view-list-icon.tsx create mode 100644 app/components/icons/water-drop-icon.tsx create mode 100644 app/components/integration/delete-import-modal.tsx create mode 100644 app/components/integration/github/auth.tsx create mode 100644 app/components/integration/github/import-configure.tsx create mode 100644 app/components/integration/github/import-confirm.tsx create mode 100644 app/components/integration/github/import-data.tsx create mode 100644 app/components/integration/github/import-users.tsx create mode 100644 app/components/integration/github/index.ts create mode 100644 app/components/integration/github/repo-details.tsx create mode 100644 app/components/integration/github/root.tsx create mode 100644 app/components/integration/github/select-repository.tsx create mode 100644 app/components/integration/github/single-user-select.tsx create mode 100644 app/components/integration/guide.tsx create mode 100644 app/components/integration/index.ts create mode 100644 app/components/integration/jira/confirm-import.tsx create mode 100644 app/components/integration/jira/give-details.tsx create mode 100644 app/components/integration/jira/import-users.tsx create mode 100644 app/components/integration/jira/index.ts create mode 100644 app/components/integration/jira/jira-project-detail.tsx create mode 100644 app/components/integration/jira/root.tsx create mode 100644 app/components/integration/single-import.tsx create mode 100644 app/components/integration/single-integration-card.tsx create mode 100644 app/components/issues/activity.tsx create mode 100644 app/components/issues/attachment-upload.tsx create mode 100644 app/components/issues/attachments.tsx create mode 100644 app/components/issues/comment/add-comment.tsx create mode 100644 app/components/issues/comment/comment-card.tsx create mode 100644 app/components/issues/comment/index.ts create mode 100644 app/components/issues/delete-attachment-modal.tsx create mode 100644 app/components/issues/delete-issue-modal.tsx create mode 100644 app/components/issues/description-form.tsx create mode 100644 app/components/issues/form.tsx create mode 100644 app/components/issues/index.ts create mode 100644 app/components/issues/modal.tsx create mode 100644 app/components/issues/my-issues-list-item.tsx create mode 100644 app/components/issues/parent-issues-list-modal.tsx create mode 100644 app/components/issues/select/assignee.tsx create mode 100644 app/components/issues/select/date.tsx create mode 100644 app/components/issues/select/estimate.tsx create mode 100644 app/components/issues/select/index.ts create mode 100644 app/components/issues/select/label.tsx create mode 100644 app/components/issues/select/parent.tsx create mode 100644 app/components/issues/select/priority.tsx create mode 100644 app/components/issues/select/project.tsx create mode 100644 app/components/issues/select/state.tsx create mode 100644 app/components/issues/sidebar-select/assignee.tsx create mode 100644 app/components/issues/sidebar-select/blocked.tsx create mode 100644 app/components/issues/sidebar-select/blocker.tsx create mode 100644 app/components/issues/sidebar-select/cycle.tsx create mode 100644 app/components/issues/sidebar-select/estimate.tsx create mode 100644 app/components/issues/sidebar-select/index.ts create mode 100644 app/components/issues/sidebar-select/module.tsx create mode 100644 app/components/issues/sidebar-select/parent.tsx create mode 100644 app/components/issues/sidebar-select/priority.tsx create mode 100644 app/components/issues/sidebar-select/state.tsx create mode 100644 app/components/issues/sidebar.tsx create mode 100644 app/components/issues/sub-issues-list.tsx create mode 100644 app/components/issues/view-select/assignee.tsx create mode 100644 app/components/issues/view-select/due-date.tsx create mode 100644 app/components/issues/view-select/estimate.tsx create mode 100644 app/components/issues/view-select/index.ts create mode 100644 app/components/issues/view-select/priority.tsx create mode 100644 app/components/issues/view-select/state.tsx create mode 100644 app/components/labels/create-label-modal.tsx create mode 100644 app/components/labels/create-update-label-inline.tsx create mode 100644 app/components/labels/index.ts create mode 100644 app/components/labels/labels-list-modal.tsx create mode 100644 app/components/labels/single-label-group.tsx create mode 100644 app/components/labels/single-label.tsx create mode 100644 app/components/modules/delete-module-modal.tsx create mode 100644 app/components/modules/form.tsx create mode 100644 app/components/modules/index.ts create mode 100644 app/components/modules/modal.tsx create mode 100644 app/components/modules/select/index.ts create mode 100644 app/components/modules/select/select-lead.tsx create mode 100644 app/components/modules/select/select-members.tsx create mode 100644 app/components/modules/select/select-status.tsx create mode 100644 app/components/modules/sidebar-select/index.ts create mode 100644 app/components/modules/sidebar-select/select-lead.tsx create mode 100644 app/components/modules/sidebar-select/select-members.tsx create mode 100644 app/components/modules/sidebar-select/select-status.tsx create mode 100644 app/components/modules/sidebar.tsx create mode 100644 app/components/modules/single-module-card.tsx create mode 100644 app/components/onboarding/index.ts create mode 100644 app/components/onboarding/invite-members.tsx create mode 100644 app/components/onboarding/onboarding-card.tsx create mode 100644 app/components/onboarding/user-details.tsx create mode 100644 app/components/onboarding/workspace.tsx create mode 100644 app/components/pages/create-update-block-inline.tsx create mode 100644 app/components/pages/create-update-page-modal.tsx create mode 100644 app/components/pages/delete-page-modal.tsx create mode 100644 app/components/pages/index.ts create mode 100644 app/components/pages/page-form.tsx create mode 100644 app/components/pages/pages-list/all-pages-list.tsx create mode 100644 app/components/pages/pages-list/favorite-pages-list.tsx create mode 100644 app/components/pages/pages-list/index.ts create mode 100644 app/components/pages/pages-list/my-pages-list.tsx create mode 100644 app/components/pages/pages-list/other-pages-list.tsx create mode 100644 app/components/pages/pages-list/recent-pages-list.tsx create mode 100644 app/components/pages/pages-list/types.ts create mode 100644 app/components/pages/pages-view.tsx create mode 100644 app/components/pages/single-page-block.tsx create mode 100644 app/components/pages/single-page-detailed-item.tsx create mode 100644 app/components/pages/single-page-list-item.tsx create mode 100644 app/components/project/confirm-project-member-remove.tsx create mode 100644 app/components/project/create-project-modal.tsx create mode 100644 app/components/project/delete-project-modal.tsx create mode 100644 app/components/project/index.ts create mode 100644 app/components/project/join-project-modal.tsx create mode 100644 app/components/project/send-project-invitation-modal.tsx create mode 100644 app/components/project/settings/single-label.tsx create mode 100644 app/components/project/sidebar-list.tsx create mode 100644 app/components/project/single-integration-card.tsx create mode 100644 app/components/project/single-project-card.tsx create mode 100644 app/components/project/single-sidebar-project.tsx create mode 100644 app/components/rich-text-editor/index.tsx create mode 100644 app/components/rich-text-editor/mention-autocomplete.tsx create mode 100644 app/components/rich-text-editor/sample.tsx create mode 100644 app/components/rich-text-editor/toolbar/float-tool-tip.tsx create mode 100644 app/components/rich-text-editor/toolbar/heading-controls.tsx create mode 100644 app/components/rich-text-editor/toolbar/index.tsx create mode 100644 app/components/rich-text-editor/toolbar/link.tsx create mode 100644 app/components/rich-text-editor/toolbar/table-controls.tsx create mode 100644 app/components/search-listbox/index.tsx create mode 100644 app/components/search-listbox/types.d.ts create mode 100644 app/components/states/create-state-modal.tsx create mode 100644 app/components/states/create-update-state-inline.tsx create mode 100644 app/components/states/delete-state-modal.tsx create mode 100644 app/components/states/index.ts create mode 100644 app/components/states/single-state.tsx create mode 100644 app/components/toast-alert/index.tsx create mode 100644 app/components/ui/avatar.tsx create mode 100644 app/components/ui/buttons/danger-button.tsx create mode 100644 app/components/ui/buttons/index.ts create mode 100644 app/components/ui/buttons/primary-button.tsx create mode 100644 app/components/ui/buttons/secondary-button.tsx create mode 100644 app/components/ui/buttons/type.d.ts create mode 100644 app/components/ui/context-menu.tsx create mode 100644 app/components/ui/custom-menu.tsx create mode 100644 app/components/ui/custom-search-select.tsx create mode 100644 app/components/ui/custom-select.tsx create mode 100644 app/components/ui/date.tsx create mode 100644 app/components/ui/datepicker.tsx create mode 100644 app/components/ui/empty-space.tsx create mode 100644 app/components/ui/empty-state.tsx create mode 100644 app/components/ui/index.ts create mode 100644 app/components/ui/input/index.tsx create mode 100644 app/components/ui/input/types.d.ts create mode 100644 app/components/ui/labels-list.tsx create mode 100644 app/components/ui/linear-progress-indicator.tsx create mode 100644 app/components/ui/loader.tsx create mode 100644 app/components/ui/multi-input.tsx create mode 100644 app/components/ui/multi-level-dropdown.tsx create mode 100644 app/components/ui/multi-level-select.tsx create mode 100644 app/components/ui/outline-button.tsx create mode 100644 app/components/ui/progress-bar.tsx create mode 100644 app/components/ui/spinner.tsx create mode 100644 app/components/ui/text-area/index.tsx create mode 100644 app/components/ui/text-area/types.d.ts create mode 100644 app/components/ui/toggle-switch.tsx create mode 100644 app/components/ui/tooltip.tsx create mode 100644 app/components/views/delete-view-modal.tsx create mode 100644 app/components/views/form.tsx create mode 100644 app/components/views/index.ts create mode 100644 app/components/views/modal.tsx create mode 100644 app/components/views/select-filters.tsx create mode 100644 app/components/views/single-view-item.tsx create mode 100644 app/components/workspace/activity-graph.tsx create mode 100644 app/components/workspace/completed-issues-graph.tsx create mode 100644 app/components/workspace/confirm-workspace-member-remove.tsx create mode 100644 app/components/workspace/create-workspace-form.tsx create mode 100644 app/components/workspace/delete-workspace-modal.tsx create mode 100644 app/components/workspace/help-section.tsx create mode 100644 app/components/workspace/index.ts create mode 100644 app/components/workspace/issues-list.tsx create mode 100644 app/components/workspace/issues-pie-chart.tsx create mode 100644 app/components/workspace/issues-stats.tsx create mode 100644 app/components/workspace/send-workspace-invitation-modal.tsx create mode 100644 app/components/workspace/sidebar-dropdown.tsx create mode 100644 app/components/workspace/sidebar-menu.tsx create mode 100644 app/components/workspace/single-invitation.tsx create mode 100644 app/constants/calendar.ts create mode 100644 app/constants/crisp.tsx create mode 100644 app/constants/fetch-keys.ts create mode 100644 app/constants/issue.ts create mode 100644 app/constants/module.ts create mode 100644 app/constants/project.ts create mode 100644 app/constants/seo-variables.ts create mode 100644 app/constants/state.ts create mode 100644 app/constants/themes.ts create mode 100644 app/constants/workspace.ts create mode 100644 app/contexts/issue-view.context.tsx create mode 100644 app/contexts/project-member.context.tsx create mode 100644 app/contexts/theme.context.tsx create mode 100644 app/contexts/toast.context.tsx create mode 100644 app/contexts/user.context.tsx create mode 100644 app/contexts/workspace.context.tsx create mode 100644 app/google.d.ts create mode 100644 app/helpers/array.helper.ts create mode 100644 app/helpers/attachment.helper.ts create mode 100644 app/helpers/calendar.helper.ts create mode 100644 app/helpers/common.helper.ts create mode 100644 app/helpers/date-time.helper.ts create mode 100644 app/helpers/state.helper.ts create mode 100644 app/helpers/string.helper.ts create mode 100644 app/helpers/theme.helper.ts create mode 100644 app/hooks/use-debounce.tsx create mode 100644 app/hooks/use-estimate-option.tsx create mode 100644 app/hooks/use-integration-popup.tsx create mode 100644 app/hooks/use-issue-properties.tsx create mode 100644 app/hooks/use-issues-view.tsx create mode 100644 app/hooks/use-issues.tsx create mode 100644 app/hooks/use-local-storage.tsx create mode 100644 app/hooks/use-my-issues-filter.tsx create mode 100644 app/hooks/use-outside-click-detector.tsx create mode 100644 app/hooks/use-project-details.tsx create mode 100644 app/hooks/use-project-members.tsx create mode 100644 app/hooks/use-projects.tsx create mode 100644 app/hooks/use-theme.tsx create mode 100644 app/hooks/use-timer.tsx create mode 100644 app/hooks/use-toast.tsx create mode 100644 app/hooks/use-user.tsx create mode 100644 app/hooks/use-workspace-details.tsx create mode 100644 app/hooks/use-workspace-members.tsx create mode 100644 app/hooks/use-workspaces.tsx create mode 100644 app/layouts/app-layout/app-header.tsx create mode 100644 app/layouts/app-layout/app-sidebar.tsx create mode 100644 app/layouts/app-layout/index.tsx create mode 100644 app/layouts/auth-layout/index.ts create mode 100644 app/layouts/auth-layout/project-authorization-wrapper.tsx create mode 100644 app/layouts/auth-layout/user-authorization-wrapper.tsx create mode 100644 app/layouts/auth-layout/workspace-authorization-wrapper.tsx create mode 100644 app/layouts/container.tsx create mode 100644 app/layouts/default-layout/index.tsx create mode 100644 app/layouts/settings-navbar.tsx create mode 100644 app/lib/auth.ts create mode 100644 app/lib/cookie.ts create mode 100644 app/lib/redirect.ts create mode 100644 app/manifest.json create mode 100644 app/next-env.d.ts create mode 100644 app/next.config.js create mode 100644 app/package.json create mode 100644 app/pages/404.tsx create mode 100644 app/pages/[workspaceSlug]/index.tsx create mode 100644 app/pages/[workspaceSlug]/me/my-issues.tsx create mode 100644 app/pages/[workspaceSlug]/me/profile/activity.tsx create mode 100644 app/pages/[workspaceSlug]/me/profile/index.tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/cycles/index.tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/issues/index.tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/settings/control.tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/settings/integrations.tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/settings/states.tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx create mode 100644 app/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx create mode 100644 app/pages/[workspaceSlug]/projects/index.tsx create mode 100644 app/pages/[workspaceSlug]/settings/billing.tsx create mode 100644 app/pages/[workspaceSlug]/settings/import-export.tsx create mode 100644 app/pages/[workspaceSlug]/settings/index.tsx create mode 100644 app/pages/[workspaceSlug]/settings/integrations.tsx create mode 100644 app/pages/[workspaceSlug]/settings/members.tsx create mode 100644 app/pages/_app.tsx create mode 100644 app/pages/_document.tsx create mode 100644 app/pages/_error.js create mode 100644 app/pages/api/track-event.ts create mode 100644 app/pages/api/unsplash.ts create mode 100644 app/pages/create-workspace.tsx create mode 100644 app/pages/error.tsx create mode 100644 app/pages/index.tsx create mode 100644 app/pages/installations/[provider]/index.tsx create mode 100644 app/pages/invitations.tsx create mode 100644 app/pages/magic-sign-in.tsx create mode 100644 app/pages/onboarding.tsx create mode 100644 app/pages/signin.tsx create mode 100644 app/pages/workspace-member-invitation/[invitationId].tsx create mode 100644 app/postcss.config.js create mode 100644 app/public/404.svg create mode 100644 app/public/animated-icons/uploading.json create mode 100644 app/public/attachment/audio-icon.png create mode 100644 app/public/attachment/css-icon.png create mode 100644 app/public/attachment/csv-icon.png create mode 100644 app/public/attachment/default-icon.png create mode 100644 app/public/attachment/doc-icon.png create mode 100644 app/public/attachment/excel-icon.png create mode 100644 app/public/attachment/figma-icon.png create mode 100644 app/public/attachment/html-icon.png create mode 100644 app/public/attachment/img-icon.png create mode 100644 app/public/attachment/jpg-icon.png create mode 100644 app/public/attachment/js-icon.png create mode 100644 app/public/attachment/pdf-icon.png create mode 100644 app/public/attachment/png-icon.png create mode 100644 app/public/attachment/svg-icon.png create mode 100644 app/public/attachment/txt-icon.png create mode 100644 app/public/attachment/video-icon.png create mode 100644 app/public/auth/join-project.svg create mode 100644 app/public/auth/project-not-authorized.svg create mode 100644 app/public/auth/workspace-not-authorized.svg create mode 100644 app/public/empty-state/empty-cycle.svg create mode 100644 app/public/empty-state/empty-issue.svg create mode 100644 app/public/empty-state/empty-module.svg create mode 100644 app/public/empty-state/empty-page.svg create mode 100644 app/public/empty-state/empty-project.svg create mode 100644 app/public/empty-state/empty-view.svg create mode 100644 app/public/favicon/android-chrome-192x192.png create mode 100644 app/public/favicon/android-chrome-512x512.png create mode 100644 app/public/favicon/apple-touch-icon.png create mode 100644 app/public/favicon/favicon-16x16.png create mode 100644 app/public/favicon/favicon-32x32.png create mode 100644 app/public/favicon/favicon.ico create mode 100644 app/public/favicon/site.webmanifest create mode 100644 app/public/logo-with-text.png create mode 100644 app/public/logo.png create mode 100644 app/public/logos/github-black.png create mode 100644 app/public/logos/github-square.png create mode 100644 app/public/logos/github.png create mode 100644 app/public/mac-command.svg create mode 100644 app/public/onboarding/command-menu.svg create mode 100644 app/public/onboarding/cycle.svg create mode 100644 app/public/onboarding/issue.svg create mode 100644 app/public/onboarding/logo.svg create mode 100644 app/public/onboarding/module.svg create mode 100644 app/public/onboarding/welcome.svg create mode 100644 app/public/services/github.png create mode 100644 app/public/services/jira.png create mode 100644 app/public/services/slack.png create mode 100644 app/public/sign-in-bg.png create mode 100644 app/public/sign-up-sideimg.svg create mode 100644 app/public/site-image.png create mode 100644 app/public/site.webmanifest.json create mode 100644 app/public/sw.js create mode 100644 app/public/sw.js.map create mode 100644 app/public/user.png create mode 100644 app/public/vercel.svg create mode 100644 app/public/workbox-7805bd61.js create mode 100644 app/public/workbox-7805bd61.js.map create mode 100644 app/sentry.client.config.js create mode 100644 app/sentry.edge.config.js create mode 100644 app/sentry.properties create mode 100644 app/sentry.server.config.js create mode 100644 app/services/ai.service.ts create mode 100644 app/services/api.service.ts create mode 100644 app/services/app-installations.service.ts create mode 100644 app/services/authentication.service.ts create mode 100644 app/services/cycles.service.ts create mode 100644 app/services/estimates.service.ts create mode 100644 app/services/file.service.ts create mode 100644 app/services/integration/github.service.ts create mode 100644 app/services/integration/index.ts create mode 100644 app/services/integration/jira.service.ts create mode 100644 app/services/issues.service.ts create mode 100644 app/services/modules.service.ts create mode 100644 app/services/pages.service.ts create mode 100644 app/services/project.service.ts create mode 100644 app/services/state.service.ts create mode 100644 app/services/track-event.service.ts create mode 100644 app/services/user.service.ts create mode 100644 app/services/views.service.ts create mode 100644 app/services/workspace.service.ts create mode 100644 app/styles/command-pallette.css create mode 100644 app/styles/editor.css create mode 100644 app/styles/globals.css create mode 100644 app/styles/nprogress.css create mode 100644 app/tailwind.config.js create mode 100644 app/tsconfig.json create mode 100644 app/types/ai.d.ts create mode 100644 app/types/cycles.d.ts create mode 100644 app/types/estimate.d.ts create mode 100644 app/types/importer/github-importer.d.ts create mode 100644 app/types/importer/index.ts create mode 100644 app/types/importer/jira-importer.d.ts create mode 100644 app/types/index.d.ts create mode 100644 app/types/integration.d.ts create mode 100644 app/types/issues.d.ts create mode 100644 app/types/modules.d.ts create mode 100644 app/types/pages.d.ts create mode 100644 app/types/projects.d.ts create mode 100644 app/types/state.d.ts create mode 100644 app/types/users.d.ts create mode 100644 app/types/views.d.ts create mode 100644 app/types/workspace.d.ts create mode 100644 app/yarn.lock diff --git a/app/.env.example b/app/.env.example new file mode 100644 index 000000000..cdf30fc72 --- /dev/null +++ b/app/.env.example @@ -0,0 +1,11 @@ +# Replace with your instance Public IP +# NEXT_PUBLIC_API_BASE_URL = "http://localhost" +NEXT_PUBLIC_EXTRA_IMAGE_DOMAINS= +NEXT_PUBLIC_GOOGLE_CLIENTID="" +NEXT_PUBLIC_GITHUB_APP_NAME="" +NEXT_PUBLIC_GITHUB_ID="" +NEXT_PUBLIC_SENTRY_DSN="" +NEXT_PUBLIC_ENABLE_OAUTH=0 +NEXT_PUBLIC_ENABLE_SENTRY=0 +NEXT_PUBLIC_ENABLE_SESSION_RECORDER=0 +NEXT_PUBLIC_TRACK_EVENTS=0 diff --git a/app/.eslintrc.js b/app/.eslintrc.js new file mode 100644 index 000000000..21eb74abb --- /dev/null +++ b/app/.eslintrc.js @@ -0,0 +1,15 @@ +module.exports = { + extends: ["next", "prettier"], + parser: "@typescript-eslint/parser", + plugins: ["react", "@typescript-eslint"], + rules: { + "@next/next/no-html-link-for-pages": "off", + "react/jsx-key": "off", + "prefer-const": "error", + "no-irregular-whitespace": "error", + "no-trailing-spaces": "error", + "no-duplicate-imports": "error", + "arrow-body-style": ["error", "as-needed"], + "react/self-closing-comp": ["error", { component: true, html: true }], + }, +}; diff --git a/app/.prettierrc b/app/.prettierrc new file mode 100644 index 000000000..d5cb26e54 --- /dev/null +++ b/app/.prettierrc @@ -0,0 +1,5 @@ +{ + "printWidth": 100, + "tabWidth": 2, + "trailingComma": "es5" +} diff --git a/app/Dockerfile.dev b/app/Dockerfile.dev new file mode 100644 index 000000000..d6c1ba274 --- /dev/null +++ b/app/Dockerfile.dev @@ -0,0 +1,13 @@ +FROM node:18-alpine +RUN apk add --no-cache libc6-compat +RUN apk update +# Set working directory +WORKDIR /app + +COPY . . + +RUN yarn install + +EXPOSE 3000 + + diff --git a/app/Dockerfile.web b/app/Dockerfile.web new file mode 100644 index 000000000..35e3a72dd --- /dev/null +++ b/app/Dockerfile.web @@ -0,0 +1,30 @@ +FROM node:18-alpine AS builder +RUN apk add --no-cache libc6-compat +RUN apk update +# Set working directory +WORKDIR /app + +# Install dependencies +RUN yarn install --frozen-lockfile +COPY . . + +# build +RUN yarn build + +FROM node:18-alpine AS runner +WORKDIR /app + +# Don't run production as root +RUN addgroup --system --gid 1001 plane +RUN adduser --system --uid 1001 captain +USER captain + +COPY --from=builder /app/next.config.js . +COPY --from=builder /app/package.json . +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/.next ./.next +COPY --from=builder /app/public ./public + +ENV NEXT_TELEMETRY_DISABLED 1 + +EXPOSE 3000 diff --git a/app/components/account/email-code-form.tsx b/app/components/account/email-code-form.tsx new file mode 100644 index 000000000..389153d60 --- /dev/null +++ b/app/components/account/email-code-form.tsx @@ -0,0 +1,199 @@ +import React, { useEffect, useState } from "react"; +import { useForm } from "react-hook-form"; +// ui +import { CheckCircleIcon } from "@heroicons/react/20/solid"; +import { Input, PrimaryButton, SecondaryButton } from "components/ui"; +// services +import authenticationService from "services/authentication.service"; +import useToast from "hooks/use-toast"; +import useTimer from "hooks/use-timer"; +// icons + +// types +type EmailCodeFormValues = { + email: string; + key?: string; + token?: string; +}; + +export const EmailCodeForm = ({ onSuccess }: any) => { + const [codeSent, setCodeSent] = useState(false); + const [codeResent, setCodeResent] = useState(false); + const [isCodeResending, setIsCodeResending] = useState(false); + const [errorResendingCode, setErrorResendingCode] = useState(false); + + const { setToastAlert } = useToast(); + const { timer: resendCodeTimer, setTimer: setResendCodeTimer } = useTimer(); + + const { + register, + handleSubmit, + setError, + setValue, + getValues, + formState: { errors, isSubmitting, isValid, isDirty }, + } = useForm({ + defaultValues: { + email: "", + key: "", + token: "", + }, + mode: "onChange", + reValidateMode: "onChange", + }); + + const isResendDisabled = + resendCodeTimer > 0 || isCodeResending || isSubmitting || errorResendingCode; + + const onSubmit = async ({ email }: EmailCodeFormValues) => { + setErrorResendingCode(false); + await authenticationService + .emailCode({ email }) + .then((res) => { + setValue("key", res.key); + setCodeSent(true); + }) + .catch((err) => { + setErrorResendingCode(true); + setToastAlert({ + title: "Oops!", + type: "error", + message: err?.error, + }); + }); + }; + + const handleSignin = async (formData: EmailCodeFormValues) => { + await authenticationService + .magicSignIn(formData) + .then((response) => { + onSuccess(response); + }) + .catch((error) => { + setToastAlert({ + title: "Oops!", + type: "error", + message: error?.response?.data?.error ?? "Enter the correct code to sign in", + }); + setError("token" as keyof EmailCodeFormValues, { + type: "manual", + message: error.error, + }); + }); + }; + + const emailOld = getValues("email"); + + useEffect(() => { + setErrorResendingCode(false); + }, [emailOld]); + + return ( + <> +
+ {(codeSent || codeResent) && ( +
+
+
+
+
+

+ {codeResent + ? "Please check your mail for new code." + : "Please check your mail for code."} +

+
+
+
+ )} +
+ + /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test( + value + ) || "Email ID is not valid", + }} + error={errors.email} + placeholder="Enter your Email ID" + /> +
+ + {codeSent && ( +
+ + +
+ )} +
+ {codeSent ? ( + + {isSubmitting ? "Signing in..." : "Sign in"} + + ) : ( + { + handleSubmit(onSubmit)().then(() => { + setResendCodeTimer(30); + }); + }} + loading={isSubmitting || (!isValid && isDirty)} + > + {isSubmitting ? "Sending code..." : "Send code"} + + )} +
+
+ + ); +}; diff --git a/app/components/account/email-password-form.tsx b/app/components/account/email-password-form.tsx new file mode 100644 index 000000000..d35abdfe8 --- /dev/null +++ b/app/components/account/email-password-form.tsx @@ -0,0 +1,113 @@ +import React from "react"; + +import Link from "next/link"; + +// react hook form +import { useForm } from "react-hook-form"; +// services +import authenticationService from "services/authentication.service"; +// hooks +import useToast from "hooks/use-toast"; +// ui +import { Input, SecondaryButton } from "components/ui"; +// types +type EmailPasswordFormValues = { + email: string; + password?: string; + medium?: string; +}; + +export const EmailPasswordForm = ({ onSuccess }: any) => { + const { setToastAlert } = useToast(); + const { + register, + handleSubmit, + setError, + formState: { errors, isSubmitting, isValid, isDirty }, + } = useForm({ + defaultValues: { + email: "", + password: "", + medium: "email", + }, + mode: "onChange", + reValidateMode: "onChange", + }); + + const onSubmit = (formData: EmailPasswordFormValues) => { + authenticationService + .emailLogin(formData) + .then((response) => { + onSuccess(response); + }) + .catch((error) => { + console.log(error); + setToastAlert({ + title: "Oops!", + type: "error", + message: "Enter the correct email address and password to sign in", + }); + if (!error?.response?.data) return; + Object.keys(error.response.data).forEach((key) => { + const err = error.response.data[key]; + console.log(err); + setError(key as keyof EmailPasswordFormValues, { + type: "manual", + message: Array.isArray(err) ? err.join(", ") : err, + }); + }); + }); + }; + return ( + <> +
+
+ + /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test( + value + ) || "Email ID is not valid", + }} + error={errors.email} + placeholder="Enter your Email ID" + /> +
+
+ +
+
+ +
+
+ + {isSubmitting ? "Signing in..." : "Sign In"} + +
+
+ + ); +}; diff --git a/app/components/account/email-signin-form.tsx b/app/components/account/email-signin-form.tsx new file mode 100644 index 000000000..e2f81d50c --- /dev/null +++ b/app/components/account/email-signin-form.tsx @@ -0,0 +1,24 @@ +import { useState, FC } from "react"; +import { KeyIcon } from "@heroicons/react/24/outline"; +// components +import { EmailCodeForm, EmailPasswordForm } from "components/account"; + +export interface EmailSignInFormProps { + handleSuccess: () => void; +} + +export const EmailSignInForm: FC = (props) => { + const { handleSuccess } = props; + // states + const [useCode, setUseCode] = useState(true); + + return ( + <> + {useCode ? ( + + ) : ( + + )} + + ); +}; diff --git a/app/components/account/github-login-button.tsx b/app/components/account/github-login-button.tsx new file mode 100644 index 000000000..5b49208bb --- /dev/null +++ b/app/components/account/github-login-button.tsx @@ -0,0 +1,47 @@ +import { useEffect, useState, FC } from "react"; +import Link from "next/link"; +import Image from "next/image"; +import { useRouter } from "next/router"; +// images +import githubImage from "/public/logos/github-black.png"; + +const { NEXT_PUBLIC_GITHUB_ID } = process.env; + +export interface GithubLoginButtonProps { + handleSignIn: React.Dispatch; +} + +export const GithubLoginButton: FC = (props) => { + const { handleSignIn } = props; + // router + const { + query: { code }, + } = useRouter(); + // states + const [loginCallBackURL, setLoginCallBackURL] = useState(undefined); + + useEffect(() => { + if (code) { + handleSignIn(code.toString()); + } + }, [code, handleSignIn]); + + useEffect(() => { + const origin = + typeof window !== "undefined" && window.location.origin ? window.location.origin : ""; + setLoginCallBackURL(`${origin}/signin` as any); + }, []); + + return ( +
+ + + +
+ ); +}; diff --git a/app/components/account/google-login.tsx b/app/components/account/google-login.tsx new file mode 100644 index 000000000..478ffc67e --- /dev/null +++ b/app/components/account/google-login.tsx @@ -0,0 +1,53 @@ +import { FC, CSSProperties, useEffect, useRef, useCallback, useState } from "react"; +// next +import Script from "next/script"; + +export interface IGoogleLoginButton { + text?: string; + handleSignIn: React.Dispatch; + styles?: CSSProperties; +} + +export const GoogleLoginButton: FC = (props) => { + const { handleSignIn } = props; + + const googleSignInButton = useRef(null); + const [gsiScriptLoaded, setGsiScriptLoaded] = useState(false); + + const loadScript = useCallback(() => { + if (!googleSignInButton.current || gsiScriptLoaded) return; + window?.google?.accounts.id.initialize({ + client_id: process.env.NEXT_PUBLIC_GOOGLE_CLIENTID || "", + callback: handleSignIn, + }); + window?.google?.accounts.id.renderButton( + googleSignInButton.current, + { + type: "standard", + theme: "outline", + size: "large", + logo_alignment: "center", + width: "410", + text: "continue_with", + } as GsiButtonConfiguration // customization attributes + ); + window?.google?.accounts.id.prompt(); // also display the One Tap dialog + setGsiScriptLoaded(true); + }, [handleSignIn, gsiScriptLoaded]); + + useEffect(() => { + if (window?.google?.accounts?.id) { + loadScript(); + } + return () => { + window?.google?.accounts.id.cancel(); + }; + }, [loadScript]); + + return ( + <> +