From d80a5935209efa933f223429408a48468f66f93e Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Sun, 15 Oct 2023 23:50:12 +0530 Subject: [PATCH] fix: Implementing mobx, refactoring service layer and rewriting components (#2441) * chore: kanban refactoring * chore: Implemented new kanaban board UX and implemented draggable using react beautiful dnd * chore: updated yarn lock * chore: updated the store for issues and issue filters * chore: resolved build error * chore: created filters and updated the issue filters, display_filter and display_properties in mobx and components * chore: implemented filters for issues * chore: UI theming updates * chore: handled single and multi select in filter cards * chore: implemented filters and views in kanaban * chore: updating filters, display_filter and display properties * chore: filter, layout, display filters, extra filters and display properties render validation * chore: clean up and resolved import warnings * chore: type check * chore: renamed gantt key to gantt_chart * chore: filter render UI and Functionality implementation * chore: filter empty state handling in issue filter selection * Implementing list view * chore: kanban drag drop logic * filtering * chore: store setup * chore: handled build issues * chore: store setup * user filter * chore: store setup * chore: store fixes and static data setup * chore: store setup for build fixes * fix: merge conflicts (#2231) * chore: dynamic position dropdown (#2138) * chore: dynamic position state dropdown for issue view * style: state select dropdown styling * fix: state icon attribute names * chore: state select dynamic dropdown * chore: member select dynamic dropdown * chore: label select dynamic dropdown * chore: priority select dynamic dropdown * chore: label select dropdown improvement * refactor: state dropdown location * chore: dropdown improvement and code refactor * chore: dynamic dropdown hook type added --------- Co-authored-by: Aaryan Khandelwal * fix: fields not getting selected in the create issue form (#2212) * fix: hydration error and draft issue workflow * fix: build error * fix: properties getting de-selected after create, module & cycle not getting auto-select on the form * fix: display layout, props being updated directly * chore: sub issues count in individual issue (#2221) * fix: service imports * chore: rename csv service file --------- Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> Co-authored-by: Dakshesh Jain <65905942+dakshesh14@users.noreply.github.com> Co-authored-by: Bavisetti Narayan <72156168+NarayanBavisetti@users.noreply.github.com> * chore: store fixes * chore: update issue detail store to handle peek overview (#2237) * chore: dynamic position dropdown (#2138) * chore: dynamic position state dropdown for issue view * style: state select dropdown styling * fix: state icon attribute names * chore: state select dynamic dropdown * chore: member select dynamic dropdown * chore: label select dynamic dropdown * chore: priority select dynamic dropdown * chore: label select dropdown improvement * refactor: state dropdown location * chore: dropdown improvement and code refactor * chore: dynamic dropdown hook type added --------- Co-authored-by: Aaryan Khandelwal * fix: fields not getting selected in the create issue form (#2212) * fix: hydration error and draft issue workflow * fix: build error * fix: properties getting de-selected after create, module & cycle not getting auto-select on the form * fix: display layout, props being updated directly * chore: sub issues count in individual issue (#2221) * Implemented nested issues in the sub issues section in issue detail page (#2233) * feat: subissues infinte level * feat: updated UI for sub issues * feat: subissues new ui and nested sub issues in issue detail * chore: removed repeated code * refactor: product updates modal layout (#2225) * fix: handle no issues in custom analytics (#2226) * fix: activity label color (#2227) * fix: profile issues layout switch (#2228) * chore: update service imports * chore: update issue detail store to handle peek overview --------- Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> Co-authored-by: Dakshesh Jain <65905942+dakshesh14@users.noreply.github.com> Co-authored-by: Bavisetti Narayan <72156168+NarayanBavisetti@users.noreply.github.com> Co-authored-by: guru_sainath * chore: minor fixes * workspace project fixes * feat: project issues topbar (#2256) * chore: project issues topbar * style: theming and minor UI fixes * refactor: file structure * chore: layout wise authorization added * style: filter dropdowns * chore: add fetch keys * chore: minor fixes * chore: filters dropdown (#2260) * chore: project issues topbar * style: theming and minor UI fixes * refactor: file structure * chore: layout wise authorization added * style: filter dropdowns * chore: add fetch keys * feat: search option for filters * fix: sticky headers * chore: sub_group_by section added * fix: leave project fixes * refactor: project card component refactor * Implemented swimlanes and kanban view (#2262) * chore: issue store for kanban and calendar * chore: updated ui for kanba and swimlanes * chore: yarn.lock updated * fix: computed filters logic * chore: added sub_group_by in params and handled sub-group-by render error in display filter's * fix: ui package setup and project update form refactor * fix: ui package setup * fix: minor ui fixes * dev: calendar view layout revamp (#2293) * dev: calendar view init * chore: new render logic * chore: implement calendar view * chore: calendar view * refactor: calendar payload * chore: remove active month logic from backend * chore: setup new store for calendar * refactor: issues fetching structure * chore: months dropdown * chore: modify request query params for calendar layout * refactor: remove console logs and add comments * chore: removed demo m-store routes * cycles changes * chore: issues grouped kanban and swimlanes UI and functionality (#2294) * chore: updated the all the group_by and sub_group_by UI and functionality render in kanban * chore: kanban sorting in mobx and ui updates * chore: ui changes and drag and drop functionality changes in kanban * chore: issues count render in kanban default and swimlanes * chore: Added icons to the group_by and sub_group_by in kanban and swimlanes * refactor: filter components, constants and helper functions (#2297) * refactor: filters and display filters to accept handlers as props * refactor: filters and display filters folder structure * refactor: change issue layout options constant structure * chore: display filters validations * chore: view less filters functionality * fix: display filters validation * refactor: wrap functions around useCallback * chore: start and target date filter options added * refactor: query params generator function * fix: query params generator function * dev: gantt chart implementation using MobX (#2302) * dev: fetch project gantt issues using mobx * chore: handle group by options in the kanban layout * dev: spreadsheet layout implementation using MobX (#2306) * dev: implement spreadsheet view using mobx * refactor: remove console logs and props * chore: refactoring cycles list * feat: adding additional ui components * dev: applied filters list implementation using MobX (#2325) * dev: applied filters list UI * fix: filter item height * chore: remove unnecessary classes * fix: params generator * fix: cycles views list and board * fix: cycles list rendering fixes * fix: layout fixes * refactor: filter components (#2359) * fix: calendar layout dividers * refactor: filter selection components * fix: dropdown closing after selection * refactor: filters components * chore: issue properties for list and kanban layouts and implemented estimates in project store (#2363) * chore: issue properties for state, priorit, labels and members * feat: implemented assignee, labels properties * fix: implemented estimates in project store and issue properties * chore: staer_date and due_date and validation properties in kanban * chore: filters import conflict * dev: setup module and module filter store (#2364) * dev: implement module issues using mobx store * dev: module filter store setup * chore: module store crud operations * chore: issue list layout (#2367) * chore: merge develop (#2388) * fix: build erros * chore: cycles, modules store integration, list and kanban layouts and updated kanban logic (#2399) * chore: cycle, cycle-issue, cycle-filters, cycle-kanban, cycle layout setup * chore: cycles kanban and list view store * chore: cycles, modules kanban and list, kanban view store * refactor: change naming convention (#2383) * fix:auth layer revamp * chore: Implemented list and kanban views in project modules (#2402) * chore: updated kanban logic in project cycles and modules * chore: updated list and kanban in module * dev: implement global views using MobX (#2404) * fix: selfhosted fixes (#2154) * fix: selfhosted fixes * fix: updated env example * chore: dynamic position dropdown (#2138) * chore: dynamic position state dropdown for issue view * style: state select dropdown styling * fix: state icon attribute names * chore: state select dynamic dropdown * chore: member select dynamic dropdown * chore: label select dynamic dropdown * chore: priority select dynamic dropdown * chore: label select dropdown improvement * refactor: state dropdown location * chore: dropdown improvement and code refactor * chore: dynamic dropdown hook type added --------- Co-authored-by: Aaryan Khandelwal * fix: fields not getting selected in the create issue form (#2212) * fix: hydration error and draft issue workflow * fix: build error * fix: properties getting de-selected after create, module & cycle not getting auto-select on the form * fix: display layout, props being updated directly * chore: sub issues count in individual issue (#2221) * Implemented nested issues in the sub issues section in issue detail page (#2233) * feat: subissues infinte level * feat: updated UI for sub issues * feat: subissues new ui and nested sub issues in issue detail * chore: removed repeated code * refactor: product updates modal layout (#2225) * fix: handle no issues in custom analytics (#2226) * fix: activity label color (#2227) * fix: profile issues layout switch (#2228) * fix: issues resolved in sub issues (#2238) * fix: aws region name (#2234) * chore: updated docker naming conventions (#2239) * naming convention changes * dev: update docker-compose-hub in consistent with docker-compose * dev: updated docker container name --------- Co-authored-by: sriram veeraghanta * chore: added state and priority order in workspace user profile (#2241) * fix: changed priority from None to none (#2229) * fix: cycle and module stats when issues are archived (#2185) * fix: cycle and module stats when issues are archived * fix: added draft filter --------- Co-authored-by: NarayanBavisetti * feat: quick add (#2240) * feat: quick add * style: made text color muted * chore: added epoch in draft (#2244) * chore: added epoch in draft * chore: removed extra spaces * fix: resolved pending issue graph in analytics, user wishes in dashboard, and typo in projects list (#2247) * style: settings page improvement (#2211) * style: settings page improvement * style: toggle switch styling --------- Co-authored-by: Anmol Singh Bhatia * chore: changed priority props in workspace and project (#2253) * fix: bug fix related to fetching dropdown options for the profile issue (#2246) * fix: sub issue state and member select build error (#2254) * rename view to layout (#2255) Co-authored-by: Your Name * fix: bug fixes and ui improvement (#2250) * dev: remove auto filter endpoint * feat: quick-add placement in spreadsheet and gantt (#2259) * feat: sticking quick-add at the bottom of the screen fix: opening create issue modal instead of quick-add in draft-issues, my-issue and profile page * fix: build error due to dynamic import * fix: draft issue delete not working (#2249) * fix: draft issue not deleting, project can't be changed in draft issue modal * fix: removed mutation for view where draft issues are not shown * fix: inline create issue for draft issue * fix: clearing data from localstorage on discard click * feat: Add peek overview in sub issues and updated UI for empty states. (#2263) * chore: add tooltip to show full time on activity logs (#2235) * fix: issue automation iterable error (#2208) * fix: n+1 queries for cycle list and project member endpoints (#2257) * [fix] nginx continuously rewriting and reloading on index page of spaces app (#2236) * chore: shifted index page to /home route * chore: added rewrite logic, to rewrite index to /home * chore: routed home to login route as login page * chore: updated nginx config to route to login * chore: updated path for home * dev: migration for 0.13 (#2266) * dev: updated migrations * dev: migration for 0.13 * dev: re-split migrations into two different files (#2268) * dev: split issue activity migration separate files * dev: resplit migrations into two different files * dev: changed the batch size * chore: udpate date filters to support dynamic options * fix: bugs in quick-add and draft issues (#2269) * fix: 'Last Drafted Issue' making sidebar look weird on collapsed * feat: scroll to the bottom when issue is created * fix: 'Add Issue' button overlapping issue card in spreadsheet view * fix: wrong placement of quick-add in calender layout * fix: spacing for issue card in spreadsheet view * chore: add instructions to contributing guide (#2270) * chore: add instructions to contributing guide * dev: update contributing.md to use the new configuration --------- Co-authored-by: Nikhil <118773738+pablohashescobar@users.noreply.github.com> * fix: user dashboard greeting timezone (#2267) * chore: user greeting timezone * fix: group by labels not working on workspace level * feat: workspace global view, style: spreadsheet view revamp (#2273) * chore: workspace view types, services and hooks added * style: spreadsheet view revamp and code refactor * feat: workspace view * fix: build fix * chore: sidebar workspace issues redirection updated * style: gantt layout quick-add padding (#2272) * fix: 'Last Drafted Issue' making sidebar look weird on collapsed * feat: scroll to the bottom when issue is created * fix: 'Add Issue' button overlapping issue card in spreadsheet view * fix: wrong placement of quick-add in calender layout * fix: spacing for issue card in spreadsheet view * style: gantt layout quick-add padding style: removed 'State group' from draft issue * style: decrese shadow, quick-add position on calender layout, and 'add issue' sticky * style: button color * fix: block click happening while moving (#2275) * dev: refactor date filters to a single function * chore: handle calendar date range in frontend (#2277) * chore: gantt chart empty state (#2279) * chore: gantt empty state * chore: Add heading to the gantt sidebar * style: calender quick-add same width as single date (#2280) * style: calender quick-add same width as single date * style: margin bottom in quick-add in spreadsheet view * fix: quick add opening in list-layout * style: reduced margin left * chore: updated created at in draft issue (#2278) * chore: make target dates inclusive when filtering (#2276) * chore: sort order and issue props for global views (#2283) * chore: removed project filter (#2284) * fix: inbox issue deletes (#2290) * chore: views (#2288) * chore: global views order by * chore: update permissions for global views --------- Co-authored-by: NarayanBavisetti * chore: fetch issues from previous and next month in the calendar view (#2282) * fix: issue activity estimate value bug fix (#2281) * fix: issue activity estimate value bug fix * fix: activity typo fix * fix: ui and bugs (#2289) * fix: 24 character limit on first & last name in onboarding page * fix: no option: 'Add Issue' in archive issue page * fix: in archive issue directly sending to issue detail page * fix: issue type showing in archive issue * fix: custom menu overflowing * fix: changing subscriber in filters has no effect * style: border in quick-add * fix: on onboarding member role overflowing * fix: inconsistent icons in issue detail * style: spacing, borders and shadows in quick-add * fix: custom menu truncate * fix: notifications for created by me and assigned to me (#2292) * chore: workspace view display filters and properties , code refactor (#2295) * chore: spreadsheet view context * chore: spreadsheet context provider * chore: spreadsheet view context * chore: display filters and properties added in workspace view and code refactor * fix: build error fix * chore: set sub-issue display option to false for global views --------- Co-authored-by: gurusainath * chore: label create error (#2299) * chore: global issues ui improvement and bug fixes (#2300) * chore: workspace view mutation fix ,bug fixes and code refactor (#2301) * chore: workspace view mutation fix ,bug fixes and code refactor * chore: update workspace view toast alert added * chore: workspace view order by removed (#2303) * dev: updated migrations for 0.13-dev (#2305) * chore: epoch migration batch size changed * chore: reoredered the migration files * dev: updated migrations for 0.13-dev * chore: added epoch field * dev: merged the migration files * fix: workspace view filters count fix (#2307) * fix: unsplash api fix (#2310) * fix: workspace view redirection fix, style: spreadsheet view shadow scroll fix (#2314) * fix: workspace view redirection fix * style: spreadsheet view scroll shadow fix * fix: update build workflow for the deploy app (#2315) * fix: workspace view add issue mutation fix (#2317) * dev: create action to sync PR changes to the repo (#2333) * fix: ui package readme added (#2334) * fix: variable name for token (#2336) * dev: update add permissions to the action (#2337) * dev: rename token variables (#2338) * fix: updated readme fixes (#2339) * dev: update sync workflow to run only when the source repo is configured (#2346) * dev: update sync workflow to run only when the source repo is configured * fix: naming convention changes --------- Co-authored-by: sriramveeraghanta * fix: issue relation mutation and draft issue (#2340) * fix: issue relation mutation and draft issue * fix: 'New Issue' in gantt view fix: emoji select going under * fix: profile page typo * fix: sync workflow fixes (#2365) * fix: sync job pr description escaped values fix (#2366) * Update index.tsx (#2343) Fixes #2342 * dev: update apiserver configuration files (#2348) * dev: update apiserver configuration files * dev: add email and minio redirection urls * fix: themening validation in store init. (#2350) * chore: member can change role (#2371) * chore: removed the issue draft log from my profile (#2368) * adding sync info in pr title (#2373) * chore: layout access validation and switch in plane deploy issues route (#2351) * chore: handled route validation and layout access validation in plane deploy issues * chore: impoved validation condition * show current version in the help section dropdown (#2353) * fix: table menu positioning (#2354) * fix: handle cross project issues in the sub-issues. (#2357) * fix: login process validation based on api config (#2361) * dev: configuration endpoint for frontend client (#2355) * dev: configuration endpoint for frontend clients * dev: configuration enable magic and email/password signup * dev: update unsplash keys * dev: add unsplash API and add env for magic login * fix: 404 when redirecting user clicks on Sign In button (#2349) * fix: 404 when redirecting user to login page * fix: next_path redirection not working * fix: authentication workflow update in plane deploy --------- Co-authored-by: gurusainath * fix: project setting member role validation (#2369) * fix: project setting member role validation * chore: opacity removed from member setting page * chore: member setting page validation * chore: project covers endpoint (#2370) * chore: project covers endpoint * dev: remove print logs * dev: formatting --------- Co-authored-by: sriramveeraghanta * feat: default project cover images tab on the change cover popover (#2375) * feat: default project cover images tab * chore: remove unnecessary env vars from turbo.json * chore: remove unnecessary OAuth envs (#2378) * chore: remove unnecessary oauth envs * merge conflicts resolved * fix: adding new service --------- Co-authored-by: sriramveeraghanta * fix: added user store variables in mobx store observable (#2380) * fix: state group icons (#2381) * fix: removed default theme setting in the index page (#2382) * fix: removed default theme setting in the index page * fix: empty space * dev: global views and workspace filters store implemented * sync CE Master to EE Develop * refactor: create update view modal * chore: static issue global views * refactor: remove old code * refactor: filters select dropdown * chore: fix calendar layout * chore: mobx store for new applied filters * chore: dded search functionality --------- Co-authored-by: Vamsi Kurama Co-authored-by: Nikhil <118773738+pablohashescobar@users.noreply.github.com> Co-authored-by: sriram veeraghanta Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> Co-authored-by: Dakshesh Jain <65905942+dakshesh14@users.noreply.github.com> Co-authored-by: Bavisetti Narayan <72156168+NarayanBavisetti@users.noreply.github.com> Co-authored-by: guru_sainath Co-authored-by: NarayanBavisetti Co-authored-by: Anmol Singh Bhatia Co-authored-by: Rhea Jain <65884341+rhea0110@users.noreply.github.com> Co-authored-by: Your Name Co-authored-by: pablohashescobar Co-authored-by: Henit Chobisa Co-authored-by: Thomas Co-authored-by: Luis Cruz <55716036+luis-cruzt@users.noreply.github.com> Co-authored-by: Manish Gupta * fix: Auth fixes and Layout fixes (#2408) * fix: auth fixes and layout improvements * fix: layout fixes * fix: analytics page fixes * dev: implemented project views using MobX (#2410) * dev: implemented project views list using mobx * style: views list UI * dev: implemented view issues page using mobx * refactor: project view issues fetching * chore: plane ui library component and code refactor (#2406) * chore: swap input component with plane/ui package * chore: swap textarea component with plane/ui package * chore: swap button component with plane/ui package * chore: button component revamp * fix: button type fix * chore: secondary button revamp * chore: button props updated * chore: swap loader component with plane/ui package * fix: build error fix * chore: button component refactor * chore: code refactor * chore: swap toggle switch component with plane/ui package * chore: swap spinner component with plane/ui package * chore: swap progress bar componenet with plan/ui package * chore: code refactor * fix: gitignore fixes * fix: project card fixes * chore: ui component revamp (#2415) * chore: swap tooltip component with plane ui package * chore: swap linear progress component with plane ui package * fix: login button fix * chore: implement new worksapace wrapper for global views (#2412) * chore: implement new worksapace wrapper for global views pages * fix: merge conflicts * fix: merge conflicts * dev: add remaining layouts to cycle (#2413) * fix: workspace auth wrapper changes * chore: project card revamp and refactor (#2416) * removing dist from ui * refactor: analytics (#2419) * refactor: helper functions * chore: updated all the page headers * refactor: custom analytics * refactor: project analytics modal * refactor: folder structure, remove junk code (#2423) * refactor: folder structure * chore: ad order by target date option * refactor: remove old layout components * refactor: inbox folder structure * fix: services fixes * fix: store imports changes * fix: services export fixes * fix: services implementation fixes * fix: build issue fixes * fix: react library fixes * refactor: MobX store folder structure (#2435) * refactor: store folder structure * chore: update import statements * fix: service import errors (#2436) * fix: service imports * chore: update service imports in store * chore: fix remianing service imports * build fixes * editor ts config fixes * fix: turbo and build fixes * fix: Auth screen loading implementation * fix: build issues * fix: turbo settings for ui package --------- Co-authored-by: gurusainath Co-authored-by: Aaryan Khandelwal <65252264+aaryan610@users.noreply.github.com> Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> Co-authored-by: Dakshesh Jain <65905942+dakshesh14@users.noreply.github.com> Co-authored-by: Bavisetti Narayan <72156168+NarayanBavisetti@users.noreply.github.com> Co-authored-by: Aaryan Khandelwal Co-authored-by: Vamsi Kurama Co-authored-by: Nikhil <118773738+pablohashescobar@users.noreply.github.com> Co-authored-by: NarayanBavisetti Co-authored-by: Anmol Singh Bhatia Co-authored-by: Rhea Jain <65884341+rhea0110@users.noreply.github.com> Co-authored-by: Your Name Co-authored-by: pablohashescobar Co-authored-by: Henit Chobisa Co-authored-by: Thomas Co-authored-by: Luis Cruz <55716036+luis-cruzt@users.noreply.github.com> Co-authored-by: Manish Gupta --- .github/workflows/create-sync-pr.yml | 2 +- README.md | 16 +- apiserver/plane/utils/issue_filters.py | 1 - package.json | 2 +- packages/editor/core/tsconfig.json | 13 +- .../editor/lite-text-editor/tsconfig.json | 13 +- .../editor/rich-text-editor/tsconfig.json | 13 +- .../tailwind-config-custom/tailwind.config.js | 5 +- .../{react.json => react-library.json} | 3 +- packages/ui/button/index.tsx | 3 - packages/ui/index.tsx | 17 - packages/ui/package.json | 37 +- packages/ui/src/button/button.tsx | 66 + packages/ui/src/button/helper.tsx | 123 ++ packages/ui/src/button/index.tsx | 2 + packages/ui/src/button/toggle-switch.tsx | 49 + packages/ui/src/form-fields/index.tsx | 2 + packages/ui/src/form-fields/input.tsx | 49 + packages/ui/src/form-fields/textarea.tsx | 69 ++ packages/ui/src/index.tsx | 6 + packages/ui/src/loader.tsx | 30 + packages/ui/src/progress/index.tsx | 3 + .../progress/linear-progress-indicator.tsx | 44 + packages/ui/src/progress/progress-bar.tsx | 77 ++ packages/ui/src/progress/radial-progress.tsx | 45 + packages/ui/src/spinners/circular-spinner.tsx | 23 + packages/ui/src/spinners/index.ts | 1 + packages/ui/src/tooltip/index.tsx | 1 + packages/ui/src/tooltip/tooltip.tsx | 86 ++ packages/ui/tsconfig.json | 3 + .../accounts/email-reset-password-form.tsx | 11 +- turbo.json | 35 +- web/.prettierrc | 2 +- web/components/account/email-code-form.tsx | 89 +- .../account/email-forgot-password-form.tsx | 69 ++ .../account/email-password-form.tsx | 90 +- .../account/email-reset-password-form.tsx | 97 -- web/components/account/email-signup-form.tsx | 94 +- web/components/account/google-login.tsx | 6 +- web/components/account/index.ts | 2 +- .../create-update-analytics-modal.tsx | 161 --- .../custom-analytics/custom-analytics.tsx | 147 +-- .../custom-analytics/graph/index.tsx | 28 +- .../analytics/custom-analytics/index.ts | 3 +- .../custom-analytics/main-content.tsx | 85 ++ .../analytics/custom-analytics/select-bar.tsx | 123 +- .../{ => custom-analytics}/select/index.ts | 0 .../{ => custom-analytics}/select/project.tsx | 6 +- .../{ => custom-analytics}/select/segment.tsx | 4 +- .../{ => custom-analytics}/select/x-axis.tsx | 4 +- .../{ => custom-analytics}/select/y-axis.tsx | 0 .../analytics/custom-analytics/sidebar.tsx | 381 ------ .../custom-analytics/sidebar/index.ts | 3 + .../sidebar/projects-list.tsx | 65 + .../sidebar/sidebar-header.tsx | 107 ++ .../custom-analytics/sidebar/sidebar.tsx | 215 ++++ .../analytics/custom-analytics/table.tsx | 183 ++- web/components/analytics/index.ts | 1 - web/components/analytics/project-modal.tsx | 225 ---- .../analytics/project-modal/header.tsx | 37 + .../analytics/project-modal/index.ts | 3 + .../analytics/project-modal/main-content.tsx | 114 ++ .../analytics/project-modal/modal.tsx | 70 ++ .../scope-and-demand/leaderboard.tsx | 7 +- .../scope-and-demand/scope-and-demand.tsx | 34 +- .../scope-and-demand/year-wise-issues.tsx | 13 +- .../auth-screens/project/join-project.tsx | 28 +- .../auth-screens/workspace/not-a-member.tsx | 10 +- .../automation/auto-archive-automation.tsx | 21 +- .../automation/auto-close-automation.tsx | 38 +- .../automation/select-month-modal.tsx | 111 +- .../change-interface-theme.tsx | 3 +- web/components/command-palette/command-k.tsx | 70 +- .../command-palette/command-pallette.tsx | 44 +- .../issue/change-issue-assignee.tsx | 23 +- .../issue/change-issue-priority.tsx | 17 +- .../issue/change-issue-state.tsx | 33 +- .../command-palette/shortcuts-modal.tsx | 15 +- web/components/{ui => common}/empty-state.tsx | 0 web/components/common/index.ts | 2 + .../common/product-updates-modal.tsx | 115 ++ web/components/core/activity.tsx | 68 +- .../core/filters/date-filter-modal.tsx | 63 +- .../core/filters/issues-view-filter.tsx | 157 +-- .../core/filters/workspace-filters-list.tsx | 31 +- web/components/core/image-picker-popover.tsx | 79 +- .../core/modals/bulk-delete-issues-modal.tsx | 51 +- .../modals/existing-issues-list-modal.tsx | 55 +- .../core/modals/gpt-assistant-modal.tsx | 89 +- .../core/modals/image-upload-modal.tsx | 32 +- web/components/core/modals/link-modal.tsx | 92 +- web/components/core/reaction-selector.tsx | 17 +- .../core/sidebar/single-progress-stats.tsx | 7 +- .../core/theme/color-picker-input.tsx | 51 +- .../core/theme/custom-theme-selector.tsx | 30 +- web/components/core/theme/theme-switch.tsx | 14 +- web/components/core/views/all-views.tsx | 425 ++++--- .../core/views/board-view/all-boards.tsx | 152 --- .../core/views/board-view/board-header.tsx | 231 ---- web/components/core/views/board-view/index.ts | 5 - .../board-view/inline-create-issue-form.tsx | 62 - .../core/views/board-view/single-board.tsx | 289 ----- .../core/views/board-view/single-issue.tsx | 547 -------- .../views/calendar-view/calendar-header.tsx | 153 --- .../core/views/calendar-view/calendar.tsx | 217 ---- .../core/views/calendar-view/index.ts | 5 - .../inline-create-issue-form.tsx | 102 -- .../core/views/calendar-view/single-date.tsx | 126 -- .../core/views/calendar-view/single-issue.tsx | 403 ------ .../core/views/gantt-chart-view/index.tsx | 30 - web/components/core/views/index.ts | 5 - .../views/inline-issue-create-wrapper.tsx | 72 +- web/components/core/views/issues-view.tsx | 1101 ++++++++--------- .../core/views/list-view/all-lists.tsx | 104 -- web/components/core/views/list-view/index.ts | 4 - .../list-view/inline-create-issue-form.tsx | 62 - .../core/views/list-view/single-issue.tsx | 511 -------- .../core/views/list-view/single-list.tsx | 377 ------ .../assignee-column/assignee-column.tsx | 27 +- .../spreadsheet-assignee-column.tsx | 12 +- .../created-on-column/created-on-column.tsx | 15 +- .../spreadsheet-created-on-column.tsx | 22 +- .../due-date-column/due-date-column.tsx | 47 +- .../spreadsheet-due-date-column.tsx | 4 +- .../estimate-column/estimate-column.tsx | 48 +- .../spreadsheet-estimate-column.tsx | 4 +- .../issue-column/issue-column.tsx | 22 +- .../issue-column/spreadsheet-issue-column.tsx | 6 +- .../label-column/label-column.tsx | 4 +- .../label-column/spreadsheet-label-column.tsx | 4 +- .../priority-column/priority-column.tsx | 28 +- .../spreadsheet-priority-column.tsx | 4 +- .../views/spreadsheet-view/single-issue.tsx | 123 +- .../spreadsheet-view/spreadsheet-view.tsx | 698 ++++------- .../spreadsheet-start-date-column.tsx | 4 +- .../start-date-column/start-date-column.tsx | 45 +- .../state-column/spreadsheet-state-column.tsx | 30 +- .../state-column/state-column.tsx | 36 +- .../spreadsheet-updated-on-column.tsx | 4 +- .../updated-on-column/updated-on-column.tsx | 40 +- .../cycles/active-cycle-details.tsx | 110 +- web/components/cycles/cycles-board-card.tsx | 366 ++++++ web/components/cycles/cycles-board.tsx | 53 + web/components/cycles/cycles-gantt.tsx | 1 + web/components/cycles/cycles-list-item.tsx | 328 +++++ web/components/cycles/cycles-list.tsx | 70 ++ .../cycles/cycles-list/all-cycles-list.tsx | 29 - .../cycles-list/completed-cycles-list.tsx | 33 - .../cycles/cycles-list/draft-cycles-list.tsx | 29 - web/components/cycles/cycles-list/index.ts | 4 - .../cycles-list/upcoming-cycles-list.tsx | 33 - web/components/cycles/cycles-view-legacy.tsx | 255 ++++ web/components/cycles/cycles-view.tsx | 310 +---- web/components/cycles/delete-cycle-modal.tsx | 43 +- web/components/cycles/form.tsx | 105 +- web/components/cycles/gantt-chart/blocks.tsx | 6 +- .../gantt-chart/cycle-issues-layout.tsx | 64 - .../cycles/gantt-chart/cycles-list-layout.tsx | 54 +- web/components/cycles/gantt-chart/index.ts | 1 - web/components/cycles/index.ts | 7 +- web/components/cycles/modal.tsx | 45 +- web/components/cycles/select.tsx | 32 +- web/components/cycles/sidebar.tsx | 98 +- web/components/cycles/single-cycle-card.tsx | 51 +- web/components/cycles/single-cycle-list.tsx | 51 +- .../cycles/transfer-issues-modal.tsx | 51 +- web/components/cycles/transfer-issues.tsx | 20 +- web/components/emoji-icon-picker/index.tsx | 30 +- .../create-update-estimate-modal.tsx | 213 ++-- .../estimates/delete-estimate-modal.tsx | 31 +- web/components/estimates/single-estimate.tsx | 44 +- web/components/exporter/export-modal.tsx | 58 +- web/components/exporter/guide.tsx | 55 +- web/components/exporter/single-export.tsx | 21 +- web/components/gantt-chart/chart/bi-week.tsx | 9 +- web/components/gantt-chart/chart/day.tsx | 9 +- web/components/gantt-chart/chart/hours.tsx | 9 +- web/components/gantt-chart/chart/index.tsx | 76 +- web/components/gantt-chart/chart/quarter.tsx | 5 +- web/components/gantt-chart/chart/week.tsx | 9 +- web/components/gantt-chart/chart/year.tsx | 5 +- web/components/gantt-chart/contexts/index.tsx | 9 +- .../gantt-chart/hooks/block-update.tsx | 41 - web/components/gantt-chart/sidebar.tsx | 16 +- web/components/headers/cycle-issues.tsx | 147 +++ web/components/headers/global-issues.tsx | 160 +++ web/components/headers/index.ts | 9 + web/components/headers/module-issues.tsx | 147 +++ web/components/headers/project-issues.tsx | 164 +++ .../headers/project-view-issues.tsx | 113 ++ web/components/headers/project-views.tsx | 31 + web/components/headers/projects.tsx | 65 + .../headers/workspace-analytics.tsx | 33 + .../headers/workspace-dashboard.tsx | 52 + web/components/icons/alarm-clock-icon.tsx | 1 + web/components/icons/command-icon.tsx | 5 +- ...-action-headers.tsx => action-headers.tsx} | 90 +- web/components/inbox/index.ts | 13 +- ...-issue-activity.tsx => issue-activity.tsx} | 48 +- .../{inbox-issue-card.tsx => issue-card.tsx} | 10 +- web/components/inbox/issues-list-sidebar.tsx | 13 +- ...nbox-main-content.tsx => main-content.tsx} | 56 +- .../inbox/{ => modals}/accept-issue-modal.tsx | 10 +- .../{ => modals}/decline-issue-modal.tsx | 15 +- .../inbox/{ => modals}/delete-issue-modal.tsx | 24 +- web/components/inbox/modals/index.ts | 4 + .../inbox/{ => modals}/select-duplicate.tsx | 50 +- .../integration/delete-import-modal.tsx | 42 +- web/components/integration/github/auth.tsx | 10 +- .../integration/github/import-configure.tsx | 12 +- .../integration/github/import-confirm.tsx | 13 +- .../integration/github/import-data.tsx | 26 +- .../integration/github/import-users.tsx | 21 +- .../integration/github/repo-details.tsx | 29 +- web/components/integration/github/root.tsx | 50 +- .../integration/github/select-repository.tsx | 30 +- .../integration/github/single-user-select.tsx | 17 +- web/components/integration/guide.tsx | 39 +- .../integration/jira/give-details.tsx | 110 +- .../integration/jira/import-users.tsx | 64 +- .../integration/jira/jira-project-detail.tsx | 11 +- web/components/integration/jira/root.tsx | 44 +- .../integration/single-integration-card.tsx | 39 +- .../integration/slack/select-channel.tsx | 25 +- web/components/issues/activity.tsx | 27 +- .../issues/attachment/attachment-upload.tsx | 25 +- .../issues/attachment/attachments.tsx | 24 +- .../attachment/delete-attachment-modal.tsx | 40 +- web/components/issues/comment/add-comment.tsx | 54 +- .../issues/comment/comment-card.tsx | 43 +- .../issues/comment/comment-reaction.tsx | 29 +- .../issues/confirm-issue-discard.tsx | 23 +- .../issues/delete-draft-issue-modal.tsx | 27 +- web/components/issues/delete-issue-modal.tsx | 87 +- web/components/issues/description-form.tsx | 101 +- web/components/issues/draft-issue-form.tsx | 143 ++- web/components/issues/draft-issue-modal.tsx | 85 +- web/components/issues/form.tsx | 154 ++- web/components/issues/gantt-chart/index.ts | 2 - web/components/issues/index.ts | 2 +- .../issue-layouts/calendar/calendar.tsx | 54 + .../issue-layouts/calendar/day-tile.tsx | 58 + .../issue-layouts/calendar/dropdowns/index.ts | 2 + .../calendar/dropdowns/months-dropdown.tsx | 109 ++ .../calendar/dropdowns/options-dropdown.tsx | 117 ++ .../issues/issue-layouts/calendar/header.tsx | 98 ++ .../issues/issue-layouts/calendar/index.ts | 9 + .../issue-layouts/calendar/issue-blocks.tsx | 50 + .../calendar/roots/cycle-root.tsx | 39 + .../issue-layouts/calendar/roots/index.ts | 4 + .../calendar/roots/module-root.tsx | 39 + .../calendar/roots/project-root.tsx | 39 + .../calendar/roots/project-view-root.tsx | 39 + .../issues/issue-layouts/calendar/types.d.ts | 24 + .../issue-layouts/calendar/week-days.tsx | 41 + .../issue-layouts/calendar/week-header.tsx | 30 + .../filters/applied-filters/date.tsx | 54 + .../filters/applied-filters/filters-list.tsx | 110 ++ .../filters/applied-filters/index.ts | 9 + .../filters/applied-filters/label.tsx | 45 + .../filters/applied-filters/members.tsx | 42 + .../filters/applied-filters/priority.tsx | 47 + .../filters/applied-filters/project.tsx | 49 + .../applied-filters/roots/cycle-root.tsx | 77 ++ .../roots/global-view-root.tsx | 114 ++ .../filters/applied-filters/roots/index.ts | 5 + .../applied-filters/roots/module-root.tsx | 77 ++ .../applied-filters/roots/project-root.tsx | 81 ++ .../roots/project-view-root.tsx | 111 ++ .../filters/applied-filters/state-group.tsx | 33 + .../filters/applied-filters/state.tsx | 45 + .../display-filters-selection.tsx | 128 ++ .../display-filters/display-properties.tsx | 52 + .../header/display-filters/extra-options.tsx | 52 + .../header/display-filters/group-by.tsx | 49 + .../filters/header/display-filters/index.ts | 7 + .../header/display-filters/issue-type.tsx | 43 + .../header/display-filters/order-by.tsx | 44 + .../header/display-filters/sub-group-by.tsx | 49 + .../filters/header/filters/assignee.tsx | 68 + .../filters/header/filters/created-by.tsx | 68 + .../header/filters/filters-selection.tsx | 349 ++++++ .../filters/header/filters/index.ts | 10 + .../filters/header/filters/labels.tsx | 69 ++ .../filters/header/filters/priority.tsx | 97 ++ .../filters/header/filters/project.tsx | 81 ++ .../filters/header/filters/start-date.tsx | 64 + .../filters/header/filters/state-group.tsx | 57 + .../filters/header/filters/state.tsx | 71 ++ .../filters/header/filters/target-date.tsx | 64 + .../filters/header/helpers/dropdown.tsx | 71 ++ .../filters/header/helpers/filter-header.tsx | 22 + .../filters/header/helpers/filter-option.tsx | 35 + .../filters/header/helpers/index.ts | 3 + .../issue-layouts/filters/header/index.ts | 4 + .../filters/header/layout-selection.tsx | 40 + .../issues/issue-layouts/filters/index.ts | 2 + .../gantt}/blocks.tsx | 14 +- .../issue-layouts/gantt/cycle-root.tsx} | 44 +- .../issues/issue-layouts/gantt/index.ts | 5 + .../issue-layouts/gantt/module-root.tsx | 54 + .../gantt/project-view-root.tsx} | 45 +- .../issues/issue-layouts/gantt/root.tsx | 54 + web/components/issues/issue-layouts/index.ts | 11 + .../issues/issue-layouts/kanban/block.tsx | 73 ++ .../issue-layouts/kanban/cycle-root.tsx | 85 ++ .../issues/issue-layouts/kanban/default.tsx | 232 ++++ .../issue-layouts/kanban/headers/assignee.tsx | 56 + .../kanban/headers/created_by.tsx | 54 + .../kanban/headers/group-by-card.tsx | 55 + .../kanban/headers/group-by-root.tsx | 91 ++ .../issue-layouts/kanban/headers/label.tsx | 57 + .../issue-layouts/kanban/headers/priority.tsx | 78 ++ .../kanban/headers/state-group.tsx | 59 + .../issue-layouts/kanban/headers/state.tsx | 54 + .../kanban/headers/sub-group-by-card.tsx | 40 + .../kanban/headers/sub-group-by-root.tsx | 91 ++ .../issues/issue-layouts/kanban/index.ts | 3 + .../issue-layouts/kanban/module-root.tsx | 85 ++ .../issue-layouts/kanban/properties.tsx | 199 +++ .../issues/issue-layouts/kanban/root.tsx | 85 ++ .../issues/issue-layouts/kanban/swimlanes.tsx | 305 +++++ .../issues/issue-layouts/kanban/view-root.tsx | 81 ++ .../issues/issue-layouts/list/block.tsx | 41 + .../issues/issue-layouts/list/cycle-root.tsx | 30 + .../issues/issue-layouts/list/default.tsx | 132 ++ .../issue-layouts/list/headers/assignee.tsx | 33 + .../issue-layouts/list/headers/created_by.tsx | 31 + .../list/headers/group-by-card.tsx | 40 + .../list/headers/group-by-root.tsx | 30 + .../issue-layouts/list/headers/label.tsx | 24 + .../issue-layouts/list/headers/priority.tsx | 51 + .../list/headers/state-group.tsx | 34 + .../issue-layouts/list/headers/state.tsx | 31 + .../issues/issue-layouts/list/index.ts | 3 + .../issues/issue-layouts/list/module-root.tsx | 30 + .../issues/issue-layouts/list/properties.tsx | 166 +++ .../issues/issue-layouts/list/root.tsx | 30 + .../issues/issue-layouts/list/view-root.tsx | 30 + .../issue-layouts/properties/assignee.tsx | 266 ++++ .../issues/issue-layouts/properties/date.tsx | 96 ++ .../properties/dropdown-template.tsx | 175 +++ .../issue-layouts/properties/estimates.tsx | 215 ++++ .../issue-layouts/properties/labels.tsx | 234 ++++ .../issue-layouts/properties/priority.tsx | 224 ++++ .../issues/issue-layouts/properties/state.tsx | 218 ++++ .../issue-layouts/roots/cycle-layout-root.tsx | 72 ++ .../roots/global-view-layout-root.tsx | 88 ++ .../issues/issue-layouts/roots/index.ts | 5 + .../roots/module-layout-root.tsx | 70 ++ .../roots/project-layout-root.tsx | 66 + .../roots/project-view-layout-root.tsx | 72 ++ .../issue-layouts/spreadsheet/cycle-root.tsx | 146 +++ .../issues/issue-layouts/spreadsheet/index.ts | 4 + .../issue-layouts/spreadsheet/module-root.tsx | 146 +++ .../spreadsheet/project-view-root.tsx | 128 ++ .../issues/issue-layouts/spreadsheet/root.tsx | 161 +++ web/components/issues/label.tsx | 11 +- web/components/issues/main-content.tsx | 64 +- web/components/issues/modal.tsx | 90 +- .../my-issues/my-issues-select-filters.tsx | 30 +- .../my-issues/my-issues-view-options.tsx | 25 +- .../issues/my-issues/my-issues-view.tsx | 299 ++--- .../issues/parent-issues-list-modal.tsx | 38 +- .../peek-overview/full-screen-peek-view.tsx | 8 +- .../issues/peek-overview/issue-activity.tsx | 23 +- .../issues/peek-overview/issue-properties.tsx | 26 +- .../issues/peek-overview/layout.tsx | 276 ++--- .../issues/peek-overview/side-peek-view.tsx | 10 +- web/components/issues/select/assignee.tsx | 6 +- web/components/issues/select/label.tsx | 42 +- web/components/issues/select/state.tsx | 14 +- .../issues/sidebar-select/assignee.tsx | 5 +- .../issues/sidebar-select/blocked.tsx | 23 +- .../issues/sidebar-select/blocker.tsx | 19 +- .../issues/sidebar-select/cycle.tsx | 37 +- .../issues/sidebar-select/duplicate.tsx | 9 +- .../issues/sidebar-select/label.tsx | 75 +- .../issues/sidebar-select/module.tsx | 34 +- .../issues/sidebar-select/parent.tsx | 8 +- .../issues/sidebar-select/relates-to.tsx | 9 +- .../issues/sidebar-select/state.tsx | 12 +- web/components/issues/sidebar.tsx | 98 +- web/components/issues/sub-issues/issue.tsx | 39 +- .../issues/sub-issues/issues-list.tsx | 24 +- .../issues/sub-issues/properties.tsx | 52 +- web/components/issues/sub-issues/root.tsx | 84 +- .../issues/view-select/assignee.tsx | 31 +- .../issues/view-select/due-date.tsx | 22 +- .../issues/view-select/estimate.tsx | 21 +- web/components/issues/view-select/label.tsx | 24 +- .../issues/view-select/priority.tsx | 38 +- .../issues/view-select/start-date.tsx | 29 +- .../workspace-views/workpace-view-issues.tsx | 232 ---- .../workspace-views/workspace-all-issue.tsx | 236 ---- .../workspace-assigned-issue.tsx | 148 --- .../workspace-created-issues.tsx | 147 --- .../workspace-issue-view-option.tsx | 116 -- .../workspace-subscribed-issue.tsx | 148 --- web/components/labels/create-label-modal.tsx | 71 +- .../labels/create-update-label-inline.tsx | 325 +++-- web/components/labels/delete-label-modal.tsx | 35 +- web/components/labels/labels-list-modal.tsx | 22 +- web/components/labels/single-label-group.tsx | 31 +- .../modules/delete-module-modal.tsx | 44 +- web/components/modules/form.tsx | 70 +- web/components/modules/gantt-chart/blocks.tsx | 9 +- web/components/modules/gantt-chart/index.ts | 1 - .../gantt-chart/module-issues-layout.tsx | 62 - .../gantt-chart/modules-list-layout.tsx | 21 +- web/components/modules/modal.tsx | 25 +- web/components/modules/select/lead.tsx | 16 +- web/components/modules/select/members.tsx | 9 +- .../modules/sidebar-select/select-lead.tsx | 23 +- .../modules/sidebar-select/select-members.tsx | 5 +- web/components/modules/sidebar.tsx | 105 +- web/components/modules/single-module-card.tsx | 57 +- .../notifications/notification-card.tsx | 27 +- .../notifications/notification-header.tsx | 3 +- .../notifications/notification-popover.tsx | 24 +- .../select-snooze-till-modal.tsx | 59 +- web/components/onboarding/invite-members.tsx | 56 +- web/components/onboarding/join-workspaces.tsx | 52 +- web/components/onboarding/tour/root.tsx | 28 +- web/components/onboarding/user-details.tsx | 85 +- web/components/onboarding/workspace.tsx | 18 +- web/components/page-views/index.ts | 1 + web/components/page-views/signin.tsx | 216 ++++ web/components/pages/create-block.tsx | 63 +- .../pages/create-update-block-inline.tsx | 82 +- .../pages/create-update-page-modal.tsx | 20 +- web/components/pages/delete-page-modal.tsx | 52 +- web/components/pages/page-form.tsx | 45 +- .../pages/pages-list/all-pages-list.tsx | 7 +- .../pages/pages-list/favorite-pages-list.tsx | 8 +- .../pages/pages-list/my-pages-list.tsx | 12 +- .../pages/pages-list/other-pages-list.tsx | 12 +- .../pages/pages-list/recent-pages-list.tsx | 18 +- web/components/pages/pages-view.tsx | 36 +- web/components/pages/single-page-block.tsx | 88 +- .../pages/single-page-detailed-item.tsx | 43 +- .../pages/single-page-list-item.tsx | 31 +- web/components/profile/overview/activity.tsx | 16 +- .../overview/priority-distribution.tsx | 3 +- web/components/profile/overview/stats.tsx | 3 +- .../profile/profile-issues-view-options.tsx | 210 ++-- .../profile/profile-issues-view.tsx | 62 +- web/components/profile/sidebar.tsx | 40 +- web/components/project/card-list.tsx | 69 ++ web/components/project/card.tsx | 216 ++++ .../project/confirm-project-member-remove.tsx | 26 +- .../project/create-project-modal.tsx | 187 ++- .../project/delete-project-modal.tsx | 113 +- web/components/project/form-loader.tsx | 62 + web/components/project/form.tsx | 284 +++++ web/components/project/index.ts | 10 +- web/components/project/join-project-modal.tsx | 50 +- web/components/project/label-select.tsx | 19 +- ...eave-modal.tsx => leave-project-modal.tsx} | 114 +- web/components/project/member-select.tsx | 5 +- web/components/project/members-select.tsx | 18 +- web/components/project/priority-select.tsx | 16 +- .../project/publish-project/index.tsx | 2 + .../project/publish-project/modal.tsx | 78 +- .../project/send-project-invitation-modal.tsx | 62 +- .../project/settings/single-label.tsx | 48 +- web/components/project/sidebar-list-item.tsx | 347 ++++++ web/components/project/sidebar-list.tsx | 137 +- .../project/single-integration-card.tsx | 19 +- .../project/single-project-card.tsx | 239 ---- .../project/single-sidebar-project.tsx | 384 ------ web/components/search-listbox/index.tsx | 165 --- web/components/search-listbox/types.d.ts | 15 - web/components/states/create-state-modal.tsx | 90 +- .../states/create-update-state-inline.tsx | 84 +- web/components/states/delete-state-modal.tsx | 39 +- web/components/states/single-state.tsx | 49 +- web/components/states/state-select.tsx | 23 +- web/components/ui/avatar.tsx | 20 +- web/components/ui/datepicker.tsx | 9 +- web/components/ui/dropdowns/custom-menu.tsx | 21 +- web/components/ui/index.ts | 1 - web/components/ui/labels-list.tsx | 43 +- .../ui/linear-progress-indicator.tsx | 3 +- web/components/ui/product-updates-modal.tsx | 10 +- web/components/ui/tooltip.tsx | 15 +- web/components/user/index.ts | 1 + web/components/user/user-greetings.tsx | 49 + web/components/views/delete-view-modal.tsx | 68 +- web/components/views/form.tsx | 187 +-- web/components/views/index.ts | 5 +- web/components/views/modal.tsx | 148 +-- web/components/views/select-filters.tsx | 31 +- web/components/views/single-view-item.tsx | 175 --- web/components/views/view-list-item.tsx | 128 ++ web/components/views/views-list.tsx | 80 ++ web/components/views/workspace-dashboard.tsx | 90 ++ web/components/web-view/activity-message.tsx | 85 +- web/components/web-view/add-comment.tsx | 26 +- web/components/web-view/comment-card.tsx | 53 +- .../web-view/create-update-link-form.tsx | 121 +- web/components/web-view/issue-activity.tsx | 90 +- web/components/web-view/issue-attachments.tsx | 51 +- web/components/web-view/issue-link-list.tsx | 33 +- .../web-view/issue-properties-detail.tsx | 94 +- .../web-view/issue-web-view-form.tsx | 72 +- .../web-view/issues-select-bottom-sheet.tsx | 32 +- web/components/web-view/select-assignee.tsx | 20 +- web/components/web-view/select-blocked-by.tsx | 47 +- web/components/web-view/select-blocker-to.tsx | 25 +- web/components/web-view/select-cycle.tsx | 40 +- web/components/web-view/select-duplicate.tsx | 47 +- web/components/web-view/select-module.tsx | 40 +- web/components/web-view/select-parent.tsx | 22 +- web/components/web-view/select-relates-to.tsx | 43 +- web/components/web-view/select-state.tsx | 20 +- web/components/web-view/sub-issues.tsx | 23 +- web/components/workspace/activity-graph.tsx | 15 +- .../confirm-workspace-member-remove.tsx | 24 +- .../workspace/create-workspace-form.tsx | 96 +- .../workspace/delete-workspace-modal.tsx | 69 +- web/components/workspace/help-section.tsx | 34 +- web/components/workspace/index.ts | 1 + web/components/workspace/issues-list.tsx | 20 +- web/components/workspace/issues-stats.tsx | 7 +- .../send-workspace-invitation-modal.tsx | 46 +- web/components/workspace/sidebar-dropdown.tsx | 41 +- web/components/workspace/sidebar-menu.tsx | 33 +- .../workspace/sidebar-quick-action.tsx | 14 +- .../views/default-view-list-item.tsx | 36 + ...e-view-modal.tsx => delete-view-modal.tsx} | 88 +- web/components/workspace/views/form.tsx | 239 ++-- .../workspace/views/global-select-filters.tsx | 301 ----- web/components/workspace/views/header.tsx | 82 ++ web/components/workspace/views/index.ts | 7 + web/components/workspace/views/modal.tsx | 108 +- .../views/single-workspace-view-item.tsx | 110 -- .../workspace/views/view-list-item.tsx | 87 ++ web/components/workspace/views/views-list.tsx | 50 + .../views/workpace-view-navigation.tsx | 105 -- web/constants/analytics.ts | 13 +- web/constants/calendar.ts | 129 +- web/constants/cycle.ts | 37 + web/constants/fetch-keys.ts | 119 +- web/constants/filters.ts | 29 +- web/constants/issue.ts | 392 ++++-- web/constants/kanban-helpers.ts | 19 + web/constants/workspace.ts | 23 + web/contexts/inbox-view-context.tsx | 34 +- web/contexts/issue-view.context.tsx | 79 +- web/contexts/profile-issues-context.tsx | 1 - web/contexts/project-member.context.tsx | 18 +- web/contexts/theme.context.tsx | 9 +- web/contexts/user-notification-context.tsx | 53 +- web/contexts/user.context.tsx | 17 +- web/contexts/workspace-member.context.tsx | 8 +- web/contexts/workspace-view-context.tsx | 235 ---- web/contexts/workspace.context.tsx | 11 +- web/helpers/analytics.helper.ts | 56 +- web/helpers/calendar.helper.ts | 153 +-- web/helpers/date-time.helper.ts | 90 +- web/helpers/emoji.helper.tsx | 19 +- web/helpers/filter.helper.ts | 32 + web/helpers/issue.helper.ts | 115 ++ web/helpers/string.helper.ts | 41 +- web/hooks/gantt-chart/cycle-issues-view.tsx | 53 - web/hooks/gantt-chart/issue-view.tsx | 8 +- web/hooks/gantt-chart/module-issues-view.tsx | 53 - web/hooks/gantt-chart/view-issues-view.tsx | 38 - web/hooks/my-issues/use-my-issues-filter.tsx | 13 +- web/hooks/my-issues/use-my-issues.tsx | 9 +- web/hooks/use-calendar-issues-view.tsx | 150 --- web/hooks/use-comment-reaction.tsx | 17 +- web/hooks/use-estimate-option.tsx | 15 +- web/hooks/use-inbox-view.tsx | 19 +- .../use-issue-notification-subscription.tsx | 22 +- web/hooks/use-issue-properties.tsx | 24 +- web/hooks/use-issue-reaction.tsx | 20 +- web/hooks/use-issues-view.tsx | 59 +- web/hooks/use-local-storage.tsx | 4 +- web/hooks/use-profile-issues.tsx | 16 +- web/hooks/use-project-details.tsx | 8 +- web/hooks/use-project-members.tsx | 16 +- web/hooks/use-projects.tsx | 18 +- web/hooks/use-spreadsheet-issues-view.tsx | 124 -- web/hooks/use-sub-issue.tsx | 11 +- web/hooks/use-user-auth.tsx | 15 +- web/hooks/use-user-notifications.tsx | 70 +- web/hooks/use-user.tsx | 17 +- web/hooks/use-workspace-details.tsx | 4 +- web/hooks/use-workspace-members.tsx | 20 +- web/hooks/use-workspace-view.tsx | 11 - web/hooks/use-workspaces.tsx | 4 +- .../app-header.tsx | 17 +- .../app-sidebar.tsx | 26 +- web/layouts/app-layout-legacy/layout.tsx | 1 + web/layouts/app-layout/index.ts | 2 + web/layouts/app-layout/layout.tsx | 35 + web/layouts/app-layout/sidebar.tsx | 36 + web/layouts/auth-layout-legacy/index.ts | 3 + .../project-authorization-wrapper.tsx | 18 +- .../user-authorization-wrapper.tsx | 8 +- .../workspace-authorization-wrapper.tsx | 96 +- web/layouts/auth-layout/index.ts | 4 +- web/layouts/auth-layout/user-wrapper.tsx | 42 + web/layouts/auth-layout/workspace-wrapper.tsx | 94 ++ web/layouts/profile-layout.tsx | 2 +- web/layouts/web-view-layout/index.tsx | 11 +- web/lib/mobx/store-init.tsx | 55 +- web/package.json | 4 +- web/pages/404.tsx | 10 +- web/pages/[workspaceSlug]/analytics.tsx | 145 +-- web/pages/[workspaceSlug]/editor.tsx | 193 --- web/pages/[workspaceSlug]/index.tsx | 217 +--- web/pages/[workspaceSlug]/me/my-issues.tsx | 16 +- .../[workspaceSlug]/me/profile/activity.tsx | 56 +- .../[workspaceSlug]/me/profile/index.tsx | 148 ++- .../me/profile/preferences.tsx | 18 +- .../profile/[userId]/index.tsx | 14 +- .../archived-issues/[archivedIssueId].tsx | 34 +- .../[projectId]/archived-issues/index.tsx | 15 +- .../projects/[projectId]/cycles/[cycleId].tsx | 77 +- .../projects/[projectId]/cycles/index.tsx | 224 ++-- .../[projectId]/draft-issues/index.tsx | 16 +- .../projects/[projectId]/inbox/[inboxId].tsx | 16 +- .../projects/[projectId]/issues/[issueId].tsx | 18 +- .../projects/[projectId]/issues/index.tsx | 127 +- .../[projectId]/modules/[moduleId].tsx | 87 +- .../projects/[projectId]/modules/index.tsx | 49 +- .../projects/[projectId]/pages/[pageId].tsx | 157 +-- .../projects/[projectId]/pages/index.tsx | 61 +- .../[projectId]/settings/automations.tsx | 22 +- .../[projectId]/settings/estimates.tsx | 56 +- .../[projectId]/settings/features.tsx | 69 +- .../projects/[projectId]/settings/index.tsx | 488 ++------ .../[projectId]/settings/integrations.tsx | 29 +- .../projects/[projectId]/settings/labels.tsx | 29 +- .../projects/[projectId]/settings/members.tsx | 185 +-- .../projects/[projectId]/settings/states.tsx | 31 +- .../projects/[projectId]/views/[viewId].tsx | 144 +-- .../projects/[projectId]/views/index.tsx | 126 +- web/pages/[workspaceSlug]/projects/index.tsx | 169 +-- .../[workspaceSlug]/settings/billing.tsx | 20 +- .../[workspaceSlug]/settings/exports.tsx | 12 +- .../[workspaceSlug]/settings/imports.tsx | 12 +- web/pages/[workspaceSlug]/settings/index.tsx | 112 +- .../[workspaceSlug]/settings/integrations.tsx | 20 +- .../[workspaceSlug]/settings/members.tsx | 82 +- .../workspace-views/[globalViewId].tsx | 40 + .../workspace-views/all-issues.tsx | 51 +- .../workspace-views/assigned.tsx | 51 +- .../workspace-views/created.tsx | 51 +- .../[workspaceSlug]/workspace-views/index.tsx | 191 +-- .../workspace-views/issues.tsx | 10 +- .../workspace-views/subscribed.tsx | 49 +- web/pages/_error.tsx | 22 +- web/pages/accounts/forgot-password.tsx | 71 ++ web/pages/{ => accounts}/magic-sign-in.tsx | 14 +- web/pages/{ => accounts}/reset-password.tsx | 82 +- web/pages/{ => accounts}/sign-up.tsx | 13 +- .../index.tsx} | 33 +- web/pages/error.tsx | 16 - web/pages/index.tsx | 233 +--- web/pages/installations/[provider]/index.tsx | 15 +- .../index.tsx} | 52 +- web/pages/m/[workspaceSlug]/editor.tsx | 16 +- .../projects/[projectId]/issues/[issueId].tsx | 49 +- .../{onboarding.tsx => onboarding/index.tsx} | 45 +- .../index.tsx} | 22 +- web/public/empty-state/state_graph.svg | 12 +- web/public/services/json.svg | 2 +- web/services/ai.service.ts | 16 +- web/services/analytics.service.ts | 7 +- web/services/api.service.ts | 64 +- ...onfig.service.ts => app_config.service.ts} | 2 +- ...service.ts => app_installation.service.ts} | 10 +- ...hentication.service.ts => auth.service.ts} | 29 +- .../{cycles.service.ts => cycle.service.ts} | 103 +- web/services/file.service.ts | 20 +- web/services/inbox.service.ts | 62 +- .../github.service.ts | 34 +- web/services/integrations/index.ts | 3 + .../integration.service.ts} | 28 +- .../jira.service.ts | 18 +- web/services/issue/index.ts | 7 + web/services/issue/issue.service.ts | 287 +++++ web/services/issue/issue_archive.service.ts | 43 + .../issue/issue_attachment.service.ts | 49 + web/services/issue/issue_comment.service.ts | 86 ++ web/services/issue/issue_draft.service.tsx | 51 + web/services/issue/issue_label.service.ts | 112 ++ .../issue_reaction.service.ts} | 68 +- web/services/issues.service.ts | 690 ----------- .../{modules.service.ts => module.service.ts} | 113 +- ...ons.service.ts => notification.service.ts} | 84 +- .../{pages.service.ts => page.service.ts} | 78 +- web/services/project-publish.service.ts | 106 -- web/services/project/index.ts | 6 + web/services/{ => project}/project.service.ts | 168 +-- .../project_estimate.service.ts} | 44 +- .../project_export.service.ts} | 20 +- .../project/project_invitation.service.ts | 43 + .../project/project_publish.service.ts | 61 + .../project_state.service.ts} | 48 +- ...vent.service.ts => track_event.service.ts} | 185 +-- web/services/user.service.ts | 46 +- web/services/view.service.ts | 99 ++ web/services/views.service.ts | 141 --- web/services/web-waitlist.service.ts | 22 - web/services/workspace.service.ts | 78 +- web/store/calendar.store.ts | 121 ++ web/store/cycle/cycle_issue.store.ts | 190 +++ web/store/cycle/cycle_issue_filters.store.ts | 147 +++ .../cycle/cycle_issue_kanban_view.store.ts | 450 +++++++ web/store/cycle/cycles.store.ts | 258 ++++ web/store/cycle/index.ts | 4 + .../global-view/global_view_filters.store.ts | 68 + .../global-view/global_view_issues.store.ts | 165 +++ web/store/global-view/global_views.store.ts | 205 +++ web/store/global-view/index.ts | 3 + web/store/issue/index.ts | 5 + web/store/issue/issue.store.ts | 187 +++ web/store/issue/issue_detail.store.ts | 199 +++ .../issue_draft.store.ts} | 49 +- web/store/issue/issue_filters.store.ts | 231 ++++ web/store/issue/issue_kanban_view.store.ts | 450 +++++++ web/store/issues.ts | 173 --- web/store/module/index.ts | 4 + web/store/module/module_filters.store.ts | 176 +++ web/store/module/module_issue.store.ts | 195 +++ .../module/module_issue_kanban_view.store.ts | 450 +++++++ web/store/module/modules.store.ts | 335 +++++ web/store/page.store.ts | 99 ++ web/store/project-view/index.ts | 3 + .../project_view_filters.store.ts | 68 + .../project-view/project_view_issues.store.ts | 161 +++ web/store/project-view/project_views.store.ts | 293 +++++ web/store/project.ts | 86 -- web/store/project/index.ts | 2 + web/store/project/project.store.ts | 568 +++++++++ .../project_publish.store.ts} | 56 +- web/store/root.ts | 120 +- web/store/{theme.ts => theme.store.ts} | 13 +- web/store/user.store.ts | 229 ++++ web/store/user.ts | 133 -- web/store/workspace/index.ts | 2 + web/store/workspace/workspace.store.ts | 217 ++++ .../workspace/workspace_filters.store.ts | 193 +++ web/styles/globals.css | 81 +- web/types/analytics.d.ts | 52 +- web/types/index.d.ts | 1 + web/types/issues.d.ts | 6 - web/types/projects.d.ts | 13 +- web/types/users.d.ts | 126 +- web/types/view-props.d.ts | 58 +- web/types/views.d.ts | 19 +- web/types/workspace-views.d.ts | 8 +- yarn.lock | 256 +++- 758 files changed, 30452 insertions(+), 23632 deletions(-) rename packages/tsconfig/{react.json => react-library.json} (83%) delete mode 100644 packages/ui/button/index.tsx delete mode 100644 packages/ui/index.tsx create mode 100644 packages/ui/src/button/button.tsx create mode 100644 packages/ui/src/button/helper.tsx create mode 100644 packages/ui/src/button/index.tsx create mode 100644 packages/ui/src/button/toggle-switch.tsx create mode 100644 packages/ui/src/form-fields/index.tsx create mode 100644 packages/ui/src/form-fields/input.tsx create mode 100644 packages/ui/src/form-fields/textarea.tsx create mode 100644 packages/ui/src/index.tsx create mode 100644 packages/ui/src/loader.tsx create mode 100644 packages/ui/src/progress/index.tsx create mode 100644 packages/ui/src/progress/linear-progress-indicator.tsx create mode 100644 packages/ui/src/progress/progress-bar.tsx create mode 100644 packages/ui/src/progress/radial-progress.tsx create mode 100644 packages/ui/src/spinners/circular-spinner.tsx create mode 100644 packages/ui/src/spinners/index.ts create mode 100644 packages/ui/src/tooltip/index.tsx create mode 100644 packages/ui/src/tooltip/tooltip.tsx create mode 100644 web/components/account/email-forgot-password-form.tsx delete mode 100644 web/components/account/email-reset-password-form.tsx delete mode 100644 web/components/analytics/custom-analytics/create-update-analytics-modal.tsx create mode 100644 web/components/analytics/custom-analytics/main-content.tsx rename web/components/analytics/{ => custom-analytics}/select/index.ts (100%) rename web/components/analytics/{ => custom-analytics}/select/project.tsx (88%) rename web/components/analytics/{ => custom-analytics}/select/segment.tsx (89%) rename web/components/analytics/{ => custom-analytics}/select/x-axis.tsx (86%) rename web/components/analytics/{ => custom-analytics}/select/y-axis.tsx (100%) delete mode 100644 web/components/analytics/custom-analytics/sidebar.tsx create mode 100644 web/components/analytics/custom-analytics/sidebar/index.ts create mode 100644 web/components/analytics/custom-analytics/sidebar/projects-list.tsx create mode 100644 web/components/analytics/custom-analytics/sidebar/sidebar-header.tsx create mode 100644 web/components/analytics/custom-analytics/sidebar/sidebar.tsx delete mode 100644 web/components/analytics/project-modal.tsx create mode 100644 web/components/analytics/project-modal/header.tsx create mode 100644 web/components/analytics/project-modal/index.ts create mode 100644 web/components/analytics/project-modal/main-content.tsx create mode 100644 web/components/analytics/project-modal/modal.tsx rename web/components/{ui => common}/empty-state.tsx (100%) create mode 100644 web/components/common/index.ts create mode 100644 web/components/common/product-updates-modal.tsx delete mode 100644 web/components/core/views/board-view/all-boards.tsx delete mode 100644 web/components/core/views/board-view/board-header.tsx delete mode 100644 web/components/core/views/board-view/index.ts delete mode 100644 web/components/core/views/board-view/inline-create-issue-form.tsx delete mode 100644 web/components/core/views/board-view/single-board.tsx delete mode 100644 web/components/core/views/board-view/single-issue.tsx delete mode 100644 web/components/core/views/calendar-view/calendar-header.tsx delete mode 100644 web/components/core/views/calendar-view/calendar.tsx delete mode 100644 web/components/core/views/calendar-view/index.ts delete mode 100644 web/components/core/views/calendar-view/inline-create-issue-form.tsx delete mode 100644 web/components/core/views/calendar-view/single-date.tsx delete mode 100644 web/components/core/views/calendar-view/single-issue.tsx delete mode 100644 web/components/core/views/gantt-chart-view/index.tsx delete mode 100644 web/components/core/views/list-view/all-lists.tsx delete mode 100644 web/components/core/views/list-view/index.ts delete mode 100644 web/components/core/views/list-view/inline-create-issue-form.tsx delete mode 100644 web/components/core/views/list-view/single-issue.tsx delete mode 100644 web/components/core/views/list-view/single-list.tsx create mode 100644 web/components/cycles/cycles-board-card.tsx create mode 100644 web/components/cycles/cycles-board.tsx create mode 100644 web/components/cycles/cycles-gantt.tsx create mode 100644 web/components/cycles/cycles-list-item.tsx create mode 100644 web/components/cycles/cycles-list.tsx delete mode 100644 web/components/cycles/cycles-list/all-cycles-list.tsx delete mode 100644 web/components/cycles/cycles-list/completed-cycles-list.tsx delete mode 100644 web/components/cycles/cycles-list/draft-cycles-list.tsx delete mode 100644 web/components/cycles/cycles-list/index.ts delete mode 100644 web/components/cycles/cycles-list/upcoming-cycles-list.tsx create mode 100644 web/components/cycles/cycles-view-legacy.tsx delete mode 100644 web/components/cycles/gantt-chart/cycle-issues-layout.tsx delete mode 100644 web/components/gantt-chart/hooks/block-update.tsx create mode 100644 web/components/headers/cycle-issues.tsx create mode 100644 web/components/headers/global-issues.tsx create mode 100644 web/components/headers/index.ts create mode 100644 web/components/headers/module-issues.tsx create mode 100644 web/components/headers/project-issues.tsx create mode 100644 web/components/headers/project-view-issues.tsx create mode 100644 web/components/headers/project-views.tsx create mode 100644 web/components/headers/projects.tsx create mode 100644 web/components/headers/workspace-analytics.tsx create mode 100644 web/components/headers/workspace-dashboard.tsx rename web/components/inbox/{inbox-action-headers.tsx => action-headers.tsx} (78%) rename web/components/inbox/{inbox-issue-activity.tsx => issue-activity.tsx} (69%) rename web/components/inbox/{inbox-issue-card.tsx => issue-card.tsx} (94%) rename web/components/inbox/{inbox-main-content.tsx => main-content.tsx} (86%) rename web/components/inbox/{ => modals}/accept-issue-modal.tsx (92%) rename web/components/inbox/{ => modals}/decline-issue-modal.tsx (88%) rename web/components/inbox/{ => modals}/delete-issue-modal.tsx (89%) create mode 100644 web/components/inbox/modals/index.ts rename web/components/inbox/{ => modals}/select-duplicate.tsx (82%) delete mode 100644 web/components/issues/gantt-chart/index.ts create mode 100644 web/components/issues/issue-layouts/calendar/calendar.tsx create mode 100644 web/components/issues/issue-layouts/calendar/day-tile.tsx create mode 100644 web/components/issues/issue-layouts/calendar/dropdowns/index.ts create mode 100644 web/components/issues/issue-layouts/calendar/dropdowns/months-dropdown.tsx create mode 100644 web/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx create mode 100644 web/components/issues/issue-layouts/calendar/header.tsx create mode 100644 web/components/issues/issue-layouts/calendar/index.ts create mode 100644 web/components/issues/issue-layouts/calendar/issue-blocks.tsx create mode 100644 web/components/issues/issue-layouts/calendar/roots/cycle-root.tsx create mode 100644 web/components/issues/issue-layouts/calendar/roots/index.ts create mode 100644 web/components/issues/issue-layouts/calendar/roots/module-root.tsx create mode 100644 web/components/issues/issue-layouts/calendar/roots/project-root.tsx create mode 100644 web/components/issues/issue-layouts/calendar/roots/project-view-root.tsx create mode 100644 web/components/issues/issue-layouts/calendar/types.d.ts create mode 100644 web/components/issues/issue-layouts/calendar/week-days.tsx create mode 100644 web/components/issues/issue-layouts/calendar/week-header.tsx create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/date.tsx create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/index.ts create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/label.tsx create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/members.tsx create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/priority.tsx create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/project.tsx create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/roots/index.ts create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/state-group.tsx create mode 100644 web/components/issues/issue-layouts/filters/applied-filters/state.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/display-filters/extra-options.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/display-filters/index.ts create mode 100644 web/components/issues/issue-layouts/filters/header/display-filters/issue-type.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/display-filters/order-by.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/display-filters/sub-group-by.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/filters/assignee.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/filters/created-by.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/filters/filters-selection.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/filters/index.ts create mode 100644 web/components/issues/issue-layouts/filters/header/filters/labels.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/filters/priority.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/filters/project.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/filters/start-date.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/filters/state-group.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/filters/state.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/filters/target-date.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/helpers/filter-header.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/helpers/filter-option.tsx create mode 100644 web/components/issues/issue-layouts/filters/header/helpers/index.ts create mode 100644 web/components/issues/issue-layouts/filters/header/index.ts create mode 100644 web/components/issues/issue-layouts/filters/header/layout-selection.tsx create mode 100644 web/components/issues/issue-layouts/filters/index.ts rename web/components/issues/{gantt-chart => issue-layouts/gantt}/blocks.tsx (83%) rename web/components/{views/gantt-chart.tsx => issues/issue-layouts/gantt/cycle-root.tsx} (51%) create mode 100644 web/components/issues/issue-layouts/gantt/index.ts create mode 100644 web/components/issues/issue-layouts/gantt/module-root.tsx rename web/components/issues/{gantt-chart/layout.tsx => issue-layouts/gantt/project-view-root.tsx} (51%) create mode 100644 web/components/issues/issue-layouts/gantt/root.tsx create mode 100644 web/components/issues/issue-layouts/index.ts create mode 100644 web/components/issues/issue-layouts/kanban/block.tsx create mode 100644 web/components/issues/issue-layouts/kanban/cycle-root.tsx create mode 100644 web/components/issues/issue-layouts/kanban/default.tsx create mode 100644 web/components/issues/issue-layouts/kanban/headers/assignee.tsx create mode 100644 web/components/issues/issue-layouts/kanban/headers/created_by.tsx create mode 100644 web/components/issues/issue-layouts/kanban/headers/group-by-card.tsx create mode 100644 web/components/issues/issue-layouts/kanban/headers/group-by-root.tsx create mode 100644 web/components/issues/issue-layouts/kanban/headers/label.tsx create mode 100644 web/components/issues/issue-layouts/kanban/headers/priority.tsx create mode 100644 web/components/issues/issue-layouts/kanban/headers/state-group.tsx create mode 100644 web/components/issues/issue-layouts/kanban/headers/state.tsx create mode 100644 web/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx create mode 100644 web/components/issues/issue-layouts/kanban/headers/sub-group-by-root.tsx create mode 100644 web/components/issues/issue-layouts/kanban/index.ts create mode 100644 web/components/issues/issue-layouts/kanban/module-root.tsx create mode 100644 web/components/issues/issue-layouts/kanban/properties.tsx create mode 100644 web/components/issues/issue-layouts/kanban/root.tsx create mode 100644 web/components/issues/issue-layouts/kanban/swimlanes.tsx create mode 100644 web/components/issues/issue-layouts/kanban/view-root.tsx create mode 100644 web/components/issues/issue-layouts/list/block.tsx create mode 100644 web/components/issues/issue-layouts/list/cycle-root.tsx create mode 100644 web/components/issues/issue-layouts/list/default.tsx create mode 100644 web/components/issues/issue-layouts/list/headers/assignee.tsx create mode 100644 web/components/issues/issue-layouts/list/headers/created_by.tsx create mode 100644 web/components/issues/issue-layouts/list/headers/group-by-card.tsx create mode 100644 web/components/issues/issue-layouts/list/headers/group-by-root.tsx create mode 100644 web/components/issues/issue-layouts/list/headers/label.tsx create mode 100644 web/components/issues/issue-layouts/list/headers/priority.tsx create mode 100644 web/components/issues/issue-layouts/list/headers/state-group.tsx create mode 100644 web/components/issues/issue-layouts/list/headers/state.tsx create mode 100644 web/components/issues/issue-layouts/list/index.ts create mode 100644 web/components/issues/issue-layouts/list/module-root.tsx create mode 100644 web/components/issues/issue-layouts/list/properties.tsx create mode 100644 web/components/issues/issue-layouts/list/root.tsx create mode 100644 web/components/issues/issue-layouts/list/view-root.tsx create mode 100644 web/components/issues/issue-layouts/properties/assignee.tsx create mode 100644 web/components/issues/issue-layouts/properties/date.tsx create mode 100644 web/components/issues/issue-layouts/properties/dropdown-template.tsx create mode 100644 web/components/issues/issue-layouts/properties/estimates.tsx create mode 100644 web/components/issues/issue-layouts/properties/labels.tsx create mode 100644 web/components/issues/issue-layouts/properties/priority.tsx create mode 100644 web/components/issues/issue-layouts/properties/state.tsx create mode 100644 web/components/issues/issue-layouts/roots/cycle-layout-root.tsx create mode 100644 web/components/issues/issue-layouts/roots/global-view-layout-root.tsx create mode 100644 web/components/issues/issue-layouts/roots/index.ts create mode 100644 web/components/issues/issue-layouts/roots/module-layout-root.tsx create mode 100644 web/components/issues/issue-layouts/roots/project-layout-root.tsx create mode 100644 web/components/issues/issue-layouts/roots/project-view-layout-root.tsx create mode 100644 web/components/issues/issue-layouts/spreadsheet/cycle-root.tsx create mode 100644 web/components/issues/issue-layouts/spreadsheet/index.ts create mode 100644 web/components/issues/issue-layouts/spreadsheet/module-root.tsx create mode 100644 web/components/issues/issue-layouts/spreadsheet/project-view-root.tsx create mode 100644 web/components/issues/issue-layouts/spreadsheet/root.tsx delete mode 100644 web/components/issues/workspace-views/workpace-view-issues.tsx delete mode 100644 web/components/issues/workspace-views/workspace-all-issue.tsx delete mode 100644 web/components/issues/workspace-views/workspace-assigned-issue.tsx delete mode 100644 web/components/issues/workspace-views/workspace-created-issues.tsx delete mode 100644 web/components/issues/workspace-views/workspace-issue-view-option.tsx delete mode 100644 web/components/issues/workspace-views/workspace-subscribed-issue.tsx delete mode 100644 web/components/modules/gantt-chart/module-issues-layout.tsx create mode 100644 web/components/page-views/index.ts create mode 100644 web/components/page-views/signin.tsx create mode 100644 web/components/project/card-list.tsx create mode 100644 web/components/project/card.tsx create mode 100644 web/components/project/form-loader.tsx create mode 100644 web/components/project/form.tsx rename web/components/project/{confirm-project-leave-modal.tsx => leave-project-modal.tsx} (70%) create mode 100644 web/components/project/publish-project/index.tsx create mode 100644 web/components/project/sidebar-list-item.tsx delete mode 100644 web/components/project/single-project-card.tsx delete mode 100644 web/components/project/single-sidebar-project.tsx delete mode 100644 web/components/search-listbox/index.tsx delete mode 100644 web/components/search-listbox/types.d.ts create mode 100644 web/components/user/index.ts create mode 100644 web/components/user/user-greetings.tsx delete mode 100644 web/components/views/single-view-item.tsx create mode 100644 web/components/views/view-list-item.tsx create mode 100644 web/components/views/views-list.tsx create mode 100644 web/components/views/workspace-dashboard.tsx create mode 100644 web/components/workspace/views/default-view-list-item.tsx rename web/components/workspace/views/{delete-workspace-view-modal.tsx => delete-view-modal.tsx} (64%) delete mode 100644 web/components/workspace/views/global-select-filters.tsx create mode 100644 web/components/workspace/views/header.tsx create mode 100644 web/components/workspace/views/index.ts delete mode 100644 web/components/workspace/views/single-workspace-view-item.tsx create mode 100644 web/components/workspace/views/view-list-item.tsx create mode 100644 web/components/workspace/views/views-list.tsx delete mode 100644 web/components/workspace/views/workpace-view-navigation.tsx create mode 100644 web/constants/cycle.ts create mode 100644 web/constants/kanban-helpers.ts delete mode 100644 web/contexts/workspace-view-context.tsx create mode 100644 web/helpers/filter.helper.ts create mode 100644 web/helpers/issue.helper.ts delete mode 100644 web/hooks/gantt-chart/cycle-issues-view.tsx delete mode 100644 web/hooks/gantt-chart/module-issues-view.tsx delete mode 100644 web/hooks/gantt-chart/view-issues-view.tsx delete mode 100644 web/hooks/use-calendar-issues-view.tsx delete mode 100644 web/hooks/use-spreadsheet-issues-view.tsx delete mode 100644 web/hooks/use-workspace-view.tsx rename web/layouts/{app-layout => app-layout-legacy}/app-header.tsx (84%) rename web/layouts/{app-layout => app-layout-legacy}/app-sidebar.tsx (62%) create mode 100644 web/layouts/app-layout-legacy/layout.tsx create mode 100644 web/layouts/app-layout/index.ts create mode 100644 web/layouts/app-layout/layout.tsx create mode 100644 web/layouts/app-layout/sidebar.tsx create mode 100644 web/layouts/auth-layout-legacy/index.ts rename web/layouts/{auth-layout => auth-layout-legacy}/project-authorization-wrapper.tsx (86%) rename web/layouts/{auth-layout => auth-layout-legacy}/user-authorization-wrapper.tsx (83%) rename web/layouts/{auth-layout => auth-layout-legacy}/workspace-authorization-wrapper.tsx (52%) create mode 100644 web/layouts/auth-layout/user-wrapper.tsx create mode 100644 web/layouts/auth-layout/workspace-wrapper.tsx delete mode 100644 web/pages/[workspaceSlug]/editor.tsx create mode 100644 web/pages/[workspaceSlug]/workspace-views/[globalViewId].tsx create mode 100644 web/pages/accounts/forgot-password.tsx rename web/pages/{ => accounts}/magic-sign-in.tsx (93%) rename web/pages/{ => accounts}/reset-password.tsx (63%) rename web/pages/{ => accounts}/sign-up.tsx (88%) rename web/pages/{create-workspace.tsx => create-workspace/index.tsx} (82%) delete mode 100644 web/pages/error.tsx rename web/pages/{invitations.tsx => invitations/index.tsx} (86%) rename web/pages/{onboarding.tsx => onboarding/index.tsx} (88%) rename web/pages/{workspace-member-invitation.tsx => workspace-invitations/index.tsx} (91%) rename web/services/{app-config.service.ts => app_config.service.ts} (92%) rename web/services/{app-installations.service.ts => app_installation.service.ts} (90%) rename web/services/{authentication.service.ts => auth.service.ts} (78%) rename web/services/{cycles.service.ts => cycle.service.ts} (54%) rename web/services/{integration => integrations}/github.service.ts (51%) create mode 100644 web/services/integrations/index.ts rename web/services/{integration/index.ts => integrations/integration.service.ts} (77%) rename web/services/{integration => integrations}/jira.service.ts (61%) create mode 100644 web/services/issue/index.ts create mode 100644 web/services/issue/issue.service.ts create mode 100644 web/services/issue/issue_archive.service.ts create mode 100644 web/services/issue/issue_attachment.service.ts create mode 100644 web/services/issue/issue_comment.service.ts create mode 100644 web/services/issue/issue_draft.service.tsx create mode 100644 web/services/issue/issue_label.service.ts rename web/services/{reaction.service.ts => issue/issue_reaction.service.ts} (54%) delete mode 100644 web/services/issues.service.ts rename web/services/{modules.service.ts => module.service.ts} (62%) rename web/services/{notifications.service.ts => notification.service.ts} (59%) rename web/services/{pages.service.ts => page.service.ts} (69%) delete mode 100644 web/services/project-publish.service.ts create mode 100644 web/services/project/index.ts rename web/services/{ => project}/project.service.ts (66%) rename web/services/{estimates.service.ts => project/project_estimate.service.ts} (55%) rename web/services/{integration/csv.services.ts => project/project_export.service.ts} (60%) create mode 100644 web/services/project/project_invitation.service.ts create mode 100644 web/services/project/project_publish.service.ts rename web/services/{state.service.ts => project/project_state.service.ts} (62%) rename web/services/{track-event.service.ts => track_event.service.ts} (81%) create mode 100644 web/services/view.service.ts delete mode 100644 web/services/views.service.ts delete mode 100644 web/services/web-waitlist.service.ts create mode 100644 web/store/calendar.store.ts create mode 100644 web/store/cycle/cycle_issue.store.ts create mode 100644 web/store/cycle/cycle_issue_filters.store.ts create mode 100644 web/store/cycle/cycle_issue_kanban_view.store.ts create mode 100644 web/store/cycle/cycles.store.ts create mode 100644 web/store/cycle/index.ts create mode 100644 web/store/global-view/global_view_filters.store.ts create mode 100644 web/store/global-view/global_view_issues.store.ts create mode 100644 web/store/global-view/global_views.store.ts create mode 100644 web/store/global-view/index.ts create mode 100644 web/store/issue/index.ts create mode 100644 web/store/issue/issue.store.ts create mode 100644 web/store/issue/issue_detail.store.ts rename web/store/{draft-issue.ts => issue/issue_draft.store.ts} (76%) create mode 100644 web/store/issue/issue_filters.store.ts create mode 100644 web/store/issue/issue_kanban_view.store.ts delete mode 100644 web/store/issues.ts create mode 100644 web/store/module/index.ts create mode 100644 web/store/module/module_filters.store.ts create mode 100644 web/store/module/module_issue.store.ts create mode 100644 web/store/module/module_issue_kanban_view.store.ts create mode 100644 web/store/module/modules.store.ts create mode 100644 web/store/page.store.ts create mode 100644 web/store/project-view/index.ts create mode 100644 web/store/project-view/project_view_filters.store.ts create mode 100644 web/store/project-view/project_view_issues.store.ts create mode 100644 web/store/project-view/project_views.store.ts delete mode 100644 web/store/project.ts create mode 100644 web/store/project/index.ts create mode 100644 web/store/project/project.store.ts rename web/store/{project-publish.tsx => project/project_publish.store.ts} (85%) rename web/store/{theme.ts => theme.store.ts} (82%) create mode 100644 web/store/user.store.ts delete mode 100644 web/store/user.ts create mode 100644 web/store/workspace/index.ts create mode 100644 web/store/workspace/workspace.store.ts create mode 100644 web/store/workspace/workspace_filters.store.ts diff --git a/.github/workflows/create-sync-pr.yml b/.github/workflows/create-sync-pr.yml index d93aec13e..c8e27f322 100644 --- a/.github/workflows/create-sync-pr.yml +++ b/.github/workflows/create-sync-pr.yml @@ -2,7 +2,7 @@ name: Create PR in Plane EE Repository to sync the changes on: pull_request: - branches: + branches: - master types: - closed diff --git a/README.md b/README.md index 79d1ef431..c00aee995 100644 --- a/README.md +++ b/README.md @@ -39,29 +39,33 @@ Meet [Plane](https://plane.so). An open-source software development tool to mana 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). -## ⚡️ Contributors Quick Start +## ⚡️ Contributors Quick Start ### Prerequisite + Development system must have docker engine installed and running. +### Steps -### Steps Setting up local environment is extremely easy and straight forward. Follow the below step and you will be ready to contribute 1. Clone the code locally using `git clone https://github.com/makeplane/plane.git` 1. Switch to the code folder `cd plane` 1. Create your feature or fix branch you plan to work on using `git checkout -b ` 1. Open terminal and run `./setup.sh` -1. Open the code on VSCode or similar equivalent IDE +1. Open the code on VSCode or similar equivalent IDE 1. Review the `.env` files available in various folders. Visit [Environment Setup](./ENV_SETUP.md) to know about various environment variables used in system 1. Run the docker command to initiate various services `docker compose -f docker-compose-local.yml up -d` -You are ready to make changes to the code. Do not forget to refresh the browser (in case id does not auto-reload) +```bash +./setup.sh +``` -Thats it! +You are ready to make changes to the code. Do not forget to refresh the browser (in case id does not auto-reload) +Thats it! -## 🍙 Self Hosting +## 🍙 Self Hosting For self hosting environment setup, visit the [Self Hosting](https://docs.plane.so/self-hosting) documentation page diff --git a/apiserver/plane/utils/issue_filters.py b/apiserver/plane/utils/issue_filters.py index f3f180645..0b8f39e14 100644 --- a/apiserver/plane/utils/issue_filters.py +++ b/apiserver/plane/utils/issue_filters.py @@ -187,7 +187,6 @@ def filter_target_date(params, filter, method): if method == "GET": target_dates = params.get("target_date").split(",") if len(target_dates) and "" not in target_dates: - date_filter(filter=filter, date_term="target_date", queries=target_dates) else: if params.get("target_date", None) and len(params.get("target_date")): diff --git a/package.json b/package.json index ba0fd9a61..2ed56291f 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "prettier": "latest", "prettier-plugin-tailwindcss": "^0.5.4", "tailwindcss": "^3.3.3", - "turbo": "latest" + "turbo": "^1.10.14" }, "resolutions": { "@types/react": "18.2.0" diff --git a/packages/editor/core/tsconfig.json b/packages/editor/core/tsconfig.json index 61a60f324..57d0e9a74 100644 --- a/packages/editor/core/tsconfig.json +++ b/packages/editor/core/tsconfig.json @@ -1,12 +1,5 @@ { - "extends": "tsconfig/react.json", - "include": [ - "src/**/*", - "index.d.ts" - ], - "exclude": [ - "dist", - "build", - "node_modules" - ] + "extends": "tsconfig/react-library.json", + "include": ["src/**/*", "index.d.ts"], + "exclude": ["dist", "build", "node_modules"] } diff --git a/packages/editor/lite-text-editor/tsconfig.json b/packages/editor/lite-text-editor/tsconfig.json index 61a60f324..57d0e9a74 100644 --- a/packages/editor/lite-text-editor/tsconfig.json +++ b/packages/editor/lite-text-editor/tsconfig.json @@ -1,12 +1,5 @@ { - "extends": "tsconfig/react.json", - "include": [ - "src/**/*", - "index.d.ts" - ], - "exclude": [ - "dist", - "build", - "node_modules" - ] + "extends": "tsconfig/react-library.json", + "include": ["src/**/*", "index.d.ts"], + "exclude": ["dist", "build", "node_modules"] } diff --git a/packages/editor/rich-text-editor/tsconfig.json b/packages/editor/rich-text-editor/tsconfig.json index 61a60f324..57d0e9a74 100644 --- a/packages/editor/rich-text-editor/tsconfig.json +++ b/packages/editor/rich-text-editor/tsconfig.json @@ -1,12 +1,5 @@ { - "extends": "tsconfig/react.json", - "include": [ - "src/**/*", - "index.d.ts" - ], - "exclude": [ - "dist", - "build", - "node_modules" - ] + "extends": "tsconfig/react-library.json", + "include": ["src/**/*", "index.d.ts"], + "exclude": ["dist", "build", "node_modules"] } diff --git a/packages/tailwind-config-custom/tailwind.config.js b/packages/tailwind-config-custom/tailwind.config.js index dd2f9291b..810f5d70d 100644 --- a/packages/tailwind-config-custom/tailwind.config.js +++ b/packages/tailwind-config-custom/tailwind.config.js @@ -11,8 +11,9 @@ module.exports = { "./layouts/**/*.tsx", "./pages/**/*.tsx", "./ui/**/*.tsx", - "../packages/editor/**/*.{js,ts,jsx,tsx}" - ] + "../packages/ui/**/*.{js,ts,jsx,tsx}", + "../packages/editor/**/*.{js,ts,jsx,tsx}", + ], }, theme: { extend: { diff --git a/packages/tsconfig/react.json b/packages/tsconfig/react-library.json similarity index 83% rename from packages/tsconfig/react.json rename to packages/tsconfig/react-library.json index 36b62be38..211c87d8d 100644 --- a/packages/tsconfig/react.json +++ b/packages/tsconfig/react-library.json @@ -6,6 +6,7 @@ "jsx": "react-jsx", "lib": ["ES2015", "DOM"], "module": "ESNext", - "target": "es6" + "target": "es6", + "sourceMap": true } } diff --git a/packages/ui/button/index.tsx b/packages/ui/button/index.tsx deleted file mode 100644 index 0a1550ec0..000000000 --- a/packages/ui/button/index.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export const Button = () => { - return ; -}; diff --git a/packages/ui/index.tsx b/packages/ui/index.tsx deleted file mode 100644 index 677dc8f4d..000000000 --- a/packages/ui/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -// import * as React from "react"; -// components -// export * from "./breadcrumbs"; -// export * from "./button"; -// export * from "./custom-listbox"; -// export * from "./custom-menu"; -// export * from "./custom-select"; -// export * from "./empty-space"; -// export * from "./header-button"; -// export * from "./input"; -// export * from "./loader"; -// export * from "./outline-button"; -// export * from "./select"; -// export * from "./spinner"; -// export * from "./text-area"; -// export * from "./tooltip"; -export * from "./button"; diff --git a/packages/ui/package.json b/packages/ui/package.json index d107e711c..603d0e250 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,23 +1,40 @@ { - "name": "ui", - "version": "0.13.2", - "main": "./index.tsx", - "types": "./index.tsx", + "name": "@plane/ui", + "version": "0.0.1", + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "sideEffects": false, "license": "MIT", + "files": [ + "dist/**" + ], "scripts": { - "lint": "eslint *.ts*" + "build": "tsup src/index.tsx --format esm,cjs --dts --external react", + "dev": "tsup src/index.tsx --format esm,cjs --watch --dts --external react", + "lint": "eslint src/", + "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist" }, "devDependencies": { - "@types/react": "^18.0.17", - "@types/react-dom": "^18.0.6", - "@typescript-eslint/eslint-plugin": "^5.51.0", + "@types/node": "^20.5.2", + "@types/react": "18.2.0", + "@types/react-dom": "18.2.0", "classnames": "^2.3.2", - "eslint": "^7.32.0", "eslint-config-custom": "*", - "next": "12.3.2", "react": "^18.2.0", "tsconfig": "*", "tailwind-config-custom": "*", + "tsup": "^5.10.1", "typescript": "4.7.4" + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@blueprintjs/core": "^4.16.3", + "@blueprintjs/popover2": "^1.13.3", + "@headlessui/react": "^1.7.17", + "clsx": "^2.0.0", + "next-themes": "^0.2.1" } } diff --git a/packages/ui/src/button/button.tsx b/packages/ui/src/button/button.tsx new file mode 100644 index 000000000..706b0ae6c --- /dev/null +++ b/packages/ui/src/button/button.tsx @@ -0,0 +1,66 @@ +import * as React from "react"; + +import { + getIconStyling, + getButtonStyling, + TButtonVariant, + TButtonSizes, +} from "./helper"; + +export interface ButtonProps + extends React.ButtonHTMLAttributes { + variant?: TButtonVariant; + size?: TButtonSizes; + className?: string; + loading?: boolean; + disabled?: boolean; + appendIcon?: any; + prependIcon?: any; + children: React.ReactNode; +} + +const Button = React.forwardRef( + (props, ref) => { + const { + variant = "primary", + size = "md", + className = "", + type = "button", + loading = false, + disabled = false, + prependIcon = null, + appendIcon = null, + children, + ...rest + } = props; + + const buttonStyle = getButtonStyling(variant, size, disabled || loading); + const buttonIconStyle = getIconStyling(size); + + return ( + + ); + } +); + +Button.displayName = "plane-ui-button"; + +export { Button }; diff --git a/packages/ui/src/button/helper.tsx b/packages/ui/src/button/helper.tsx new file mode 100644 index 000000000..82489c3e8 --- /dev/null +++ b/packages/ui/src/button/helper.tsx @@ -0,0 +1,123 @@ +export type TButtonVariant = + | "primary" + | "accent-primary" + | "outline-primary" + | "neutral-primary" + | "link-primary" + | "danger" + | "accent-danger" + | "outline-danger" + | "link-danger" + | "tertiary-danger"; + +export type TButtonSizes = "sm" | "md" | "lg" | "xl"; + +export interface IButtonStyling { + [key: string]: { + default: string; + hover: string; + pressed: string; + disabled: string; + }; +} + +enum buttonSizeStyling { + sm = `px-3 py-1.5 font-medium text-xs rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center inline`, + md = `px-4 py-1.5 font-medium text-sm rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center inline`, + lg = `px-5 py-2 font-medium text-sm rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center inline`, + xl = `px-5 py-3.5 font-medium text-sm rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center inline`, +} + +enum buttonIconStyling { + sm = "h-3 w-3 flex justify-center items-center overflow-hidden my-0.5 flex-shrink-0", + md = "h-3.5 w-3.5 flex justify-center items-center overflow-hidden my-0.5 flex-shrink-0", + lg = "h-4 w-4 flex justify-center items-center overflow-hidden my-0.5 flex-shrink-0", + xl = "h-4 w-4 flex justify-center items-center overflow-hidden my-0.5 flex-shrink-0", +} + +export const buttonStyling: IButtonStyling = { + primary: { + default: `text-white bg-custom-primary-100`, + hover: `hover:bg-custom-primary-200`, + pressed: `focus:text-custom-brand-40 focus:bg-custom-primary-200`, + disabled: `cursor-not-allowed !bg-custom-primary-60 hover:bg-custom-primary-60`, + }, + "accent-primary": { + default: `bg-custom-primary-10 text-custom-primary-100`, + hover: `hover:bg-custom-primary-20 hover:text-custom-primary-200`, + pressed: `focus:bg-custom-primary-20`, + disabled: `cursor-not-allowed !text-custom-primary-60`, + }, + "outline-primary": { + default: `text-custom-primary-100 bg-custom-background-100 border border-custom-primary-100`, + hover: `hover:border-custom-primary-80 hover:bg-custom-primary-10`, + pressed: `focus:text-custom-primary-80 focus:bg-custom-primary-10 focus:border-custom-primary-80`, + disabled: `cursor-not-allowed !text-custom-primary-60 !border-custom-primary-60 `, + }, + "neutral-primary": { + default: `text-custom-text-200 bg-custom-background-100 border border-custom-border-200`, + hover: `hover:bg-custom-background-90`, + pressed: `focus:text-custom-text-300 focus:bg-custom-background-90`, + disabled: `cursor-not-allowed !text-custom-text-400`, + }, + "link-primary": { + default: `text-custom-primary-100 bg-custom-background-100`, + hover: `hover:text-custom-primary-200`, + pressed: `focus:text-custom-primary-80 `, + disabled: `cursor-not-allowed !text-custom-primary-60`, + }, + + danger: { + default: `text-white bg-red-500`, + hover: ` hover:bg-red-600`, + pressed: `focus:text-red-200 focus:bg-red-600`, + disabled: `cursor-not-allowed !bg-red-300`, + }, + "accent-danger": { + default: `text-red-500 bg-red-50`, + hover: `hover:text-red-600 hover:bg-red-100`, + pressed: `focus:text-red-500 focus:bg-red-100`, + disabled: `cursor-not-allowed !text-red-300`, + }, + "outline-danger": { + default: `text-red-500 bg-custom-background-100 border border-red-500`, + hover: `hover:text-red-400 hover:border-red-400`, + pressed: `focus:text-red-400 focus:border-red-400`, + disabled: `cursor-not-allowed !text-red-300 !border-red-300`, + }, + "link-danger": { + default: `text-red-500 bg-custom-background-100`, + hover: `hover:text-red-400`, + pressed: `focus:text-red-400`, + disabled: `cursor-not-allowed !text-red-300`, + }, + "tertiary-danger": { + default: `text-red-500 bg-custom-background-100 border border-red-200`, + hover: `hover:bg-red-50 hover:border-red-300`, + pressed: `focus:text-red-400`, + disabled: `cursor-not-allowed !text-red-300`, + }, +}; + +export const getButtonStyling = ( + variant: TButtonVariant, + size: TButtonSizes, + disabled: boolean = false +): string => { + let _variant: string = ``; + const currentVariant = buttonStyling[variant]; + + _variant = `${currentVariant.default} ${ + disabled ? currentVariant.disabled : currentVariant.hover + } ${currentVariant.pressed}`; + + let _size: string = ``; + if (size) _size = buttonSizeStyling[size]; + return `${_variant} ${_size}`; +}; + +export const getIconStyling = (size: TButtonSizes): string => { + let icon: string = ``; + if (size) icon = buttonIconStyling[size]; + return icon; +}; diff --git a/packages/ui/src/button/index.tsx b/packages/ui/src/button/index.tsx new file mode 100644 index 000000000..f1a2d03d4 --- /dev/null +++ b/packages/ui/src/button/index.tsx @@ -0,0 +1,2 @@ +export * from "./button"; +export * from "./toggle-switch"; diff --git a/packages/ui/src/button/toggle-switch.tsx b/packages/ui/src/button/toggle-switch.tsx new file mode 100644 index 000000000..9888dd205 --- /dev/null +++ b/packages/ui/src/button/toggle-switch.tsx @@ -0,0 +1,49 @@ +import * as React from "react"; + +import { Switch } from "@headlessui/react"; + +interface IToggleSwitchProps { + value: boolean; + onChange: (value: boolean) => void; + label?: string; + size?: "sm" | "md" | "lg"; + disabled?: boolean; + className?: string; +} + +const ToggleSwitch: React.FC = (props) => { + const { value, onChange, label, size = "sm", disabled, className } = props; + + return ( + + {label} + + ); +}; + +ToggleSwitch.displayName = "plane-ui-toggle-switch"; + +export { ToggleSwitch }; diff --git a/packages/ui/src/form-fields/index.tsx b/packages/ui/src/form-fields/index.tsx new file mode 100644 index 000000000..01cd4edea --- /dev/null +++ b/packages/ui/src/form-fields/index.tsx @@ -0,0 +1,2 @@ +export * from "./input"; +export * from "./textarea"; diff --git a/packages/ui/src/form-fields/input.tsx b/packages/ui/src/form-fields/input.tsx new file mode 100644 index 000000000..648b78aa7 --- /dev/null +++ b/packages/ui/src/form-fields/input.tsx @@ -0,0 +1,49 @@ +import * as React from "react"; + +export interface InputProps + extends React.InputHTMLAttributes { + mode?: "primary" | "transparent" | "true-transparent"; + inputSize?: "sm" | "md"; + hasError?: boolean; + className?: string; +} + +const Input = React.forwardRef((props, ref) => { + const { + id, + type, + name, + mode = "primary", + inputSize = "sm", + hasError = false, + className = "", + ...rest + } = props; + + return ( + + ); +}); + +Input.displayName = "form-input-field"; + +export { Input }; diff --git a/packages/ui/src/form-fields/textarea.tsx b/packages/ui/src/form-fields/textarea.tsx new file mode 100644 index 000000000..93a850059 --- /dev/null +++ b/packages/ui/src/form-fields/textarea.tsx @@ -0,0 +1,69 @@ +import * as React from "react"; + +export interface TextAreaProps + extends React.TextareaHTMLAttributes { + mode?: "primary" | "transparent"; + hasError?: boolean; + className?: string; +} + +// Updates the height of a